From 09a9c6c647a7c90d6f83663cddac68983b351209 Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期二, 03 六月 2025 16:42:17 +0800
Subject: [PATCH] 登录修改

---
 src/views/system/user/index.vue |   15 +++-
 src/api/login.js                |   37 ++++++++++++
 src/api/system/user.js          |    7 ++
 src/store/modules/user.js       |   31 +++++++++
 src/views/login.vue             |   69 +++++++++++++++++++---
 5 files changed, 142 insertions(+), 17 deletions(-)

diff --git a/src/api/login.js b/src/api/login.js
index 9f333cb..100d42f 100644
--- a/src/api/login.js
+++ b/src/api/login.js
@@ -57,4 +57,39 @@
     method: 'get',
     timeout: 20000
   })
-}
\ No newline at end of file
+}
+
+// 鐧诲綍鏍¢獙
+export function loginCheck(username, password) {
+  const data = {
+    username,
+    password
+  }
+  return request({
+    url: '/loginCheck',
+    headers: {
+      isToken: false,
+      repeatSubmit: false
+    },
+    method: 'post',
+    data: data
+  })
+}
+
+// 鐧诲綍鏂规硶
+export function loginCheckFactory(username, password, factoryId) {
+  const data = {
+    username,
+    password,
+    factoryId
+  }
+  return request({
+    url: '/loginCheckFactory',
+    headers: {
+      isToken: false,
+      repeatSubmit: false
+    },
+    method: 'post',
+    data: data
+  })
+}
diff --git a/src/api/system/user.js b/src/api/system/user.js
index 3a45768..5b5bb50 100644
--- a/src/api/system/user.js
+++ b/src/api/system/user.js
@@ -141,3 +141,10 @@
     method: 'get'
   })
 }
+// 閮ㄩ棬鍒楄〃
+export function userDeptList(userId) {
+  return request({
+    url: '/userDeptList/' + userId,
+    method: 'get',
+  })
+}
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 4b8734c..ba555bc 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -1,4 +1,4 @@
-import { login, logout, getInfo } from '@/api/login'
+import {login, logout, getInfo, loginCheck, loginCheckFactory} from '@/api/login'
 import { getToken, setToken, removeToken } from '@/utils/auth'
 import { isHttp, isEmpty } from "@/utils/validate"
 import defAva from '@/assets/images/profile.jpg'
@@ -70,7 +70,34 @@
             reject(error)
           })
         })
-      }
+      },
+      // 鐧诲綍鏍¢獙
+      loginCheck(userInfo) {
+        const username = userInfo.username.trim()
+        const password = userInfo.password
+        return new Promise((resolve, reject) => {
+          loginCheck(username, password).then(res => {
+            resolve(res)
+          }).catch(error => {
+            reject(error)
+          })
+        })
+      },
+      // 閮ㄩ棬鐧诲綍
+      loginCheckFactory(userInfo) {
+        const username = userInfo.username.trim()
+        const password = userInfo.password
+        const factoryId = userInfo.factoryId
+        return new Promise((resolve, reject) => {
+          loginCheckFactory(username, password, factoryId).then(res => {
+            setToken(res.token)
+            this.token = res.token
+            resolve()
+          }).catch(error => {
+            reject(error)
+          })
+        })
+      },
     }
   })
 
diff --git a/src/views/login.vue b/src/views/login.vue
index 437093e..1cc6cfd 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -59,6 +59,27 @@
       </el-form-item>
       <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">璁颁綇瀵嗙爜</el-checkbox>
     </el-form>
+    <el-dialog
+        v-model="modalView"
+        title="鐧诲綍閮ㄩ棬"
+        width="500"
+        :show-close="false">
+      <el-form :model="factoryCommitForm">
+        <el-form-item>
+          <el-select v-model="currentFatoryId">
+            <el-option  v-for="item in factoryList" :key="item.deptId" :label="item.deptName" :value="item.deptId" />
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="cancelLogin">鍙栨秷</el-button>
+          <el-button type="primary" @click="factoryCommit()">
+            纭
+          </el-button>
+        </div>
+      </template>
+    </el-dialog>
     <!--  搴曢儴  -->
 <!--    <div class="el-login-footer">-->
 <!--      <span>Copyright 漏 2018-2025 ruoyi.vip All Rights Reserved.</span>-->
@@ -67,10 +88,11 @@
 </template>
 
 <script setup>
-import { getCodeImg } from "@/api/login"
+import {getCodeImg, loginCheckFactory} from "@/api/login"
 import Cookies from "js-cookie"
 import { encrypt, decrypt } from "@/utils/jsencrypt"
 import useUserStore from '@/store/modules/user'
+import {userDeptList} from "@/api/system/user.js"
 
 const title = import.meta.env.VITE_APP_TITLE
 const userStore = useUserStore()
@@ -86,6 +108,10 @@
   uuid: ""
 })
 
+const factoryCommitForm = ref({
+  deptId:''
+})
+
 const loginRules = {
   username: [{ required: true, trigger: "blur", message: "璇疯緭鍏ユ偍鐨勮处鍙�" }],
   password: [{ required: true, trigger: "blur", message: "璇疯緭鍏ユ偍鐨勫瘑鐮�" }],
@@ -99,6 +125,11 @@
 // 娉ㄥ唽寮�鍏�
 const register = ref(false)
 const redirect = ref(undefined)
+
+const modalView = ref(false)
+
+const factoryList = ref([])
+const currentFatoryId = ref('')
 
 watch(route, (newRoute) => {
     redirect.value = newRoute.query && newRoute.query.redirect
@@ -120,15 +151,13 @@
         Cookies.remove("rememberMe")
       }
       // 璋冪敤action鐨勭櫥褰曟柟娉�
-      userStore.login(loginForm.value).then(() => {
-        const query = route.query
-        const otherQueryParams = Object.keys(query).reduce((acc, cur) => {
-          if (cur !== "redirect") {
-            acc[cur] = query[cur]
-          }
-          return acc
-        }, {})
-        router.push({ path: redirect.value || "/", query: otherQueryParams })
+      userStore.loginCheck(loginForm.value).then(res => {
+        // 鏌ヨ鐢ㄦ埛閮ㄩ棬
+        userDeptList(res.data).then(res => {
+          factoryList.value = res.data
+          modalView.value = true
+        })
+
       }).catch(() => {
         loading.value = false
         // 閲嶆柊鑾峰彇楠岃瘉鐮�
@@ -137,6 +166,21 @@
         }
       })
     }
+  })
+}
+
+// 褰撳墠鐧诲綍鍏徃/閮ㄩ棬纭
+function factoryCommit(){
+  loginForm.value.factoryId = currentFatoryId.value
+  userStore.loginCheckFactory(loginForm.value).then(res => {
+    const query = route.query
+    const otherQueryParams = Object.keys(query).reduce((acc, cur) => {
+      if (cur !== "redirect") {
+        acc[cur] = query[cur]
+      }
+      return acc
+    }, {})
+    router.push({ path: redirect.value || "/", query: otherQueryParams })
   })
 }
 
@@ -161,6 +205,11 @@
   }
 }
 
+function cancelLogin() {
+  modalView.value = false
+  loading.value = false
+}
+
 getCode()
 getCookie()
 </script>
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index a43d890..4120fc3 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -61,7 +61,7 @@
               <el-table-column label="鐢ㄦ埛缂栧彿" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
               <el-table-column label="鐧诲綍璐﹀彿" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
               <el-table-column label="鐢ㄦ埛鏄电О" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
-              <el-table-column label="閮ㄩ棬" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
+              <el-table-column label="閮ㄩ棬" align="center" key="deptNames" prop="deptNames" v-if="columns[3].visible" :show-overflow-tooltip="true" />
               <el-table-column label="鎵嬫満鍙风爜" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
               <el-table-column label="鐘舵��" align="center" key="status" v-if="columns[5].visible">
                 <template #default="scope">
@@ -111,8 +111,14 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="褰掑睘鍏徃" prop="deptId">
-              <el-tree-select v-model="form.deptId" :data="enabledDeptOptions" :props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="璇烽�夋嫨褰掑睘鍏徃" check-strictly />
+            <el-form-item label="褰掑睘鍏徃" prop="deptIds">
+              <el-tree-select
+                  v-model="form.deptIds"
+                  :data="enabledDeptOptions"
+                  :render-after-expand="false"
+                  show-checkbox
+                  multiple
+                  placeholder="璇烽�夋嫨褰掑睘鍏徃" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -280,7 +286,7 @@
   rules: {
     userName: [{ required: true, message: "鐧诲綍璐﹀彿涓嶈兘涓虹┖", trigger: "blur" }, { min: 2, max: 20, message: "鐧诲綍璐﹀彿闀垮害蹇呴』浠嬩簬 2 鍜� 20 涔嬮棿", trigger: "blur" }],
     nickName: [{ required: true, message: "鐢ㄦ埛鏄电О涓嶈兘涓虹┖", trigger: "blur" }],
-    deptId: [{ required: true, message: "鍏徃涓嶈兘涓虹┖", trigger: "change" }],
+    deptIds: [{ required: true, message: "鍏徃涓嶈兘涓虹┖", trigger: "change" }],
     password: [{ required: true, message: "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" }, { min: 5, max: 20, message: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿", trigger: "blur" }, { pattern: /^[^<>"'|\\]+$/, message: "涓嶈兘鍖呭惈闈炴硶瀛楃锛�< > \" ' \\\ |", trigger: "blur" }],
     email: [{ type: "email", message: "璇疯緭鍏ユ纭殑閭鍦板潃", trigger: ["blur", "change"] }],
     phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜", trigger: "blur" }]
@@ -507,6 +513,7 @@
     roleOptions.value = response.roles
     form.value.postIds = response.postIds
     form.value.roleIds = response.roleIds
+    form.value.deptIds = response.deptIds
     open.value = true
     title.value = "淇敼鐢ㄦ埛"
     form.password = ""

--
Gitblit v1.9.3