Explorar o código

增加数据权限缓存 新增数据权限组件

Z hai 1 ano
pai
achega
cca09cb5a5

+ 12 - 0
src/api/system/organization/index.js

@@ -144,3 +144,15 @@ export async function listAllUserBind () {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+/**
+ * 获取当前登陆用户数据权限部门数据
+ * @param
+ */
+export async function getCurrentUserAuthorityDeptAPI () {
+  const res = await request.post('/main/user/getCurrentUserAuthorityDepts');
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

BIN=BIN
src/assets/logo.png


+ 60 - 0
src/components/authSelection/index.vue

@@ -0,0 +1,60 @@
+<template>
+  <div>
+    <ele-tree-select
+      clearable
+      :data="deptTreeList"
+      v-model="selectVal"
+      valueKey="id"
+      labelKey="name"
+      :show-checkbox="true"
+      :check-strictly="true"
+      multiple
+      collapseTags
+      filterable
+      placeholder="请选择"
+      default-expand-all
+    />
+  </div>
+</template>
+<script>
+  import { mapGetters } from 'vuex';
+
+  export default {
+    name: 'index',
+    model: {
+      prop: 'value',
+      event: 'updateVal'
+    },
+    props: {
+      value: {
+        type: String,
+        default: ''
+      }
+    },
+    data() {
+      return {
+        deptTreeList: []
+      };
+    },
+    computed: {
+      ...mapGetters(['user']),
+      selectVal: {
+        set(val) {
+          this.$emit('updateVal', val.join(','));
+        },
+        get() {
+          return this.value ? this.value.split(',') : [];
+        }
+      }
+    },
+    mounted() {
+      this.deptTreeList = this.$util.toTreeData({
+        data: this.user.authorityDept.groupList,
+        idField: 'id',
+        parentIdField: 'parentId'
+      });
+    }
+  };
+</script>
+
+<style scoped lang="scss"></style>

+ 2 - 0
src/main.js

@@ -16,7 +16,9 @@ import DictSelection from '@/components/Dict/DictSelection';
 import TinymceEditor from '@/components/TinymceEditor/index.vue';
 // import SvgIcon from '@/components/FormGenerator/components/SvgIcon'; // svg component
 import HeaderTitle from '@/components/header-title';
+import authSelection from '@/components/authSelection';
 Vue.component('HeaderTitle', HeaderTitle);
+Vue.component('authSelection', authSelection);
 
 // // register globally
 Vue.component('tinymce', TinymceEditor);

+ 22 - 10
src/store/modules/user.js

@@ -4,6 +4,7 @@
 import { formatMenus, toTreeData, formatTreeData } from 'ele-admin';
 import { USER_MENUS } from '@/config/setting';
 import { getResourcesTree } from '@/api/layout';
+import { getCurrentUserAuthorityDeptAPI } from '@/api/system/organization';
 
 const formatRouter = (list) => {
   let menuList = []; // menuType
@@ -47,31 +48,42 @@ export default {
     // 当前登录用户的权限路由
     authoritiesRouter: [],
     // 当前登录用户的角色
-    roles: []
+    roles: [],
+    // 当前登录用户的数据权限部门数据
+    authorityDept: {}
   },
   mutations: {
     // 设置登录用户的信息
-    setUserInfo (state, info) {
+    setUserInfo(state, info) {
       state.info = info;
     },
     // 设置登录用户的菜单
-    setMenus (state, menus) {
+    setMenus(state, menus) {
       state.menus = menus;
     },
     // 设置登录用户的权限
-    setAuthorities (state, authorities) {
+    setAuthorities(state, authorities) {
       state.authorities = authorities;
     },
     // 设置登录用户的权限路由
-    setAuthoritiesRouter (state, authoritiesRouter) {
+    setAuthoritiesRouter(state, authoritiesRouter) {
       state.authoritiesRouter = authoritiesRouter;
     },
     // 设置登录用户的角色
-    setRoles (state, roles) {
+    setRoles(state, roles) {
       state.roles = roles;
+    },
+    // 当前登录用户的数据权限部门数据
+    setAuthorityDept(state, info) {
+      state.authorityDept = info;
     }
   },
   actions: {
+    async getCurrentUserAuthorityDept({ commit }) {
+      const info = await getCurrentUserAuthorityDeptAPI();
+      commit('setAuthorityDept', info);
+    },
+
     /**
      * 请求用户信息、权限、角色、菜单
      */
@@ -105,7 +117,7 @@ export default {
     //   return { menus, homePath };
     // },
     //动态路由
-    async fetchUserInfo ({ commit }) {
+    async fetchUserInfo({ commit }) {
       const result = await getResourcesTree().catch(() => {});
       const list = result?.filter((i) => i.path === '/page-main-data');
       if (!list?.length) {
@@ -157,19 +169,19 @@ export default {
     /**
      * 更新用户信息
      */
-    setInfo ({ commit }, value) {
+    setInfo({ commit }, value) {
       commit('setUserInfo', value);
     },
     /**
      * 更新菜单数据
      */
-    setMenus ({ commit }, value) {
+    setMenus({ commit }, value) {
       commit('setMenus', value);
     },
     /**
      * 更新菜单的badge
      */
-    setMenuBadge ({ commit, state }, { path, value, color }) {
+    setMenuBadge({ commit, state }, { path, value, color }) {
       const menus = formatTreeData(state.menus, (m) => {
         if (path === m.path) {
           return {

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

@@ -145,7 +145,7 @@ export default {
             } else {
               localStorage.removeItem('accountInfo');
             }
-
+            this.$store.dispatch('user/getCurrentUserAuthorityDept');
             this.goHome();
           })
           .catch((e) => {

+ 4 - 2
src/views/system/role/components/role-data-auth.vue

@@ -116,8 +116,10 @@ export default {
     /* 保存权限分配 */
     save() {
       this.loading = true;
-      const ids = this.$refs.tree.getCheckedKeys().concat(this.$refs.tree.getHalfCheckedKeys());
-      this.form.dataScopeDeptIds = ids.join(',');
+      if(this.form.dataScope=='2'){
+        const ids = this.$refs.tree.getCheckedKeys().concat(this.$refs.tree.getHalfCheckedKeys());
+        this.form.dataScopeDeptIds = ids.join(',');
+      }
       putRoles(this.form)
         .then((msg) => {
           this.loading = false;

+ 61 - 56
src/views/workforceManagement/schedule/components/use-search.vue

@@ -1,67 +1,72 @@
 <!-- 搜索表单 -->
 <template>
-    <el-form label-width="77px" size="small" class="ele-form-search" @keyup.enter.native="search" @submit.native.prevent>
-        <el-row :gutter="10">
-            <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-                <el-form-item label="名称:">
-                    <el-input clearable size="small" v-model="where.name" placeholder="请输入排班组名称" />
-                </el-form-item>
-            </el-col>
+  <el-form label-width="77px" size="small" class="ele-form-search" @keyup.enter.native="search" @submit.native.prevent>
+    <el-row :gutter="10">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="名称:">
+          <el-input clearable size="small" v-model="where.name" placeholder="请输入排班组名称"/>
+        </el-form-item>
+      </el-col>
 
-            <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-                <el-form-item label="状态:">
-                    <el-select v-model="where.status">
-                        <el-option label="发布" :value="1" />
-                        <el-option label="草稿" :value="0" />
-                    </el-select>
-                </el-form-item>
-            </el-col>
-            <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-                <el-form-item>
-                    <el-button size="small" type="primary" icon="el-icon-search" class="ele-btn-icon" @click="search">
-                        查询
-                    </el-button>
-                    <el-button size="small" type="primary" icon="el-icon-refresh-left" class="ele-btn-icon" @click="reset">
-                        重置
-                    </el-button>
-                    <slot></slot>
-                </el-form-item>
-            </el-col>
-        </el-row>
-    </el-form>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="状态:">
+          <el-select v-model="where.status" style="width: 100%">
+            <el-option label="发布" :value="1"/>
+            <el-option label="草稿" :value="0"/>
+          </el-select>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="组织机构:" label-width="100px">
+          <auth-selection v-model="where.deptIds" style="width: 100%"></auth-selection>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item>
+          <el-button size="small" type="primary" icon="el-icon-search" class="ele-btn-icon" @click="search">
+            查询
+          </el-button>
+          <el-button size="small" type="primary" icon="el-icon-refresh-left" class="ele-btn-icon" @click="reset">
+            重置
+          </el-button>
+          <slot></slot>
+        </el-form-item>
+      </el-col>
+    </el-row>
+  </el-form>
 </template>
-  
+
 <script>
 export default {
-    data() {
-        // 默认表单数据
-        const defaultWhere = {
-            name: '',
-            status: '',
+  data() {
+    // 默认表单数据
+    const defaultWhere = {
+      name: '',
+      status: '',
+      deptIds: '',
 
-        };
-        return {
-            // 表单数据
-            where: { ...defaultWhere }
-        };
-    },
-    computed: {
-        // 是否开启响应式布局
-        styleResponsive() {
-            return this.$store.state.theme.styleResponsive;
-        }
+    };
+    return {
+      // 表单数据
+      where: {...defaultWhere}
+    };
+  },
+  computed: {
+    // 是否开启响应式布局
+    styleResponsive() {
+      return this.$store.state.theme.styleResponsive;
+    }
+  },
+  methods: {
+    /* 搜索 */
+    search() {
+      this.$emit('search', this.where);
     },
-    methods: {
-        /* 搜索 */
-        search() {
-            this.$emit('search', this.where);
-        },
-        /*  重置 */
-        reset() {
-            this.where = { ...this.defaultWhere };
-            this.search();
-        }
+    /*  重置 */
+    reset() {
+      this.where = {...this.defaultWhere};
+      this.search();
     }
+  }
 };
 </script>
-