Browse Source

权限控制

zhuliu 1 year ago
parent
commit
6be96740a0

+ 3 - 2
src/main.js

@@ -25,8 +25,9 @@ import "@/assets/css/main.scss"
 
 //专利数据库权限、报告的权限、是否有功能权限
 import permission from './utils/permissions'
-Vue.prototype.$r = permission.hasRole
-Vue.prototype.$permission = permission.hasPermission
+Vue.prototype.$permission = permission
+// Vue.prototype.$r = permission.hasRole
+// Vue.prototype.$permission = permission.hasPermission
 Vue.prototype.$reportPermission = permission.reportPermission
 
 import eventVisual from "@/views/event/components/details/showDialog";

+ 2 - 2
src/store/index.js

@@ -6,7 +6,7 @@ import report from './modules/report'
 import project from './modules/project'
 import patent from './modules/patent'
 import analyse from './modules/analyse'
-import admin from './modules/admin'
+import permission from './modules/permission'
 import getters from './getters'
 import dictMessage from "./modules/dictMessage"
 import contextMenu from './modules/contextMenu'
@@ -23,7 +23,7 @@ export default new Vuex.Store({
     report,
     project,
     analyse,
-    admin,
+    permission,
     patent,
     dictMessage,
     contextMenu,

+ 0 - 19
src/store/modules/admin.js

@@ -1,19 +0,0 @@
-export default {
-  state: {
-    userinfo: {},
-    permission:''
-  },
-
-  mutations: {
-    SET_ADMIN_USERINFO(state, userinfo) {
-      state.userinfo = userinfo
-    },
-    SET_ADMIN_PERMISSION(state,permission){
-      state.permission = permission
-    },
-  },
-
-  actions: {
-
-  }
-}

+ 3 - 0
src/store/modules/chart.js

@@ -70,6 +70,9 @@ export default {
     async getSourceDataList({ commit, state, getters, dispatch }, dimension) {
       let form = { ...state.form }
       state.selectedLoad[dimension] = true
+      if(!form.schema[dimension].field){
+        return
+      }
       if (form.schema[dimension].ptype !== 0 && form.schema[dimension].ptype !== 4 &&  form.schema[dimension].ptype !== 3) {
         // let params = {
         //   uid: form.uid || '',

+ 15 - 0
src/store/modules/permission.js

@@ -0,0 +1,15 @@
+export default {
+  state: {
+    permission:[]
+  },
+
+  mutations: {
+    SET_PERMISSION(state,permission){
+      state.permission = permission
+    },
+  },
+
+  actions: {
+
+  }
+}

+ 0 - 4
src/store/modules/user.js

@@ -14,7 +14,6 @@ export default {
     currentNum: 0,
     record: [],
     webSocket: null,
-    permissions: [],
   },
 
   mutations: {
@@ -25,9 +24,6 @@ export default {
       state.userinfo = userinfo
       storage.setObj(constants.userinfo, userinfo)
     },
-    SET_PERMISSIONS: (state, permissions) => {
-      state.permissions = permissions
-    },
     SET_TOKEN: (state, token) => {
       state.token = token
       storage.setStr(constants.token, token)

+ 1 - 1
src/utils/axios.js

@@ -66,7 +66,7 @@ _axios.interceptors.response.use(
       }).then(r => {})
       return Promise.reject(response.data)
     }
-    if (code === 402) {
+    if (code === 402  || code===201) {
       Notification.error({
         title: '权限不足',
         message: message

+ 63 - 24
src/utils/permissions.js

@@ -2,18 +2,19 @@ import Store from '@/store'
 import Api from '@/api'
 export default {
   //专利数据库权限
-  hasRole(projectId, roles){
-    if (!projectId) {
-      return true
-    }
-    const permissions = Store.getters && Store.getters.permissions
-    const p = permissions[projectId]
-    return p === 0 || roles.indexOf(p) !== -1
-  },
+  // hasRole(projectId, roles){
+  //   if (!projectId) {
+  //     return true
+  //   }
+  //   const permissions = Store.getters && Store.getters.permissions
+  //   const p = permissions[projectId]
+  //   return p === 0 || roles.indexOf(p) !== -1
+  // },
+ 
   //专利数据库权限
-  hasPermission(sign){
-    return (Store.state.admin.permission).indexOf(sign) !== -1
-  },
+  // hasPermission(sign){
+  //   return (Store.state.admin.permission).indexOf(sign) !== -1
+  // },
   //报告权限
   reportPermission(reportId, roles){
     if(!reportId){
@@ -41,20 +42,53 @@ export default {
     return result
   },
 
+   /**
+   * 项目权限
+   * @param {*} projectId 项目ID
+   */
+  async projectPermission(projectId){
+    var data = {}
+    if(sessionStorage.getItem('projectPermission')){
+      data = JSON.parse(sessionStorage.getItem('projectPermission'))
+    }
+    var obj = data[projectId]
+    if(!obj){
+
+    }
+    if(!obj){
+      return false
+    }
+    return true
+  },
+  /**
+   * 功能权限
+   * @param {String} str 
+   */
+  FunPermissions(str){
+    const user = Store.state.user.userinfo
+    if(user.roleType){
+      return true
+    }
+    const permissionList = Store.state.permission.permission
+    return permissionList.includes(str)
+  },
   /**
    * 产品权限
-   * @param {number} id //产品id或者产品类别id
-   * @param {number} type //类型,1是产品,2是产品类别
+   * @param {*} id //产品id或者产品类别id
+   * @param {*} type //类型,1是产品类别,2是产品
    */
   async producePermission(id,type){
+    if(!id || !type){
+      return false
+    }
     const user = Store.state.user.userinfo
     var data = {}
-    if(type == 1){
+    if(type == 2){
       var str = sessionStorage.getItem('product')
       if(str){
         data = JSON.parse(str)
       }
-    }else if(type == 2){
+    }else if(type == 1){
       var str = sessionStorage.getItem('productCategory')
       if(str){
         data = JSON.parse(str)
@@ -62,23 +96,27 @@ export default {
     }
     var obj = data[id]
     if(!obj){
-      var params = {
-        searchQuery:`id=${id}`
-      }
+      
+      var searchQuery = ''
       var api = ''
-      if(type == 1){
+      if(type == 2){
         api = 'queryProduct'
-      }else if(type == 2){
+        searchQuery = `product_id=${id}`
+      }else if(type == 1){
         api = 'queryProductCategory'
+        searchQuery = `category_id=${id}`
       }
-      Api[api](params).then(response=>{
+      var params = {
+        searchQuery:searchQuery
+      }
+      await Api[api](params).then(response=>{
         if(response.code == 200){
           var d = response.data.data
           if(d && d.length>0){
             data[d[0].id] = d[0]
-            if(type == 1){
+            if(type == 2){
               sessionStorage.setItem('product',JSON.stringify(data))
-            }else if(type == 2){
+            }else if(type == 1){
               sessionStorage.setItem('productCategory',JSON.stringify(data))
             }
             obj = d[0]
@@ -89,12 +127,13 @@ export default {
     if(!obj){
       return false
     }
-    if(obj.createdId == user.id){
+    if(obj.createId == user.id){
       return true
     }
     if(obj.adminIds && obj.adminIds.includes(user.id)){
       return true
     }
+
     return false
   }
 }

+ 4 - 2
src/views/analyse/custom/index.vue

@@ -82,6 +82,7 @@ export default {
   props: {},
   data() {
     return {
+        enable:[],
         activeItem:[],
         // treeList:[],
         showChart:false,
@@ -90,7 +91,7 @@ export default {
         components:'TabData',
         saveType: 1,
         loadingBtn:false,
-        id:null
+        id:null,
     };
   },
   watch: {},
@@ -680,7 +681,7 @@ export default {
       this.handleClose()
     },
     async handleSelect(key) {
-        this.id = ley
+        this.id = key
       let source = {
         x: [],
         y: []
@@ -690,6 +691,7 @@ export default {
       this.loading = true
       const response = await this.$api.queryAnalyseDetail({id:key})
       this.$store.commit('SET_CHART_FORM', JSON.parse(JSON.stringify(response.data)))
+      this.form.search = this.search
       if (this.enable.indexOf(this.form.setting.type) === -1) {
         this.form.setting.config.line.enable = false
       }

+ 7 - 2
src/views/components/drawer/Field.vue

@@ -212,9 +212,14 @@ export default {
     getBackground(node,data){
       let color = {
         '1':'rgb(49,97,146)',
-        '2':'rgb(64,158,255)'
+        '2':'rgb(64,158,255)',
+        '3':'#67C23A',
       }
-      return color[node.level]
+      if(color[node.level]){
+        return color[node.level]
+      }
+      return '#E6A23C'
+      
     },
     handleCurrentChange(val) {
       this.queryParams.current = val;

+ 1 - 1
src/views/layout/components/guide.js

@@ -296,7 +296,7 @@ export const guide = {
                     return false
                 }
                 var step = steps[title].filter(item=>{
-                    return !item.sign || this.$permission(item.sign)
+                    return !item.sign
                 })
                 const drivers =  driver({
                     ...config,

+ 2 - 27
src/views/layout/index.vue

@@ -70,14 +70,13 @@ export default {
     ...mapGetters(['projectId', 'userinfo','webSocket']),
   },
   created(){
-    this.getPermissionList()
+   
     this.connectWebSocket(this.userinfo.id)
   },
   async mounted() {
     this.$store.commit('SET_PREFIX', '/')
     
     this.getRouter()
-    // await this.getPermissions() 
     if (this.id) {
       this.$store.commit('SET_PROJECT_ID', parseInt(this.id))
     }
@@ -95,12 +94,6 @@ export default {
         this.openGuide(this.$route.meta.sign)
       }
     },
-    //获取专利数据库权限
-    async getPermissions() {
-      const response = await this.$api.getPermissions()
-      this.$store.commit('SET_PERMISSIONS', response.data)
-    },
-    
 
     //获取路由信息
     getRouter(){
@@ -113,25 +106,7 @@ export default {
         path: '/home'
       })
     },
-    //修改权限
-  changePermission(){
-    this.webSocket.onmessage = (e) => {
-      if(JSON.parse(e.data).code=='903' ){
-        this.getPermissionList()
-      }
-    }
-  },
-  //获取权限
-  getPermissionList(){
-    var code = "6a8d3f4d1d5f11eda41c00163e2f0200;5051395c24e311eda41c00163e2f0200;a97c468b924111ed905500163e2f0200"
-    this.$api.getPermissionList({code:code}).then(response=>{
-        this.$store.commit('SET_ADMIN_PERMISSION', response.data)
-      }).catch(error=>{
-        this.$store.commit('SET_ADMIN_PERMISSION', [])
-      })
-    },
-    
-  
+ 
   },
 
   

+ 10 - 1
src/views/layout/mixins/index.js

@@ -65,7 +65,16 @@ export const commonData={
       this.$api.getMatter([]).then(response => {
         this.$store.commit("SET_Matter",response.data.data)
       })
-    }
+    },
+    //获取权限
+    getPermissionList(){
+      var code = "e424f3cc4f8138f0f68bef092b92212f,6a8d3f4d1d5f11eda41c00163e2f0200"
+      this.$api.getPermissionList({code:code}).then(response=>{
+        this.$store.commit('SET_PERMISSION', response.data)
+      }).catch(error=>{
+        this.$store.commit('SET_PERMISSION', [])
+      })
+    },
   }
 }
 

+ 1 - 0
src/views/login/index.vue

@@ -258,6 +258,7 @@ export default {
             this.getUserInfo()
             this.getScenario()
             this.getMatter()
+            this.getPermissionList()
       }).catch(error => {
         this.getCode()
         this.btnLoading = false

+ 26 - 7
src/views/product/components/framework/viewIndex.vue

@@ -32,28 +32,28 @@
               <span class="custom-tree-node" slot-scope="{ node, data }">
                 <span>{{ node.label }}</span>
                 <span style="padding-left: 10px;">
-                  <el-button type="text" size="mini" @click.stop.native="append(data, node)">
+                  <el-button type="text" size="mini" @click.stop.native="nodeEvent(data, node,'append')">
                     <el-tooltip class="item" effect="dark" content="添加子级分类节点" placement="bottom-start">
                       <i class="el-icon-plus" style="font-size: 16px;"></i>
                     </el-tooltip>
                   </el-button>
                 </span>
                 <span style="padding-left: 10px;">
-                  <el-button type="text" size="mini" @click.stop.native="edit(data, node)">
+                  <el-button type="text" size="mini" @click.stop.native="nodeEvent(data, node,'edit')">
                     <el-tooltip class="item" effect="dark" content="编辑分类节点" placement="bottom-start">
                       <i class="el-icon-edit-outline" style="font-size: 16px;"></i>
                     </el-tooltip>
                   </el-button>
                 </span>
                 <span style="padding-left: 10px;">
-                  <el-button type="text" size="mini" @click.stop.native="remove(data, node)">
+                  <el-button type="text" size="mini" @click.stop.native="nodeEvent(data, node,'remove')">
                     <el-tooltip class="item" effect="dark" content="删除分类节点" placement="bottom-start">
                       <i class="el-icon-delete" style="font-size: 16px;"></i>
                     </el-tooltip>
                   </el-button>
                 </span>
                 <span style="padding-left: 10px;">
-                  <el-button type="text" size="mini" @click.stop.native="copy(data, node)">
+                  <el-button type="text" size="mini" @click.stop.native="nodeEvent(data, node,'copy')">
                     <el-tooltip class="item" effect="dark" content="复制分类架构节点" placement="bottom-start">
                       <i class="el-icon-document-copy" style="font-size: 16px;"></i>
                     </el-tooltip>
@@ -206,7 +206,11 @@ export default {
       }
     },
     // 子组件传来的值
-    handleOption({ val, row }) {
+    async handleOption({ val, row }) {
+      if(!(await this.$permission.producePermission(this.id,this.type))){
+        this.$showPermissionDialog()
+        return false
+      }
       // console.log(val, row);
       switch (val) {
         case '0'://编辑
@@ -254,7 +258,11 @@ export default {
       });
     },
     // 按钮新增分类节点
-    handleAppend() {
+    async handleAppend() {
+      if(!(await this.$permission.producePermission(this.id,this.type))){
+        this.$showPermissionDialog()
+        return false
+      }
       this.$refs.classifyNode.open(null, this.row)
     },
     // 根据产品名称查询产品
@@ -278,6 +286,13 @@ export default {
       })
 
     },
+    async nodeEvent(data, node,eventName){
+      if(!(await this.$permission.producePermission(this.id,this.type))){
+        this.$showPermissionDialog()
+        return false
+      }
+      this[eventName](data,node)
+    },
     // 树节点上的新增
     append(data, node) {
       this.$refs.classifyNode.open(null, this.row, data)
@@ -306,7 +321,11 @@ export default {
       }
     },
     // 按钮复制分类架构
-    handleCopy() {
+    async handleCopy() {
+      if(!(await this.$permission.producePermission(this.id,this.type))){
+        this.$showPermissionDialog()
+        return false
+      }
       this.nodeId = null
       this.openNodeCopy()
     },

+ 10 - 3
src/views/product/components/index.vue

@@ -184,8 +184,11 @@ export default {
       })
     },
     // 子组件编辑等事件
-    handleOption({ val, row }) {
-      
+    async handleOption({ val, row }) {
+      if(!(await this.$permission.producePermission(row.id,1))){
+        this.$showPermissionDialog()
+        return false
+      }
       switch (val) {
         case '0'://编辑
           this.$refs.addEditCategory.open(row)
@@ -215,7 +218,11 @@ export default {
       }
     },
     //孙组件操作列方法
-    handleOption2({ option, row }){
+    async handleOption2({ option, row }){
+      if(!(await this.$permission.producePermission(row.id,2))){
+        this.$showPermissionDialog()
+        return false
+      }
       switch (option) {
         case '0'://编辑
           this.$refs.addEditProduct.open(row)

+ 2 - 1
src/views/project/patentDetails/components/PatentField.vue

@@ -368,7 +368,8 @@ export default {
       }
       this.$api.getCustomFieldValues(params).then(response => {
         if (response.code == 200) {
-          item.selected = response.data.data
+          // item.selected = response.data.data
+          this.$set(item,'selected',response.data.data)
           switch (item.type) {
             case 0://数字,日期,文字
             case 1:

+ 3 - 3
src/views/project/patentDetails/components/patentDetails.vue

@@ -244,17 +244,17 @@ export default {
       menuList2: [
         {
           value: 'Permit',
-          show: this.$permission('/workspace/patent/worth') ? false : true,
+          // show: this.$permission('/workspace/patent/worth') ? false : true,
           label: '许可历史'
         },
         {
           value: 'ProductManage',
-          show: this.$permission('/workspace/product') ? false : true,
+          // show: this.$permission('/workspace/product') ? false : true,
           label: '商品化'
         },
         {
           value: 'patentWorth',
-          show: this.$permission('/workspace/patent/worth') ? false : true,
+          // show: this.$permission('/workspace/patent/worth') ? false : true,
           label: '价值曲线'
         },
         {

+ 1 - 2
src/views/report/components/index.vue

@@ -28,8 +28,7 @@
                 v-if="dictMessage.REPORT_TYPE && dictMessage.REPORT_TYPE.length > 0">
                 <!-- 遍历按钮 -->
                 <el-dropdown-item v-for="item in dictMessage.REPORT_TYPE.filter(item => !['6'].includes(item.value))"
-                  :key="item.label" @click.native="handleAnalyse(item.value)"
-                  v-if="$permission('/pcs/report/add/' + item.permission)">{{ item.label }}</el-dropdown-item>
+                  :key="item.label" @click.native="handleAnalyse(item.value)">{{ item.label }}</el-dropdown-item>
               </el-dropdown-menu>
             </el-dropdown>
             <el-button type="primary" class="margin-left_10" size="small" @click="showField">显示栏位管理</el-button>

+ 1 - 1
src/views/report/components/patentList/components/customFields/components/mixins/index.js

@@ -27,8 +27,8 @@ export default {
         if (obj) {
           num = obj.number
         }
-        return num
       }
+      return num
     },
   },
 }

+ 8 - 3
src/views/report/components/patentList/components/customFields/index.vue

@@ -154,7 +154,9 @@ export default {
     },
     // 点击面板中的搜索
     handleSearch(row) {
-      this.getOptions(row)
+      // this.getOptions(row)
+      //查统计todo统计接口
+      this.esCountAnalysis(row)
     },
     // 点击当前面板
     async handleCollapse(current, data, type) {
@@ -192,8 +194,7 @@ export default {
               break;
           }
         }
-        //查统计todo统计接口
-        this.esCountAnalysis(row)
+        
       }
     },
     esCountAnalysis(row) {
@@ -352,6 +353,8 @@ export default {
         // 分类选择:获取树类型
         if ([7, 8, 9].includes(data[i].filedKind) || (data[i].filedKind == 0 && data[i].type == 'tree')) {
           this.fieldTree.push(data[i])
+          //查统计todo统计接口
+          this.esCountAnalysis(data[i])
           continue;
         }
         data[i].ifHidden = true
@@ -369,6 +372,8 @@ export default {
             data[i].ifHidden = false
             this.field.push(data[i])
             this.getSelect(data[i])
+            //查统计todo统计接口
+           this.esCountAnalysis(data[i])
             break;
           }
         }

+ 1 - 2
src/views/report/components/productResult/productResult.vue

@@ -16,8 +16,7 @@
               <!-- 遍历按钮 -->
               <el-dropdown-item
                 v-for="item in dictMessage.REPORT_TYPE.filter(item => !['3', '5', '6'].includes(item.value))"
-                :key="item.label" @click.native="handleAnalyse(item.value)"
-                v-if="$permission('/pcs/report/add/' + item.permission)">{{ item.label }}</el-dropdown-item>
+                :key="item.label" @click.native="handleAnalyse(item.value)">{{ item.label }}</el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
           <!-- <div style="display:flex; justify-content:flex-end;align-items:center" v-if="reportType != 4">