郑永安
2023-06-19 c8188c0fc9edf6ea3feda5b6f11dcb014af2a89e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<template>
  <div class="app-container">
    <el-card class="box-card">
      <div slot="header" class="clearfix">
        <span style="float:left">请选择下列菜单:</span>
        <el-button style="float: right;" type="primary" @click="onSubmit">{{ $t('common.save') }}</el-button>
      </div>
      <el-tree
        ref="tree"
        :data="routerTree"
        show-checkbox
        node-key="id"
        :default-expanded-keys="[2]"
        :default-checked-keys="[1]"
        :props="defaultProps"
      ></el-tree>
    </el-card>
  </div>
</template>
 
<script>
import constantRoutes from '@/router/constroutes';
import { batchAddPermission, getPermissionList } from '@/api/permisson';
 
export default {
  data() {
    return {
      disabled: false,
      routerTree: [],
      defaultProps: {
        children: 'children',
        label: 'name'
      }
    };
  },
  mounted() {
    this.getPermissionList();
    this.getRouterTree();
  },
  methods: {
    handleView(id) {
      this.handleEdit(id);
      this.disabled = true;
    },
    getRouterTree() {
      const filterRoutes = [];
 
      for (let i = 0; i < constantRoutes.length; i++) {
        let item = constantRoutes[i];
 
        if (i > 1 && item.children) {
          item.children = item.children.filter(i => !i.hidden);
 
          if (item.children.length === 1) {
            filterRoutes.push(item.children[0]);
          } else {
            filterRoutes.push(item);
          }
        }
      }
 
      this.routerTree = filterRoutes;
    },
    async getPermissionList() {
      const res = await getPermissionList();
      if (!res || !res.result) {
        return;
      }
      let keys = res.data && res.data.list.map(item => item.targetid);
      const username = this.$store.getters.username;
      if (username === 'admin' || username === 'superadmin') {
        keys = Array.from(Array(100), (v, k) => k);
      }
      this.$refs.tree.setCheckedKeys(keys);
    },
    async onSubmit() {
      const checkedNodes = this.$refs.tree.getCheckedNodes();
      const data = checkedNodes.map(item => {
        return {
          targetid: item.id,
          parentid: item.parentId,
          permissiontype: item.name
        };
      });
      const res = await batchAddPermission(data);
      if (!res || !res.result) {
        this.$message(this.$t('message.save_fail'), 'error');
        return;
      }
 
      this.$message(this.$t('message.save_success'), 'success');
    }
  }
};
</script>