tangning 3 anni fa
parent
commit
8f093f363e

+ 14 - 2
src/main.js

@@ -5,9 +5,21 @@ import ElementPlus from 'element-plus'
 import locale from 'element-ui/lib/locale/lang/zh-CN'
 import '@/request/setupAxios'
 import '@/assets/style/public.scss'
-
-
+import user from '@/state/user'
 const app = createApp(App);
 app.use(router)
 app.use(ElementPlus, { locale })
 app.mount('#app')
+app.directive('power',{
+    created(el,binding) {
+        let replacelist = {
+            'organizationlist':'organization',
+        }
+        let routeName = router.currentRoute._value.name
+        let roleKeyList = user._value.roleKeyList
+        let rokeName =  `${replacelist[binding.value] || routeName}:${binding.value}`
+        if(!roleKeyList.includes(rokeName)){
+            el.parentNode.removeChild(el);
+        }
+    }
+})

+ 2 - 0
src/request/config.js

@@ -9,6 +9,8 @@ export const getRoleList = '/web/role/getAllRoleList'
 /**  ----------------用户接口----------------   */
 // 登录
 export const userLogin = '/web/user/login'
+// 权限
+export const userperInfo = '/web/user/getPerInfo'
 // 注册
 export const userReg = '/web/user/register'
 // 发送注册短信

+ 2 - 1
src/state/navs.js

@@ -11,7 +11,7 @@ const ICON_MAP = {
   vrmodel: 'iconfire_scenes', 
   camera: 'iconfire_camera', 
   dispatch: 'iconfire_management', 
-  organization: 'iconfire_management', 
+  organization: 'el-icon-guide', 
   teaching: 'iconfire_study',
   user: 'iconfire_user',
 }
@@ -50,6 +50,7 @@ const getNavs = () => {
   
   let names = getNames(config)
   let showNames = user.value.permission.map(item => item.viewName)
+  console.log('showNames',showNames,user.value.permission);
   let notJoinNavs = names.filter(name => 
     ~Object.keys(attach).indexOf(name) || (
       !~showNames.indexOf(name) && 

+ 14 - 9
src/state/user.js

@@ -1,5 +1,7 @@
 import { ref, watch } from 'vue'
 import { keyViewMap } from '@/constant/view'
+// import { userperInfo } from '@/request/config'
+// import axios from 'axios'
 
 
 const strToJson = (str, def) => {
@@ -15,7 +17,7 @@ const user = ref({
   token: localStorage.getItem('token'),
   info: strToJson(localStorage.getItem('info'), {}),
   permission: strToJson(localStorage.getItem('permission'), []),
-  roleKey:localStorage.getItem('roleKey')
+  roleKeyList:strToJson(localStorage.getItem('roleKeyList'), [])
 })
 
 watch(
@@ -24,11 +26,6 @@ watch(
 )
 
 watch(
-  () => user.value.roleKey,
-  () => localStorage.setItem('roleKey', user.value.roleKey)
-)
-
-watch(
   () => user.value.info,
   () => localStorage.setItem('info', JSON.stringify(user.value.info))
 )
@@ -38,8 +35,15 @@ watch(
   () => localStorage.setItem('permission', JSON.stringify(user.value.permission))
 )
 
-export const setPermission = val => {
+watch(
+  () => user.value.roleKeyList,
+  () => localStorage.setItem('roleKeyList', JSON.stringify(user.value.roleKeyList))
+)
+
+export const setPermission = async (val,permissions) => {
+  let power = []
   if (val !== void 0){
+    power = permissions&&permissions.map(element => element.replace('dept','dispatch'));
     let pubPermission = ['home', 'vrmodel', 'camera', 'teaching', 'dispatch'].map(key => ({
       children: [
         { resourceKey: key + ':select' }, 
@@ -50,7 +54,7 @@ export const setPermission = val => {
       resourceKey: key
     }))
 
-    if (val === '1') {
+     if (val === 'admin' || val==="admin-dept") {
       pubPermission[pubPermission.length - 1].children.push(
         { resourceKey: 'dispatch:setting' }
       )
@@ -75,8 +79,9 @@ export const setPermission = val => {
   } else {
     val = []
   }
-
+  
   user.value.permission = val
+  user.value.roleKeyList = power
 }
 
 export const setToken = val => {

+ 2 - 0
src/view/camera/index.vue

@@ -23,6 +23,7 @@
           type="primary"
           @click="oper.readyInsert"
           v-if="auth.add"
+          v-power="'bind'"
           >绑定相机</el-button
         >
       </div>
@@ -47,6 +48,7 @@
         <span class="oper-span" 
           @click="unbindCamrea(row)" 
           v-if="auth.delete" 
+          v-power="'unbind'"
           style="color: var(--primaryColor)">
          解绑
         </span>

+ 6 - 6
src/view/dispatch/archives.vue

@@ -2,7 +2,7 @@
   <com-dialog
     title="火调档案管理"
     enterText="上传附件"
-    :hideFloor="user.info.deptId != deptId"
+    :hideFloor="user.info.departmentId != organizerDeptId"
     :show="show"
     @submit="oper.readyInsert"
     @update:show="val => $emit('update:show', val)"
@@ -26,8 +26,8 @@
           <a class="oper-span" :href="row.fileOssUrl" target="_blank">查看</a>
           <span class="oper-span" @click="downloadFile(row.fileOssUrl, row.fileName)">下载</span>
           <span class="oper-span" 
-            :class="{disable: user.info.deptId != deptId}" 
-            @click="user.info.deptId == deptId && deleteItem(row)" 
+            :class="{disable: user.info.departmentId != organizerDeptId}" 
+            @click="user.info.departmentId == organizerDeptId && deleteItem(row)" 
             style="color: var(--primaryColor)">
           删除
           </span>
@@ -100,7 +100,7 @@ import { types } from '@/constant'
 
 export default {
   name: 'archives',
-  props: ['show', 'data', 'deptId'],
+  props: ['show', 'data', 'organizerDeptId'],
   setup(props) {
     const state = getTableState({
       getUrl: getAttachList,
@@ -133,9 +133,9 @@ export default {
       this.$emit('referList')
     },
     async unbindCamrea(data) {
-      if (data.deptId && (await this.$confirm('解绑相机,该相机拍摄的场景也将一并解绑(场景在云端存储,不会删除)确定要解绑吗?', '提示'))) {
+      if (data.departmentId && (await this.$confirm('解绑相机,该相机拍摄的场景也将一并解绑(场景在云端存储,不会删除)确定要解绑吗?', '提示'))) {
         await axios.post(unbindCamera, data)
-        data.departmentName = data.deptId = null
+        data.departmentName = data.departmentId = null
       }
 
       this.dataList.refer()

+ 6 - 5
src/view/dispatch/index.vue

@@ -103,9 +103,9 @@
       <el-table-column label="项目状态" v-slot:default="{ row }" >
         {{row.status === 0 ? '未认定' : '已认定'}}
       </el-table-column>
-      <el-table-column label="操作" v-slot:default="{ row }" :width="isTeaching ? 240 : 280">
-        <span class="oper-span" @click="queryDetail(row)">详情</span>
-        <span class="oper-span" @click="archivesHandle(row)">档案</span>
+      <el-table-column label="操作" v-slot:default="{ row }" :width="isTeaching ? 280 : 320">
+        <span class="oper-span" @click="queryDetail(row)" v-power="'view'">详情</span>
+        <span class="oper-span" @click="archivesHandle(row)" v-power="'readFile'">档案</span>
         <span class="oper-span" @click="queryScene(row)">场景</span>
         <span class="oper-span" v-if="row.vrLink" @click="takeLook(row)">带看</span>
         <template v-if="isTeaching">
@@ -119,11 +119,12 @@
         </template>
         <template v-else>
           
-          <span class="oper-span" @click="row.vrLink && shareHandle(row)" :class="{disable: !row.vrLink}">分享</span>
-          <span class="oper-span" @click="auth.update && user.info.deptId == row.deptId && editInfo(row)" :class="{disable: !(auth.update && user.info.deptId == row.deptId)}">编辑</span>
+          <span class="oper-span" v-power="'share'" @click="row.vrLink && shareHandle(row)" :class="{disable: !row.vrLink}">分享</span>
+          <span class="oper-span" v-power="'edit'" @click="auth.update && user.info.deptId == row.deptId && editInfo(row)" :class="{disable: !(auth.update && user.info.deptId == row.deptId)}">编辑</span>
           <span class="oper-span" 
             @click="auth.delete && user.info.deptId == row.deptId && dataList.delete(row)" 
             :class="{disable: !(auth.delete && user.info.deptId == row.deptId)}"
+            v-power="'del'"
             style="color: var(--primaryColor)">
           删除
           </span>

+ 8 - 4
src/view/organization/list.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="organiza">
     <div class="but">
-      <el-button type="primary" @click="insertProject">新增组织架构</el-button>
+      <el-button type="primary" v-power="'add'" @click="insertProject">新增组织架构</el-button>
     </div>
     <div class="organiza-body">
       <div class="tree">
@@ -22,11 +22,12 @@
               <span class="custom-tree-node">
                 <span>{{ data.name }}</span>
                 <span class="butList">
-                  <a @click="seeDetail(data,node)"> 查看 </a>
-                  <a @click="insertProject(data)"> 编辑 </a>
+                  <a @click="seeDetail(data,node)" v-power="'view'"> 查看 </a>
+                  <a @click="insertProject(data)" v-power="'edit'"> 编辑 </a>
                   <a
                     style="color: var(--primaryColor)"
-                    @click="remove(data.id)"
+                    @click="remove(data.id)" 
+                    v-power="'del'"
                   >
                     删除
                   </a>
@@ -131,6 +132,7 @@
 import { reactive, toRefs,onMounted } from "vue"; //computed watch ref
 import comDialog from "@/components/dialog";
 import axios from 'axios';
+import {useRoute} from 'vue-router'
 import seeInfo from "./seeInfo.vue";
 import { getApp } from "@/app";
 import {
@@ -140,6 +142,8 @@ import {
 export default {
   name: "camera",
   setup() {
+      const rout = useRoute()
+      console.log('rout',rout)
     const data = reactive({
       show: false,
       tipsShow: false,

+ 2 - 2
src/view/system/login.vue

@@ -116,11 +116,11 @@ export default {
           openErrorMsg('当前账号无权限,请联系总队管理员处理。', '提示')
         } else {
           res.data.user.department = res.data.department
-          console.log('info', res.data.user)
+          console.log('info', res.data.permissions)
           setInfo(res.data.user)
           setToken(res.data.token)
           setRoleKey(res.data.roles[0].roleKey)
-          setPermission(res.data.roles[0].id)
+          setPermission(res.data.roles[0].roleKey,res.data.permissions)
           this.$router.replace({ name: 'home' })
         }
       } catch (e) {

+ 2 - 2
src/view/teaching/index.vue

@@ -58,8 +58,8 @@
       <el-table-column label="火灾原因" prop="sceneCount"></el-table-column>
       <el-table-column label="项目状态" prop="sceneCount"></el-table-column>
       <el-table-column label="操作" v-slot:default="{ row }" width="250">
-        <span class="oper-span" @click="oper.readyUpdate(row)">详情</span>
-        <span class="oper-span" @click="archivesHandle(row)">档案</span>
+        <span class="oper-span" @click="oper.readyUpdate(row)" v-power="'view'">详情</span>
+        <span class="oper-span" @click="archivesHandle(row)" v-power="'readFile'">档案</span>
         <span class="oper-span" @click="queryScene(row)">场景</span>
         <span class="oper-span disable" @click="leaveMsgHandle(row)">留言</span>
         <span class="oper-span" 

+ 2 - 1
src/view/user/index.vue

@@ -64,10 +64,11 @@
         >
           <template v-if="row.id !== ADMIN_USER_ID && row.id !== user.info.id">
             <span class="oper-span" @click="updateInfo(row)" v-if="auth.update"
-              >编辑</span
+            v-power="'edit'">编辑</span
             >
             <span
               class="oper-span"
+              v-power="'disabled'"
               @click="changeUserStatus(row)"
               v-if="auth.delete"
               style="color: var(--primaryColor)"

+ 3 - 3
src/view/vrmodel/index.vue

@@ -45,9 +45,9 @@
       <el-table-column label="浏览数量" prop="viewCount"></el-table-column>
       <el-table-column label="拍摄时间" prop="createTime" v-slot:default="{ row }"> {{row.createTime.substr(0, 11)}}</el-table-column>
       <el-table-column label="操作" v-slot:default="{ row }" >
-        <span class="oper-span" @click="shareHandle(row)">查看</span>
-        <span class="oper-span" @click="auth.update && user.info.id == row.creatorId && editModel(row)" :class="{disable: !(auth.update && user.info.id == row.creatorId)}" v-if="auth.update">编辑</span>
-        <span class="oper-span" @click="auth.delete && user.info.deptId == row.deptId && dataList.delete(row)" :class="{disable: !(auth.delete && user.info.deptId == row.deptId)}" style="color: var(--primaryColor)">删除</span>
+        <span class="oper-span" @click="shareHandle(row)" v-power="'view'">查看</span>
+        <span class="oper-span" @click="auth.update && user.info.id == row.creatorId && editModel(row)" :class="{disable: !(auth.update && user.info.id == row.creatorId)}" v-if="auth.update" v-power="'edit'">编辑</span>
+        <span class="oper-span" @click="auth.delete && user.info.deptId == row.deptId && dataList.delete(row)" :class="{disable: !(auth.delete && user.info.deptId == row.deptId)}" v-power="'del'" style="color: var(--primaryColor)">删除</span>
       </el-table-column>
     </el-table>