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 |  256 +++++++++++++++++++++++++++++++-------------------
 1 files changed, 157 insertions(+), 99 deletions(-)

diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index 34e2230..f79d52d 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,15 +7,26 @@
   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";
+import {
+  ElForm,
+  ElFormItem,
+  ElRadioGroup,
+  ElRadio,
+  ElRow,
+  ElTag,
+  ElCol
+} from "element-plus";
 import { useLayout } from "@/layout/hooks/useLayout";
 import { useUserStoreHook } from "@/store/modules/user";
 import { initRouter, getTopMenu } from "@/router/utils";
@@ -25,11 +36,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 +62,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,50 +119,22 @@
   expirySeconds: 60, // 楠岃瘉鐮佽繃鏈熸椂闂�
   phoneSeconds: 0, // 鎵嬫満楠岃瘉鐮佸�掕鏃�
   roleList: [],
+  myEnterpriseList: [],
   nowRole: {}
 });
+let secondCode = "";
+let secondId: Ref<string | number | boolean> = ref("");
 // 楠岃瘉鐮佽繃鏈熻鏃跺櫒
 let timer: any = null;
 let phonetimer: any = null;
 
 // 椤甸潰鍒濆鍖�
 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;
-    } 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 +144,125 @@
   clearInterval(phonetimer);
   phonetimer = null;
 });
+const openDialog = () => {
+  addDialog({
+    width: "30%",
+    title: "閫夋嫨鐧诲綍鍏徃",
+    contentRenderer: () =>
+      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 }) => {
+      if (args?.command === "cancel") {
+        // 鎮ㄧ偣鍑讳簡鍙栨秷鎸夐挳
+      } else if (args?.command === "sure") {
+        let obj = {
+          phone: state.ruleForm.phone,
+          code: secondCode,
+          id: secondId.value
+        };
+        useUserStoreHook()
+          .loginByUsername(obj)
+          .then(res => {
+            if (res?.code == 200) {
+              message("鐧诲綍鎴愬姛锛�", { type: "success" });
+              router.replace({
+                path: "/Index"
+              });
+            } else {
+              message(res?.message, { type: "warning" });
+            }
+          });
+      } else {
+      }
+    }
+  });
+};
+
+// 鐐瑰嚮鐧诲綍
 const onLogin = async (formEl: FormInstance | undefined) => {
   if (!formEl) return;
   await formEl.validate(valid => {
@@ -176,44 +279,35 @@
           if (res.code == 200) {
             // 鑾峰彇鍚庣璺敱
             return initRouter().then(() => {
-              if (res.result.exRoles.length == 0) {
-                disabled.value = true;
+              let obj = res.result;
+              if (obj.theLastLogo) {
                 router
                   .replace({
-                    name: "RegisterNav",
-                    query: { code: state.ruleForm.exRoleCode }
+                    path: "/Index"
                   })
                   .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");
-                }
+              } else {
+                state.myEnterpriseList = obj.customerExs;
+                secondCode = obj.code;
+                openDialog();
               }
-              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" });
@@ -251,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
@@ -279,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="[
@@ -343,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">
@@ -366,7 +424,7 @@
                       <span
                         id="suffix-span-2"
                         ref="spanRef"
-                        @click="sendValidationCode(state.ruleForm.phone)"
+                        @click="sendValidationCode"
                       >
                         鑾峰彇楠岃瘉鐮�
                       </span>

--
Gitblit v1.9.1