zhuliu 9 kuukautta sitten
vanhempi
commit
f94a32e60d

+ 0 - 24
src/api/admin.js

@@ -1,33 +1,9 @@
 import axios from '@/utils/axios'
 
 export default {
-    /**
-     * 用户信息
-     */
-    getUserInfo() {
-        return axios.get('/permission/api/system/userinfo')
-    },
 
 
-    /**
-     *
-     * 根据功能查字典
-     */
-    getDictList(params) {
-        return axios({
-            url: '/permission/api/data/getDataSources',
-            method: 'post',
-            params: params
-        })
-    },
 
-  
-    /**
-     * 获取租户类型
-     */
-    getDict(params) {
-        return axios.get('/permission/api/system/getDict', {params})
-    },
 
   
 

+ 14 - 0
src/api/common.js

@@ -2,6 +2,12 @@ import axios from '@/utils/axios'
 
 export default {
     /**
+     * 用户信息
+     */
+    getUserInfo() {
+        return axios.get('/permission/api/system/userinfo')
+    },
+    /**
      * 根据类型查询字典
      * @param {*} data 
      * @returns 
@@ -9,4 +15,12 @@ export default {
     getSysDictByType(data){
         return axios.post('/permission/api/system/getSysDict',data)
     },
+    /**
+     * 根据appID获取功能权限
+     * @param {*} data 
+     * @returns 
+     */
+    getPermissionList(params) {
+        return axios.get('/permission/api/system/getPermissionList',{ params })
+    },
 }

+ 3 - 1
src/api/index.js

@@ -12,6 +12,7 @@ import position from "./position";
 import admin from "./admin"
 import common from "./common"
 import examine from "./examine";
+import tenant from './tenant'
 
 
 export default {
@@ -27,5 +28,6 @@ export default {
   ...position,
   ...admin,
   ...common,
-  ...examine
+  ...examine,
+  ...tenant
 }

+ 20 - 0
src/api/tenant.js

@@ -0,0 +1,20 @@
+import axios from '@/utils/axios'
+
+export default {
+    /**
+     * 查询企业
+     * @param {*} data 
+     * @returns 
+     */
+    queryQiaoBiTenant(data){
+        return axios.post('/permission/api/tenant/queryQiaoBiTenant',data)
+    },
+    /**
+     * 编辑企业会员类型以及数量
+     * @param {*} data 
+     * @returns 
+     */
+    updateTenantVip(data){
+        return axios.post('/permission/api/tenant/updateTenantVip',data)
+    },
+}

+ 69 - 8
src/router/index.js

@@ -48,7 +48,7 @@ const routes = [
 ]
 /* 后台管理系统Layout */
 import administrator_layout from '@/views/backStageManage/layout/Layout.vue'
-export const backStageManageRouterItem = [
+export let backStageManageRouterItem = [
   {
     path: '/administrator',
     component: administrator_layout,
@@ -59,10 +59,12 @@ export const backStageManageRouterItem = [
         path: 'home',
         name: 'Administrator_home',
         component: () => import('@/views/backStageManage/home/index.vue'),
-        meta: { title: '首页', icon: 'home' }
+        meta: { title: '首页', icon: 'home' },
       },
     ]
   },
+]
+export const defaultBackStageManageRouterItem = [
   {
     path: '/administrator',
     name: 'Administrator_organization',
@@ -75,18 +77,21 @@ export const backStageManageRouterItem = [
         name: 'Administrator_tenant',
         component: () => import('@/views/backStageManage/organization/tenant/index.vue'),
         meta: {title: '企业管理',icon: '企业'},
+        sign:'administrator/tenant'
       },
       {
         path: 'personnel',
         name: 'Administrator_personnel',
         component: () => import('@/views/backStageManage/organization/personnel/index.vue'),
         meta: {title: '人员清单',icon: '人员'},
+         sign:'administrator/personnel'
       },
       {
         path: 'department',
         name: 'Administrator_department',
         component: () => import('@/views/backStageManage/organization/department/index.vue'),
         meta: {title: '部门管理',icon: '部门'},
+        sign:'administrator/department'
       },
       {
         path: 'addDepartment',
@@ -107,6 +112,7 @@ export const backStageManageRouterItem = [
         name: 'Administrator_position',
         component: () => import('@/views/backStageManage/organization/position/index.vue'),
         meta: {title: '职位管理',icon: '职位'},
+        sign:'administrator/position'
       },
       {
         path: 'addPosition',
@@ -149,7 +155,8 @@ export const backStageManageRouterItem = [
         path: 'vision',
         name: 'Administrator_vision',
         component: () => import('@/views/backStageManage/application/vision/index.vue'),
-        meta: { title: '应用版本管理', icon: '版本' }
+        meta: { title: '应用版本管理', icon: '版本' },
+        sign:'administrator/vision'
       },
       {
         path: 'addVersion',
@@ -163,7 +170,7 @@ export const backStageManageRouterItem = [
         name: 'Administrator_editVersion',
         component: () => import('@/views/backStageManage/application/vision/editVersion.vue'),
         meta: {title: '编辑应用版本', icon: 'editVision',keepAlive:true},
-        hidden:true
+        hidden:true,
       },
       {
         path: 'versionDetail',
@@ -176,7 +183,8 @@ export const backStageManageRouterItem = [
         path: 'vipType',
         name: 'Administrator_vipType',
         component: () => import('@/views/backStageManage/application/vipType/index.vue'),
-        meta: {title: '应用会员类型', icon: '会员类型'}
+        meta: {title: '应用会员类型', icon: '会员类型'},
+        sign:'administrator/vipType'
       },
       {
         path: 'addVipType',
@@ -213,6 +221,7 @@ export const backStageManageRouterItem = [
         name: 'Administrator_paymentCode',
         component: () => import('@/views/backStageManage/paymentCode/paymentCode/index.vue'),
         meta: {title: '付费码管理', icon: '付费'},
+        sign:'administrator/paymentCode'
       },
       {
         path: 'addPaymentCode',
@@ -249,6 +258,7 @@ export const backStageManageRouterItem = [
         name: 'Administrator_examine',
         component: () => import('@/views/backStageManage/examine/examine/index.vue'),
         meta: {title: '账号审核', icon: '审核'},
+        sign:'administrator/examine'
       },
     ]
   },
@@ -309,16 +319,67 @@ router.beforeEach((to, from, next) => {
         next({ name: 'Administrator_login' })
         break;
       default:
-        if (to.meta.title) {
-          document.title = to.meta.title;
+        if(Store.getters.permission === null){
+          Store.dispatch('getPersonPermission').then(response=>{
+            var permission = response.data
+            // if(permission.length>0){}
+              setRoutePermission(permission).then(() => { // 生成可访问的路由表
+                router.addRoutes(Store.state.permission.addRouters); // 动态添加可访问路由表
+                next({ ...to, replace: true })
+              })
+          })
+        }else{
+          next()
         }
-        next()
         break;
 
     }
   }
 })
 
+function setRoutePermission(data){
+  return new Promise((resolve, reject)=>{
+    if(Store.getters.userinfo?.roleType == 1){
+      Store.commit('SET_ROUTERS', defaultBackStageManageRouterItem);
+      resolve();
+      return
+    }
+    var addRouters = []
+    for(var i = 0;i<defaultBackStageManageRouterItem.length;i++){
+      var item = defaultBackStageManageRouterItem[i]
+      if(item.sign){
+        var index = data.indexOf(item.sign)
+        if(index == -1){
+          continue;
+        }
+      }
+      var childrenRouter = []
+      if(item.children && item.children.length){
+        childrenRouter = item.children.filter(child=>{
+          return !child.sign || data.indexOf(child.sign) != -1
+        })
+      }
+      item.children = childrenRouter
+      if(item.children.length>0){
+        var child = item.children.find(i=>{
+          return !i.hidden
+        })
+        if(child){
+          item.redirect = item.path + '/' +child.path
+        }else{
+          item.children = []
+        }
+      }
+      if(item.sign || item.children.length>0){
+        addRouters.push(item)
+      }
+    }
+    Store.commit('SET_ROUTERS', addRouters);
+    resolve();
+  })
+  
+}
+
 function routeExists(array, path, parentPath) {
   for (var i = 0; i < array.length; i++) {
     var item = array[i]

+ 3 - 1
src/store/getters.js

@@ -1,6 +1,8 @@
+
 export default {
-  userinfo: state => state.user.userinfo,
+  userinfo: state => state.admin.userinfo,
   sidebar: state => state.app.sidebar,
   device: state => state.app.device,
   routers: state => state.permission.routers,
+  permission:state => state.permission.permission
 }

+ 24 - 64
src/store/modules/permission.js

@@ -1,80 +1,40 @@
 import {backStageManageRouterItem} from '@/router/index';
-//判断是否有权限访问该菜单
-function hasPermission(menus, route) {
-  if (route.name) {
-    let currMenu = getMenu(route.name, menus);
-    if (currMenu!=null) {
-      //设置菜单的标题、图标和可见性
-      if (currMenu.title != null && currMenu.title !== '') {
-        route.meta.title = currMenu.title;
-      }
-      if (currMenu.icon != null && currMenu.title !== '') {
-        route.meta.icon = currMenu.icon;
-      }
-      if(currMenu.hidden!=null){
-        route.hidden = currMenu.hidden !== 0;
-      }
-      if (currMenu.sort != null && currMenu.sort !== '') {
-        route.sort = currMenu.sort;
-      }
-      return true;
-    } else {
-      route.sort = 0;
-      if (route.hidden !== undefined && route.hidden === true) {
-        route.sort=-1;
-        return true;
-      } else {
-        return false;
-      }
-    }
-  } else {
-    return true
-  }
-}
-
-//根据路由名称获取菜单
-function getMenu(name, menus) {
-  for (let i = 0; i < menus.length; i++) {
-    let menu = menus[i];
-    if (name===menu.name) {
-      return menu;
-    }
-  }
-  return null;
-}
 
-//对菜单进行排序
-function sortRouters(accessedRouters) {
-  for (let i = 0; i < accessedRouters.length; i++) {
-    let router = accessedRouters[i];
-    if(router.children && router.children.length > 0){
-      router.children.sort(compare("sort"));
-    }
-  }
-  accessedRouters.sort(compare("sort"));
-}
+import Api from '@/api/common'
 
-//降序比较函数
-function compare(p){
-  return function(m,n){
-    let a = m[p];
-    let b = n[p];
-    return b - a;
-  }
-}
 const permission = {
   state: {
     routers: backStageManageRouterItem,
-    addRouters: []
+    addRouters: [],
+    permission:null
   },
   mutations: {
     SET_ROUTERS: (state, routers) => {
       state.addRouters = routers;
-      state.routers = backStageManage.concat(routers);
+      state.routers = backStageManageRouterItem.concat(routers);
+    },
+    SET_PERMISSION: (state, permission) => {
+      state.permission = permission;
     }
   },
   actions: {
-    GenerateRoutes({ commit }, data) {
+    getPersonPermission({ commit }, data) {
+      return new Promise((resolve, reject) => {
+        Api.getUserInfo().then(response => {
+          commit('SET_ADMIN_USERINFO', response.data)
+        })
+        var params = {
+          code : '4e95e3d926a2a4befa5d913acc0bb8t6'
+        }
+        Api.getPermissionList(params).then(response=>{
+          if(response.code == 200){
+            commit('SET_PERMISSION',response.data)
+            resolve(response)
+          }
+        }).catch(error=>{
+          reject(error)
+        })
+      })
       
     }
   }

+ 1 - 1
src/views/backStageManage/layout/Layout.vue

@@ -44,7 +44,7 @@ export default {
 
   },
   created(){
-    this.getUserinfo()
+    // this.getUserinfo()
     this.getDict()
   },
   methods:{

+ 13 - 7
src/views/backStageManage/layout/components/Navbar.vue

@@ -9,6 +9,7 @@
         <div class="avatar-wrapper">
           <img class="user-avatar" v-if="avatar" :src="$commonJS.checkViewer(avatar)">
           <img class="user-avatar" v-else :src="require('@/assets/user-avatar.jpeg')">
+          <label>{{ userinfo.name }}</label>
           <i class="el-icon-caret-bottom"></i>
         </div>
         <el-dropdown-menu class="user-dropdown" slot="dropdown">
@@ -44,7 +45,9 @@ export default {
     avatar(){
       return this.$s.getCookie('SET_AVATAR')
     },
-
+    userinfo(){
+      return this.$store.state.admin.userinfo || {}
+    },
   },
   data() {
     return {
@@ -124,20 +127,23 @@ export default {
     height: 50px;
     display: inline-block;
     position: absolute;
-    right: 35px;
+    right: 20px;
     .avatar-wrapper {
       cursor: pointer;
-      margin-top: 5px;
-      position: relative;
+      // margin-top: 5px;
+      // position: relative;
+      display: flex;
+      align-items: center;
       .user-avatar {
         width: 40px;
         height: 40px;
         border-radius: 40px;
+        margin-right: 8px;
       }
       .el-icon-caret-bottom {
-        position: absolute;
-        right: -20px;
-        top: 25px;
+        // position: absolute;
+        // right: -20px;
+        // top: 25px;
         font-size: 12px;
       }
     }

+ 23 - 0
src/views/backStageManage/organization/tenant/components/mixins/commonData.js

@@ -0,0 +1,23 @@
+export default{
+    data() {
+        return {
+            
+        }
+    },
+    computed:{
+        tenantType(){
+            return this.$store.state.admin.tenantType
+        }
+    },
+    methods: {
+        getTenantName(tenantType){
+            var obj = this.tenantType.find(item=>{
+                return item.dictChildValue == tenantType
+            })
+            if(obj){
+                return obj.dictChildLabel
+            }
+            return ''
+        }
+    },
+}

+ 51 - 16
src/views/backStageManage/organization/tenant/components/tenant.vue

@@ -2,41 +2,50 @@
   <div class="height_100">
     <el-container>
         <el-header>
-            <el-form :inline="true">
-                <el-form-item label="租户名称" prop="name">
-                    <el-input v-model="queryParams.name" size="small" placeholder="请输入"></el-input>
-                </el-form-item>
-                <el-form-item>
-                    <el-button type="" size="small" @click="search">查询</el-button>
-                </el-form-item>
+            <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="100px">
+              <el-form-item label="企业名称" prop="name">
+                <el-input v-model="queryParams.name" placeholder="请输入企业名称"/>
+              </el-form-item>
+              <el-form-item>
+                <el-button type="primary" icon="el-icon-search" size="mini" @click="search">搜索</el-button>
+                <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+              </el-form-item>
             </el-form>
         </el-header>
         <el-main class="padding_10">
-            <el-table v-loading="loading" :data="tableData" border header-row-class-name="custom-table-header">
+            <el-table v-loading="loading" :data="tableData" border header-row-class-name="custom-table-header" max-height="calc(100% - 0px)">
                 <el-table-column type="index" label="#" width="55" align="center">
                     <template slot-scope="scope">
                         <span>{{ (scope.$index + 1) + ((queryParams.current - 1) * queryParams.size) }}</span>
                     </template>
                 </el-table-column>
-                <el-table-column prop="name" label="租户名称" align="center" show-overflow-tooltip></el-table-column>
-                <el-table-column prop="contacts" label="联系人" align="center" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="name" label="企业名称" align="center" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="userName" label="企业管理员" align="center" show-overflow-tooltip></el-table-column>
                 <el-table-column prop="address" label="联系人地址" align="center" show-overflow-tooltip></el-table-column>
                 <el-table-column prop="type" label="类型" align="center" show-overflow-tooltip>
                     <template slot-scope="scope">
-                        
+                        <div>{{ getTenantName(scope.row.tenantType) }}</div>
                     </template>
                 </el-table-column>
                 <el-table-column label="是否启用" align="center" show-overflow-tooltip>
                     <template slot-scope="scope">
-                        <span v-if="scope.row.state==0">否</span>
-                        <span v-if="scope.row.state==1">是</span>
+                        <el-switch
+                            style="display: block"
+                            v-model="scope.row.state"
+                            @change="(val)=>changeState(scope.row,val)"
+                            active-color="#13ce66"
+                            inactive-color="red"
+                            :active-value="1"
+                            :inactive-value="0"
+                            active-text="启用"
+                            inactive-text="禁用">
+                        </el-switch>
                     </template>
                 </el-table-column>
                 <el-table-column prop="describe" label="备注" align="center" show-overflow-tooltip></el-table-column>
                 <el-table-column label="操作"  width="150">
                     <template slot-scope="scope">
                         <el-button type="primary" size="mini" @click="checkVipNum(scope.row)">查看会员版本数量</el-button>
-                        <el-button type="danger" size="mini" @click="disableTenant(scope.row)">禁用</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -51,17 +60,23 @@
 </template>
 
 <script>
+const defaultSearchForm = {
+    name:null
+}
 import vipNumDialog from './dialog/vipNumDialog.vue';
+import commonData from './mixins/commonData'
 export default {
   components: {
     vipNumDialog
   },
+  mixins:[commonData],
   props: {},
   data() {
     return {
         queryParams:{
             current:1,
             size:10,
+            ...defaultSearchForm
         },
         total:0,
         loading:false,
@@ -75,11 +90,31 @@ export default {
     this.getList()
   },
   methods: {
-    getList(){},
+    getList(){
+        this.loading = true
+        this.$api.queryQiaoBiTenant(this.queryParams).then(response=>{
+            if(response.code == 200){
+                this.tableData = response.data.records
+                this.total = response.data.total
+                this.loading = false
+            }
+        }).catch(response=>{
+            this.tableData = []
+            this.total = 0
+            this.loading = false
+        })
+    },
     search(){
         this.queryParams.current = 1
         this.getList()
     },
+    resetQuery(){
+        this.queryParams = {
+            ...this.queryParams,
+            ...defaultSearchForm
+        }
+        this.search()
+    },
     //切换分页
     handleCurrentChange(val){
         this.queryParams.current = val
@@ -90,7 +125,7 @@ export default {
         this.$refs.vipNumDialog.open(row.id)
     },
     //禁用租户
-    disableTenant(row){
+    changeState(row,val){
 
     },
   },