tangning преди 3 години
родител
ревизия
f3c3b54479

+ 1 - 2
src/main.js

@@ -37,8 +37,8 @@ app.directive('power',{
         let {roleKeyList,roleData,info} = unref(user);
         let item = null,type,{value} = binding,qxdj=false,rokeName=''
         if(typeof(value)=='string'){
-            rokeName =  `${replacelist[routeName] || routeName}:${type}`
             type = value
+            rokeName =  `${replacelist[routeName] || routeName}:${type}`
         }else{
             rokeName =  `${replacelist[routeName] || routeName}:${value.roleType}`
             type = value.roleType
@@ -56,7 +56,6 @@ app.directive('power',{
                     break;
             }
         }
-        console.log('power',roleKeyList.includes(rokeName),qxdj,rokeName)
         var klses = el.className;
         if((!roleKeyList.includes(rokeName))){//判断无权
             el.className = klses + ' disable' 

+ 85 - 54
src/state/user.js

@@ -1,56 +1,56 @@
 import { ref, watch } from 'vue'
 import { keyViewMap } from '@/constant/view'
 import { detailRole } from '@/request/config'
-// import router from './router'
+import router from '../router/index'
 import axios from 'axios'
 
-const rokrole = [
-{id:100, role:'user',menu: 'user',name: '用户管理', },
-{id:102, role:'user:add',menu: 'user',name: '新增', },
-{id:103, role:'user:edit',menu: 'user',name: '编辑', },
-{id:104, role:'user:del',menu: 'user',name: '删除', },
-{id:106, role:'user:disabled',menu: 'user',name: '启用/禁用', },
-{id:107, role:'user:pwd',menu: 'user',name: '修改密码', },
-{id:101, role:'user:view',menu: 'user',name: '查看', },
-{id:200, role:'role',menu: 'role',name: '角色管理', },
-{id:201, role:'role:view',menu: 'role',name: '查看', },
-{id:202, role:'role:add',menu: 'role',name: '新增', },
-{id:203, role:'role:edit',menu: 'role',name: '编辑', },
-{id:204, role:'role:del',menu: 'role',name: '删除', },
-{id:300, role:'organization',menu: 'organization',name: '组织架构', },
-{id:301, role:'organization:view',menu: 'organization',name: '查看', },
-{id:302, role:'organization:add',menu: 'organization',name: '新增', },
-{id:303, role:'organization:edit',menu: 'organization',name: '编辑', },
-{id:304, role:'organization:del',menu: 'organization',name: '删除', },
-{id:500, role:'vrmodel',menu: 'vrmodel',name: '场景管理', },
-{id:501, role:'vrmodel:view',menu: 'vrmodel',name: '查看', },
-{id:503, role:'vrmodel:edit',menu: 'vrmodel',name: '编辑', },
-{id:504, role:'vrmodel:del',menu: 'vrmodel',name: '删除', },
-{id:506, role:'vrmodel:sync',menu: 'vrmodel',name: '同步', },
-{id:507, role:'vrmodel:download',menu: 'vrmodel',name: '下载', },
-{id:600, role:'camera',menu: 'camera',name: '相机管理', },
-{id:601, role:'camera:view',menu: 'camera',name: '查看', },
-{id:606, role:'camera:bind',menu: 'camera',name: '绑定', },
-{id:607, role:'camera:unbind',menu: 'camera',name: '解绑', },
-{id:700, role:'dispatch',menu: 'dispatch',name: '火调项目', },
-{id:701, role:'dispatch:view',menu: 'dispatch',name: '查看', },
-{id:702, role:'dispatch:add',menu: 'dispatch',name: '新增', },
-{id:703, role:'dispatch:edit',menu: 'dispatch',name: '编辑', },
-{id:704, role:'dispatch:del',menu: 'dispatch',name: '删除', },
-{id:706, role:'dispatch:vrmodel:look',menu: 'dispatch',name: '查看场景', },
-{id:707, role:'dispatch:vrmodel:look',menu: 'dispatch',name: '带看', },
-{id:708, role:'dispatch:doc:look',menu: 'dispatch',name: '档案查看', },
-{id:709, role:'dispatch:doc:upload',menu: 'dispatch',name: '档案管理', },
-{id:710, role:'dispatch:teach',menu: 'dispatch',name: '设置教学项目', },
-{id:711, role:'dispatch:share',menu: 'dispatch',name: '分享', },
-{id:800, role:'teaching',menu: 'teaching',name: '教学平台', },
-{id:801, role:'teaching:view',menu: 'teaching',name: '查看', },
-{id:806, role:'teaching:doc:look',menu: 'teaching',name: '查看档案', },
-{id:807, role:'teaching:vrmodel:look',menu: 'teaching',name: '查看场景', },
-{id:808, role:'teaching:message:add',menu: 'teaching',name: '发表留言', },
-{id:809, role:'teaching:cancel',menu: 'teaching',name: '撤销教学', },
-{id:810, role:'teaching:message:look',menu: 'teaching',name: '查看留言',},
-]
+// const rokrole = [
+// {id:100, role:'user',menu: 'user',name: '用户管理', },
+// {id:102, role:'user:add',menu: 'user',name: '新增', },
+// {id:103, role:'user:edit',menu: 'user',name: '编辑', },
+// {id:104, role:'user:del',menu: 'user',name: '删除', },
+// {id:106, role:'user:disabled',menu: 'user',name: '启用/禁用', },
+// {id:107, role:'user:pwd',menu: 'user',name: '修改密码', },
+// {id:101, role:'user:view',menu: 'user',name: '查看', },
+// {id:200, role:'role',menu: 'role',name: '角色管理', },
+// {id:201, role:'role:view',menu: 'role',name: '查看', },
+// {id:202, role:'role:add',menu: 'role',name: '新增', },
+// {id:203, role:'role:edit',menu: 'role',name: '编辑', },
+// {id:204, role:'role:del',menu: 'role',name: '删除', },
+// {id:300, role:'organization',menu: 'organization',name: '组织架构', },
+// {id:301, role:'organization:view',menu: 'organization',name: '查看', },
+// {id:302, role:'organization:add',menu: 'organization',name: '新增', },
+// {id:303, role:'organization:edit',menu: 'organization',name: '编辑', },
+// {id:304, role:'organization:del',menu: 'organization',name: '删除', },
+// {id:500, role:'vrmodel',menu: 'vrmodel',name: '场景管理', },
+// {id:501, role:'vrmodel:view',menu: 'vrmodel',name: '查看', },
+// {id:503, role:'vrmodel:edit',menu: 'vrmodel',name: '编辑', },
+// {id:504, role:'vrmodel:del',menu: 'vrmodel',name: '删除', },
+// {id:506, role:'vrmodel:sync',menu: 'vrmodel',name: '同步', },
+// {id:507, role:'vrmodel:download',menu: 'vrmodel',name: '下载', },
+// {id:600, role:'camera',menu: 'camera',name: '相机管理', },
+// {id:601, role:'camera:view',menu: 'camera',name: '查看', },
+// {id:606, role:'camera:bind',menu: 'camera',name: '绑定', },
+// {id:607, role:'camera:unbind',menu: 'camera',name: '解绑', },
+// {id:700, role:'dispatch',menu: 'dispatch',name: '火调项目', },
+// {id:701, role:'dispatch:view',menu: 'dispatch',name: '查看', },
+// {id:702, role:'dispatch:add',menu: 'dispatch',name: '新增', },
+// {id:703, role:'dispatch:edit',menu: 'dispatch',name: '编辑', },
+// {id:704, role:'dispatch:del',menu: 'dispatch',name: '删除', },
+// {id:706, role:'dispatch:vrmodel:look',menu: 'dispatch',name: '查看场景', },
+// {id:707, role:'dispatch:vrmodel:look',menu: 'dispatch',name: '带看', },
+// {id:708, role:'dispatch:doc:look',menu: 'dispatch',name: '档案查看', },
+// {id:709, role:'dispatch:doc:upload',menu: 'dispatch',name: '档案管理', },
+// {id:710, role:'dispatch:teach',menu: 'dispatch',name: '设置教学项目', },
+// {id:711, role:'dispatch:share',menu: 'dispatch',name: '分享', },
+// {id:800, role:'teaching',menu: 'teaching',name: '教学平台', },
+// {id:801, role:'teaching:view',menu: 'teaching',name: '查看', },
+// {id:806, role:'teaching:doc:look',menu: 'teaching',name: '查看档案', },
+// {id:807, role:'teaching:vrmodel:look',menu: 'teaching',name: '查看场景', },
+// {id:808, role:'teaching:message:add',menu: 'teaching',name: '发表留言', },
+// {id:809, role:'teaching:cancel',menu: 'teaching',name: '撤销教学', },
+// {id:810, role:'teaching:message:look',menu: 'teaching',name: '查看留言',},
+// ]
 const strToJson = (str, def) => {
   try {
     str = JSON.parse(str)
@@ -189,18 +189,49 @@ export const setRoleKey = async val => {
     let {data} = await axios.get(detailRole+val.id, {roleId:val.id});
     let roleData = {}
     data&&data.perm.map(ele => {
-      let {role} = rokrole.find(item => item.id == ele.permissionId)
-      roleData[role] = Number(ele.dataScope)
+      let {perms} = ele
+      perms = perms.replace('dept','organization').replace('scene','vrmodel')
+      roleData[perms] = Number(ele.dataScope)
     })
     user.value.roleData = roleData
 }
 
-export const rolePower = () =>{
+export const rolePower = (value) =>{
+  let {roleKeyList,roleData,info} = user.value;
   let replacelist = {
     'organizationlist':'organization',
-}
-  // let routeName = router.currentRoute._value.name
-
+  }
+  let routeName = router.currentRoute._value.name
+  let item = null,qxdj=false,rokeName=''
+  if(typeof(value)=='string'){
+      rokeName =  `${replacelist[routeName] || routeName}:${value}`
+  }else{
+      rokeName =  `${replacelist[routeName] || routeName}:${value.roleType}`
+      item = value
+      switch(roleData[rokeName]){
+        case 2:
+        if(item.deptId != info.deptId){
+            qxdj = true;
+        }
+        break;
+          case 4://所属组织内部数据
+              if(item.deptId != info.deptId){
+                  qxdj = true;
+              }
+              break;
+          case 5:
+              if(item.creatorId != info.id){
+                  qxdj = true;
+              }
+              break;
+      }
+  }
+  if((!roleKeyList.includes(rokeName))){//判断无权
+     return true
+  }else if(qxdj){//判断有权查询是否权限足够
+     return true
+  }
+  return false //有权
 }
 
 export default user

+ 0 - 21
src/util/index.js

@@ -1,6 +1,4 @@
 import Base64 from 'Base64'
-import user from '@/state/user'
-import router from '@/router/index'
 
 export const dateFormat = (date, fmt) => {
   var o = {
@@ -106,25 +104,6 @@ export const downloadFile = (url, fileName) => {
 }
 
 /**
- *获取权限
- */
- export const getRoke = (val) => {
-  if(!val){
-    return false
-  }
-  let replacelist = {
-    'organizationlist':'organization',
-  }
-  let roleKeyList = user._value.roleKeyList
-  let routeName = router.currentRoute._value.name
-  let rokeName =  `${replacelist[routeName] || routeName}:${val}`
-  if(!roleKeyList.includes(rokeName)){
-    return true
-  }else{
-    return false
-  }
-}
-/**
  *遍历树
  **/
  export const assembleTree = (tree) => {

+ 4 - 3
src/view/camera/index.vue

@@ -26,7 +26,7 @@
           type="primary"
           @click="oper.readyInsert"
           v-if="auth.add"
-          :disabled="getRoke('bind')"
+          :disabled="rolePower('bind')"
           v-power="'bind'"
           >绑定相机</el-button
         >
@@ -100,7 +100,8 @@ import comDialog from "@/components/dialog";
 import comPagination from "@/components/pagination";
 import comSelect from "@/components/company-select";
 import comHead from "@/components/head";
-import { dateFormat,getRoke } from '@/util'
+import { dateFormat } from '@/util'
+import {  rolePower } from '@/state/user'
 import {
   getCameraList,
   insertCamera,
@@ -155,7 +156,7 @@ export default {
     onMounted(async ()=>{
         getuserlist()
     })
-    return { ...state,...toRefs(userList), headList, time, auth,getuserlist,getRoke };
+    return { ...state,...toRefs(userList), headList, time, auth,getuserlist,rolePower };
   },
   methods: {
     async unbindCamrea(data) {

+ 9 - 8
src/view/dispatch/index.vue

@@ -55,12 +55,12 @@
       <h3 style="visibility: hidden;">项目列表</h3>
       <div class="table-ctrl-right">
         <template v-if="isTeaching">
-          <el-button type="primary" @click="revokeTeaching()" :disabled="getRoke('cancel') && !dataList.selectRows.length" v-power="'cancel'">撤销教学</el-button>
+          <el-button type="primary" @click="revokeTeaching()" :disabled="rolePower('cancel') && !dataList.selectRows.length" v-power="'cancel'">撤销教学</el-button>
         </template>
         <template v-else>
-          <el-button type="primary" @click="insertProject" :disabled="getRoke('add')"  v-power="'add'">新增火调项目</el-button>
+          <el-button type="primary" @click="insertProject" :disabled="rolePower('add')"  v-power="'add'">新增火调项目</el-button>
           <!-- :disabled="!dataList.selectRows.length" -->
-          <el-button type="primary" @click="setTeaching" :disabled="getRoke('teach')"  v-power="'teach'" >设为教学项目</el-button>
+          <el-button type="primary" @click="setTeaching" :disabled="rolePower('teach')"  v-power="'teach'" >设为教学项目</el-button>
         </template>
       </div>
     </div>
@@ -366,6 +366,7 @@
 import { computed, reactive, ref, watch } from "vue";
 import getTableState from "@/state/tableRef";
 import user from "@/state/user";
+import { rolePower } from '@/state/user'
 import auth from "@/state/viewAuth";
 import comDialog from "@/components/dialog";
 import comPagination from "@/components/pagination";
@@ -373,7 +374,7 @@ import comLeaveMsg from "./leaveMsg";
 import comCompany from "@/components/company-select";
 import comHead from "@/components/head";
 import comArchives from "./archives";
-import { copyText, dateFormat,getRoke } from '@/util'
+import { copyText, dateFormat } from '@/util'
 import {
   getFireList,
   insertFire,
@@ -418,8 +419,7 @@ export default {
     const types = ref([{ name: "我的相机", value: 2 }])
     const time = ref(null)
     const checkSelectable = (row) => {
-      console.log('row',row)
-      // this.checkSelectable
+      return !rolePower({...row,roleType:'teach'})
     }
     const showArchives = ref({show: false, data: 0})
     const showLeaveMsg = ref({show: false, data: 0})
@@ -507,12 +507,13 @@ export default {
     
 
     return { 
-      ...state, time, auth, types,  user,getRoke,
+      ...state, time, auth, types,  user,
       showArchives, showLeaveMsg, sfireReason, 
       sprojectSite, share, fireReason, ADMIN_USER_ID,
       projectSite, place: PLACE, reason: REASON, queryAccidentDate,
       detail, __init: {...state.search.value.state},
-      checkSelectable
+      checkSelectable,
+      rolePower,
     };
   },
   data() {

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

@@ -2,7 +2,7 @@
   <div class="organiza">
     <div class="organiza-body">
       <div class="but">
-      <el-button type="primary" v-power="'add'" :disabled="getRoke('add')" @click="insertProject"
+      <el-button type="primary" v-power="'add'" :disabled="rolePower('add')" @click="insertProject"
         >新增组织架构</el-button
       >
     </div>
@@ -144,7 +144,8 @@ import { useRoute } from "vue-router";
 import seeInfo from "./seeInfo.vue";
 import {PHONE} from '@/constant/REG'
 import { getApp } from "@/app";
-import { getRoke,assembleTree } from '@/util'
+import { rolePower } from '@/state/user'
+import { assembleTree } from '@/util'
 import {
   getTreeselect,
   delTreeitem,
@@ -313,7 +314,7 @@ export default {
       // treedata,
       ...toRefs(data),
       // ...toRefs(state),
-      user,getRoke,myCascader,
+      user,rolePower,myCascader,
       handleNodeClick,
       loadNode,
       insertProject,

+ 6 - 6
src/view/role/const.js

@@ -29,16 +29,16 @@ export const roleList = (key) =>{
             103:3,
             104:3,
             106:3,
-            201:3,
+            201:4,
             202:4,
-            203:3,
-            204:3,
+            203:4,
+            204:4,
         },
         3:{//默认 3
-            201:3,
+            201:4,
             202:4,
-            203:3,
-            204:3,
+            203:4,
+            204:4,
             503:5,
             506:5,
             606:4,

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

@@ -20,7 +20,7 @@
 
     <div class="body-layer" style="padding-top: 8px">
       <div class="body-but">
-        <el-button type="primary" :disabled="getRoke('add')" @click="()=>{newAddclick(null,'新增')}">新增角色</el-button>
+        <el-button type="primary" :disabled="rolePower('add')" @click="()=>{newAddclick(null,'新增')}">新增角色</el-button>
       </div>
 
       <el-table
@@ -164,7 +164,7 @@ import comCompany from "@/components/company-select";
 import comPagination from "@/components/pagination";
 import auth from "@/state/viewAuth";
 import user from "@/state/user";
-import { getRoke } from '@/util'
+import { rolePower } from '@/state/user'
 import axios from "axios";
 import { ADMIN_USER_ID } from "@/constant";
 import { roleList } from './const'
@@ -323,7 +323,7 @@ export default {
       roleKey,
       newAddclick,
       teachingRole,
-      getRoke,
+      rolePower,
     };
   },
   methods: {

+ 10 - 1
src/view/scene/Initiator.vue

@@ -15,7 +15,7 @@
 </template>
 
 <script>
-import { fireDetailByPsw, getAttachListByPsw,offLine,onLine } from '@/request/config'
+import { fireDetailByPsw, getAttachListByPsw,offLine,onLine,onLineCheck } from '@/request/config'
 import axios from 'axios';
 import comDialog from "@/components/dialog";
 import { types } from '@/constant'
@@ -78,6 +78,14 @@ export default {
     },
   },
   methods: {
+    async lineCheck(){
+      let { roomId, } = getQueryString(this.url)
+      let {data} = await axios.get(onLineCheck, {params:{roomId}})
+      console.log('房间号不存在===>',data)
+      if(data.error || data.isTrue){
+            if(data.error) return window.location.href = 'noAccess.html'
+      }
+    },
     getUrlname(){
       return window.location.origin + window.location.pathname
     },
@@ -125,6 +133,7 @@ export default {
     }
   },
   mounted() {
+    this.lineCheck()
     window.addEventListener('message',this.handleMessage)
     var iframe = document.createElement('iframe'); 
     iframe.src=this.url;  

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

@@ -47,7 +47,7 @@
 </template>
 
 <script>
-import { reactive, watch,ref } from 'vue'
+import { reactive, watch,ref, nextTick } from 'vue'
 import axios from 'axios'
 import { setToken, setPermission, setInfo, setRoleKey } from '@/state/user'
 import { userLogin, getCode } from '@/request/config'
@@ -135,7 +135,9 @@ export default {
           setToken(res.data.token)
           setRoleKey(res.data.roles[0])
           setPermission(res.data.roles[0].roleKey,res.data.permissions)
-          this.$router.replace({ name: 'home' })
+          nextTick(()=>{
+            this.$router.replace({ name: 'home' })
+          })
         }
       } catch (e) {
         console.error(e)

+ 4 - 3
src/view/user/index.vue

@@ -27,7 +27,7 @@
 
     <div class="body-layer" style="padding-top: 8px">
       <div class="body-but">
-          <el-button type="primary" :disabled="getRoke('add')" @click="newAddclick">新增用户</el-button>
+          <el-button type="primary" :disabled="rolePower('add')" @click="newAddclick">新增用户</el-button>
         <!-- <h3 style="visibility: hidden;">用户列表</h3> -->
       </div>
 
@@ -186,8 +186,9 @@ import auth from "@/state/viewAuth";
 import user from "@/state/user";
 import axios from "axios";
 import {PHONE,EPSW} from '@/constant/REG'
+import { rolePower } from '@/state/user'
 import { ADMIN_USER_ID } from "@/constant";
-import { getRoke,assembleTree } from '@/util'
+import { assembleTree } from '@/util'
 
 import { getTreeselect,getUserList, updateUser, deleUser, changeUserStatus,userAdd,userEdit,checkUserCamera } from "@/request/config";
 import { getApp } from "../../app";
@@ -284,7 +285,7 @@ export default {
       ADMIN_USER_ID,
       roleKey,
       newAddclick,
-      getRoke,
+      rolePower,
       assembleTree
     };
   },

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

@@ -24,7 +24,7 @@
     <div class="body-head">
       <h3 style="visibility: hidden;">场景管理</h3>
       <div class="table-ctrl-right">
-        <el-button type="primary"  v-power="'sync'" :disabled="getRoke('sync')"  @click="asynccj">同步场景</el-button>
+        <el-button type="primary"  v-power="'sync'" :disabled="rolePower('sync')"  @click="asynccj">同步场景</el-button>
       </div>
     </div>
 
@@ -167,8 +167,9 @@ import comDialog from "@/components/dialog";
 import comPagination from "@/components/pagination";
 import comCompany from "@/components/company-select";
 import { getApp } from '@/app'
-import { dateFormat,getRoke } from '@/util'
+import { dateFormat } from '@/util'
 import { ADMIN_USER_ID } from '@/constant'
+import { rolePower } from '@/state/user'
 import {
   getSceneList,
   deleteScene,
@@ -227,7 +228,7 @@ export default {
       asyncSceneCompany.value || state.dataList.value.refer()
     })
 
-    return { ...state,butisShow, headList, currModel, time, auth, editCompany, cameras, cameraCompany, asyncSceneCompany, user,cameraDownload,ADMIN_USER_ID,getRoke };
+    return { ...state,butisShow, headList, currModel, time, auth, editCompany, cameras, cameraCompany, asyncSceneCompany, user,cameraDownload,ADMIN_USER_ID,rolePower };
   },
   created(){
       let list = {