From 35cf8d289a09a6a4a34cf3d73fb41d84969ae4ee Mon Sep 17 00:00:00 2001 From: zhangwei <1504152376@qq.com> Date: 星期一, 18 八月 2025 17:30:26 +0800 Subject: [PATCH] '注册修改' --- src/router/modules/remaining.ts | 4 src/views/login/index copy.vue | 429 ++++++++++++ src/views/system/dept/index.vue | 5 src/views/login/index.vue | 203 ++++ src/components/ReUploadZ/index.vue | 90 ++ src/views/register/registersucess.vue | 3 src/views/newregister/utils/types.ts | 115 +++ src/views/home/index.vue | 12 src/views/newregister/index.vue | 552 +++++++++++++++ src/views/system/dept/utils/hook.tsx | 2 src/views/newregister/utils/hook.tsx | 531 +++++++++++++++ src/views/register/index.vue | 7 src/views/newregister/component/agreement.vue | 98 ++ 13 files changed, 2,006 insertions(+), 45 deletions(-) diff --git a/src/components/ReUploadZ/index.vue b/src/components/ReUploadZ/index.vue new file mode 100644 index 0000000..5742721 --- /dev/null +++ b/src/components/ReUploadZ/index.vue @@ -0,0 +1,90 @@ +<script setup lang="ts"> +import { message } from "@/utils/message"; + +defineOptions({ + name: "ReUploadZ" +}); +const props = defineProps({ + // 琛屾暟 + imgUrl: { + type: String + } +}); +const handleChange = file => { + console.log(file); + + if (file.status !== "ready") return; + let suffName = file.name.substring(file.name.lastIndexOf(".") + 1); + const extension = suffName === "pdf"; + // const isLt10M = file.size / 1024 / 1024 < 10; + if (!extension) { + message(`浠呮敮鎸乸df鏍煎紡锛岃涓婁紶pdf`, { + type: "error" + }); + validateForm.fileList = []; + return false; + } + fetchCredentials(file); + // upload.value!.submit(); +}; +// state.formDataNew = { +// policy: res.result.policy, //琛ㄥ崟鍩� +// "x-oss-signature-version": res.result.x_oss_signature_version, //鎸囧畾绛惧悕鐨勭増鏈拰绠楁硶 +// "x-oss-credential": res.result.x_oss_credential, //鎸囨槑娲剧敓瀵嗛挜鐨勫弬鏁伴泦 +// "x-oss-date": res.result.x_oss_date, //璇锋眰鐨勬椂闂� +// "x-oss-signature": res.result.signature, //绛惧悕璁よ瘉鎻忚堪淇℃伅 +// "x-oss-security-token": res.result.security_token, //瀹夊叏浠ょ墝 +// success_action_status: "200" //涓婁紶鎴愬姛鍚庡搷搴旂姸鎬佺爜 +// }; +const fetchCredentials = async file => { + // 杩欓噷搴旇皟鐢ㄤ綘鑷繁鐨勫悗绔帴鍙h幏鍙栦复鏃跺嚟璇� + let res = await getUploadToken(); + if (res.code == 200) { + let keyVal = generateTimestampWithRandom(res.result.DirPath, file.name); + let upUrl = res.result.url; + let upPath = res.result.DirPath; + let formData = new FormData(); + formData.append("policy", res.result.policy); + formData.append( + "x-oss-signature-version", + res.result.x_oss_signature_version + ); + formData.append("x-oss-credential", res.result.x_oss_credential); + formData.append("x-oss-date", res.result.x_oss_date); + // formData.append("Signature", res.result.signature); + formData.append("x-oss-signature", res.result.signature); + formData.append("x-oss-security-token", res.result.security_token); + // formData.append("x-oss-content-type", "application/pdf"); + formData.append("success_action_status", "200"); + formData.append("key", keyVal); // 鏂囦欢鍚� + formData.append("file", file.raw); // file 蹇呴』涓烘渶鍚庝竴涓〃鍗曞煙 + uploadFileAli(formData, res.result.url).then(res => { + let path = `${upUrl}"/"${upPath}${upPath};`; + if (props.isChange) { + newFormInline.value.biangengwenjian = path; + } else { + newFormInline.value.zhaobiaowenjian = path; + } + }); + } +}; +</script> + +<template> + <div> + <el-upload + ref="upload" + :show-file-list="false" + :limit="1" + :auto-upload="false" + :headers="state.headers" + accept=".pdf" + @change="handleChange" + > + <img v-if="imgUrl" :src="imgUrl" width="85.6px" height="5.4px" /> + <el-button v-else type="primary">涓婁紶</el-button> + </el-upload> + </div> +</template> + +<style lang="scss" scoped></style> diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index c783e76..a16cf52 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -33,8 +33,8 @@ }, { path: "/register", - name: "Register", - component: () => import("@/views/register/index.vue"), + name: "newRegister", + component: () => import("@/views/newregister/index.vue"), meta: { title: "娉ㄥ唽", showLink: false, diff --git a/src/views/home/index.vue b/src/views/home/index.vue index 86b43b2..402fc9e 100644 --- a/src/views/home/index.vue +++ b/src/views/home/index.vue @@ -152,7 +152,7 @@ v-else-if="!state.accessToken" :underline="false" class="hover:cursor-pointer" - @click="toRegister" + @click="toRegister(item)" >娉ㄥ唽</el-link > <el-link @@ -161,7 +161,11 @@ class="hover:cursor-pointer" @click="toApply(item)" ><span v-if="item.name !== '璇勫涓撳'">鐢宠</span></el-link - ><span v-if="!state.accessToken" class="m-2">|</span> + ><span + v-if="!state.accessToken || item.name !== '璇勫涓撳'" + class="m-2" + >|</span + > <el-link v-if="state.rolesCode.indexOf(item.code) !== -1" :underline="false" @@ -417,8 +421,8 @@ state.accessToken = getToken()?.accessToken; }); -const toRegister = () => { - router.push({ name: "Register" }); +const toRegister = item => { + router.push({ name: "newRegister", query: { code: item.code } }); }; // 閫�鍑� const logOut = () => { diff --git a/src/views/login/index copy.vue b/src/views/login/index copy.vue new file mode 100644 index 0000000..fcc2a3f --- /dev/null +++ b/src/views/login/index copy.vue @@ -0,0 +1,429 @@ +<script setup lang="ts"> +import Motion from "./utils/motion"; +import { useRouter } from "vue-router"; +import { message } from "@/utils/message"; +import { loginRules } from "./utils/rule"; +import { + reactive, + computed, + ref, + onMounted, + defineAsyncComponent, + onUnmounted, + watch +} from "vue"; +import { debounce } from "@pureadmin/utils"; +import { useNav } from "@/layout/hooks/useNav"; +import { useEventListener } from "@vueuse/core"; +import type { FormInstance } from "element-plus"; +import { useLayout } from "@/layout/hooks/useLayout"; +import { useUserStoreHook } from "@/store/modules/user"; +import { initRouter, getTopMenu } from "@/router/utils"; +import { bg, avatar, logo1 } from "./utils/static"; +// import { useRenderIcon } from "@/components/ReIcon/src/hooks"; +import { useDataThemeChange } from "@/layout/hooks/useDataThemeChange"; +import { useRoute } from "vue-router"; + +const route = useRoute(); +import { captcha, phoneNumberCode, exRole } from "@/api/register/index"; + +defineOptions({ + name: "Login" +}); + +const router = useRouter(); +const loading = ref(false); +const disabled = ref(false); +const ruleFormRef = ref<FormInstance>(); + +const { initStorage } = useLayout(); +initStorage(); + +const { dataTheme, overallStyle, dataThemeChange } = useDataThemeChange(); +dataThemeChange(overallStyle.value); +const { title } = useNav(); +// 鑾峰彇楠岃瘉鐮� +const getCaptcha = async () => { + // if (!state.captchaEnabled) return; + state.ruleForm.code = ""; + const res = await captcha(); + state.captchaImage = "data:text/html;base64," + res.result?.img; + state.expirySeconds = res.result?.expirySeconds; + state.ruleForm.codeId = res.result?.id; +}; +const state = reactive({ + isShowPassword: false, + ruleForm: { + account: "", + nickName: "", + phone: "", + phoneVCode: "", + code: "", + codeId: "", + email: "", + exRoleCode: "" + }, + rules: { + code: [ + { + required: true, + message: "璇疯緭鍏ユ墜鏈洪獙璇佺爜", + trigger: "blur" + } + ], + phone: [ + { + required: true, + message: "璇疯緭鍏ユ偍鐨勬墜鏈哄彿鐮�", + trigger: "blur" + } + ], + exRoleCode: [ + { + required: true, + message: "璇烽�夋嫨瑙掕壊", + trigger: "blur" + } + ] + // code: [{ required: true, message: t('message.account.placeholder4'), trigger: 'blur' }], + }, + loading: { + signIn: false + }, + captchaImage: "", + rotateVerifyVisible: false, + // rotateVerifyImg: verifyImg, + // rotateVerifyImg: themeConfig.value.logoUrl, + secondVerEnabled: false, + // captchaEnabled: false, + isPassRotate: false, + capsLockVisible: false, + hideTenantForLogin: false, + expirySeconds: 60, // 楠岃瘉鐮佽繃鏈熸椂闂� + phoneSeconds: 0, // 鎵嬫満楠岃瘉鐮佸�掕鏃� + roleList: [], + nowRole: {} +}); +// 楠岃瘉鐮佽繃鏈熻鏃跺櫒 +let timer: any = null; +let phonetimer: any = null; + +// 椤甸潰鍒濆鍖� +onMounted(async () => { + getCaptcha(); + exRole().then(res => { + state.roleList = res.result; + const role = route.query; + if (role.code) { + state.nowRole = state.roleList.find(item => { + return item.code == role.code; + }); + } else { + state.nowRole = state.roleList[0]; + } + state.ruleForm.exRoleCode = state.nowRole.code; + }); + // 娉ㄥ唽楠岃瘉鐮佽繃鏈熻鏃跺櫒 + timer = setInterval(() => { + if (state.expirySeconds > 0) state.expirySeconds -= 1; + }, 1000); +}); +// 椤甸潰鍗歌浇 +onUnmounted(() => { + // 閿�姣侀獙璇佺爜杩囨湡璁℃椂鍣� + clearInterval(timer); + timer = null; + clearInterval(phonetimer); + phonetimer = null; +}); +const onLogin = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate(valid => { + if (valid) { + let obj = { + phone: state.ruleForm.phone, + code: state.ruleForm.phoneVCode, + exRuleCode: state.ruleForm.exRoleCode + }; + loading.value = true; + useUserStoreHook() + .loginByUsername(obj) + .then(res => { + if (res.code == 200) { + // 鑾峰彇鍚庣璺敱 + return initRouter().then(() => { + if (res.result.exRoles.length == 0) { + disabled.value = true; + router + .replace({ + name: "RegisterNav", + query: { code: state.ruleForm.exRoleCode } + }) + .then(() => { + message("鐧诲綍鎴愬姛", { type: "success" }); + }) + .finally(() => (disabled.value = false)); + } else if (res.result.exRoles.length > 0) { + let data = res.result.exRoles.find(item => { + return item.code == state.ruleForm.exRoleCode; + }); + console.log(data, "------------"); + + if (!data) { + router.replace({ + name: "RegisterNav", + query: { code: state.ruleForm.exRoleCode } + }); + } else if (data?.hasFlsh) { + router.replace("index"); + } else { + router.replace("mine"); + } + } + useUserStoreHook().getCusExtendInfo(); + }); + } else { + message(res?.message || "鐧诲綍澶辫触", { type: "error" }); + } + }) + .finally(() => (loading.value = false)); + } + }); +}; +const sendValidationCode = async () => { + if (!state.ruleForm.phone) { + return message("璇峰厛杈撳叆鎵嬫満鍙�", { type: "warning" }); + } + if (!state.ruleForm.code) { + return message("璇峰厛杈撳叆楠岃瘉鐮�", { type: "warning" }); + } + const res = await phoneNumberCode(state.ruleForm); + if (res?.code != 200) { + return message(res?.message, { type: "warning" }); + } + state.phoneSeconds = 60; + phonetimer = setInterval(() => { + if (state.phoneSeconds > 0) state.phoneSeconds -= 1; + }, 1000); +}; +const immediateDebounce: any = debounce( + formRef => onLogin(formRef), + 1000, + true +); + +useEventListener(document, "keydown", ({ code }) => { + if ( + ["Enter", "NumpadEnter"].includes(code) && + !disabled.value && + !loading.value + ) + immediateDebounce(ruleFormRef.value); +}); +</script> + +<template> + <div class="select-none"> + <div class="wave"> + <img width="400px" :src="logo1" class="logo1" /> + </div> + <!-- <img :src="bg" class="wave" /> --> + <!-- <div class="flex-c absolute right-5 top-3"> --> + <!-- 涓婚 --> + <!-- <el-switch + v-model="dataTheme" + inline-prompt + :active-icon="dayIcon" + :inactive-icon="darkIcon" + @change="dataThemeChange" + /> + </div> --> + <div class="login-container"> + <div class="img"> + <!-- <component :is="toRaw(illustration)" /> --> + </div> + <div class="login-box"> + <div class="login-form"> + <!-- <avatar class="avatar" /> --> + <Motion> + <h2 class="logintitle">{{ state.nowRole.name }}鐧诲綍</h2> + </Motion> + + <el-form + ref="ruleFormRef" + :model="state.ruleForm" + :rules="loginRules" + size="large" + > + <!-- <Motion :delay="150"> + <el-form-item prop="exRoleCode"> + <el-radio-group v-model="state.ruleForm.exRoleCode"> + <el-radio + v-for="item in state.roleList" + :key="item.id" + :value="item.code" + >{{ item.name }}</el-radio + > + </el-radio-group> + </el-form-item> + </Motion> --> + <Motion :delay="100"> + <el-form-item + :rules="[ + { + required: true, + message: '璇疯緭鍏ユ墜鏈哄彿', + trigger: 'blur' + } + ]" + prop="phone" + > + <el-input + v-model="state.ruleForm.phone" + clearable + placeholder="鎵嬫満鍙�" + /> + </el-form-item> + </Motion> + + <Motion :delay="150"> + <el-form-item class="login-animation3" prop="code"> + <el-col :span="15"> + <el-input + ref="codeRef" + v-model="state.ruleForm.code" + text + maxlength="4" + placeholder="璇疯緭鍏ラ獙璇佺爜" + clearable + autocomplete="off" + /> + </el-col> + <el-col :span="1" /> + <el-col :span="8"> + <div + :class="[ + state.expirySeconds > 0 + ? 'login-content-code' + : 'login-content-code-expired' + ]" + @click="getCaptcha" + > + <img + class="login-content-code-img" + width="130px" + height="38px" + :src="state.captchaImage" + style="cursor: pointer" + /> + </div> + </el-col> + </el-form-item> + + <!-- <el-form-item prop="password"> + <el-input + v-model="ruleForm.password" + clearable + show-password + placeholder="瀵嗙爜" + :prefix-icon="useRenderIcon(Lock)" + /> + </el-form-item> --> + </Motion> + <Motion :delay="150"> + <el-form-item prop="phoneVCode"> + <el-input + v-model.number="state.ruleForm.phoneVCode" + class="form-input" + placeholder="璇疯緭鍏ラ獙璇佺爜" + > + <template #suffix> + <span v-if="state.phoneSeconds == 0" id="suffix-span"> + <span + id="suffix-span-2" + ref="spanRef" + @click="sendValidationCode(state.ruleForm.phone)" + > + 鑾峰彇楠岃瘉鐮� + </span> + </span> + <span v-else id="suffix-span"> + <span id="suffix-span-2" ref="spanRef"> + {{ state.phoneSeconds }}绉掑悗閲嶆柊鑾峰彇 + </span> + </span> + </template> + </el-input> + </el-form-item> + </Motion> + <Motion :delay="250"> + <el-button + class="w-full mt-4!" + size="default" + type="primary" + :loading="loading" + :disabled="disabled" + @click="onLogin(ruleFormRef)" + > + 鐧诲綍 + </el-button> + </Motion> + </el-form> + </div> + </div> + </div> + </div> +</template> + +<style scoped> +@import url("@/style/login.css"); +</style> + +<style lang="scss" scoped> +:deep(.el-input-group__append, .el-input-group__prepend) { + padding: 0; +} +#suffix-span { + cursor: pointer; +} +.login-content-code { + display: flex; + align-items: center; + justify-content: space-around; + position: relative; + + .login-content-code-img { + width: 100%; + height: 40px; + line-height: 40px; + background-color: #ffffff; + // /* border: 1px solid rgb(220, 223, 230); */ + cursor: pointer; + transition: all ease 0.2s; + border-radius: 4px; + user-select: none; + + &:hover { + border-color: #c0c4cc; + transition: all ease 0.2s; + } + } +} + +.login-content-code-expired { + @extend .login-content-code; + &::before { + content: "楠岃瘉鐮佸凡杩囨湡"; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + border-radius: 4px; + background-color: rgba(0, 0, 0, 0.5); + color: #ffffff; + text-align: center; + line-height: 40px; + } +} +</style> diff --git a/src/views/login/index.vue b/src/views/login/index.vue index 34e2230..53092d3 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -1,4 +1,4 @@ -<script setup lang="ts"> +<script setup lang="tsx"> import Motion from "./utils/motion"; import { useRouter } from "vue-router"; import { message } from "@/utils/message"; @@ -7,6 +7,7 @@ reactive, computed, ref, + h, onMounted, defineAsyncComponent, onUnmounted, @@ -16,6 +17,14 @@ import { useNav } from "@/layout/hooks/useNav"; import { useEventListener } from "@vueuse/core"; import type { FormInstance } from "element-plus"; +import { + ElForm, + ElFormItem, + ElRadioGroup, + ElRadio, + ElRow, + ElTag +} from "element-plus"; import { useLayout } from "@/layout/hooks/useLayout"; import { useUserStoreHook } from "@/store/modules/user"; import { initRouter, getTopMenu } from "@/router/utils"; @@ -25,11 +34,6 @@ import { useRoute } from "vue-router"; const route = useRoute(); - -// import dayIcon from "@/assets/svg/day.svg?component"; -// import darkIcon from "@/assets/svg/dark.svg?component"; -import Lock from "~icons/ri/lock-fill"; -import User from "~icons/ri/user-3-fill"; import { captcha, phoneNumberCode, exRole } from "@/api/register/index"; defineOptions({ @@ -56,6 +60,12 @@ state.expirySeconds = res.result?.expirySeconds; state.ruleForm.codeId = res.result?.id; }; +import { + addDialog, + closeDialog, + updateDialog, + closeAllDialog +} from "@/components/ReDialog"; const state = reactive({ isShowPassword: false, ruleForm: { @@ -107,6 +117,7 @@ expirySeconds: 60, // 楠岃瘉鐮佽繃鏈熸椂闂� phoneSeconds: 0, // 鎵嬫満楠岃瘉鐮佸�掕鏃� roleList: [], + myEnterpriseList: [], nowRole: {} }); // 楠岃瘉鐮佽繃鏈熻鏃跺櫒 @@ -115,42 +126,23 @@ // 椤甸潰鍒濆鍖� onMounted(async () => { - // 鑻RL甯︽湁Token鍙傛暟锛堢涓夋柟鐧诲綍锛� - - // if (accessToken) await saveTokenAndInitRoutes(accessToken); - // watch( - // () => themeConfig.value.isLoaded, - // isLoaded => { - // if (isLoaded) { - // 鑾峰彇鐧诲綍閰嶇疆 - // state.hideTenantForLogin = themeConfig.value.hideTenantForLogin ?? true; - // state.secondVerEnabled = themeConfig.value.secondVer ?? true; - // state.captchaEnabled = themeConfig.value.captcha ?? true; - - // 鑾峰彇楠岃瘉鐮� getCaptcha(); - exRole().then(res => { state.roleList = res.result; const role = route.query; if (role.code) { - state.nowRole = role; + state.nowRole = state.roleList.find(item => { + return item.code == role.code; + }); } else { state.nowRole = state.roleList[0]; } state.ruleForm.exRoleCode = state.nowRole.code; }); // 娉ㄥ唽楠岃瘉鐮佽繃鏈熻鏃跺櫒 - // if (state.captchaEnabled) { timer = setInterval(() => { if (state.expirySeconds > 0) state.expirySeconds -= 1; }, 1000); - - // } - // } - // }, - // { immediate: true } - // ); }); // 椤甸潰鍗歌浇 onUnmounted(() => { @@ -160,6 +152,146 @@ clearInterval(phonetimer); phonetimer = null; }); +const openDialog = () => { + addDialog({ + width: "30%", + title: "閫夋嫨鐧诲綍鍏徃", + contentRenderer: () => + h(ElForm, { + ref: ruleFormRef, + model: state.ruleForm, + rules: loginRules, + size: 'large' + }, [ + h(Motion, { delay: 150 }, [ + h(ElFormItem, { + prop: 'exRoleCode', + label: '涓讳綋瑙掕壊' // 鍙坊鍔犺〃鍗曢」鏍囩 + }, [ + // 鍗曢�夋缁� - 鐖跺鍣ㄦ坊鍔犳牱寮忔帶鍒� + h(ElRadioGroup, { + modelValue: state.ruleForm.exRoleCode, + 'onUpdate:modelValue': (val) => { + state.ruleForm.exRoleCode = val + }, + style: { + display: 'flex', + flexDirection: 'column', + gap: '8px' // 鍗曢�夋涔嬮棿鐨勯棿璺� + } + }, [ + // 寰幆娓叉煋鍗曢�夋 - 姣忎釜鍗曢�夋鍗曠嫭鍗犱竴琛� + state.myEnterpriseList.map(item => h(ElRadio, { + key: item.id, + value: item.code, + style: { + display: 'block', // 璁╂瘡涓崟閫夋鍒嗚鏄剧ず + padding: '4px 0' + } + }, item.name),) + ]), + + // 绠$悊鍛樻爣绛� - 鏄剧ず鍦ㄥ崟閫夋鍚庨潰 + + ]) + ]) + ]) + // <> + // <el-form + // ref="ruleFormRef" + // model={state.ruleForm} + // rules={loginRules} + // size="large" + // > + // <Motion delay={150}> + // <el-form-item prop="exRoleCode"> + // <el-radio-group v-model={state.ruleForm.exRoleCode}> + // <el-radio + // v-for={item in state.myEnterpriseList} + // key={item.id} + // value={item.code} + // > + // {item.name} + // </el-radio> + // </el-radio-group> + // </el-form-item> + // </Motion> + // </el-form> + // </> + // h( + // ElForm, + // { + // ref: ruleFormRef, + // model: state.ruleForm, + // rules: loginRules, + // size: "large" + // }, + // [ + // h(Motion, { delay: 150 }, [ + // h(ElFormItem, { prop: "exRoleCode" }, [ + // h( + // ElRadioGroup, + // { + // modelValue: state.ruleForm.exRoleCode, + // "onUpdate:modelValue": val => { + // state.ruleForm.exRoleCode = val; + // } + // }, + // [ + // // 鐢╩ap瀹炵幇v-for寰幆 + // state.myEnterpriseList.map(item => + // h(ElRow, {}, [ + // h( + // ElRadio, + // { + // key: item.customerUserID, + // value: item.customerUserID + // }, + // item.enterpriseName + // ), + // item.isManager ? 444 : "" // 鏍囩鍐呭 + // ]) + // ) + // ] + // ) + // ]) + // ]) + // ] + // ), + // jsx 璇硶 锛堟敞鎰忓湪.vue鏂囦欢鍚敤jsx璇硶锛岄渶瑕佸湪script寮�鍚痩ang="tsx"锛� + closeCallBack: ({ options, args }) => { + // options.props 鏄搷搴斿紡鐨� + // const { formInline } = options.props as FormProps; + // const text = `濮撳悕锛�${formInline.user} 鍩庡競锛�${formInline.region}`; + if (args?.command === "cancel") { + // 鎮ㄧ偣鍑讳簡鍙栨秷鎸夐挳 + // active.value -= 1; + } else if (args?.command === "sure") { + let obj = { + phone: state.ruleForm.phone, + code: state.ruleForm.phoneVCode, + exRuleCode: state.ruleForm.exRoleCode + }; + useUserStoreHook() + .loginByUsername(obj) + .then(res => { + if (res?.code == 200) { + message("娉ㄥ唽鎴愬姛锛�", { type: "success" }); + router.replace({ + path: "/RegisterSucess", + query: { + code: obj.exRoleCode + } + }); + } else { + message(res?.message, { type: "warning" }); + } + }); + } else { + } + } + }); +}; const onLogin = async (formEl: FormInstance | undefined) => { if (!formEl) return; await formEl.validate(valid => { @@ -176,6 +308,20 @@ if (res.code == 200) { // 鑾峰彇鍚庣璺敱 return initRouter().then(() => { + let obj = res.result; + if (obj.theLastLogo) { + router + .replace({ + name: "Index" + }) + .then(() => { + message("鐧诲綍鎴愬姛", { type: "success" }); + }) + .finally(() => (disabled.value = false)); + } else { + state.myEnterpriseList = obj.customerExs; + openDialog(); + } if (res.result.exRoles.length == 0) { disabled.value = true; router @@ -191,7 +337,6 @@ let data = res.result.exRoles.find(item => { return item.code == state.ruleForm.exRoleCode; }); - console.log(data, "------------"); if (!data) { router.replace({ diff --git a/src/views/newregister/component/agreement.vue b/src/views/newregister/component/agreement.vue new file mode 100644 index 0000000..4409f7e --- /dev/null +++ b/src/views/newregister/component/agreement.vue @@ -0,0 +1,98 @@ +<script setup lang="ts"> +defineOptions({ + name: "agreement" +}); +</script> + +<template> + <el-scrollbar max-height="400px"> + <p> + 鏍规嵁銆婁腑鍗庝汉姘戝叡鍜屽浗鍚堝悓娉曘�嬨�併�婁腑鍗庝汉姘戝叡鍜屽浗钁椾綔鏉冩硶銆嬨�併�婂叏鍥戒汉澶у父濮斾細鍏充簬缁存姢浜掕仈缃戝畨鍏ㄧ殑鍐冲畾銆嬨�併�婁腑鍗庝汉姘戝叡鍜屽浗鏀垮簻閲囪喘娉曘�嬨�併�婁簰鑱旂綉淇℃伅鏈嶅姟绠$悊鍔炴硶銆嬨�併�婁簰鑱旂綉鐢靛瓙鍏憡鏈嶅姟绠$悊瑙勫畾銆嬬瓑鏈夊叧娉曞緥銆佹硶瑙勩�佽绔狅紝鍒惰鏈潯娆俱�傛墍鏈夎繘鍏ユ湰骞冲彴鐨勭敤鎴凤紝鍦ㄤ娇鐢ㄦ湰骞冲彴鎻愪緵鐨勪换浣曟湇鍔″墠锛屽繀椤讳簨鍏堣鐪熼槄璇诲苟鍚屾剰鏈湇鍔″崗璁�傜敤鎴烽�氳繃鐐瑰嚮鈥滄垜鍚屾剰鈥濇寜閽嵆琛ㄧず鐢ㄦ埛涓庢湰鎷涙爣閲囪喘骞冲彴杈炬垚鍗忚锛屾帴鍙楁湰鎷涙爣閲囪喘骞冲彴鏈嶅姟鏉℃鍏ㄩ儴鍐呭銆傜偣鍑烩�滀笉鍚屾剰鈥濇寜閽紝瑙嗕负鏀惧純鏈嫑鏍囬噰璐钩鍙版彁渚涚殑鏈嶅姟锛屽苟琛ㄧず鏀惧純娉ㄥ唽淇℃伅搴撱�� + </p> + <h3><strong>涓�銆佺敤鎴疯祫鏂� </strong></h3> + <p>鐢ㄦ埛鍚屾剰锛�</p> + <p> + (涓�)鍦ㄧ敵璇蜂娇鐢ㄦ湰鎷涙爣閲囪喘骞冲彴鎻愪緵鐨勬湇鍔℃椂锛屽悜鏈嫑鏍囬噰璐钩鍙版彁渚涚湡瀹炪�佸噯纭�佸畬鏁寸殑鍗曚綅鎴栦釜浜鸿祫鏂欍�� + </p> + <p> + (浜�)濡傜敤鎴风殑鍗曚綅鎴栦釜浜鸿祫鏂欐湁浠讳綍鍙樻洿锛岀敤鎴峰簲鍙婃椂鏇存柊娉ㄥ唽璧勬枡銆傚鏋滅敤鎴锋彁渚涚殑璧勬枡涓嶅畬鏁存垨鑰呯敤鎴锋彁渚涚殑璧勬枡鍖呭惈鏈変笉姝g‘鎴栦笉鍑嗙‘鐨勪俊鎭紝鐢辨鐩稿叧鐨勪竴鍒囧悗鏋滃潎搴斿綋鐢辩敤鎴疯嚜琛屾壙鎷呫�� + </p> + <p> + (涓�)鐢ㄦ埛璧勬枡鍖呮嫭鎮ㄥ湪娉ㄥ唽銆佽喘鏍囥�佺瓟鐤戙�佹姇鏍囥�佹緞娓呫�佽瘎鏍囩瓑杩囩▼涓紝浠ヤ换浣曠綉缁滃舰寮忓悜鏈钩鍙颁紶閫佺殑浠讳綍璧勬枡锛屽寘鎷暟鎹�佹枃鏈�佺収鐗囥�佸浘鐢汇�佸奖鍍忋�佽瘝鍙ユ垨鍏朵粬鏉愭枡銆傛偍搴斿鈥滄偍鐨勮祫鏂欌�濊礋鍏ㄩ儴璐d换锛屽�樿嫢鏈钩鍙拌涓衡�滄偍鐨勮祫鏂欌�濆彲鑳戒娇鎴戞柟鎵挎媴浠讳綍娉曞緥鎴栭亾涔変笂鐨勮矗浠伙紝鍒欐湰骞冲彴鍙嚜琛屽叏鏉冨喅瀹氬鈥滄偍鐨勮祫鏂欌�濋噰鍙栨垜鏂硅涓哄繀瑕佹垨閫傚綋鐨勪换浣曡鍔紝鍖呮嫭浣嗕笉闄愪簬鍒犻櫎璇ョ被璧勬枡銆傛偍鐗规淇濊瘉锛屾偍瀵规彁浜ょ粰鏈钩鍙扮殑鈥滄偍鐨勮祫鏂欌�濇嫢鏈夊叏閮ㄥ悎娉曟潈鍒┿�� + 骞冲彴娉ㄥ唽鐢ㄦ埛搴旈伒寰瘹瀹炰俊鐢ㄥ師鍒欙紝濡傚彂鐜版伓鎰忔敞鍐岃�咃紝骞冲彴灏嗗喕缁撳叾濮撳悕涓庤仈绯绘柟寮忋�佸姞鍏ュけ淇¢粦鍚嶅崟骞朵簣浠ュ叕甯冿紝绂佹涓�瀹氭湡闄愬唴鍙備笌浠讳綍椤圭洰锛屽悓鏃惰拷绌舵伓鎰忔敞鍐岃�呮硶寰嬭矗浠汇�� + </p> + <h3><strong>浜屻�佹湇鍔℃潯娆剧殑淇敼</strong></h3> + 鏈嫑鏍囬噰璐钩鍙版湁鏉冩牴鎹渶瑕佷慨鏀规湇鍔℃潯娆撅紝鏈嫑鏍囬噰璐钩鍙版湇鍔℃潯娆句竴鏃﹀彂鐢熶慨鏀规垨鍏跺畠鍙樺姩锛屽皢鍦ㄦ潯娆剧浉鍏抽〉闈簣浠ユ彁绀恒�傜敤鎴峰彲鑷敱鐐瑰嚮閫夋嫨鈥滃悓鎰忊�濇垨鈥滀笉鍚屾剰鈥濄�傚鐐瑰嚮鈥滃悓鎰忊�濓紝鍒欒涓哄鍘熸湇鍔℃潯娆剧殑鍙樻洿锛屾湰骞冲彴灏嗗嵆鍒绘寜鐓ф渶鏂扮殑鏈嶅姟鍗忚绾﹀畾涓烘偍鎻愪緵鏈嶅姟銆傚鐐瑰嚮鈥滀笉鍚屾剰鈥濓紝鍒欒鏈嶅姟灏嗘棤娉曚负鎮ㄦ彁渚涳紝鎮ㄦ湁鏉冮�夋嫨鏆傚仠浣跨敤鎴栨敞閿�璇ヨ处鎴枫�傞櫎鍙︽湁鏄庣‘澹版槑澶栵紝浠讳綍浣库�滄湇鍔♀�濊寖鍥存墿澶ф垨鍔熻兘澧炲己鐨勬柊鍐呭鍧囧彈鏈崗璁害鏉熴�� + <h3><strong>涓夈�侀殣绉佷繚鎶�</strong></h3> + <p> + 鏈嫑鏍囬噰璐钩鍙版壙璇轰笉浼氬叕寮�銆佽浆璁╂垨閫忛湶鍏剁敤鎴风殑涓嶅彲鍏紑鐨勬敞鍐岃祫鏂欏強鐢ㄦ埛鍦ㄦ湰鎷涙爣閲囪喘骞冲彴涓繚瀛樼殑闈炲叕寮�鍐呭锛岄櫎闈烇細 + </p> + <p>(涓�)鏈夊叧娉曞緥銆佹硶瑙勩�佽绔犵殑寮哄埗鎬ц瀹氾紱</p> + <p>(浜�)鏈夊叧鍙告硶銆佽鏀挎満鍏崇殑瑕佹眰锛�</p> + <p>(涓�)淇濇寔鎴栫淮鎶ゆ湰鎷涙爣閲囪喘骞冲彴鐨勫悎娉曟潈鐩婏紱</p> + <p>(鍥�)浜嬪厛鑾峰緱鐢ㄦ埛鐨勬槑纭巿鏉冦��</p> + <p> + 鐢ㄦ埛涓嶅緱瀵逛换浣曡祫鏂欎綔鍟嗕笟鎬у埄鐢紝鍖呮嫭浣嗕笉闄愪簬鍦ㄦ湭缁忔湰骞冲彴杩愯惀鏂逛功闈㈡壒鍑嗙殑鎯呭喌涓嬶紝澶嶅埗鍦ㄦ湰骞冲彴涓婂睍绀虹殑浠讳綍璧勬枡锛屽寘鎷郴缁熺殑鍔熻兘缁撴瀯鍜岀敾闈㈢瓑銆� + </p> + <h3><strong>鍥涖�佺敤鎴风殑甯愬彿銆佸瘑鐮佸拰瀹夊叏鎬�</strong></h3> + <p> + 鐢ㄦ埛鍦ㄦ湰鎷涙爣閲囪喘骞冲彴娉ㄥ唽鎴愬姛鍚庯紝灏嗚幏寰椾竴涓笎鍙峰拰瀵嗙爜銆傝甯愬彿鍜屽瘑鐮佺敱鐢ㄦ埛璐熻矗淇濈锛岀敤鎴峰彲闅忔椂鏀瑰彉鍏跺瘑鐮併�傛瘡涓敤鎴烽兘瑕佸鍏跺笎鎴蜂腑鐨勬墍鏈夋椿鍔ㄥ拰浜嬩欢璐熷叏閮ㄨ矗浠伙紝鐢ㄦ埛鍚屾剰鑻ュ彂鐜颁换浣曢潪娉曚娇鐢ㄧ敤鎴峰笎鍙锋垨瀹夊叏婕忔礊鐨勬儏鍐碉紝绔嬪嵆閫氬憡鏈嫑鏍囬噰璐钩鍙般�傛湰鎷涙爣閲囪喘骞冲彴鎵胯涓嶅皢鐢ㄦ埛甯愬彿鍜屽瘑鐮侀�忛湶缁欑涓夋柟銆備絾鍥犵敤鎴峰師鍥犻�犳垚瀵嗙爜娉勯湶锛岀敤鎴烽渶鑷鎵挎媴鍏ㄩ儴璐d换鍜岀浉鍏冲悗鏋溿�傚洜鐢ㄦ埛鍘熷洜閫犳垚甯愬彿鐢变粬浜轰娇鐢紝鐢ㄦ埛闇�鑷鎵挎媴鍏ㄩ儴璐d换鍜岀浉鍏冲悗鏋滐紝鍚屾椂锛屾湰鎷涙爣閲囪喘骞冲彴瑙嗕负鐢ㄦ埛杩涜浜嗙浉鍏虫搷浣溿�� + </p> + <h3><strong>浜斻�佹敹璐�</strong></h3> + <p> + 鏈钩鍙颁繚鐣欐敹鍙栤�滄湇鍔♀�濊垂鐢ㄧ殑鏉冨埄銆傛偍鍥犺繘琛屾姇鏍囨垨鑾峰彇鐩稿叧淇℃伅绛夊悜鏈钩鍙拌繍钀ユ柟鑾峰彇鏈夊伩鏈嶅姟鎴栨帴瑙︽湰骞冲彴鏈嶅姟鍣ㄨ�屽彂鐢熺殑鎵�鏈夊簲绾崇◣璧嬶紝浠ュ強鐩稿叧纭欢銆佽蒋浠躲�侀�氳銆佺綉缁滄湇鍔″強鍏朵粬鏂归潰鐨勮垂鐢ㄥ潎鐢辨偍鑷鎵挎媴銆傛湰骞冲彴淇濈暀鍦ㄦ棤闇�鍙戝嚭涔﹂潰閫氱煡銆佷粎鍦ㄦ湰骞冲彴缃戜笂鍏ず鐨勬儏鍐典笅锛屾殏鏃舵垨姘镐箙鍦版洿鏀规垨鍋滄閮ㄥ垎鎴栧叏閮ㄢ�滄湇鍔♀�濈殑鏉冨埄銆� + </p> + <h3><strong> 鍏�佸厤璐f潯娆�</strong></h3> + <p> + 鍥犳湰鎷涙爣閲囪喘骞冲彴鏃犳硶棰勮瀹㈣鐜鐨勬敼鍙樺強浠讳綍鎶�鏈笂鐨勯棶棰樻垨鍏朵粬鍥伴毦锛堝寘鎷絾涓嶉檺浜庯細璁$畻鏈虹梾姣掓敾鍑汇�侀粦瀹㈠叆渚点�佺綉缁滀腑鏂瓑锛夛紝鐢辨瀵艰嚧鐨勬暟鎹崯澶辨垨鍏朵粬鏈嶅姟涓柇绛夋儏褰紝浼氬憳鐢ㄦ埛瀵规搴旇〃绀虹悊瑙o紝骞跺悓鎰忚嚜琛屾壙鎷呭埄鐢ㄦ湰鎷涙爣閲囪喘骞冲彴杩涜鎿嶄綔鐨勬墍鏈夐闄┿�傛湰鎷涙爣閲囪喘骞冲彴鍦ㄦ澹版槑锛� + </p> + <p> + 鏈钩鍙颁笉鎻愪緵浠讳綍绫诲瀷鐨勯潪鏈钩鍙板彲鎺ф壙璇猴紝鍖呮嫭浣嗕笉闄愪簬鎵�鎻愪緵鐨勬湇鍔′竴瀹氳兘婊¤冻鐢ㄦ埛鐨勮姹傦紝鏈嶅姟涓嶄細涓柇锛屼俊鎭兘鍚﹀畬鍏ㄥ噯纭�佸強鏃躲�侀『鍒╃殑浼犻�侊紝鏄惁鑳戒慨鏀圭浉鍏宠蒋浠朵腑鐨勬紡娲炪�傜敤鎴风悊瑙c�佸垽鏂�佹垨鍐冲畾鏄惁鎺ュ彈浠讳綍閫氳繃鏈嫑鏍囬噰璐钩鍙版湇鍔℃垨鎵�鍙栧緱淇℃伅璧勬枡鐨勫彲闈犳�э紝瀹屽叏鍙栧喅浜庣敤鎴疯嚜宸辨壙鎷呯浉鍏崇殑椋庨櫓锛屽苟鍖呮嫭绯荤粺鍙楁崯鎴栬祫鏂欎涪澶辩殑鎵�鏈夐闄┿�� + </p> + <p> + 骞冲彴鐢ㄦ埛鍦ㄦ湰鎷涙爣閲囪喘骞冲彴鐨勬敞鍐屾垚鍔燂紝骞朵笉鑳芥浛浠g敤鎴峰湪鎶曟爣锛堟垨鍏朵粬閲囪喘绔炰簤鏂瑰紡锛夋椂鎷涙爣浜恒�佷唬鐞嗘満鏋勩�佽瘎鏍囷紙瀹★級濮斿憳浼氬鍏惰祫鏍肩殑瀹℃煡銆� + </p> + <h3><strong>涓冦�佷俊鎭殑鍌ㄥ瓨鍙婇檺鍒�</strong></h3> + + <p> + 鏈嫑鏍囬噰璐钩鍙颁笉瀵圭敤鎴锋墍鍙戝竷淇℃伅鐨勫垹闄ゆ垨鍌ㄥ瓨澶辫触璐熻矗銆傛湰鎷涙爣閲囪喘骞冲彴鎷ユ湁鍒ゅ畾鐢ㄦ埛鐨勮涓烘槸鍚︾鍚堟湰鎷涙爣閲囪喘骞冲彴鏈嶅姟鏉℃鐨勮姹傚拰绮剧鐨勪繚鐣欐潈鍒╋紝濡傛灉鐢ㄦ埛杩濊儗浜嗘湇鍔℃潯娆剧殑瑙勫畾锛屾垨鍏跺湪缃戠珯鐨勭浉鍏宠涓烘湁鐞嗙敱琚垽鏂负涓嶅埄浜庣綉绔欙紝鍒欓殢鏃舵湁鏉冧腑鏂鍏舵湇鍔★紝鍖呮嫭甯愬彿銆� + </p> + <h3>鍏�佺敤鎴蜂俊鎭鐞�</h3> + <p> + 鐢ㄦ埛鑷鎵挎媴鍏舵墍浼犺緭鍐呭鐨勬墍鏈夎矗浠伙紝瀵规湰鎷涙爣閲囪喘骞冲彴鐨勪娇鐢ㄧ鍚堟硶寰嬨�佹硶瑙勫強瑙勭珷鐨勮姹傦紝鍚屾椂閬靛惊浠ヤ笅鍘熷垯锛� + </p> + + <p>锛堜竴锛変粠涓浗澧冨唴鍚戝浼犺緭鎶�鏈�ц祫鏂欐椂蹇呴』绗﹀悎涓浗鏈夊叧娉曞緥娉曡锛�</p> + <p>锛堜簩锛変娇鐢ㄤ俊鎭湇鍔′笉浣滈潪娉曠敤閫旓紱</p> + <p>锛堜笁锛変笉骞叉壈鎴栨贩涔辩綉缁滄湇鍔★紱</p> + <p>锛堝洓锛夐伒瀹堟墍鏈変娇鐢ㄦ湇鍔$殑缃戠粶鍗忚銆佽瀹氥�佺▼搴忓拰鎯緥銆�</p> + <p>锛堜簲锛夊叾浠栨儏褰€��</p> + <p> + 鐢ㄦ埛鐨勮涓哄噯鍒欐槸浠ュ洜鐗圭綉娉曡锛屾斂绛栥�佺▼搴忓拰鎯緥涓烘牴鎹殑銆傜敤鎴烽』鎵胯涓嶄紶杈撲换浣曢潪娉曠殑銆侀獨鎵版�х殑銆佷腑浼や粬浜虹殑銆佽颈楠傛�х殑銆佹亹鍚撴�х殑銆佷激瀹虫�х殑銆佸焊淇楃殑鍜屾帆绉界殑淇℃伅璧勬枡銆備笉浼犺緭浠讳綍鏁欏攩浠栦汉鏋勬垚鐘姜琛屼负鐨勮祫鏂欙紱涓嶄紶杈撳姪闀垮浗鍐呬笉鍒╂潯浠跺拰娑夊強鍥藉瀹夊叏鐨勮祫鏂欙紱涓嶄紶杈撲换浣曚笉绗﹀悎褰撳湴娉曡銆佸浗瀹舵硶寰嬪拰鍥介檯娉曞緥鐨勮祫鏂欍�傝嫢鐢ㄦ埛鐨勮涓轰笉绗﹀悎浠ヤ笂鎻愬埌鐨勬湇鍔℃潯娆撅紝鏈嫑鏍囬噰璐钩鍙颁竴缁忓彂鐜板皢鍋氬嚭鐙珛鍒ゆ柇骞跺彇娑堢敤鎴锋湇鍔″拰甯愬彿銆傜敤鎴疯嫢鍦ㄦ湰鎷涙爣閲囪喘骞冲彴涓婃暎甯冨拰浼犳挱鍙嶅姩銆佽壊鎯呮垨鍏朵粬杩濆弽鍥藉娉曞緥鐨勪俊鎭紝缃戠珯鐨勭郴缁熻褰曟湁鍙兘浣滀负鐢ㄦ埛杩濆弽娉曞緥鐨勮瘉鎹�� + 濡傛灉鐢ㄦ埛鍦ㄥ彂琛ㄧ殑淇℃伅涓姞鍏ュ浼犺祫鏂欐垨鍙備笌骞垮憡绛栧垝锛屽湪鏈嫑鏍囬噰璐钩鍙扮殑鏈嶅姟涓婂睍绀轰骇鍝侊紝浠讳綍杩欑被淇冮攢鏂规硶锛屽寘鎷繍杈撹揣鐗┿�佷粯娆俱�佹湇鍔°�佸晢涓氭潯浠躲�佹媴淇濆強涓庡箍鍛婃湁鍏崇殑琛屼负鎴栨弿杩帮紝鐢辩敤鎴峰拰杩欑被鍟嗕笟瀹d紶鍙戝竷鑰呯嫭绔嬭礋璐c�傛湰鎷涙爣閲囪喘骞冲彴瀵规绫诲晢涓氬浼犱笉鎵挎媴浠讳綍璐d换锛屼篃娌℃湁涔夊姟涓烘绫诲晢涓氬浼犳壙鎷呬换浣曞彲鑳借矗浠汇�傜敤鎴疯琛屼负缁欐湰骞冲彴閫犳垚娑夎瘔鎴栦笉鑹晢瑾夈�佸叾浠栨崯澶辩殑锛屾湰骞冲彴鏈夋潈鍚戠敤鎴疯拷璐c�� + </p> + <h3>涔濄�佷繚闅�</h3> + <p> + 鐢ㄦ埛鍚屾剰淇濋殰鍜岀淮鎶ゆ湰鎷涙爣閲囪喘骞冲彴鍙婂叾浠栫敤鎴风殑鍒╃泭锛岃礋璐f敮浠樿繚鍙嶆湇鍔℃潯娆剧殑鎹熷琛ュ伩璐圭敤锛岀敱鍏跺畠浣跨敤鐢ㄦ埛鐨勫笎鍙峰拰鍙d护鐨勪汉閫犳垚鐨勬崯瀹宠禂鍋胯垂鐢ㄥ拰鍏跺畠渚电姱鐭ヨ瘑浜ф潈鑰屼骇鐢熺殑杩界储璧斿伩璐圭敤銆� + </p> + <h3>鍗併�佺粓姝㈡湇鍔�</h3> + <p> + 鐢ㄦ埛鍙牴鎹疄闄呮儏鍐�,涓诲姩缁堟鏈嫑鏍囬噰璐钩鍙版彁渚涚殑鏈嶅姟锛屽悓鏃讹紝鐢ㄦ埛浣跨敤鏈嫑鏍囬噰璐钩鍙版湇鍔$殑鏉冨埄涔熷皢琚粓姝€�傜粓姝㈢敓鏁堝悗锛岀敤鎴锋病鏈夋潈鍒╀紶閫佷换浣曟湭澶勭悊鐨勪俊鎭垨鏈畬鎴愮殑鏈嶅姟锛屾湰鎷涙爣閲囪喘骞冲彴浜︽棤姝ょ被涔夊姟銆傚浜庢绉嶇粓姝紝鏈嫑鏍囬噰璐钩鍙版棤闇�鎵挎媴浠讳綍璐d换銆� + </p> + <h3>鍗佷竴銆侀�氱煡涓庨�佽揪</h3> + <p> + 鎵�鏈夊彂缁欑敤鎴风殑閫氱煡閮藉彲閫氳繃鐩稿叧椤甸潰鐨勫叕鍛娿�佺郴缁熼�氱煡鎴栨墜鏈虹煭淇′腑鐨勪竴绉嶆垨澶氱鏂瑰紡浼犻�侊紝閫氱煡涓�缁忓彂鍑哄嵆瑙嗕负閫佽揪銆� + </p> + <h3>鍗佷簩銆佺煡璇嗕骇鏉�</h3> + <p> + 鏈嫑鏍囬噰璐钩鍙板晢鏍囨潈銆佽繍浣滄潈銆佽В閲婃潈銆佽憲浣滄潈銆佹墍鏈夋潈銆佺増鏉冪瓑鐭ヨ瘑浜ф潈褰掓湰骞冲彴鍞竴鎵�鏈夈�傜敤鎴峰湪骞冲彴涓婂彂甯冪殑淇℃伅涓嶅緱渚电姱浠讳綍绗笁浜虹殑鐭ヨ瘑浜ф潈锛屾湭缁忓叿鏈夌浉鍏虫墍鏈夋潈鎵�鏈夎�呬箣浜嬪厛涔﹂潰鍚屾剰锛岀敤鎴蜂笉寰椾互浠讳綍鏂瑰紡涓婁紶銆佸彂甯冦�佷慨鏀广�佷紶鎾垨澶嶅埗浠讳綍鍙楄憲浣滄潈淇濇姢鐨勬潗鏂欍�佸晢鏍囨垨灞炰簬鍏朵粬浜虹殑涓撴湁淇℃伅銆傚鏋滄敹鍒颁换浣曡憲浣滄潈浜烘垨鍏跺悎娉曚唬琛ㄥ彂缁欐柊鐐圭殑閫傚綋閫氱煡鍚庯紝鎴戜滑灏嗗湪瀹℃煡鐨勫熀纭�涓婄Щ闄よ绛変镜鐘粬浜鸿憲浣滄潈鐨勫唴瀹广�� + </p> + <h3>鍗佷笁銆佹潯娆剧殑娉曞緥瑙i噴</h3> + <p> + 浠ヤ笂鏉℃瑙i噴鏉冨綊鏈钩鍙版墍鏈夈�傚鍙戠敓鏈嫑鏍囬噰璐钩鍙版湇鍔℃潯娆炬垨鎵�鍙戝竷鐨勫叾瀹冩潯娆句笌涓崕浜烘皯鍏卞拰鍥芥硶寰嬨�佹硶瑙勫強瑙勭珷鐩告姷瑙︽椂锛屽垯杩欎簺鏉℃灏嗗畬鍏ㄦ寜鏈夊叧娉曞緥銆佹硶瑙勫強瑙勭珷瑙勫畾閲嶆柊瑙i噴锛岃�屽叾瀹冩潯娆惧垯渚濇棫淇濇寔瀵圭敤鎴风殑绾︽潫鍔涖�傜壒鍒0鏄庯紝浠讳綍鎯呭舰涓嬶紝瀵逛簬浠讳綍鐩稿叧鐨勪簤璁紝鍧囧彧閫傜敤涓崕浜烘皯鍏卞拰鍥芥硶寰嬨�佹硶瑙勫強瑙勭珷绠¤緰锛岃嫢鐢ㄦ埛涓庢湰鍗曚綅灏辨湇鍔℃潯娆惧彂鐢熶换浣曚簤璁紝鍙屾柟搴斿敖閲忓弸濂藉崗鍟嗚В鍐筹紱鍗忓晢涓嶆垚鏃讹紝浠讳綍涓�鏂瑰簲鍚戞垚閮戒徊瑁佸浠茶瑙e喅銆� + </p> + <p>鎰熻阿鎮ㄥ鏈钩鍙板拰鏈嶅姟鐨勪俊浠诲拰浣跨敤锛�</p> + </el-scrollbar> +</template> + +<style lang="scss" scoped></style> diff --git a/src/views/newregister/index.vue b/src/views/newregister/index.vue new file mode 100644 index 0000000..e908128 --- /dev/null +++ b/src/views/newregister/index.vue @@ -0,0 +1,552 @@ +<template> + <div class="content"> + <div class="header"> + <div class="headimg"> + <img width="167px" height="44px" src="@/assets/home/logo.png" alt="" /> + </div> + </div> + <div class="article"> + <div class="formDiv"> + <div class="formheader"> + <span class="title">璇峰~鍐欏凡涓嬫敞鍐屼俊鎭�</span> + <span class="other" + >鏈変紒涓氳惀涓氭墽鐓�(鍚釜浣撳伐鍟嗘埛)鐨勭敤鎴疯娉ㄥ唽銆傛潈鐩婂涓嬶細鍋氫紒涓氬疄鍚嶈璇併�佸弬涓庢嫑鎶曟爣涓氬姟銆佸紑閫氫紒涓氶棬鎴风瓑</span + > + </div> + <el-divider /> + <div class="formContent"> + <el-form + ref="ruleFormRef" + style="width: 95%" + :model="state.ruleForm" + :rules="state.rules" + label-width="auto" + > + <el-form-item label="娉ㄥ唽韬唤" prop="exRoleCode"> + <el-radio-group v-model="state.ruleForm.exRoleCode"> + <el-radio + v-for="item in state.roleList" + :key="item.id" + :value="item.code" + >{{ item.name }}</el-radio + > + </el-radio-group> + </el-form-item> + <!-- <el-form-item label="浼佷笟鍚嶇О" prop="name"> + <el-input + v-model="ruleForm.name" + placeholder="璇疯緭鍏ヨ惀涓氭墽鐓т笂鐨勪紒涓氬悕绉�" + /> + </el-form-item> + <el-form-item label="鐢ㄦ埛鍚�" prop="region"> + <el-input v-model="ruleForm.region" placeholder="璇疯緭鍏ョ敤鎴峰悕" /> + </el-form-item> --> + <!-- <el-form-item label="濮撳悕" prop="nickName"> + <el-input + v-model="state.ruleForm.nickName" + placeholder="璇疯緭鍏ュ鍚�" + /> + </el-form-item> --> + <el-row> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24"> + <el-form-item label="浼佷笟绫诲瀷" prop="enterpriseType"> + <el-tree-select + v-model="state.ruleForm.enterpriseType" + :data="state.enterpriseList" + multiple + node-key="name" + :render-after-expand="false" + show-checkbox + check-strictly + check-on-click-node + :load="loadNode" + lazy + :props="{ + label: 'name', + children: 'child', + isLeaf: 'leaf' + }" + /> + <!-- <el-select + v-model="state.ruleForm.enterpriseType" + placeholder="璇烽�夋嫨" + clearable + multiple + > + <el-option + v-for="item in state.enterpriseList" + :key="item.id" + :label="item.name" + :value="item.code" + /> + </el-select> --> + </el-form-item> + </el-col> + </el-row> + <el-row><div class="baseclass">浼佷笟璧勬枡</div></el-row> + <el-row> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24"> + <el-form-item label="钀ヤ笟鎵х収" prop="businessLicense"> + <el-upload + :action="`${baseUrlApi('/api/upFile/upBizLicense')}`" + :show-file-list="false" + :on-success="handleAvatarSuccess" + :before-upload="beforeAvatarUpload" + :headers="state.headers" + > + <img + v-if="state.ruleForm.businessLicense" + :src="state.ruleForm.businessLicense" + width="200px" + height="150px" + /> + <el-button v-else type="primary">涓婁紶</el-button> + </el-upload> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24"> + <el-form-item label="浼佷笟鍚嶇О" prop="enterpriseName"> + <el-input + v-model="state.ruleForm.enterpriseName" + disabled + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item + label="缁熶竴绀句細淇$敤浠g爜" + prop="unifiedSocialCreditCode" + > + <el-input + v-model="state.ruleForm.unifiedSocialCreditCode" + disabled + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item label="娉ㄥ唽璧勯噾" prop="registeredCapital"> + <el-input + v-model="state.ruleForm.registeredCapital" + disabled + placeholder="璇疯緭鍏�" + > + <template #append>涓囧厓</template></el-input + > + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="8" :xl="8"> + <el-form-item label="娉曞畾浠h〃浜�" prop="legalRepresentativeName"> + <el-input + v-model="state.ruleForm.legalRepresentativeName" + disabled + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + + <el-col :xs="24" :sm="24" :md="24" :lg="16" :xl="16"> + <el-form-item label="浣忔墍鍦�" prop="residence"> + <el-input + v-model="state.ruleForm.residence" + disabled + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item label="鎴愮珛鏃堕棿" prop="establishmentTime"> + <el-input + v-model="state.ruleForm.establishmentTime" + disabled + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24"> + <el-form-item label="涓昏惀涓氬姟" prop="mainBusiness"> + <el-input + v-model="state.ruleForm.mainBusiness" + disabled + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item label="鑱旂郴鐢佃瘽" prop="enterprisePhone"> + <el-input + v-model="state.ruleForm.enterprisePhone" + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item label="閭" prop="enterpriseEmail"> + <el-input + v-model="state.ruleForm.enterpriseEmail" + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item label="寮�鎴疯" prop="bankName"> + <el-input + v-model="state.ruleForm.bankName" + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="16" :xl="16"> + <el-form-item label="閾惰璐﹀彿" prop="bankAccount"> + <el-input + v-model="state.ruleForm.bankAccount" + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24"> + <el-form-item label="寮�鎴疯鏀舵浜岀淮鐮�" prop="bankAccountIMG"> + <el-upload + :action="`${baseUrlApi('/api/upFile/file')}`" + :show-file-list="false" + :on-success="handlebankAccountIMG" + :before-upload="beforeAvatarUpload" + :headers="state.headers" + > + <img + v-if="state.ruleForm.bankAccountIMG" + :src="state.ruleForm.bankAccountIMG" + width="85.6px" + height="5.4px" + /> + <el-button v-else type="primary">涓婁紶</el-button> + </el-upload> + </el-form-item> + </el-col> + </el-row> + <el-row><div class="baseclass">娉曞畾浠h〃浜鸿祫鏂�</div></el-row> + <el-row> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24"> + <el-form-item label="韬唤璇�" prop="legalRepresentativeIdCard"> + <el-upload + :action="`${baseUrlApi('/api/upFile/uploadIdCord?PageName=FRONT')}`" + :show-file-list="false" + :on-success="handleAvatarSuccessLegalRepresentative" + :before-upload="beforeAvatarUpload" + :headers="state.headers" + > + <img + v-if="state.ruleForm.legalRepresentativeIdCard" + :src="state.ruleForm.legalRepresentativeIdCard" + width="85.6px" + height="5.4px" + /> + <el-button v-else type="primary">涓婁紶韬唤璇�</el-button> + </el-upload> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item label="濮撳悕" prop="legalRepresentativeName"> + <el-input + v-model="state.ruleForm.legalRepresentativeName" + disabled + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item label="韬唤璇�" prop="legalRepresentativeIdNumber"> + <el-input + v-model="state.ruleForm.legalRepresentativeIdNumber" + disabled + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item label="鑱旂郴鐢佃瘽" prop="legalRepresentativePhone"> + <el-input + v-model="state.ruleForm.legalRepresentativePhone" + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + </el-row> + <el-row><div class="baseclass">涓氬姟缁忓姙浜鸿祫鏂�</div></el-row> + + <el-row> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24"> + <el-form-item label="韬唤璇�" prop="operatorIdCard"> + <el-upload + :action="`${baseUrlApi('/api/upFile/uploadIdCord?PageName=FRONT')}`" + :show-file-list="false" + :on-success="handleAvatarSuccessOperator" + :before-upload="beforeAvatarUpload" + :headers="state.headers" + > + <img + v-if="state.ruleForm.operatorIdCard" + :src="state.ruleForm.operatorIdCard" + width="85.6px" + height="5.4px" + /> + <el-button v-else type="primary">涓婁紶韬唤璇�</el-button> + </el-upload> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item label="濮撳悕" prop="operatorName"> + <el-input + v-model="state.ruleForm.operatorName" + disabled + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item label="韬唤璇�" prop="operatorIdNumber"> + <el-input + v-model="state.ruleForm.operatorIdNumber" + disabled + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item label="鑱旂郴鐢佃瘽" prop="operatorPhone"> + <el-input + v-model="state.ruleForm.operatorPhone" + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item + label="楠岃瘉鐮�" + class="login-animation3" + prop="code" + > + <el-col :span="15"> + <el-input + ref="codeRef" + v-model="state.code" + text + maxlength="4" + placeholder="璇疯緭鍏ラ獙璇佺爜" + clearable + autocomplete="off" + /> + </el-col> + <el-col :span="1" /> + <el-col :span="8"> + <div + :class="[ + state.expirySeconds > 0 + ? 'login-content-code' + : 'login-content-code-expired' + ]" + @click="getCaptcha" + > + <img + class="login-content-code-img" + width="130px" + height="38px" + :src="state.captchaImage" + style="cursor: pointer" + /> + </div> + </el-col> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> + <el-form-item prop="phoneVCode" label="鎵嬫満楠岃瘉鐮�"> + <el-input + v-model.number="state.ruleForm.phoneVCode" + class="form-input" + placeholder="璇疯緭鍏ラ獙璇佺爜" + > + <template #suffix> + <span v-if="state.phoneSeconds == 0" id="suffix-span"> + <span + id="suffix-span-2" + ref="spanRef" + @click="sendValidationCode" + > + 鑾峰彇楠岃瘉鐮� + </span> + </span> + <span v-else id="suffix-span"> + <span id="suffix-span-2" ref="spanRef"> + {{ state.phoneSeconds }}绉掑悗閲嶆柊鑾峰彇 + </span> + </span> + </template> + </el-input> + </el-form-item> + </el-col> + </el-row> + + <el-form-item label=" "> + <el-checkbox + v-model="state.checkedAgree" + name="type" + />鎴戝凡闃呰骞跺悓鎰� + <el-link type="primary" :underline="false" + >銆婇潪鏀块噰鎷涙爣閲囪喘浜ゆ槗骞冲彴鐢ㄦ埛鍗忚銆�</el-link + > + </el-form-item> + <el-form-item label=" "> + <el-button type="primary" @click="sumbitData(ruleFormRef)"> + 鍚屾剰骞舵敞鍐� + </el-button> + </el-form-item> + <el-form-item label=" "> + <span>宸叉湁璐﹀彿锛�</span> + <el-link type="primary" :underline="false">绔嬪嵆鐧诲綍</el-link> + </el-form-item> + </el-form> + </div> + </div> + </div> + </div> +</template> + +<script lang="ts" setup> +import { useRegister } from "./utils/hook"; +import { baseUrlApi } from "@/api/util"; + +const { + state, + resetForm, + sendValidationCode, + getCaptcha, + ruleFormRef, + spanRef, + beforeAvatarUpload, + handleAvatarSuccessOperator, + handleAvatarSuccessLegalRepresentative, + sumbitData, + handleAvatarSuccess, + loadNode, + handlebankAccountIMG +} = useRegister(); + +defineOptions({ + name: "newRegister" +}); +</script> +<style scoped> +@import url("@/style/login.css"); +</style> +<style lang="scss" scoped> +.content { + background-color: #f8f8f8; + width: 100%; + height: 100%; + .header { + display: flex; + align-items: center; + height: 80px; + width: 100%; + margin: 0 auto; + background-color: #fff; + .headimg { + width: 1200px; + margin: 0 auto; + } + } + .article { + margin: 20px auto; + width: 80%; + height: 85%; + background: rgb(255, 255, 255); + .formDiv { + width: 90%; + margin: 0 auto; + .formheader { + // display: flex; + // align-items: center; + // justify-content: space-around; + padding-top: 30px; + } + .title { + color: rgb(51, 51, 51); + font-size: 18px; + font-weight: 700; + line-height: 16px; + letter-spacing: 0%; + text-align: left; + text-transform: capitalize; + } + .other { + color: rgb(173, 173, 173); + font-size: 12px; + font-weight: 500; + line-height: 16px; + letter-spacing: 0%; + text-align: left; + text-transform: capitalize; + } + .formContent { + // display: flex; + // justify-content: center; + } + } + } +} +.el-form-item { + align-items: center; +} +#suffix-span { + cursor: pointer; +} +.login-content-code { + display: flex; + align-items: center; + justify-content: space-around; + position: relative; + + .login-content-code-img { + width: 100%; + height: 40px; + line-height: 40px; + background-color: #ffffff; + border: 1px solid rgb(220, 223, 230); + cursor: pointer; + transition: all ease 0.2s; + border-radius: 4px; + user-select: none; + + &:hover { + border-color: #c0c4cc; + transition: all ease 0.2s; + } + } +} + +.login-content-code-expired { + @extend .login-content-code; + &::before { + content: "楠岃瘉鐮佸凡杩囨湡"; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + border-radius: 4px; + background-color: rgba(0, 0, 0, 0.5); + color: #ffffff; + text-align: center; + line-height: 40px; + } +} +</style> diff --git a/src/views/newregister/utils/hook.tsx b/src/views/newregister/utils/hook.tsx new file mode 100644 index 0000000..83102f4 --- /dev/null +++ b/src/views/newregister/utils/hook.tsx @@ -0,0 +1,531 @@ +import { + reactive, + computed, + ref, + onMounted, + defineAsyncComponent, + onUnmounted, + watch +} from "vue"; +import type { FormInstance, FormRules, UploadProps } from "element-plus"; +import type { stateInfo } from "./types"; +import { + captcha, + phoneNumberCode, + register, + exRole +} from "@/api/register/index"; +import { useRoute, useRouter } from "vue-router"; +import { message } from "@/utils/message"; +import { getToken } from "@/utils/auth"; +import { useNav } from "@/layout/hooks/useNav"; +import { useUserStoreHook } from "@/store/modules/user"; +import { baseUrlApi } from "@/api/util"; +import { + addDialog, + closeDialog, + updateDialog, + closeAllDialog +} from "@/components/ReDialog"; +import { + enterpriseTypes, + createrExRolsInformation +} from "@/api/register/index"; +import { cloneDeep } from "@pureadmin/utils"; +import { changeCusExtend } from "@/api/mine"; + +const route = useRoute(); +export function useRegister() { + const isLoading = ref(false); + const router = useRouter(); + const state: stateInfo = reactive({ + headers: { + Authorization: `Bearer ${getToken()?.accessToken}` + }, + isShowPassword: false, + ruleForm: { + id: null, // 涓婚敭Id锛屽彲涓虹┖ + enterpriseType: "", // 浼佷笟绫诲瀷锛屼笉鍙┖锛屾渶灏忛暱搴�1 + exRoleCode: "", // 涓讳綋瑙掕壊浠g爜锛屼笉鍙┖锛屾渶灏忛暱搴�1 + transactionCode: "", // 浜ゆ槗涓讳綋浠g爜锛堝悓瑙掕壊浠g爜exRoleCode锛屼笉鍙┖锛屾渶灏忛暱搴�1锛� + businessLicense: "", // 钀ヤ笟鎵х収鏂囦欢璺緞锛屼笉鍙┖锛屾渶灏忛暱搴�1 + enterpriseName: "", // 浼佷笟鍚嶇О锛屼笉鍙┖锛屾渶灏忛暱搴�1 + unifiedSocialCreditCode: "", // 缁熶竴绀句細淇$敤浠g爜锛屼笉鍙┖锛屾渶灏忛暱搴�1 + registeredCapital: "", // 娉ㄥ唽璧勯噾锛屼笉鍙┖锛屾渶灏忛暱搴�1 + legalRepresentativeName: "", // 娉曞畾浠h〃浜哄鍚嶏紝涓嶅彲绌猴紝鏈�灏忛暱搴�1 + legalRepresentativeIdCard: "", // 娉曞畾浠h〃浜鸿韩浠借瘉鏂囦欢璺緞锛屼笉鍙┖锛屾渶灏忛暱搴�1 + legalRepresentativeIdNumber: "", // 娉曞畾浠h〃浜鸿韩浠借瘉鍙风爜锛屼笉鍙┖锛屾渶灏忛暱搴�1 + legalRepresentativePhone: "", // 娉曞畾浠h〃浜虹數璇濓紝涓嶅彲绌猴紝鏈�灏忛暱搴�1 + residence: "", // 浼佷笟浣忔墍锛屼笉鍙┖锛屾渶灏忛暱搴�1 + enterprisePhone: "", // 浼佷笟鑱旂郴鐢佃瘽锛屼笉鍙┖锛屾渶灏忛暱搴�1 + establishmentTime: "", // 浼佷笟鎴愮珛鏃堕棿锛屼笉鍙┖锛宒ate-time鏍煎紡 + mainBusiness: null, // 浼佷笟涓昏惀涓氬姟锛屽彲涓虹┖ + enterpriseEmail: "", // 浼佷笟閭锛屼笉鍙┖锛屾渶灏忛暱搴�1 + operatorName: "", // 涓氬姟缁忓姙浜哄鍚�/绠$悊鍛樺鍚嶏紝涓嶅彲绌猴紝鏈�灏忛暱搴�1 + operatorIdCard: "", // 涓氬姟缁忓姙浜鸿韩浠借瘉鏂囦欢璺緞鎴栨爣璇嗭紝涓嶅彲绌猴紝鏈�灏忛暱搴�1 + operatorIdNumber: "", // 涓氬姟缁忓姙浜鸿韩浠借瘉鍙风爜锛屼笉鍙┖锛屾渶灏忛暱搴�1 + operatorPhone: null, // 涓氬姟缁忓姙浜虹數璇�/绠$悊鍛樼數璇濓紝鍙负绌� + bankName: "", // 寮�鎴疯鍚嶇О锛屼笉鍙┖锛屾渶灏忛暱搴�1 + bankAccount: "", // 寮�鎴疯璐﹀彿锛屼笉鍙┖锛屾渶灏忛暱搴�1 + phoneVCode: "", // 鐢佃瘽鍙风爜鏍¢獙鐮侊紝涓嶅彲绌猴紝鏈�灏忛暱搴�1 + bankAccountIMG: "" //寮�鎴疯鏀舵浜岀淮鐮� + }, + rules: { + enterpriseType: [ + { + required: true, + message: "璇烽�夋嫨浼佷笟绫诲瀷", + trigger: "blur" + } + ], + exRoleCode: [ + { + required: true, + message: "璇疯緭鍏ラ�夋嫨娉ㄥ唽韬唤", + trigger: "blur" + } + ], + transactionCode: [ + { + required: true, + message: "璇疯緭鍏ヤ氦鏄撲富浣撲唬鐮�", + trigger: "blur" + } + ], + businessLicense: [ + { + required: true, + message: "璇蜂笂浼犺惀涓氭墽鐓�", + trigger: "blur" + } + ], + enterpriseName: [ + { + required: true, + message: "璇疯緭鍏ヤ紒涓氬悕绉�", + trigger: "blur" + } + ], + unifiedSocialCreditCode: [ + { + required: true, + message: "璇疯緭鍏ョ粺涓�绀句細淇$敤浠g爜", + trigger: "blur" + } + ], + registeredCapital: [ + { + required: true, + message: "璇疯緭鍏ユ敞鍐岃祫閲�", + trigger: "blur" + } + ], + legalRepresentativeName: [ + { + required: true, + message: "璇疯緭鍏ユ硶瀹氫唬琛ㄤ汉濮撳悕", + trigger: "blur" + } + ], + legalRepresentativeIdCard: [ + { + required: true, + message: "璇蜂笂浼犳硶瀹氫唬琛ㄤ汉韬唤璇�", + trigger: "blur" + } + ], + legalRepresentativeIdNumber: [ + { + required: true, + message: "璇疯緭鍏ユ硶瀹氫唬琛ㄤ汉韬唤璇佸彿鐮�", + trigger: "blur" + } + ], + legalRepresentativePhone: [ + { + required: true, + message: "璇疯緭鍏ユ硶瀹氫唬琛ㄤ汉鐢佃瘽", + trigger: "blur" + } + ], + residence: [ + { + required: true, + message: "璇疯緭鍏ヤ紒涓氫綇鎵�", + trigger: "blur" + } + ], + enterprisePhone: [ + { + required: true, + message: "璇疯緭鍏ヤ紒涓氳仈绯荤數璇�", + trigger: "blur" + } + ], + establishmentTime: [ + { + required: true, + message: "璇烽�夋嫨浼佷笟鎴愮珛鏃堕棿", + trigger: "blur" + } + ], + enterpriseEmail: [ + { + required: true, + message: "璇疯緭鍏ヤ紒涓氶偖绠�", + trigger: "blur" + } + ], + operatorName: [ + { + required: true, + message: "璇疯緭鍏ヤ笟鍔$粡鍔炰汉濮撳悕", + trigger: "blur" + } + ], + operatorIdCard: [ + { + required: true, + message: "璇蜂笂浼犱笟鍔$粡鍔炰汉韬唤璇�", + trigger: "blur" + } + ], + operatorIdNumber: [ + { + required: true, + message: "璇疯緭鍏ヤ笟鍔$粡鍔炰汉韬唤璇佸彿鐮�", + trigger: "blur" + } + ], + bankName: [ + { + required: true, + message: "璇疯緭鍏ュ紑鎴疯鍚嶇О", + trigger: "blur" + } + ], + bankAccount: [ + { + required: true, + message: "璇疯緭鍏ュ紑鎴疯璐﹀彿", + trigger: "blur" + } + ], + phoneVCode: [ + { + required: true, + message: "璇疯緭鍏ユ墜鏈洪獙璇佺爜", + trigger: "blur" + } + ], + operatorPhone: [ + { + required: true, + message: "璇疯緭鍏ヤ笟鍔$粡鍔炰汉鑱旂郴鐢佃瘽", + trigger: "blur" + } + ] + }, + loading: { + signIn: false + }, + captchaImage: "", + rotateVerifyVisible: false, + // rotateVerifyImg: verifyImg, + // rotateVerifyImg: themeConfig.value.logoUrl, + secondVerEnabled: false, + // captchaEnabled: false, + isPassRotate: false, + capsLockVisible: false, + hideTenantForLogin: false, + expirySeconds: 60, // 楠岃瘉鐮佽繃鏈熸椂闂� + phoneSeconds: 0, // 鎵嬫満楠岃瘉鐮佸�掕鏃� + roleList: [], + code: "", + codeId: "", + checkedAgree: false, + enterpriseList: [] + }); + // 楠岃瘉鐮佽繃鏈熻鏃跺櫒 + let timer: any = null; + let phonetimer: any = null; + + // 椤甸潰鍒濆鍖� + onMounted(async () => { + // 鑻RL甯︽湁Token鍙傛暟锛堢涓夋柟鐧诲綍锛� + // const accessToken = route.query.token; + // if (accessToken) await saveTokenAndInitRoutes(accessToken); + // watch( + // () => themeConfig.value.isLoaded, + // isLoaded => { + // if (isLoaded) { + // 鑾峰彇鐧诲綍閰嶇疆 + // state.hideTenantForLogin = themeConfig.value.hideTenantForLogin ?? true; + // state.secondVerEnabled = themeConfig.value.secondVer ?? true; + // state.captchaEnabled = themeConfig.value.captcha ?? true; + + // 鑾峰彇楠岃瘉鐮� + getCaptcha(); + exRole().then(res => { + state.roleList = res.result; + }); + const nowRole = useUserStoreHook()?.nowRole; + // console.log(nowRole); + // state.ruleForm.exRoleCode = route.query.code; + // if ( + // state.ruleForm.exRoleCode == + // useUserStoreHook().enterpriseInfo.transactionCode + // ) { + // state.ruleForm = cloneDeep(useUserStoreHook().enterpriseInfo); + // state.ruleForm.enterpriseType = state.ruleForm.enterpriseType.split(","); + // isFirst.value = false; + // } + const resTypes = await enterpriseTypes(); + state.enterpriseList = resTypes?.result; + // 娉ㄥ唽楠岃瘉鐮佽繃鏈熻鏃跺櫒 + // if (state.captchaEnabled) { + timer = setInterval(() => { + if (state.expirySeconds > 0) state.expirySeconds -= 1; + }, 1000); + + // } + // } + // }, + // { immediate: true } + // ); + + // 妫�娴嬪ぇ灏忓啓鎸夐敭/CapsLK + document.addEventListener("keyup", handleKeyPress); + }); + + // 椤甸潰鍗歌浇 + onUnmounted(() => { + // 閿�姣侀獙璇佺爜杩囨湡璁℃椂鍣� + clearInterval(timer); + timer = null; + clearInterval(phonetimer); + phonetimer = null; + + document.removeEventListener("keyup", handleKeyPress); + }); + + // 妫�娴嬪ぇ灏忓啓鎸夐敭 + function handleKeyPress(e: KeyboardEvent) { + if (e.getModifierState != undefined) + state.capsLockVisible = e.getModifierState("CapsLock"); + } + // 鑾峰彇楠岃瘉鐮� + async function getCaptcha() { + // if (!state.captchaEnabled) return; + state.code = ""; + const res = await captcha(); + state.captchaImage = "data:text/html;base64," + res.result?.img; + state.expirySeconds = res.result?.expirySeconds; + state.codeId = res.result?.id; + } + const ruleFormRef = ref<FormInstance>(); + + // 楠岃瘉鐮佸尯鍩熸枃瀛楄鏄� + const spanRef = ref(); + + async function sendValidationCode() { + if (!state.ruleForm.operatorPhone) { + return message("璇峰厛杈撳叆涓氬姟缁忓姙浜鸿仈绯荤數璇�", { type: "warning" }); + } + if (!state.code) { + return message("璇峰厛杈撳叆楠岃瘉鐮�", { type: "warning" }); + } + const obj = { + phone: state.ruleForm.operatorPhone, + code: state.code, + codeId: state.codeId + }; + const res = await phoneNumberCode(obj); + if (res?.code != 200) { + return message(res?.message, { type: "warning" }); + } + state.phoneSeconds = 60; + phonetimer = setInterval(() => { + if (state.phoneSeconds > 0) state.phoneSeconds -= 1; + }, 1000); + } + + function resetForm(formEl: FormInstance | undefined) { + if (!formEl) return; + formEl.resetFields(); + } + + // 鎻愪氦浼佷笟娉ㄥ唽淇℃伅 + async function sumbitData(formEl: FormInstance | undefined) { + if (!formEl) return; + await formEl.validate((valid, fields) => { + router.replace({ + path: "/RegisterSucess", + query: { + code: state.ruleForm.exRoleCode + } + }); + if (valid && state.checkedAgree) { + addDialog({ + width: "20%", + title: "纭淇℃伅", + contentRenderer: () => ( + <p> + 璇锋偍璁ょ湡鏍稿濉姤鐨勮祫鏂欐槸鍚︽纭紝濡傚洜濉姤閿欒褰卞搷鍚庣画鎶曟爣绛夋搷浣滐紝骞冲彴涓嶆壙鎷呬换浣曡矗浠伙紝鎵�鏈夊悗鏋滈渶瑕佽嚜琛屾壙鎷咃紝璇锋偍璋ㄦ厧濉啓锛� + </p> + ), // jsx 璇硶 锛堟敞鎰忓湪.vue鏂囦欢鍚敤jsx璇硶锛岄渶瑕佸湪script寮�鍚痩ang="tsx"锛� + closeCallBack: ({ options, args }) => { + // options.props 鏄搷搴斿紡鐨� + // const { formInline } = options.props as FormProps; + // const text = `濮撳悕锛�${formInline.user} 鍩庡競锛�${formInline.region}`; + if (args?.command === "cancel") { + // 鎮ㄧ偣鍑讳簡鍙栨秷鎸夐挳 + // active.value -= 1; + } else if (args?.command === "sure") { + state.ruleForm.account = state.ruleForm.operatorPhone; + const obj = cloneDeep(state.ruleForm); + obj.enterpriseType = state.ruleForm.enterpriseType.join(","); + register(obj).then(res => { + if (res?.code == 200) { + message("娉ㄥ唽鎴愬姛锛�", { type: "success" }); + router.replace({ + path: "/RegisterSucess", + query: { + code: obj.exRoleCode + } + }); + } else { + message(res?.message, { type: "warning" }); + } + }); + } else { + } + } + }); + return; + } else message("璇峰嬀閫夌敤鎴峰崗璁�", { type: "warning" }); + }); + } + function handleAvatarSuccess( + response: Parameters<UploadProps["onSuccess"]>[0], + uploadFile: Parameters<UploadProps["onSuccess"]>[1] + ): ReturnType<UploadProps["onSuccess"]> { + if (response.code == "200") { + // state.ruleForm.businessLicense = URL.createObjectURL(uploadFile.raw!); + const res = response.result; + state.ruleForm.businessLicense = res.url; // 钀ヤ笟鎵х収鏂囦欢璺緞 + state.ruleForm.enterpriseName = res.info.Name; // 浼佷笟鍚嶇О + state.ruleForm.unifiedSocialCreditCode = res.info.RegNum; // 缁熶竴绀句細淇$敤浠g爜 + state.ruleForm.registeredCapital = res.info.Capital; // 娉ㄥ唽璧勯噾锛堝崟浣嶏細涓囧厓锛� + state.ruleForm.legalRepresentativeName = res.info.Person; // 娉曞畾浠h〃浜哄鍚� + state.ruleForm.establishmentTime = res.info.SetDate; // 浼佷笟鎴愮珛鏃堕棿锛堟牸寮忕ず渚嬶細2025-07-08 14:56:54锛� + state.ruleForm.residence = res.info.Address; // 浼佷笟浣忔墍锛堜笅鎷夐�夋嫨锛屾殏浠ュ瓧绗︿覆鎺ユ敹锛� + state.ruleForm.mainBusiness = res.info.Business; // 浼佷笟涓昏惀涓氬姟 + } else { + message(response.message, { + type: "error" + }); + } + isLoading.value = false; + } + + function handleAvatarSuccessLegalRepresentative( + response: Parameters<UploadProps["onSuccess"]>[0], + uploadFile: Parameters<UploadProps["onSuccess"]>[1] + ): ReturnType<UploadProps["onSuccess"]> { + console.log(response); + if (response.code == "200") { + // state.ruleForm.businessLicense = URL.createObjectURL(uploadFile.raw!); + const res = response.result; + state.ruleForm.legalRepresentativeIdCard = res.url; // 娉曞畾浠h〃浜鸿韩浠借瘉鏂囦欢璺緞 + state.ruleForm.legalRepresentativeIdNumber = res.info.IdNum; // 娉曞畾浠h〃浜鸿韩浠借瘉鍙风爜 + } else { + message(response.message, { + type: "error" + }); + } + isLoading.value = false; + } + + function handleAvatarSuccessOperator( + response: Parameters<UploadProps["onSuccess"]>[0], + uploadFile: Parameters<UploadProps["onSuccess"]>[1] + ): ReturnType<UploadProps["onSuccess"]> { + if (response.code == "200") { + // state.ruleForm.businessLicense = URL.createObjectURL(uploadFile.raw!); + const res = response.result; + state.ruleForm.operatorName = res.info.Name; // 涓氬姟缁忓姙浜哄鍚� + state.ruleForm.operatorIdCard = res.url; // 涓氬姟缁忓姙浜鸿韩浠借瘉鏂囦欢璺緞鎴栨爣璇嗭紙涓婁紶鍚庡瓨鍌ㄤ俊鎭級 + state.ruleForm.operatorIdNumber = res.info.IdNum; // 涓氬姟缁忓姙浜鸿韩浠借瘉鍙风爜 + } else { + message(response.message, { + type: "error" + }); + } + isLoading.value = false; + } + function handlebankAccountIMG( + response: Parameters<UploadProps["onSuccess"]>[0], + uploadFile: Parameters<UploadProps["onSuccess"]>[1] + ): ReturnType<UploadProps["onSuccess"]> { + if (response.code == "200") { + // state.ruleForm.businessLicense = URL.createObjectURL(uploadFile.raw!); + state.ruleForm.bankAccountIMG = response.result; + } else { + message(response.message, { + type: "error" + }); + } + isLoading.value = false; + } + function beforeAvatarUpload( + rawFile: Parameters<UploadProps["beforeUpload"]>[0] + ): ReturnType<UploadProps["beforeUpload"]> { + isLoading.value = true; + // if (rawFile.type !== "image/jpeg") { + // message(`璇蜂笂浼爅peg绫诲瀷鐨勫浘鐗嘸, { + // type: "error" + // }); + // return false; + // } else if (rawFile.size / 1024 / 1024 > 2) { + // message(`鍥剧墖澶у皬涓嶈兘瓒呰繃 2MB锛乣, { + // type: "error" + // }); + // return false; + // } + return true; + } + function isLeaf(data) { + data.forEach(item => { + if (!item.child) { + item.leaf = true; + } + }); + } + function loadNode(node, resolve) { + if (node.level === 0) { + isLeaf(node.data); + return resolve(node.data); + } else if (node.level > 0 && node.data.child) { + isLeaf(node.data.child); + return resolve(node.data.child); + } else { + return resolve([]); + } + } + return { + state, + resetForm, + sendValidationCode, + getCaptcha, + ruleFormRef, + spanRef, + beforeAvatarUpload, + handleAvatarSuccessOperator, + handleAvatarSuccessLegalRepresentative, + sumbitData, + handleAvatarSuccess, + loadNode, + handlebankAccountIMG + }; +} diff --git a/src/views/newregister/utils/types.ts b/src/views/newregister/utils/types.ts new file mode 100644 index 0000000..d96ef2c --- /dev/null +++ b/src/views/newregister/utils/types.ts @@ -0,0 +1,115 @@ +import type { FormRules } from "element-plus"; + +interface EnterpriseInfo { + /** 涓婚敭Id */ + id?: number | null; + /** 浼佷笟绫诲瀷锛堜笉鍙┖锛� */ + enterpriseType: string; + /** 涓讳綋瑙掕壊浠g爜锛堜笉鍙┖锛屽師瀛楁TransactionCode锛� */ + exRoleCode: string; + /** 浜ゆ槗涓讳綋浠g爜锛堝悓瑙掕壊浠g爜锛屼笉鍙┖锛� */ + transactionCode: string; + /** 钀ヤ笟鎵х収鏂囦欢璺緞锛堜笉鍙┖锛� */ + businessLicense: string; + /** 浼佷笟鍚嶇О锛堜笉鍙┖锛� */ + enterpriseName: string; + /** 缁熶竴绀句細淇$敤浠g爜锛堜笉鍙┖锛� */ + unifiedSocialCreditCode: string; + /** 娉ㄥ唽璧勯噾锛堜笉鍙┖锛� */ + registeredCapital: string; + /** 娉曞畾浠h〃浜哄鍚嶏紙涓嶅彲绌猴級 */ + legalRepresentativeName: string; + /** 娉曞畾浠h〃浜鸿韩浠借瘉鏂囦欢璺緞锛堜笉鍙┖锛� */ + legalRepresentativeIdCard: string; + /** 娉曞畾浠h〃浜鸿韩浠借瘉鍙风爜锛堜笉鍙┖锛� */ + legalRepresentativeIdNumber: string; + /** 娉曞畾浠h〃浜虹數璇濓紙涓嶅彲绌猴級 */ + legalRepresentativePhone: string; + /** 浼佷笟浣忔墍锛堜笉鍙┖锛� */ + residence: string; + /** 浼佷笟鑱旂郴鐢佃瘽锛堜笉鍙┖锛� */ + enterprisePhone: string; + /** 浼佷笟鎴愮珛鏃堕棿锛堜笉鍙┖锛屾牸寮忥細yyyy-MM-dd HH:mm:ss锛� */ + establishmentTime: string; + /** 浼佷笟涓昏惀涓氬姟锛堝彲涓虹┖锛� */ + mainBusiness?: string | null; + /** 浼佷笟閭锛堜笉鍙┖锛� */ + enterpriseEmail: string; + /** 涓氬姟缁忓姙浜哄鍚嶃�佺鐞嗗憳濮撳悕锛堜笉鍙┖锛� */ + operatorName: string; + /** 涓氬姟缁忓姙浜鸿韩浠借瘉鏂囦欢璺緞鎴栨爣璇嗭紙涓嶅彲绌猴級 */ + operatorIdCard: string; + /** 涓氬姟缁忓姙浜鸿韩浠借瘉鍙风爜锛堜笉鍙┖锛� */ + operatorIdNumber: string; + /** 涓氬姟缁忓姙浜虹數璇�/绠$悊鍛樼數璇濓紙鍙负绌猴級 */ + operatorPhone?: string | null; + /** 寮�鎴疯鍚嶇О锛堜笉鍙┖锛� */ + bankName: string; + /** 寮�鎴疯璐﹀彿锛堜笉鍙┖锛� */ + bankAccount: string; + /** 鐢佃瘽鍙风爜鏍¢獙鐮侊紙涓嶅彲绌猴級 */ + phoneVCode: string; + bankAccountIMG: string; +} +interface RoleInfo { + /** 瑙掕壊缂栫爜 */ + code: string; + /** 鏁版嵁鑼冨洿 */ + dataScope: number; + /** 瑙掕壊ID */ + id: number; + /** 瑙掕壊鍚嶇О */ + name: string; + /** 鎺掑簭鍙� */ + orderNo: number; + /** 澶囨敞淇℃伅锛堝彲涓虹┖锛� */ + remark: string | null; + /** 鐘舵�侊紙1琛ㄧず鍚敤绛夛紝鏍规嵁涓氬姟瀹氫箟锛� */ + status: number; +} +// 琛屼笟鍒嗙被瀛愰」绫诲瀷 +interface IndustryCategoryChild { + child: IndustryCategoryChild[] | null; + /** 瀛愬垎绫籌D */ + id: number; + /** 瀛愬垎绫诲悕绉� */ + name: string; + /** 瀛愬垎绫荤紪鐮� */ + code: string; + /** 鐖跺垎绫籌D */ + parentId: number; + // 濡傞渶鍏朵粬瀛愰」鍙兘瀛樺湪鐨勫瓧娈碉紝鍙湪姝よˉ鍏� +} + +// 琛屼笟鍒嗙被涓婚」绫诲瀷 +interface IndustryCategory { + /** 瀛愬垎绫诲垪琛� */ + child: IndustryCategoryChild[]; + /** 涓诲垎绫荤紪鐮� */ + code: string; + /** 涓诲垎绫籌D */ + id: number; + /** 涓诲垎绫诲悕绉� */ + name: string; + /** 鐖跺垎绫籌D锛�0琛ㄧず椤剁骇鍒嗙被锛� */ + parentId: number; +} + +interface stateInfo { + ruleForm: EnterpriseInfo; + phoneSeconds: number; + expirySeconds: number; + captchaImage: string; + headers: { + Authorization: string; + }; + roleList: Array<RoleInfo>; + capsLockVisible: boolean; + code: string | null; + codeId: string | null; + checkedAgree: boolean; + rules: FormRules; + enterpriseList: Array<IndustryCategory>; +} + +export type { stateInfo }; diff --git a/src/views/register/index.vue b/src/views/register/index.vue index e904c46..d15b63e 100644 --- a/src/views/register/index.vue +++ b/src/views/register/index.vue @@ -319,13 +319,12 @@ register(state.ruleForm).then(res => { if (res?.code == 200) { router.replace("/RegisterSucess"); - return message("娉ㄥ唽鎴愬姛锛�", { type: "success" }); + message("娉ㄥ唽鎴愬姛锛�", { type: "success" }); } else { - return message(res?.message, { type: "warning" }); + message(res?.message, { type: "warning" }); } }); - } else if (!checked1.value) - return message("璇峰嬀閫夌敤鎴峰崗璁�", { type: "warning" }); + } else if (!checked1.value) message("璇峰嬀閫夌敤鎴峰崗璁�", { type: "warning" }); }); }; diff --git a/src/views/register/registersucess.vue b/src/views/register/registersucess.vue index 00cc63b..17eec75 100644 --- a/src/views/register/registersucess.vue +++ b/src/views/register/registersucess.vue @@ -38,6 +38,7 @@ <script setup> import { useRoute, useRouter } from "vue-router"; const router = useRouter(); +const route = useRoute(); defineOptions({ name: "RegisterSucess" @@ -47,7 +48,7 @@ }; // 鍘荤櫥褰� const toLogin = item => { - router.push({ name: "Login", query: item }); + router.replace({ path: "Login", query: route.query }); }; </script> <style lang="scss" scoped> diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue index c4b1105..e7225fb 100644 --- a/src/views/system/dept/index.vue +++ b/src/views/system/dept/index.vue @@ -230,10 +230,7 @@ <el-button type="primary" :loading="loading" @click="onSearch"> 鎼滅储 </el-button> - <el-button - :icon="useRenderIcon(Refresh)" - @click="resetForm(formRef)" - > + <el-button :icon="useRenderIcon(Refresh)" @click="resetForm"> 閲嶇疆 </el-button> <el-button type="primary" @click="openDialog()"> diff --git a/src/views/system/dept/utils/hook.tsx b/src/views/system/dept/utils/hook.tsx index 7e7a9d7..51e812e 100644 --- a/src/views/system/dept/utils/hook.tsx +++ b/src/views/system/dept/utils/hook.tsx @@ -286,7 +286,7 @@ console.log(`current page: ${val}`); } - function resetForm(formEl) { + function resetForm() { // if (!formEl) return; // formEl.resetFields(); // onSearch(); -- Gitblit v1.9.1