From 85c54d88f139096614aea4b06f2166cae27729d7 Mon Sep 17 00:00:00 2001 From: zhangwei <1504152376@qq.com> Date: 星期五, 22 八月 2025 10:11:19 +0800 Subject: [PATCH] 用户管理 --- src/views/login/index.vue | 305 ++++++++++++++++++-------------------------------- 1 files changed, 109 insertions(+), 196 deletions(-) diff --git a/src/views/login/index.vue b/src/views/login/index.vue index 53092d3..f79d52d 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -7,13 +7,14 @@ reactive, computed, ref, + Ref, h, onMounted, defineAsyncComponent, onUnmounted, watch } from "vue"; -import { debounce } from "@pureadmin/utils"; +import { debounce, storageLocal } from "@pureadmin/utils"; import { useNav } from "@/layout/hooks/useNav"; import { useEventListener } from "@vueuse/core"; import type { FormInstance } from "element-plus"; @@ -23,7 +24,8 @@ ElRadioGroup, ElRadio, ElRow, - ElTag + ElTag, + ElCol } from "element-plus"; import { useLayout } from "@/layout/hooks/useLayout"; import { useUserStoreHook } from "@/store/modules/user"; @@ -120,6 +122,8 @@ myEnterpriseList: [], nowRole: {} }); +let secondCode = ""; +let secondId: Ref<string | number | boolean> = ref(""); // 楠岃瘉鐮佽繃鏈熻鏃跺櫒 let timer: any = null; let phonetimer: any = null; @@ -127,18 +131,6 @@ // 椤甸潰鍒濆鍖� 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; @@ -157,131 +149,108 @@ 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"锛� + h( + ElForm, + { + ref: ruleFormRef, + model: state.ruleForm, + rules: loginRules, + size: "large" + }, + { + default: () => { + return [ + h( + ElFormItem, + { prop: "exRoleCode", label: "" }, + { + default: () => { + return [ + h( + ElRadioGroup, + { + modelValue: secondId.value, + "onUpdate:modelValue": val => (secondId.value = val) + }, + // ElRadioGroup 鐨勫唴瀹规槸寰幆鐢熸垚鐨勶紝鐢ㄥ嚱鏁板寘瑁� + () => + state.myEnterpriseList.map(item => + h( + ElRow, + { style: { width: "100%" } }, + { + default: () => { + return [ + h( + ElCol, + { span: 24 }, + { + default: () => { + return [ + h( + ElRadio, + { + key: item.customerUserID, + value: item.customerUserID + }, + // ElRadio 鐨勫唴瀹规槸鍔ㄦ�佺殑锛岀敤鍑芥暟鍖呰9 + () => [ + // 鏂囨湰鐩存帴杩斿洖锛堜笉瑕佸祵濂楀嚱鏁帮級 + item.enterpriseName, + item.isManger + ? h( + ElTag, + { + type: "primary", + size: "small", + style: { + marginLeft: "8px", + alignSelf: "center" + } + }, + // ElTag 鐨勫唴瀹规槸闈欐�佹枃鏈紝鐩存帴杩斿洖 + { + default: () => "绠$悊鍛�" + } + ) + : null + ] + ) + ]; + } + } + ) + ]; + } + } + ) + ) + ) + ]; + } + } + ) + ]; + } + } + ), + // 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 + code: secondCode, + id: secondId.value }; useUserStoreHook() .loginByUsername(obj) .then(res => { if (res?.code == 200) { - message("娉ㄥ唽鎴愬姛锛�", { type: "success" }); + message("鐧诲綍鎴愬姛锛�", { type: "success" }); router.replace({ - path: "/RegisterSucess", - query: { - code: obj.exRoleCode - } + path: "/Index" }); } else { message(res?.message, { type: "warning" }); @@ -292,6 +261,8 @@ } }); }; + +// 鐐瑰嚮鐧诲綍 const onLogin = async (formEl: FormInstance | undefined) => { if (!formEl) return; await formEl.validate(valid => { @@ -312,7 +283,7 @@ if (obj.theLastLogo) { router .replace({ - name: "Index" + path: "/Index" }) .then(() => { message("鐧诲綍鎴愬姛", { type: "success" }); @@ -320,45 +291,23 @@ .finally(() => (disabled.value = false)); } else { state.myEnterpriseList = obj.customerExs; + secondCode = obj.code; openDialog(); } - 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; - }); - - 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)); + .finally(() => { + loading.value = false; + disabled.value = false; + }); } }); }; + +// 鍙戦�佹墜鏈洪獙璇佺爜 const sendValidationCode = async () => { if (!state.ruleForm.phone) { return message("璇峰厛杈撳叆鎵嬫満鍙�", { type: "warning" }); @@ -396,26 +345,12 @@ <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="img" /> <div class="login-box"> <div class="login-form"> - <!-- <avatar class="avatar" /> --> <Motion> - <h2 class="logintitle">{{ state.nowRole.name }}鐧诲綍</h2> + <h2 class="logintitle">鐧诲綍</h2> </Motion> <el-form @@ -424,18 +359,6 @@ :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="[ @@ -488,16 +411,6 @@ </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"> @@ -511,7 +424,7 @@ <span id="suffix-span-2" ref="spanRef" - @click="sendValidationCode(state.ruleForm.phone)" + @click="sendValidationCode" > 鑾峰彇楠岃瘉鐮� </span> -- Gitblit v1.9.1