Ver Fonte

:zap: 多部门多角色用户在登录时增加下拉选项

smallchill há 4 anos atrás
pai
commit
8f06427538
3 ficheiros alterados com 102 adições e 5 exclusões
  1. 3 1
      src/api/user.js
  2. 98 3
      src/page/login/userlogin.vue
  3. 1 1
      src/store/modules/user.js

+ 3 - 1
src/api/user.js

@@ -1,11 +1,13 @@
 import request from '@/router/axios';
 import website from "@/config/website";
 
-export const loginByUsername = (tenantId, username, password, type, key, code) => request({
+export const loginByUsername = (tenantId, deptId, roleId, username, password, type, key, code) => request({
   url: '/api/blade-auth/oauth/token',
   method: 'post',
   headers: {
     'Tenant-Id': tenantId,
+    'Dept-Id': deptId,
+    'Role-Id': roleId,
     'Captcha-Key': key,
     'Captcha-Code': code,
   },

+ 98 - 3
src/page/login/userlogin.vue

@@ -60,6 +60,12 @@
                  class="login-submit">{{$t('login.submit')}}
       </el-button>
     </el-form-item>
+    <el-dialog title="用户信息选择"
+               append-to-body
+               :visible.sync="userBox"
+               width="350px">
+      <avue-form :option="userOption" v-model="userForm" @submit="submitLogin"/>
+    </el-dialog>
   </el-form>
 </template>
 
@@ -77,6 +83,10 @@
         loginForm: {
           //租户ID
           tenantId: "000000",
+          //部门ID
+          deptId: "",
+          //角色ID
+          roleId: "",
           //用户名
           username: "admin",
           //密码
@@ -102,7 +112,54 @@
             {min: 1, message: "密码长度最少为6位", trigger: "blur"}
           ]
         },
-        passwordType: "password"
+        passwordType: "password",
+        userBox: false,
+        userForm: {
+          deptId: '',
+          roleId: ''
+        },
+        userOption: {
+          labelWidth: 70,
+          submitBtn: true,
+          emptyBtn: false,
+          submitText: '登录',
+          column: [
+            {
+              label: '部门',
+              prop: 'deptId',
+              type: 'select',
+              props: {
+                label: 'deptName',
+                value: 'id'
+              },
+              dicUrl: '/api/blade-system/dept/select',
+              span: 24,
+              display: false,
+              rules: [{
+                required: true,
+                message: "请选择部门",
+                trigger: "blur"
+              }],
+            },
+            {
+              label: '角色',
+              prop: 'roleId',
+              type: 'select',
+              props: {
+                label: 'roleName',
+                value: 'id'
+              },
+              dicUrl: '/api/blade-system/role/select',
+              span: 24,
+              display: false,
+              rules: [{
+                required: true,
+                message: "请选择角色",
+                trigger: "blur"
+              }],
+            },
+          ]
+        }
       };
     },
     created() {
@@ -111,8 +168,28 @@
     },
     mounted() {
     },
+    watch: {
+      'loginForm.deptId'() {
+        const column = this.findObject(this.userOption.column, "deptId");
+        if (this.loginForm.deptId.includes(",")) {
+          column.dicUrl = `/api/blade-system/dept/select?deptId=${this.loginForm.deptId}`;
+          column.display = true;
+        } else {
+          column.dicUrl = '';
+        }
+      },
+      'loginForm.roleId'() {
+        const column = this.findObject(this.userOption.column, "roleId");
+        if (this.loginForm.roleId.includes(",")) {
+          column.dicUrl = `/api/blade-system/role/select?roleId=${this.loginForm.roleId}`;
+          column.display = true;
+        } else {
+          column.dicUrl = '';
+        }
+      }
+    },
     computed: {
-      ...mapGetters(["tagWel"])
+      ...mapGetters(["tagWel", "userInfo"])
     },
     props: [],
     methods: {
@@ -130,6 +207,16 @@
           ? (this.passwordType = "password")
           : (this.passwordType = "");
       },
+      submitLogin (form, done) {
+        if (form.deptId !== '') {
+          this.loginForm.deptId = form.deptId;
+        }
+        if (form.roleId !== '') {
+          this.loginForm.roleId = form.roleId;
+        }
+        this.handleLogin();
+        done();
+      },
       handleLogin() {
         this.$refs.loginForm.validate(valid => {
           if (valid) {
@@ -139,7 +226,15 @@
               spinner: "el-icon-loading"
             });
             this.$store.dispatch("LoginByUsername", this.loginForm).then(() => {
-              this.$router.push({path: this.tagWel.value});
+              const deptId = this.userInfo.dept_id;
+              const roleId = this.userInfo.role_id;
+              if (deptId.includes(",") || roleId.includes(",")) {
+                this.loginForm.deptId = deptId;
+                this.loginForm.roleId = roleId;
+                this.userBox = true;
+              } else {
+                this.$router.push({path: this.tagWel.value});
+              }
               loading.close();
             }).catch(() => {
               loading.close();

+ 1 - 1
src/store/modules/user.js

@@ -48,7 +48,7 @@ const user = {
     //根据用户名登录
     LoginByUsername({commit}, userInfo) {
       return new Promise((resolve, reject) => {
-        loginByUsername(userInfo.tenantId, userInfo.username, md5(userInfo.password), userInfo.type, userInfo.key, userInfo.code).then(res => {
+        loginByUsername(userInfo.tenantId, userInfo.deptId, userInfo.roleId, userInfo.username, md5(userInfo.password), userInfo.type, userInfo.key, userInfo.code).then(res => {
           const data = res.data;
           if (data.error_description) {
             Message({