瀏覽代碼

Merge remote-tracking branch 'origin/master'

gt 2 年之前
父節點
當前提交
f10db479c9

+ 20 - 2
chuanyi-admin/src/api/system/menu.js

@@ -57,7 +57,7 @@ export function getTreeMenuList(query) {
 // 分配菜单接口权限
 export function distMenuAuth(data) {
   return request({
-    url: '/menu/assignMenuAndPermission',
+    url: '/menu/addMenuAndPermission',
     method: 'post',
     data
   })
@@ -75,8 +75,26 @@ export function getAllAuthApi(query) {
 // 取消菜单对应权限
 export function delMenuAuth(data) {
   return request({
-    url: '/menu/deleteMenuPermission',
+    url: '/menu/deleteMenuAndPermission',
     method: 'post',
     data
   })
 }
+
+// 查询已分配菜单权限列表
+export function getMenuAuthList(query) {
+  return request({
+    url: '/menu/queryPermission',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询未分配菜单权限列表
+export function getNotMenuAuthList(query) {
+  return request({
+    url: '/menu/queryNotPermission',
+    method: 'get',
+    params: query
+  })
+}

+ 1 - 1
chuanyi-admin/src/api/system/role.js

@@ -52,7 +52,7 @@ export function delRoleById(data) {
   })
 }
 
-// 通过角色查询拥有的菜单信息
+// 通过角色查询拥有的菜单信息
 export function getMenuListByRoleId(data) {
   return request({
     url: '/role/getMenuListByRoleList',

+ 3 - 0
chuanyi-admin/src/layout/components/Navbar.vue

@@ -48,6 +48,7 @@
               :type="passwordType1"
               style="width:300px"
               auto-complete="new-password"
+              maxlength="20"
             />
             <span class="show-pwd" @click="showPwd(1)">
               <svg-icon :icon-class="passwordType1 === 'password' ? 'eye' : 'eye-open'" />
@@ -60,6 +61,7 @@
               placeholder="请输入新密码"
               :type="passwordType2"
               style="width:300px"
+              maxlength="20"
             />
             <span class="show-pwd" @click="showPwd(2)">
               <svg-icon :icon-class="passwordType2 === 'password' ? 'eye' : 'eye-open'" />
@@ -72,6 +74,7 @@
               placeholder="请再次输入新密码"
               :type="passwordType3"
               style="width:300px"
+              maxlength="20"
             />
             <span class="show-pwd" @click="showPwd(3)">
               <svg-icon :icon-class="passwordType3 === 'password' ? 'eye' : 'eye-open'" />

+ 1 - 1
chuanyi-admin/src/router/index.js

@@ -126,7 +126,7 @@ export const constantRoutes = [
         path: 'auth/:userId(\\d+)',
         component: () => import('@/views/system/menu/menu-auth'),
         name: 'MenuAuth',
-        meta: { title: '分配接口', activeMenu: '/system/menu' }
+        meta: { title: '分配权限', activeMenu: '/system/menu' }
       }
     ]
   }

+ 8 - 1
chuanyi-admin/src/views/system/dept/index.vue

@@ -42,7 +42,7 @@
           <el-table-column
             key="departmentName"
             label="部门名称"
-            align="center"
+            header-align="center"
             prop="departmentName"
             show-overflow-tooltip
           />
@@ -342,6 +342,13 @@ export default {
             })
           } else {
             this.form.id = this.id
+            if (this.form.id === this.form.parentId) {
+              this.$message({
+                message: '不可选择与自身相同的上级菜单',
+                type: 'warning'
+              })
+              return
+            }
             editDept(this.form).then(res => {
               if (res.code === 200) {
                 this.$message({

+ 5 - 5
chuanyi-admin/src/views/system/dict/dict-detail.vue

@@ -48,9 +48,9 @@
           @selection-change="handleSelectionChange"
         >
           <el-table-column type="selection" width="50" align="center" />
-          <el-table-column key="dictKey" label="字典名称" align="center" prop="dictKey" />
-          <el-table-column key="dictValue" label="字典值" align="center" prop="dictValue" />
-          <el-table-column key="sortNum" label="排序号" align="center" prop="sortNum" />
+          <el-table-column key="dictKey" label="字典名称" header-align="center" prop="dictKey" show-overflow-tooltip />
+          <el-table-column key="dictValue" label="字典值" align="center" prop="dictValue" show-overflow-tooltip />
+          <el-table-column key="sortNum" label="排序号" align="center" prop="sortNum" show-overflow-tooltip />
           <el-table-column label="操作" align="center" width="250" class-name="small-padding fixed-width">
             <template slot-scope="scope">
               <el-button size="mini" type="text" icon="el-icon-edit" @click="handelEdit(scope.row)">修改
@@ -164,10 +164,10 @@ export default {
       // 表单验证
       rules: {
         dictValue: [
-          { required: true, message: '字典名称不能为空', trigger: 'blur' }
+          { required: true, message: '字典不能为空', trigger: 'blur' }
         ],
         dictKey: [
-          { required: true, message: '字典不能为空', trigger: 'blur' }
+          { required: true, message: '字典名称不能为空', trigger: 'blur' }
         ],
         sortNum: [
           { required: true, trigger: 'blur', validator: sortNumRule }

+ 1 - 1
chuanyi-admin/src/views/system/dict/index.vue

@@ -46,7 +46,7 @@
           <el-table-column key="dictKeyType" label="字典类型" align="center" prop="dictKeyType" />
           <el-table-column key="dictKeyValue" label="字典值" align="center" prop="dictKeyValue">
             <template slot-scope="scope">
-              <el-link type="primary" @click="hendelTo(scope.row)">{{ scope.row.dictKeyValue }}</el-link>
+              <el-link type="primary" :underline="false" @click="hendelTo(scope.row)">{{ scope.row.dictKeyValue }}</el-link>
             </template>
           </el-table-column>
           <el-table-column key="sortNum" label="排序号" align="center" prop="sortNum" />

+ 28 - 7
chuanyi-admin/src/views/system/menu/index.vue

@@ -32,12 +32,26 @@
           header-row-class-name="headBackground"
         >
           <el-table-column type="index" width="50" label="序号" align="center" />
-          <el-table-column key="menuName" label="菜单名称" align="center" prop="menuName" />
-          <el-table-column key="menuIcon" label="菜单图标" align="center" prop="menuIcon" />
-          <el-table-column key="menuUrl" label="路由地址" align="center" prop="menuUrl" />
-          <el-table-column key="sortNum" label="排序号" align="center" prop="sortNum" />
-          <el-table-column key="createTime" label="创建时间" align="center" prop="createTime" width="160" />
-          <el-table-column key="updateTime" label="更新时间" align="center" prop="updateTime" width="160">
+          <el-table-column key="menuName" label="菜单名称" header-align="center" prop="menuName" show-overflow-tooltip />
+          <el-table-column key="menuIcon" label="菜单图标" prop="menuIcon" align="center" show-overflow-tooltip />
+          <el-table-column key="menuUrl" label="路由地址" prop="menuUrl" align="center" show-overflow-tooltip />
+          <el-table-column key="sortNum" label="排序号" prop="sortNum" align="center" show-overflow-tooltip />
+          <el-table-column
+            key="createTime"
+            label="创建时间"
+            prop="createTime"
+            align="center"
+            width="160"
+            show-overflow-tooltip
+          />
+          <el-table-column
+            key="updateTime"
+            label="更新时间"
+            prop="updateTime"
+            align="center"
+            width="160"
+            show-overflow-tooltip
+          >
             <template slot-scope="scope">
               {{ scope.row.updateTime === null ? scope.row.createTime : scope.row.updateTime }}
             </template>
@@ -48,7 +62,7 @@
               </el-button>
               <el-button size="mini" type="text" icon="el-icon-delete" @click="handelDel(scope.row.id)">删除
               </el-button>
-              <el-button size="mini" type="text" icon="el-icon-zoom-in" @click="handelAuth(scope.row.id)">分配接口
+              <el-button size="mini" type="text" icon="el-icon-zoom-in" @click="handelAuth(scope.row.id)">分配权限
               </el-button>
             </template>
           </el-table-column>
@@ -273,6 +287,13 @@ export default {
             })
           } else {
             this.form.id = this.id
+            if (this.form.id === this.form.parentId) {
+              this.$message({
+                message: '不能选择自身为上级菜单',
+                type: 'warning'
+              })
+              return
+            }
             editMenuList(this.form).then(res => {
               if (res.code === 200) {
                 this.$message({

+ 8 - 9
chuanyi-admin/src/views/system/menu/menu-auth.vue

@@ -29,9 +29,8 @@
       @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="接口名称" prop="permissionUrl" :show-overflow-tooltip="true" align="center" />
-      <el-table-column label="备注" prop="permissionName" :show-overflow-tooltip="true" align="center" />
-      <el-table-column label="来源" prop="menuName" :show-overflow-tooltip="true" align="center" />
+      <el-table-column label="权限名称" prop="permissionName" :show-overflow-tooltip="true" align="center" />
+      <el-table-column label="权限路径" prop="permissionUrl" :show-overflow-tooltip="true" align="center" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -60,7 +59,7 @@
 </template>
 
 <script>
-import { getTreeMenuList, delMenuAuth } from '@/api/system/menu'
+import { delMenuAuth, getMenuAuthList } from '@/api/system/menu'
 import menuDist from './menu-dist.vue'
 export default {
   name: 'MenuAuth',
@@ -81,7 +80,7 @@ export default {
       queryParams: {
         page: 1,
         num: 10,
-        id: null
+        menuId: null
       },
       // 取消分配菜单权限参数
       delMenuAuthObj: {
@@ -93,15 +92,15 @@ export default {
   created() {
     const userId = this.$route.params.userId
     if (userId) {
-      this.queryParams.id = userId
+      this.queryParams.menuId = userId
       this.getTreeMenuList()
     }
     this.delMenuAuthObj.permissionList = []
   },
   methods: {
-    /** 获取父级及自己所有菜单权限接口 */
+    /** 查询已有菜单权限列表 */
     getTreeMenuList() {
-      getTreeMenuList(this.queryParams).then(res => {
+      getMenuAuthList(this.queryParams).then(res => {
         const data = res.data
         this.authList = data.permissionList
         this.total = data.count
@@ -164,7 +163,7 @@ export default {
     /** 取消分配菜单权限接口 */
     delMenuAuth() {
       this.queryParams.page = 1
-      this.delMenuAuthObj.id = this.queryParams.id
+      this.delMenuAuthObj.id = this.$route.params.userId
       delMenuAuth(this.delMenuAuthObj).then(res => {
         if (res.code === 200) {
           this.getTreeMenuList()

+ 6 - 4
chuanyi-admin/src/views/system/menu/menu-dist.vue

@@ -57,14 +57,15 @@
 </template>
 
 <script>
-import { getAllAuthApi, distMenuAuth } from '@/api/system/menu'
+import { distMenuAuth, getNotMenuAuthList } from '@/api/system/menu'
 export default {
   data() {
     return {
       // 所有权限接口查询参数
       allAuthQuery: {
         page: 1,
-        limit: 10
+        num: 10,
+        menuId: null
       },
       // 分配菜单权限参数
       menuAuthObj: {
@@ -85,13 +86,14 @@ export default {
   },
   created() {
     if (this.$route.params.userId) {
+      this.allAuthQuery.menuId = this.$route.params.userId
       this.menuAuthObj.id = this.$route.params.userId
     }
   },
   methods: {
-    /** 查看所有权限接口 */
+    /** 查看未有权限接口列表 */
     getAllAuthApi() {
-      getAllAuthApi(this.allAuthQuery).then(res => {
+      getNotMenuAuthList(this.allAuthQuery).then(res => {
         const data = res.data
         this.addMenuAuthList = data.permissionList
         this.addTotal = data.count

+ 1 - 1
chuanyi-admin/src/views/system/role/index.vue

@@ -256,7 +256,7 @@ export default {
         if (res.code === 200) {
           if (!res.data.count) {
             this.$message({
-              message: '该菜单被角色权限绑定,无法删除',
+              message: '该角色被菜单权限绑定,无法删除',
               type: 'warning'
             })
           } else {

+ 1 - 1
chuanyi-admin/src/views/system/role/user-auth.vue

@@ -137,7 +137,7 @@ export default {
       //     result = e.name
       //   }
       // })
-      val === 0 ? result = '客户端用户' : result = '管理用户'
+      val === 0 ? result = '客户端用户' : result = '管理用户'
       return result
     },
     /** 查询授权用户列表 */

+ 20 - 11
chuanyi-admin/src/views/system/role/user-menu.vue

@@ -2,7 +2,7 @@
   <div class="app-container">
     <el-row :gutter="10" class="mb8 czBtns">
       <el-col :span="1.5">
-        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handelAdd">添加菜单</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handelAdd">添加菜单权限</el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
@@ -31,11 +31,11 @@
       @selection-change="handelDelDist"
     >
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="菜单名称" prop="menuName" :show-overflow-tooltip="true" />
-      <el-table-column label="菜单图标" prop="menuIcon" :show-overflow-tooltip="true" />
-      <el-table-column label="菜单路径" prop="menuUrl" :show-overflow-tooltip="true" />
-      <el-table-column label="更新时间" prop="updateTime" :show-overflow-tooltip="true" />
-      <el-table-column label="创建时间" prop="createTime" :show-overflow-tooltip="true" />
+      <el-table-column label="菜单名称" prop="menuName" header-align="center" show-overflow-tooltip />
+      <el-table-column label="菜单图标" prop="menuIcon" align="center" show-overflow-tooltip />
+      <el-table-column label="菜单路径" prop="menuUrl" align="center" show-overflow-tooltip />
+      <el-table-column label="更新时间" prop="updateTime" align="center" show-overflow-tooltip />
+      <el-table-column label="创建时间" prop="createTime" align="center" show-overflow-tooltip />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button type="text" size="mini" :disabled="!celDistribution" @click="delMenu(scope.row.id)"><i
@@ -46,7 +46,7 @@
       </el-table-column>
     </el-table>
 
-    <el-dialog title="分配菜单" :visible.sync="dialogVisible" width="800px" :close-on-click-modal="false">
+    <el-dialog title="添加菜单权限" :visible.sync="dialogVisible" width="800px" :close-on-click-modal="false">
       <el-row class="czBtns">
         <el-col>
           <el-button type="primary" plain icon="el-icon-plus" size="mini" :disabled="distribution" @click="handleDel">
@@ -61,14 +61,15 @@
         border
         stripe
         header-row-class-name="headBackground"
+        :expand-row-keys="defaultExpend"
         @selection-change="handelAddDist"
         @select="select"
         @select-all="selectAll"
       >
         <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="菜单名称" prop="menuName" :show-overflow-tooltip="true" />
-        <el-table-column label="菜单图标" prop="menuIcon" :show-overflow-tooltip="true" />
-        <el-table-column label="菜单路径" prop="menuUrl" :show-overflow-tooltip="true" />
+        <el-table-column label="菜单名称" prop="menuName" header-align="center" show-overflow-tooltip />
+        <el-table-column label="菜单图标" prop="menuIcon" align="center" show-overflow-tooltip />
+        <el-table-column label="菜单路径" prop="menuUrl" align="center" show-overflow-tooltip />
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template slot-scope="scope">
             <el-button
@@ -97,6 +98,8 @@ export default {
       loading: true,
       // 弹出框表格加载状态
       distLoading: true,
+      // 角色ID
+      roleId: null,
       // 分配菜单参数
       distObj: {
         id: this.$route.params.userId,
@@ -118,10 +121,13 @@ export default {
       // 禁用分配
       distribution: true,
       // 全选按钮选中所有节点
-      isSelectAll: false
+      isSelectAll: false,
+      // 默认展开行
+      defaultExpend: []
     }
   },
   created() {
+    this.roleId = this.$route.params.userId
     this.getList()
   },
   methods: {
@@ -146,6 +152,9 @@ export default {
         })
         this.addMenuList = data
         this.distLoading = false
+        this.$nextTick(() => {
+          this.defaultExpend = []
+        })
       })
     },
     /** 返回按钮 */

+ 24 - 9
chuanyi-admin/src/views/system/user/index.vue

@@ -108,26 +108,37 @@
     <el-dialog
       :title="title"
       :visible.sync="open"
-      width="600px"
+      width="500px"
       style="margin-top:15vh"
       append-to-body
       :close-on-click-modal="false"
     >
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-row>
-          <el-col :span="12">
+        <el-row style="margin-bottom:10px">
+          <el-col>
             <el-form-item label="用户名称" prop="userName">
               <el-input
                 v-if="form.userId == undefined"
                 v-model="form.userName"
                 placeholder="请输入用户名称"
                 maxlength="20"
+                style="width:300px"
+                minlength="2"
+              />
+              <el-input
+                v-else
+                v-model="form.userName"
+                placeholder="请输入用户名称"
+                maxlength="20"
                 minlength="2"
+                disabled
+                style="width:300px"
               />
-              <el-input v-else v-model="form.userName" placeholder="请输入用户名称" maxlength="20" minlength="2" readonly />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+        </el-row>
+        <el-row style="margin-bottom:10px">
+          <el-col>
             <el-form-item v-if="form.userId == undefined" label="用户密码" prop="password">
               <el-input
                 ref="password"
@@ -136,6 +147,7 @@
                 :type="passwordType"
                 maxlength="20"
                 auto-complete="new-password"
+                style="width:300px"
               />
               <span class="show-pwd" @click="showPwd">
                 <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
@@ -144,14 +156,14 @@
           </el-col>
         </el-row>
         <el-row>
-          <el-col :span="12">
+          <el-col>
             <el-form-item label="用户类型" prop="userType">
               <el-select v-model="form.userType" placeholder="请选择用户类型">
                 <el-option v-for="dict in userType" :key="dict.value" :label="dict.name" :value="dict.value" />
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col>
             <el-form-item v-if="form.userId != undefined" label="用户状态">
               <el-radio-group v-model="form.state">
                 <el-radio v-for="dict in userStatus" :key="dict.value" :label="dict.value">{{ dict.name }}</el-radio>
@@ -345,6 +357,10 @@ export default {
             delUserById({
               'userId': id
             }).then(response => {
+              this.$message({
+                message: '删除成功',
+                type: 'success'
+              })
               this.getUserList()
             })
           }
@@ -505,12 +521,11 @@ export default {
 <style rel="stylesheet/scss" lang="scss">
 .show-pwd {
   position: absolute;
-  right: 10px;
+  right: 90px;
   top: 1px;
   font-size: 16px;
   color: #889aa4;
   cursor: pointer;
   user-select: none;
 }
-
 </style>