用户管理&角色管理
This commit is contained in:
		@@ -218,7 +218,7 @@ export default {
 | 
			
		||||
	float: left;
 | 
			
		||||
	height: 84px !important;
 | 
			
		||||
	line-height: 84px !important;
 | 
			
		||||
	color: #999093 !important;
 | 
			
		||||
	color: transparent !important;
 | 
			
		||||
	padding: 0 5px !important;
 | 
			
		||||
	font-size: 18px;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -224,6 +224,10 @@ input, textarea{
 | 
			
		||||
      left:20px;
 | 
			
		||||
      font-size:21px !important
 | 
			
		||||
    }
 | 
			
		||||
    .el-message-box__input {
 | 
			
		||||
      padding-left: 57px;
 | 
			
		||||
      padding-right: 15px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .el-message-box__btns {
 | 
			
		||||
    padding-right: 32px;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								src/views/system/components/statusBtn.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/views/system/components/statusBtn.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <span class="dot" :class="injectData.status === 1 ? 'red' : 'green'"></span>
 | 
			
		||||
    <span>{{ state }}</span>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: "StatusBtn",
 | 
			
		||||
  props: {
 | 
			
		||||
    injectData: {
 | 
			
		||||
      type: Object,
 | 
			
		||||
      default: () => ({}),
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    state() {
 | 
			
		||||
      return this.injectData.status === 1 ? "停用" : "启用";
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped>
 | 
			
		||||
.dot {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  width: 6px;
 | 
			
		||||
  height: 6px;
 | 
			
		||||
  border-radius: 3px;
 | 
			
		||||
  vertical-align: middle;
 | 
			
		||||
  margin-right: 8px;
 | 
			
		||||
}
 | 
			
		||||
.green {
 | 
			
		||||
  background: #10dc76;
 | 
			
		||||
}
 | 
			
		||||
.red {
 | 
			
		||||
  background: #ff5656;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										38
									
								
								src/views/system/components/statusBtn2.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/views/system/components/statusBtn2.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <span class="dot" :class="injectData.status === 1 ? 'red' : 'green'"></span>
 | 
			
		||||
    <span>{{ state }}</span>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: "StatusBtn2",
 | 
			
		||||
  props: {
 | 
			
		||||
    injectData: {
 | 
			
		||||
      type: Object,
 | 
			
		||||
      default: () => ({}),
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    state() {
 | 
			
		||||
      return this.injectData.status === 1 ? "关闭" : "开启";
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped>
 | 
			
		||||
.dot {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  width: 6px;
 | 
			
		||||
  height: 6px;
 | 
			
		||||
  border-radius: 3px;
 | 
			
		||||
  vertical-align: middle;
 | 
			
		||||
  margin-right: 8px;
 | 
			
		||||
}
 | 
			
		||||
.green {
 | 
			
		||||
  background: #10dc76;
 | 
			
		||||
}
 | 
			
		||||
.red {
 | 
			
		||||
  background: #ff5656;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										41
									
								
								src/views/system/components/statusBtn3.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/views/system/components/statusBtn3.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <span
 | 
			
		||||
      class="dot"
 | 
			
		||||
      :class="injectData.resultCode === 0 ? 'green' : 'red'"
 | 
			
		||||
    ></span>
 | 
			
		||||
    <span>{{ state }}</span>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: "StatusBtn3",
 | 
			
		||||
  props: {
 | 
			
		||||
    injectData: {
 | 
			
		||||
      type: Object,
 | 
			
		||||
      default: () => ({}),
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    state() {
 | 
			
		||||
      return this.injectData.resultCode === 0 ? "成功" : "失败";
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped>
 | 
			
		||||
.dot {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  width: 6px;
 | 
			
		||||
  height: 6px;
 | 
			
		||||
  border-radius: 3px;
 | 
			
		||||
  vertical-align: middle;
 | 
			
		||||
  margin-right: 8px;
 | 
			
		||||
}
 | 
			
		||||
.green {
 | 
			
		||||
  background: #10dc76;
 | 
			
		||||
}
 | 
			
		||||
.red {
 | 
			
		||||
  background: #ff5656;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										38
									
								
								src/views/system/components/statusBtn4.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/views/system/components/statusBtn4.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <span class="dot" :class="injectData.result === 0 ? 'green' : 'red'"></span>
 | 
			
		||||
    <span>{{ state }}</span>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: "StatusBtn3",
 | 
			
		||||
  props: {
 | 
			
		||||
    injectData: {
 | 
			
		||||
      type: Object,
 | 
			
		||||
      default: () => ({}),
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    state() {
 | 
			
		||||
      return this.injectData.result === 0 ? "成功" : "失败";
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped>
 | 
			
		||||
.dot {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  width: 6px;
 | 
			
		||||
  height: 6px;
 | 
			
		||||
  border-radius: 3px;
 | 
			
		||||
  vertical-align: middle;
 | 
			
		||||
  margin-right: 8px;
 | 
			
		||||
}
 | 
			
		||||
.green {
 | 
			
		||||
  background: #10dc76;
 | 
			
		||||
}
 | 
			
		||||
.red {
 | 
			
		||||
  background: #ff5656;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										39
									
								
								src/views/system/components/statusBtn5.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/views/system/components/statusBtn5.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <el-switch
 | 
			
		||||
    v-model="status"
 | 
			
		||||
    type="text"
 | 
			
		||||
    size="small"
 | 
			
		||||
    @change="changeHandler"
 | 
			
		||||
  />
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  props: {
 | 
			
		||||
    injectData: {
 | 
			
		||||
      type: Object,
 | 
			
		||||
      default: () => ({}),
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      status: false,
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.mapToState();
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    mapToState() {
 | 
			
		||||
      this.status = this.injectData.status === 0 ? true : false;
 | 
			
		||||
    },
 | 
			
		||||
    changeHandler() {
 | 
			
		||||
      let params = {};
 | 
			
		||||
      params.id = this.injectData.id;
 | 
			
		||||
      params.status = this.status ? "0" : "1";
 | 
			
		||||
      params.username = this.injectData.username;
 | 
			
		||||
      this.$emit("emitData", params);
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
							
								
								
									
										162
									
								
								src/views/system/role/components/dataAuth.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								src/views/system/role/components/dataAuth.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,162 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <el-form :model="form" label-width="80px">
 | 
			
		||||
    <el-form-item label="角色名称">
 | 
			
		||||
      <el-input v-model="form.name" :disabled="true" />
 | 
			
		||||
    </el-form-item>
 | 
			
		||||
    <el-form-item label="角色标识">
 | 
			
		||||
      <el-input v-model="form.code" :disabled="true" />
 | 
			
		||||
    </el-form-item>
 | 
			
		||||
    <el-form-item label="权限范围">
 | 
			
		||||
      <el-select v-model="form.dataScope" style="width: 100%">
 | 
			
		||||
        <el-option
 | 
			
		||||
          v-for="item in dataScopeDictDatas"
 | 
			
		||||
          :key="parseInt(item.value)"
 | 
			
		||||
          :label="item.label"
 | 
			
		||||
          :value="parseInt(item.value)"
 | 
			
		||||
        ></el-option>
 | 
			
		||||
      </el-select>
 | 
			
		||||
    </el-form-item>
 | 
			
		||||
    <el-form-item
 | 
			
		||||
      label="数据权限"
 | 
			
		||||
      v-show="form.dataScope === SysDataScopeEnum.DEPT_CUSTOM"
 | 
			
		||||
    >
 | 
			
		||||
      <el-checkbox
 | 
			
		||||
        :checked="!form.deptCheckStrictly"
 | 
			
		||||
        @change="handleCheckedTreeConnect($event, 'dept')"
 | 
			
		||||
        >父子联动(选中父节点,自动选择子节点)</el-checkbox
 | 
			
		||||
      >
 | 
			
		||||
      <el-checkbox
 | 
			
		||||
        v-model="deptExpand"
 | 
			
		||||
        @change="handleCheckedTreeExpand($event, 'dept')"
 | 
			
		||||
        >展开/折叠</el-checkbox
 | 
			
		||||
      >
 | 
			
		||||
      <el-checkbox
 | 
			
		||||
        v-model="deptNodeAll"
 | 
			
		||||
        @change="handleCheckedTreeNodeAll($event, 'dept')"
 | 
			
		||||
        >全选/全不选</el-checkbox
 | 
			
		||||
      >
 | 
			
		||||
      <el-tree
 | 
			
		||||
        class="tree-border"
 | 
			
		||||
        :data="deptOptions"
 | 
			
		||||
        show-checkbox
 | 
			
		||||
        default-expand-all
 | 
			
		||||
        ref="dept"
 | 
			
		||||
        node-key="id"
 | 
			
		||||
        :check-strictly="form.deptCheckStrictly"
 | 
			
		||||
        empty-text="加载中,请稍后"
 | 
			
		||||
        :props="defaultProps"
 | 
			
		||||
      ></el-tree>
 | 
			
		||||
    </el-form-item>
 | 
			
		||||
  </el-form>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import { SystemDataScopeEnum } from "@/utils/constants";
 | 
			
		||||
import { getRole } from "@/api/system/role";
 | 
			
		||||
import { listSimpleDepts } from "@/api/system/dept";
 | 
			
		||||
import { DICT_TYPE, getDictDatas } from "@/utils/dict";
 | 
			
		||||
import { assignRoleDataScope } from "@/api/system/permission";
 | 
			
		||||
export default {
 | 
			
		||||
  name: "DataAuth",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      form: {
 | 
			
		||||
        id: undefined,
 | 
			
		||||
        name: undefined,
 | 
			
		||||
        code: undefined,
 | 
			
		||||
        deptIds: [],
 | 
			
		||||
        dataScope: undefined,
 | 
			
		||||
        deptCheckStrictly: false,
 | 
			
		||||
      },
 | 
			
		||||
      deptExpand: true,
 | 
			
		||||
      deptNodeAll: false,
 | 
			
		||||
      // 部门列表
 | 
			
		||||
      deptOptions: [], // 部门属性结构
 | 
			
		||||
      depts: [], // 部门列表
 | 
			
		||||
      defaultProps: {
 | 
			
		||||
        label: "name",
 | 
			
		||||
        children: "children",
 | 
			
		||||
      },
 | 
			
		||||
      // 枚举
 | 
			
		||||
      SysDataScopeEnum: SystemDataScopeEnum,
 | 
			
		||||
      // 数据字典
 | 
			
		||||
      dataScopeDictDatas: getDictDatas(DICT_TYPE.SYSTEM_DATA_SCOPE),
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    init(id) {
 | 
			
		||||
      this.form.id = id;
 | 
			
		||||
      getRole(id).then((res) => {
 | 
			
		||||
        this.form.name = res.data.name;
 | 
			
		||||
        this.form.code = res.data.code;
 | 
			
		||||
        this.form.dataScope = res.data.dataScope;
 | 
			
		||||
        // 获得部门列表
 | 
			
		||||
        listSimpleDepts().then((response) => {
 | 
			
		||||
          // 处理 deptOptions 参数
 | 
			
		||||
          this.deptOptions = [];
 | 
			
		||||
          this.deptOptions.push(...this.handleTree(response.data, "id"));
 | 
			
		||||
          this.depts = response.data;
 | 
			
		||||
          this.$refs.dept.setCheckedKeys(res.data.dataScopeDeptIds, false);
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    submitForm() {
 | 
			
		||||
      if (this.form.id !== undefined) {
 | 
			
		||||
        assignRoleDataScope({
 | 
			
		||||
          roleId: this.form.id,
 | 
			
		||||
          dataScope: this.form.dataScope,
 | 
			
		||||
          dataScopeDeptIds:
 | 
			
		||||
            this.form.dataScope !== SystemDataScopeEnum.DEPT_CUSTOM
 | 
			
		||||
              ? []
 | 
			
		||||
              : this.$refs.dept.getCheckedKeys(),
 | 
			
		||||
        }).then((response) => {
 | 
			
		||||
          this.$modal.msgSuccess("修改成功");
 | 
			
		||||
          this.$emit("successSubmitd");
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    formClear() {
 | 
			
		||||
      this.deptExpand = true;
 | 
			
		||||
      this.deptNodeAll = false;
 | 
			
		||||
      this.form = {
 | 
			
		||||
        id: undefined,
 | 
			
		||||
        name: undefined,
 | 
			
		||||
        code: undefined,
 | 
			
		||||
        deptIds: [],
 | 
			
		||||
        dataScope: undefined,
 | 
			
		||||
        deptCheckStrictly: false,
 | 
			
		||||
      };
 | 
			
		||||
    },
 | 
			
		||||
    // 树权限(父子联动)
 | 
			
		||||
    handleCheckedTreeConnect(value, type) {
 | 
			
		||||
      if (type === "menu") {
 | 
			
		||||
        this.form.menuCheckStrictly = value;
 | 
			
		||||
      } else if (type === "dept") {
 | 
			
		||||
        this.form.deptCheckStrictly = !value;
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    // 树权限(展开/折叠)
 | 
			
		||||
    handleCheckedTreeExpand(value, type) {
 | 
			
		||||
      if (type === "menu") {
 | 
			
		||||
        let treeList = this.menuOptions;
 | 
			
		||||
        for (let i = 0; i < treeList.length; i++) {
 | 
			
		||||
          this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;
 | 
			
		||||
        }
 | 
			
		||||
      } else if (type === "dept") {
 | 
			
		||||
        let treeList = this.deptOptions;
 | 
			
		||||
        for (let i = 0; i < treeList.length; i++) {
 | 
			
		||||
          this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    // 树权限(全选/全不选)
 | 
			
		||||
    handleCheckedTreeNodeAll(value, type) {
 | 
			
		||||
      if (type === "menu") {
 | 
			
		||||
        this.$refs.menu.setCheckedNodes(value ? this.menuOptions : []);
 | 
			
		||||
      } else if (type === "dept") {
 | 
			
		||||
        // this.$refs.dept.setCheckedNodes(value ? this.deptOptions: []);
 | 
			
		||||
        this.$refs.dept.setCheckedNodes(value ? this.depts : []);
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
							
								
								
									
										146
									
								
								src/views/system/role/components/menuAuth.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								src/views/system/role/components/menuAuth.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,146 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <el-form :model="form" label-width="80px">
 | 
			
		||||
    <el-form-item label="角色名称">
 | 
			
		||||
      <el-input v-model="form.name" :disabled="true" />
 | 
			
		||||
    </el-form-item>
 | 
			
		||||
    <el-form-item label="角色标识">
 | 
			
		||||
      <el-input v-model="form.code" :disabled="true" />
 | 
			
		||||
    </el-form-item>
 | 
			
		||||
    <el-form-item label="菜单权限">
 | 
			
		||||
      <el-checkbox
 | 
			
		||||
        v-model="menuExpand"
 | 
			
		||||
        @change="handleCheckedTreeExpand($event, 'menu')"
 | 
			
		||||
        >展开/折叠</el-checkbox
 | 
			
		||||
      >
 | 
			
		||||
      <el-checkbox
 | 
			
		||||
        v-model="menuNodeAll"
 | 
			
		||||
        @change="handleCheckedTreeNodeAll($event, 'menu')"
 | 
			
		||||
        >全选/全不选</el-checkbox
 | 
			
		||||
      >
 | 
			
		||||
      <el-tree
 | 
			
		||||
        class="tree-border"
 | 
			
		||||
        :data="menuOptions"
 | 
			
		||||
        show-checkbox
 | 
			
		||||
        ref="menu"
 | 
			
		||||
        node-key="id"
 | 
			
		||||
        :check-strictly="form.menuCheckStrictly"
 | 
			
		||||
        empty-text="加载中,请稍后"
 | 
			
		||||
        :props="defaultProps"
 | 
			
		||||
      ></el-tree>
 | 
			
		||||
    </el-form-item>
 | 
			
		||||
  </el-form>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import { getRole } from "@/api/system/role";
 | 
			
		||||
import { SystemDataScopeEnum } from "@/utils/constants";
 | 
			
		||||
import { assignRoleMenu, listRoleMenus } from "@/api/system/permission";
 | 
			
		||||
import { DICT_TYPE, getDictDatas } from "@/utils/dict";
 | 
			
		||||
import { listSimpleMenus } from "@/api/system/menu";
 | 
			
		||||
export default {
 | 
			
		||||
  name: "MenuAuth",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      form: {
 | 
			
		||||
        id: undefined,
 | 
			
		||||
        name: undefined,
 | 
			
		||||
        code: undefined,
 | 
			
		||||
        menuIds: [],
 | 
			
		||||
        menuCheckStrictly: true,
 | 
			
		||||
      },
 | 
			
		||||
      // 菜单列表
 | 
			
		||||
      menuOptions: [],
 | 
			
		||||
      menuExpand: false,
 | 
			
		||||
      menuNodeAll: false,
 | 
			
		||||
      SysDataScopeEnum: SystemDataScopeEnum,
 | 
			
		||||
      // 数据字典
 | 
			
		||||
      dataScopeDictDatas: getDictDatas(DICT_TYPE.SYSTEM_DATA_SCOPE),
 | 
			
		||||
      defaultProps: {
 | 
			
		||||
        label: "name",
 | 
			
		||||
        children: "children",
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    init(id) {
 | 
			
		||||
      this.form.id = id;
 | 
			
		||||
      getRole(id).then((res) => {
 | 
			
		||||
        this.form.name = res.data.name;
 | 
			
		||||
        this.form.code = res.data.code;
 | 
			
		||||
        listSimpleMenus().then((response) => {
 | 
			
		||||
          // 处理 menuOptions 参数
 | 
			
		||||
          this.menuOptions = [];
 | 
			
		||||
          this.menuOptions.push(...this.handleTree(response.data, "id"));
 | 
			
		||||
          // 获取角色拥有的菜单权限
 | 
			
		||||
          listRoleMenus(id).then((response) => {
 | 
			
		||||
            // 设置为严格,避免设置父节点自动选中子节点,解决半选中问题
 | 
			
		||||
            this.form.menuCheckStrictly = true;
 | 
			
		||||
            // 设置选中
 | 
			
		||||
            this.$refs.menu.setCheckedKeys(response.data);
 | 
			
		||||
            // 设置为非严格,继续使用半选中
 | 
			
		||||
            this.form.menuCheckStrictly = false;
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    submitForm() {
 | 
			
		||||
      if (this.form.id !== undefined) {
 | 
			
		||||
        assignRoleMenu({
 | 
			
		||||
          roleId: this.form.id,
 | 
			
		||||
          menuIds: [
 | 
			
		||||
            ...this.$refs.menu.getCheckedKeys(),
 | 
			
		||||
            ...this.$refs.menu.getHalfCheckedKeys(),
 | 
			
		||||
          ],
 | 
			
		||||
        }).then((response) => {
 | 
			
		||||
          this.$modal.msgSuccess("修改成功");
 | 
			
		||||
          this.$emit("successSubmitm");
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    formClear() {
 | 
			
		||||
      if (this.$refs.menu !== undefined) {
 | 
			
		||||
        this.$refs.menu.setCheckedKeys([]);
 | 
			
		||||
      }
 | 
			
		||||
      this.menuExpand = false;
 | 
			
		||||
      this.menuNodeAll = false;
 | 
			
		||||
      this.form = {
 | 
			
		||||
        id: undefined,
 | 
			
		||||
        name: undefined,
 | 
			
		||||
        code: undefined,
 | 
			
		||||
        menuIds: [],
 | 
			
		||||
        menuCheckStrictly: true,
 | 
			
		||||
      };
 | 
			
		||||
    },
 | 
			
		||||
    // 树权限(父子联动)
 | 
			
		||||
    handleCheckedTreeConnect(value, type) {
 | 
			
		||||
      if (type === "menu") {
 | 
			
		||||
        this.form.menuCheckStrictly = value;
 | 
			
		||||
      } else if (type === "dept") {
 | 
			
		||||
        this.form.deptCheckStrictly = !value;
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    // 树权限(展开/折叠)
 | 
			
		||||
    handleCheckedTreeExpand(value, type) {
 | 
			
		||||
      if (type === "menu") {
 | 
			
		||||
        let treeList = this.menuOptions;
 | 
			
		||||
        for (let i = 0; i < treeList.length; i++) {
 | 
			
		||||
          this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;
 | 
			
		||||
        }
 | 
			
		||||
      } else if (type === "dept") {
 | 
			
		||||
        let treeList = this.deptOptions;
 | 
			
		||||
        for (let i = 0; i < treeList.length; i++) {
 | 
			
		||||
          this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    // 树权限(全选/全不选)
 | 
			
		||||
    handleCheckedTreeNodeAll(value, type) {
 | 
			
		||||
      if (type === "menu") {
 | 
			
		||||
        this.$refs.menu.setCheckedNodes(value ? this.menuOptions : []);
 | 
			
		||||
      } else if (type === "dept") {
 | 
			
		||||
        // this.$refs.dept.setCheckedNodes(value ? this.deptOptions: []);
 | 
			
		||||
        this.$refs.dept.setCheckedNodes(value ? this.depts : []);
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
							
								
								
									
										129
									
								
								src/views/system/role/components/roleAdd.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								src/views/system/role/components/roleAdd.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,129 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <el-form ref="form" :rules="rules" label-width="100px" :model="form">
 | 
			
		||||
    <el-row>
 | 
			
		||||
      <el-col :span="24">
 | 
			
		||||
        <el-form-item label="角色编码" prop="code">
 | 
			
		||||
          <el-input v-model="form.code"></el-input>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
      </el-col>
 | 
			
		||||
      <el-col :span="24">
 | 
			
		||||
        <el-form-item label="角色名称" prop="name">
 | 
			
		||||
          <el-input v-model="form.name"></el-input>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
      </el-col>
 | 
			
		||||
    </el-row>
 | 
			
		||||
    <el-row>
 | 
			
		||||
      <el-col :span="12">
 | 
			
		||||
        <el-form-item label="角色顺序" prop="sort">
 | 
			
		||||
          <el-input-number
 | 
			
		||||
            v-model="form.sort"
 | 
			
		||||
            controls-position="right"
 | 
			
		||||
            :min="1"
 | 
			
		||||
            :max="999999999"
 | 
			
		||||
            style="width: 100%"
 | 
			
		||||
          ></el-input-number>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
      </el-col>
 | 
			
		||||
      <el-col :span="12">
 | 
			
		||||
        <el-form-item label="状态" prop="status" v-if="isEdit">
 | 
			
		||||
          <el-switch v-model="form.status"> </el-switch>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
      </el-col>
 | 
			
		||||
      <el-col :span="24">
 | 
			
		||||
        <el-form-item label="备注" prop="remark">
 | 
			
		||||
          <el-input v-model="form.remark"></el-input>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
      </el-col>
 | 
			
		||||
    </el-row>
 | 
			
		||||
  </el-form>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import { addRole, getRole, updateRole } from "@/api/system/role";
 | 
			
		||||
export default {
 | 
			
		||||
  name: "RoleAdd",
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      form: {
 | 
			
		||||
        id: "",
 | 
			
		||||
        code: "",
 | 
			
		||||
        name: "",
 | 
			
		||||
        sort: 1,
 | 
			
		||||
        status: 0,
 | 
			
		||||
        remark: "",
 | 
			
		||||
      },
 | 
			
		||||
      isEdit: false, //是否是编辑
 | 
			
		||||
      rules: {
 | 
			
		||||
        code: [
 | 
			
		||||
          { required: true, message: "角色编码不能为空", trigger: "blur" },
 | 
			
		||||
        ],
 | 
			
		||||
        name: [
 | 
			
		||||
          { required: true, message: "角色名称不能为空", trigger: "blur" },
 | 
			
		||||
        ],
 | 
			
		||||
        sort: [{ required: true }],
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    init(id) {
 | 
			
		||||
      if (id) {
 | 
			
		||||
        this.isEdit = true;
 | 
			
		||||
        this.form.id = id;
 | 
			
		||||
        getRole(id).then((res) => {
 | 
			
		||||
          if (res.code === 0) {
 | 
			
		||||
            this.form.id = res.data.id;
 | 
			
		||||
            this.form.code = res.data.code;
 | 
			
		||||
            this.form.name = res.data.name;
 | 
			
		||||
            this.form.sort = res.data.sort;
 | 
			
		||||
            this.form.remark = res.data.remark;
 | 
			
		||||
            this.form.status = res.data.status ? false : true;
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        this.isEdit = false;
 | 
			
		||||
        this.form.id = "";
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    submitForm() {
 | 
			
		||||
      this.$refs["form"].validate((valid) => {
 | 
			
		||||
        if (valid) {
 | 
			
		||||
          if (this.isEdit) {
 | 
			
		||||
            //编辑
 | 
			
		||||
            updateRole({
 | 
			
		||||
              id: this.form.id,
 | 
			
		||||
              code: this.form.code,
 | 
			
		||||
              name: this.form.name,
 | 
			
		||||
              sort: this.form.sort,
 | 
			
		||||
              remark: this.form.remark,
 | 
			
		||||
              status: this.form.status ? 0 : 1,
 | 
			
		||||
            }).then((res) => {
 | 
			
		||||
              if (res.code === 0) {
 | 
			
		||||
                this.$modal.msgSuccess("操作成功");
 | 
			
		||||
                this.$emit("successSubmit");
 | 
			
		||||
              }
 | 
			
		||||
            });
 | 
			
		||||
          } else {
 | 
			
		||||
            addRole({
 | 
			
		||||
              code: this.form.code,
 | 
			
		||||
              name: this.form.name,
 | 
			
		||||
              sort: this.form.sort,
 | 
			
		||||
              remark: this.form.remark,
 | 
			
		||||
              status: 0,
 | 
			
		||||
            }).then((res) => {
 | 
			
		||||
              if (res.code === 0) {
 | 
			
		||||
                this.$modal.msgSuccess("操作成功");
 | 
			
		||||
                this.$emit("successSubmit");
 | 
			
		||||
              }
 | 
			
		||||
            });
 | 
			
		||||
          }
 | 
			
		||||
        } else {
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    formClear() {
 | 
			
		||||
      this.$refs.form.resetFields();
 | 
			
		||||
      this.isEdit = false;
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
@@ -1,250 +1,180 @@
 | 
			
		||||
<template>
 | 
			
		||||
	<div class="app-container">
 | 
			
		||||
    <!-- <doc-alert title="功能权限" url="https://doc.iocoder.cn/resource-permission" />
 | 
			
		||||
		<!-- <doc-alert
 | 
			
		||||
      title="功能权限"
 | 
			
		||||
      url="https://doc.iocoder.cn/resource-permission"
 | 
			
		||||
    />
 | 
			
		||||
    <doc-alert title="数据权限" url="https://doc.iocoder.cn/data-permission" /> -->
 | 
			
		||||
    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
 | 
			
		||||
      <el-form-item label="角色名称" prop="name">
 | 
			
		||||
        <el-input v-model="queryParams.name" placeholder="请输入角色名称" clearable size="small" style="width: 240px"
 | 
			
		||||
                  @keyup.enter.native="handleQuery"/>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item label="角色标识" prop="code">
 | 
			
		||||
        <el-input v-model="queryParams.code" placeholder="请输入角色标识" clearable size="small" style="width: 240px"
 | 
			
		||||
                  @keyup.enter.native="handleQuery"/>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item label="状态" prop="status">
 | 
			
		||||
        <el-select v-model="queryParams.status" placeholder="角色状态" clearable size="small" style="width: 240px">
 | 
			
		||||
          <el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
 | 
			
		||||
        </el-select>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item label="创建时间" prop="createTime">
 | 
			
		||||
        <el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
 | 
			
		||||
                        range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item>
 | 
			
		||||
        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
 | 
			
		||||
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
    </el-form>
 | 
			
		||||
 | 
			
		||||
    <el-row :gutter="10" class="mb8">
 | 
			
		||||
      <el-col :span="1.5">
 | 
			
		||||
        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
 | 
			
		||||
                   v-hasPermi="['system:role:create']">新增</el-button>
 | 
			
		||||
      </el-col>
 | 
			
		||||
      <el-col :span="1.5">
 | 
			
		||||
        <el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
 | 
			
		||||
                   v-hasPermi="['system:role:export']">导出</el-button>
 | 
			
		||||
      </el-col>
 | 
			
		||||
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
 | 
			
		||||
    </el-row>
 | 
			
		||||
 | 
			
		||||
    <el-table v-loading="loading" :data="roleList">
 | 
			
		||||
      <el-table-column label="角色编号" prop="id" width="120" />
 | 
			
		||||
      <el-table-column label="角色名称" prop="name" :show-overflow-tooltip="true" width="150" />
 | 
			
		||||
      <el-table-column label="角色标识" prop="code" :show-overflow-tooltip="true" width="150" />
 | 
			
		||||
      <el-table-column label="角色类型" prop="type" width="80">
 | 
			
		||||
        <template v-slot="scope">
 | 
			
		||||
          <dict-tag :type="DICT_TYPE.SYSTEM_ROLE_TYPE" :value="scope.row.type"/>
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <el-table-column label="显示顺序" prop="sort" width="100" />
 | 
			
		||||
      <el-table-column label="状态" align="center" width="100">
 | 
			
		||||
        <template v-slot="scope">
 | 
			
		||||
          <el-switch v-model="scope.row.status" :active-value="0" :inactive-value="1" @change="handleStatusChange(scope.row)"/>
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
 | 
			
		||||
        <template v-slot="scope">
 | 
			
		||||
          <span>{{ parseTime(scope.row.createTime) }}</span>
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
 | 
			
		||||
        <template v-slot="scope">
 | 
			
		||||
          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
 | 
			
		||||
                     v-hasPermi="['system:role:update']">修改</el-button>
 | 
			
		||||
          <el-button size="mini" type="text" icon="el-icon-circle-check" @click="handleMenu(scope.row)"
 | 
			
		||||
                     v-hasPermi="['system:permission:assign-role-menu']">菜单权限</el-button>
 | 
			
		||||
          <el-button size="mini" type="text" icon="el-icon-circle-check" @click="handleDataScope(scope.row)"
 | 
			
		||||
                     v-hasPermi="['system:permission:assign-role-data-scope']">数据权限</el-button>
 | 
			
		||||
          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
 | 
			
		||||
                     v-hasPermi="['system:role:delete']">删除</el-button>
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
    </el-table>
 | 
			
		||||
 | 
			
		||||
    <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
 | 
			
		||||
		<!-- 搜索工作栏 -->
 | 
			
		||||
		<search-bar
 | 
			
		||||
			:formConfigs="formConfig"
 | 
			
		||||
			ref="searchBarForm"
 | 
			
		||||
			@headBtnClick="buttonClick" />
 | 
			
		||||
		<!-- 列表 -->
 | 
			
		||||
		<base-table
 | 
			
		||||
			:page="queryParams.pageNo"
 | 
			
		||||
			:limit="queryParams.pageSize"
 | 
			
		||||
			:table-props="tableProps"
 | 
			
		||||
			:table-data="list"
 | 
			
		||||
			:max-height="tableH">
 | 
			
		||||
			<method-btn
 | 
			
		||||
				v-if="tableBtn.length"
 | 
			
		||||
				slot="handleBtn"
 | 
			
		||||
				:width="230"
 | 
			
		||||
				label="操作"
 | 
			
		||||
				:method-list="tableBtn"
 | 
			
		||||
				@clickBtn="handleClick" />
 | 
			
		||||
		</base-table>
 | 
			
		||||
		<pagination
 | 
			
		||||
			:page.sync="queryParams.pageNo"
 | 
			
		||||
			:limit.sync="queryParams.pageSize"
 | 
			
		||||
			:total="total"
 | 
			
		||||
			@pagination="getList" />
 | 
			
		||||
 | 
			
		||||
    <!-- 添加或修改角色配置对话框 -->
 | 
			
		||||
    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
 | 
			
		||||
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
 | 
			
		||||
        <el-form-item label="角色名称" prop="name">
 | 
			
		||||
          <el-input v-model="form.name" placeholder="请输入角色名称" />
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
        <el-form-item label="角色标识" prop="code">
 | 
			
		||||
          <el-input v-model="form.code" placeholder="请输入角色标识" />
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
        <el-form-item label="角色顺序" prop="sort">
 | 
			
		||||
          <el-input-number v-model="form.sort" controls-position="right" :min="0" />
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
        <el-form-item label="备注">
 | 
			
		||||
          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
      </el-form>
 | 
			
		||||
      <div slot="footer" class="dialog-footer">
 | 
			
		||||
        <el-button type="primary" @click="submitForm">确 定</el-button>
 | 
			
		||||
        <el-button @click="cancel">取 消</el-button>
 | 
			
		||||
      </div>
 | 
			
		||||
    </el-dialog>
 | 
			
		||||
 | 
			
		||||
    <!-- 分配角色的数据权限对话框 -->
 | 
			
		||||
    <el-dialog title="分配数据权限" :visible.sync="openDataScope" width="500px" append-to-body>
 | 
			
		||||
      <el-form :model="form" label-width="80px">
 | 
			
		||||
        <el-form-item label="角色名称">
 | 
			
		||||
          <el-input v-model="form.name" :disabled="true" />
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
        <el-form-item label="角色标识">
 | 
			
		||||
          <el-input v-model="form.code" :disabled="true" />
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
        <el-form-item label="权限范围">
 | 
			
		||||
          <el-select v-model="form.dataScope">
 | 
			
		||||
            <el-option
 | 
			
		||||
              v-for="item in dataScopeDictDatas"
 | 
			
		||||
              :key="parseInt(item.value)"
 | 
			
		||||
              :label="item.label"
 | 
			
		||||
              :value="parseInt(item.value)"
 | 
			
		||||
            ></el-option>
 | 
			
		||||
          </el-select>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
        <el-form-item label="数据权限" v-show="form.dataScope === SysDataScopeEnum.DEPT_CUSTOM">
 | 
			
		||||
          <el-checkbox :checked="!form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动(选中父节点,自动选择子节点)</el-checkbox>
 | 
			
		||||
          <el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox>
 | 
			
		||||
          <el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox>
 | 
			
		||||
          <el-tree
 | 
			
		||||
            class="tree-border"
 | 
			
		||||
            :data="deptOptions"
 | 
			
		||||
            show-checkbox
 | 
			
		||||
            default-expand-all
 | 
			
		||||
            ref="dept"
 | 
			
		||||
            node-key="id"
 | 
			
		||||
            :check-strictly="form.deptCheckStrictly"
 | 
			
		||||
            empty-text="加载中,请稍后"
 | 
			
		||||
            :props="defaultProps"
 | 
			
		||||
          ></el-tree>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
      </el-form>
 | 
			
		||||
      <div slot="footer" class="dialog-footer">
 | 
			
		||||
        <el-button type="primary" @click="submitDataScope">确 定</el-button>
 | 
			
		||||
        <el-button @click="cancelDataScope">取 消</el-button>
 | 
			
		||||
      </div>
 | 
			
		||||
    </el-dialog>
 | 
			
		||||
 | 
			
		||||
    <!-- 分配角色的菜单权限对话框 -->
 | 
			
		||||
    <el-dialog :title="title" :visible.sync="openMenu" width="500px" append-to-body>
 | 
			
		||||
      <el-form :model="form" label-width="80px">
 | 
			
		||||
        <el-form-item label="角色名称">
 | 
			
		||||
          <el-input v-model="form.name" :disabled="true" />
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
        <el-form-item label="角色标识">
 | 
			
		||||
          <el-input v-model="form.code" :disabled="true" />
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
        <el-form-item label="菜单权限">
 | 
			
		||||
          <el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox>
 | 
			
		||||
          <el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox>
 | 
			
		||||
          <el-tree class="tree-border" :data="menuOptions" show-checkbox ref="menu" node-key="id"
 | 
			
		||||
              :check-strictly="form.menuCheckStrictly" empty-text="加载中,请稍后" :props="defaultProps"></el-tree>
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
      </el-form>
 | 
			
		||||
      <div slot="footer" class="dialog-footer">
 | 
			
		||||
        <el-button type="primary" @click="submitMenu">确 定</el-button>
 | 
			
		||||
        <el-button @click="cancelMenu">取 消</el-button>
 | 
			
		||||
      </div>
 | 
			
		||||
    </el-dialog>
 | 
			
		||||
		<!-- 新增&编辑 -->
 | 
			
		||||
		<base-dialog
 | 
			
		||||
			:dialogTitle="addOrEditTitle"
 | 
			
		||||
			:dialogVisible="centervisible"
 | 
			
		||||
			@cancel="handleCancel"
 | 
			
		||||
			@confirm="handleConfirm"
 | 
			
		||||
			:before-close="handleCancel"
 | 
			
		||||
			width="50%">
 | 
			
		||||
			<role-add ref="roleAdd" @successSubmit="successSubmit" />
 | 
			
		||||
		</base-dialog>
 | 
			
		||||
		<!-- 菜单权限 -->
 | 
			
		||||
		<base-dialog
 | 
			
		||||
			dialogTitle="分配菜单权限"
 | 
			
		||||
			:dialogVisible="menuVisible"
 | 
			
		||||
			@cancel="handleCancelm"
 | 
			
		||||
			@confirm="handleConfirmm"
 | 
			
		||||
			:before-close="handleCancelm"
 | 
			
		||||
			width="50%">
 | 
			
		||||
			<menu-auth ref="menuAuth" @successSubmitm="successSubmitm" />
 | 
			
		||||
		</base-dialog>
 | 
			
		||||
		<!-- 数据权限 -->
 | 
			
		||||
		<base-dialog
 | 
			
		||||
			dialogTitle="分配数据权限"
 | 
			
		||||
			:dialogVisible="dataVisible"
 | 
			
		||||
			@cancel="handleCanceld"
 | 
			
		||||
			@confirm="handleConfirmd"
 | 
			
		||||
			:before-close="handleCanceld"
 | 
			
		||||
			width="50%">
 | 
			
		||||
			<data-auth ref="dataAuth" @successSubmitd="successSubmitd" />
 | 
			
		||||
		</base-dialog>
 | 
			
		||||
	</div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import {
 | 
			
		||||
  addRole,
 | 
			
		||||
  changeRoleStatus,
 | 
			
		||||
  delRole,
 | 
			
		||||
  exportRole,
 | 
			
		||||
  getRole,
 | 
			
		||||
  listRole,
 | 
			
		||||
  updateRole
 | 
			
		||||
} from "@/api/system/role";
 | 
			
		||||
import {listSimpleMenus} from "@/api/system/menu";
 | 
			
		||||
import {assignRoleMenu, listRoleMenus, assignRoleDataScope} from "@/api/system/permission";
 | 
			
		||||
import {listSimpleDepts} from "@/api/system/dept";
 | 
			
		||||
import {CommonStatusEnum, SystemDataScopeEnum} from "@/utils/constants";
 | 
			
		||||
import {DICT_TYPE, getDictDatas} from "@/utils/dict";
 | 
			
		||||
 | 
			
		||||
import { delRole, listRole } from '@/api/system/role';
 | 
			
		||||
import tableHeightMixin from '@/mixins/tableHeightMixin';
 | 
			
		||||
import RoleAdd from './components/roleAdd';
 | 
			
		||||
import MenuAuth from './components/menuAuth';
 | 
			
		||||
import DataAuth from './components/dataAuth';
 | 
			
		||||
import statusBtn from './../components/statusBtn.vue';
 | 
			
		||||
const tableProps = [
 | 
			
		||||
	{
 | 
			
		||||
		prop: 'code',
 | 
			
		||||
		label: '角色编码',
 | 
			
		||||
		minWidth: 140,
 | 
			
		||||
		showOverflowtooltip: true,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		prop: 'name',
 | 
			
		||||
		label: '角色名称',
 | 
			
		||||
		minWidth: 140,
 | 
			
		||||
		showOverflowtooltip: true,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		prop: 'sort',
 | 
			
		||||
		label: '角色顺序',
 | 
			
		||||
		minWidth: 90,
 | 
			
		||||
		showOverflowtooltip: true,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		prop: 'status',
 | 
			
		||||
		label: '状态',
 | 
			
		||||
		minWidth: 100,
 | 
			
		||||
		subcomponent: statusBtn,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		prop: 'remark',
 | 
			
		||||
		label: '角色描述',
 | 
			
		||||
		minWidth: 140,
 | 
			
		||||
		showOverflowtooltip: true,
 | 
			
		||||
	},
 | 
			
		||||
];
 | 
			
		||||
export default {
 | 
			
		||||
  name: "SystemRole",
 | 
			
		||||
	name: 'SystemRole',
 | 
			
		||||
	mixins: [tableHeightMixin],
 | 
			
		||||
	components: { RoleAdd, MenuAuth, DataAuth },
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
      // 遮罩层
 | 
			
		||||
      loading: true,
 | 
			
		||||
      // 导出遮罩层
 | 
			
		||||
      exportLoading: false,
 | 
			
		||||
      // 显示搜索条件
 | 
			
		||||
      showSearch: true,
 | 
			
		||||
      // 总条数
 | 
			
		||||
      total: 0,
 | 
			
		||||
      // 角色表格数据
 | 
			
		||||
      roleList: [],
 | 
			
		||||
      // 弹出层标题
 | 
			
		||||
      title: "",
 | 
			
		||||
      // 是否显示弹出层
 | 
			
		||||
      open: false,
 | 
			
		||||
      // 是否显示弹出层(数据权限)
 | 
			
		||||
      openDataScope: false,
 | 
			
		||||
      // 是否显示弹出层(菜单权限)
 | 
			
		||||
      openMenu: false,
 | 
			
		||||
      menuExpand: false,
 | 
			
		||||
      menuNodeAll: false,
 | 
			
		||||
      deptExpand: true,
 | 
			
		||||
      deptNodeAll: false,
 | 
			
		||||
      // 菜单列表
 | 
			
		||||
      menuOptions: [],
 | 
			
		||||
      // 部门列表
 | 
			
		||||
      deptOptions: [], // 部门属性结构
 | 
			
		||||
      depts: [], // 部门列表
 | 
			
		||||
      // 查询参数
 | 
			
		||||
			formConfig: [
 | 
			
		||||
				{
 | 
			
		||||
					type: 'input',
 | 
			
		||||
					label: '角色名称',
 | 
			
		||||
					placeholder: '角色名称',
 | 
			
		||||
					param: 'name',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'button',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('system:role:create') ? 'separate' : '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('system:role:create') ? 'button' : '',
 | 
			
		||||
					btnName: '新增',
 | 
			
		||||
					name: 'add',
 | 
			
		||||
					color: 'success',
 | 
			
		||||
					plain: true,
 | 
			
		||||
				},
 | 
			
		||||
			],
 | 
			
		||||
			queryParams: {
 | 
			
		||||
				pageNo: 1,
 | 
			
		||||
        pageSize: 10,
 | 
			
		||||
        name: undefined,
 | 
			
		||||
        code: undefined,
 | 
			
		||||
        status: undefined,
 | 
			
		||||
        createTime: []
 | 
			
		||||
				pageSize: 20,
 | 
			
		||||
				name: '',
 | 
			
		||||
			},
 | 
			
		||||
      // 表单参数
 | 
			
		||||
      form: {},
 | 
			
		||||
      defaultProps: {
 | 
			
		||||
        label: "name",
 | 
			
		||||
        children: "children"
 | 
			
		||||
      },
 | 
			
		||||
      // 表单校验
 | 
			
		||||
      rules: {
 | 
			
		||||
        name: [
 | 
			
		||||
          { required: true, message: "角色名称不能为空", trigger: "blur" }
 | 
			
		||||
        ],
 | 
			
		||||
        code: [
 | 
			
		||||
          { required: true, message: "角色标识不能为空", trigger: "blur" }
 | 
			
		||||
        ],
 | 
			
		||||
        sort: [
 | 
			
		||||
          { required: true, message: "角色顺序不能为空", trigger: "blur" }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      // 枚举
 | 
			
		||||
      SysCommonStatusEnum: CommonStatusEnum,
 | 
			
		||||
      SysDataScopeEnum: SystemDataScopeEnum,
 | 
			
		||||
      // 数据字典
 | 
			
		||||
      roleTypeDictDatas: getDictDatas(DICT_TYPE.SYSTEM_ROLE_TYPE),
 | 
			
		||||
      statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
 | 
			
		||||
      dataScopeDictDatas: getDictDatas(DICT_TYPE.SYSTEM_DATA_SCOPE)
 | 
			
		||||
			tableProps,
 | 
			
		||||
			list: [],
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('system:permission:assign-role-menu')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'menuAuth',
 | 
			
		||||
							btnName: '菜单权限',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('system:permission:assign-role-data-scope')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'dataAuth',
 | 
			
		||||
							btnName: '数据权限',
 | 
			
		||||
							// showTip: "新增工单",
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('system:role:update')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '编辑',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('system:role:delete')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'delete',
 | 
			
		||||
							btnName: '删除',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
			].filter((v) => v),
 | 
			
		||||
			addOrEditTitle: '',
 | 
			
		||||
			centervisible: false,
 | 
			
		||||
			// 菜单权限
 | 
			
		||||
			menuVisible: false,
 | 
			
		||||
			// 数据权限
 | 
			
		||||
			dataVisible: false,
 | 
			
		||||
			// 总条数
 | 
			
		||||
			total: 0,
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	created() {
 | 
			
		||||
@@ -253,243 +183,110 @@ export default {
 | 
			
		||||
	methods: {
 | 
			
		||||
		/** 查询角色列表 */
 | 
			
		||||
		getList() {
 | 
			
		||||
      this.loading = true;
 | 
			
		||||
      listRole(this.queryParams).then(
 | 
			
		||||
        response => {
 | 
			
		||||
          this.roleList = response.data.list;
 | 
			
		||||
			listRole(this.queryParams).then((response) => {
 | 
			
		||||
				this.list = response.data.list;
 | 
			
		||||
				this.total = response.data.total;
 | 
			
		||||
          this.loading = false;
 | 
			
		||||
        }
 | 
			
		||||
      );
 | 
			
		||||
    },
 | 
			
		||||
    // 角色状态修改
 | 
			
		||||
    handleStatusChange(row) {
 | 
			
		||||
      // 此时,row 已经变成目标状态了,所以可以直接提交请求和提示
 | 
			
		||||
      let text = row.status === CommonStatusEnum.ENABLE ? "启用" : "停用";
 | 
			
		||||
      this.$modal.confirm('确认要"' + text + '""' + row.name + '"角色吗?').then(function() {
 | 
			
		||||
          return changeRoleStatus(row.id, row.status);
 | 
			
		||||
        }).then(() => {
 | 
			
		||||
          this.$modal.msgSuccess(text + "成功");
 | 
			
		||||
        }).catch(function() {
 | 
			
		||||
          // 异常时,需要将 row.status 状态重置回之前的
 | 
			
		||||
          row.status = row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.DISABLE
 | 
			
		||||
              : CommonStatusEnum.ENABLE;
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
    // 取消按钮
 | 
			
		||||
    cancel() {
 | 
			
		||||
      this.open = false;
 | 
			
		||||
      this.reset();
 | 
			
		||||
    },
 | 
			
		||||
    // 取消按钮(数据权限)
 | 
			
		||||
    cancelDataScope() {
 | 
			
		||||
      this.openDataScope = false;
 | 
			
		||||
      this.reset();
 | 
			
		||||
    },
 | 
			
		||||
    // 取消按钮(菜单权限)
 | 
			
		||||
    cancelMenu() {
 | 
			
		||||
      this.openMenu = false;
 | 
			
		||||
      this.reset();
 | 
			
		||||
    },
 | 
			
		||||
    // 表单重置
 | 
			
		||||
    reset() {
 | 
			
		||||
      if (this.$refs.menu !== undefined) {
 | 
			
		||||
        this.$refs.menu.setCheckedKeys([]);
 | 
			
		||||
      }
 | 
			
		||||
      this.menuExpand = false;
 | 
			
		||||
      this.menuNodeAll = false;
 | 
			
		||||
      this.deptExpand = true;
 | 
			
		||||
      this.deptNodeAll = false;
 | 
			
		||||
      this.form = {
 | 
			
		||||
        id: undefined,
 | 
			
		||||
        name: undefined,
 | 
			
		||||
        code: undefined,
 | 
			
		||||
        sort: 0,
 | 
			
		||||
        deptIds: [],
 | 
			
		||||
        menuIds: [],
 | 
			
		||||
        dataScope: undefined,
 | 
			
		||||
        deptCheckStrictly: false,
 | 
			
		||||
        menuCheckStrictly: true,
 | 
			
		||||
        remark: undefined
 | 
			
		||||
      };
 | 
			
		||||
      this.resetForm("form");
 | 
			
		||||
    },
 | 
			
		||||
    /** 搜索按钮操作 */
 | 
			
		||||
    handleQuery() {
 | 
			
		||||
		buttonClick(val) {
 | 
			
		||||
			console.log(val);
 | 
			
		||||
			if (val.btnName === 'search') {
 | 
			
		||||
				this.queryParams.pageNo = 1;
 | 
			
		||||
				this.queryParams.name = val.name;
 | 
			
		||||
				this.getList();
 | 
			
		||||
    },
 | 
			
		||||
    /** 重置按钮操作 */
 | 
			
		||||
    resetQuery() {
 | 
			
		||||
      this.resetForm("queryForm");
 | 
			
		||||
      this.handleQuery();
 | 
			
		||||
    },
 | 
			
		||||
    // 树权限(展开/折叠)
 | 
			
		||||
    handleCheckedTreeExpand(value, type) {
 | 
			
		||||
      if (type === 'menu') {
 | 
			
		||||
        let treeList = this.menuOptions;
 | 
			
		||||
        for (let i = 0; i < treeList.length; i++) {
 | 
			
		||||
          this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;
 | 
			
		||||
        }
 | 
			
		||||
      } else if (type === 'dept') {
 | 
			
		||||
        let treeList = this.deptOptions;
 | 
			
		||||
        for (let i = 0; i < treeList.length; i++) {
 | 
			
		||||
          this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    // 树权限(全选/全不选)
 | 
			
		||||
    handleCheckedTreeNodeAll(value, type) {
 | 
			
		||||
      if (type === 'menu') {
 | 
			
		||||
        this.$refs.menu.setCheckedNodes(value ? this.menuOptions: []);
 | 
			
		||||
      } else if (type === 'dept') {
 | 
			
		||||
        // this.$refs.dept.setCheckedNodes(value ? this.deptOptions: []);
 | 
			
		||||
        this.$refs.dept.setCheckedNodes(value ? this.depts: []);
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    // 树权限(父子联动)
 | 
			
		||||
    handleCheckedTreeConnect(value, type) {
 | 
			
		||||
      if (type === 'menu') {
 | 
			
		||||
        this.form.menuCheckStrictly = value;
 | 
			
		||||
      } else if (type === 'dept') {
 | 
			
		||||
        this.form.deptCheckStrictly = !value;
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    /** 新增按钮操作 */
 | 
			
		||||
    handleAdd() {
 | 
			
		||||
      this.reset();
 | 
			
		||||
      this.open = true;
 | 
			
		||||
      this.title = "添加角色";
 | 
			
		||||
    },
 | 
			
		||||
    /** 修改按钮操作 */
 | 
			
		||||
    handleUpdate(row) {
 | 
			
		||||
      this.reset();
 | 
			
		||||
      const id = row.id
 | 
			
		||||
      getRole(id).then(response => {
 | 
			
		||||
        this.form = response.data;
 | 
			
		||||
        this.open = true;
 | 
			
		||||
        this.title = "修改角色";
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    /** 分配菜单权限操作 */
 | 
			
		||||
    handleMenu(row) {
 | 
			
		||||
      this.reset();
 | 
			
		||||
      const id = row.id
 | 
			
		||||
      // 处理了 form 的角色 name 和 code 的展示
 | 
			
		||||
      this.form.id = id;
 | 
			
		||||
      this.form.name = row.name;
 | 
			
		||||
      this.form.code = row.code;
 | 
			
		||||
      // 打开弹窗
 | 
			
		||||
      this.openMenu = true;
 | 
			
		||||
      // 获得菜单列表
 | 
			
		||||
      listSimpleMenus().then(response => {
 | 
			
		||||
        // 处理 menuOptions 参数
 | 
			
		||||
        this.menuOptions = [];
 | 
			
		||||
        this.menuOptions.push(...this.handleTree(response.data, "id"));
 | 
			
		||||
        // 获取角色拥有的菜单权限
 | 
			
		||||
        listRoleMenus(id).then(response => {
 | 
			
		||||
          // 设置为严格,避免设置父节点自动选中子节点,解决半选中问题
 | 
			
		||||
          this.form.menuCheckStrictly = true
 | 
			
		||||
          // 设置选中
 | 
			
		||||
          this.$refs.menu.setCheckedKeys(response.data);
 | 
			
		||||
          // 设置为非严格,继续使用半选中
 | 
			
		||||
          this.form.menuCheckStrictly = false
 | 
			
		||||
        })
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    /** 分配数据权限操作 */
 | 
			
		||||
    handleDataScope(row) {
 | 
			
		||||
      this.reset();
 | 
			
		||||
      // 处理了 form 的角色 name 和 code 的展示
 | 
			
		||||
      this.form.id = row.id;
 | 
			
		||||
      this.form.name = row.name;
 | 
			
		||||
      this.form.code = row.code;
 | 
			
		||||
      // 打开弹窗
 | 
			
		||||
      this.openDataScope = true;
 | 
			
		||||
      // 获得部门列表
 | 
			
		||||
      listSimpleDepts().then(response => {
 | 
			
		||||
        // 处理 deptOptions 参数
 | 
			
		||||
        this.deptOptions = [];
 | 
			
		||||
        this.deptOptions.push(...this.handleTree(response.data, "id"));
 | 
			
		||||
        this.depts = response.data;
 | 
			
		||||
        // this.deptIds = response.data.map(x => x.id);
 | 
			
		||||
        // 获得角色拥有的数据权限
 | 
			
		||||
        getRole(row.id).then(response => {
 | 
			
		||||
          this.form.dataScope = response.data.dataScope;
 | 
			
		||||
          this.$refs.dept.setCheckedKeys(response.data.dataScopeDeptIds, false);
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    /** 提交按钮 */
 | 
			
		||||
    submitForm: function() {
 | 
			
		||||
      this.$refs["form"].validate(valid => {
 | 
			
		||||
        if (valid) {
 | 
			
		||||
          if (this.form.id !== undefined) {
 | 
			
		||||
            updateRole(this.form).then(response => {
 | 
			
		||||
              this.$modal.msgSuccess("修改成功");
 | 
			
		||||
              this.open = false;
 | 
			
		||||
              this.getList();
 | 
			
		||||
            });
 | 
			
		||||
			} else {
 | 
			
		||||
            addRole(this.form).then(response => {
 | 
			
		||||
              this.$modal.msgSuccess("新增成功");
 | 
			
		||||
              this.open = false;
 | 
			
		||||
              this.getList();
 | 
			
		||||
            });
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    /** 提交按钮(数据权限) */
 | 
			
		||||
    submitDataScope: function() {
 | 
			
		||||
      if (this.form.id !== undefined) {
 | 
			
		||||
        assignRoleDataScope({
 | 
			
		||||
          roleId: this.form.id,
 | 
			
		||||
          dataScope: this.form.dataScope,
 | 
			
		||||
          dataScopeDeptIds: this.form.dataScope !== SystemDataScopeEnum.DEPT_CUSTOM ? [] :
 | 
			
		||||
              this.$refs.dept.getCheckedKeys()
 | 
			
		||||
        }).then(response => {
 | 
			
		||||
          this.$modal.msgSuccess("修改成功");
 | 
			
		||||
          this.openDataScope = false;
 | 
			
		||||
          this.getList();
 | 
			
		||||
				this.addOrEditTitle = '新增';
 | 
			
		||||
				this.centervisible = true;
 | 
			
		||||
				this.$nextTick(() => {
 | 
			
		||||
					this.$refs.roleAdd.init();
 | 
			
		||||
				});
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
    /** 提交按钮(菜单权限) */
 | 
			
		||||
    submitMenu: function() {
 | 
			
		||||
      if (this.form.id !== undefined) {
 | 
			
		||||
        assignRoleMenu({
 | 
			
		||||
          roleId: this.form.id,
 | 
			
		||||
          menuIds: [...this.$refs.menu.getCheckedKeys(), ...this.$refs.menu.getHalfCheckedKeys()]
 | 
			
		||||
        }).then(response => {
 | 
			
		||||
          this.$modal.msgSuccess("修改成功");
 | 
			
		||||
          this.openMenu = false;
 | 
			
		||||
          this.getList();
 | 
			
		||||
		handleClick(val) {
 | 
			
		||||
			switch (val.type) {
 | 
			
		||||
				case 'edit':
 | 
			
		||||
					this.addOrEditTitle = '编辑';
 | 
			
		||||
					this.centervisible = true;
 | 
			
		||||
					this.$nextTick(() => {
 | 
			
		||||
						this.$refs.roleAdd.init(val.data.id);
 | 
			
		||||
					});
 | 
			
		||||
					break;
 | 
			
		||||
				case 'delete':
 | 
			
		||||
					this.handleDelete(val.data);
 | 
			
		||||
					break;
 | 
			
		||||
				case 'menuAuth':
 | 
			
		||||
					this.menuVisible = true;
 | 
			
		||||
					this.$nextTick(() => {
 | 
			
		||||
						this.$refs.menuAuth.init(val.data.id);
 | 
			
		||||
					});
 | 
			
		||||
					break;
 | 
			
		||||
				default:
 | 
			
		||||
					this.dataVisible = true;
 | 
			
		||||
					this.$nextTick(() => {
 | 
			
		||||
						this.$refs.dataAuth.init(val.data.id);
 | 
			
		||||
					});
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		/** 删除按钮操作 */
 | 
			
		||||
		handleDelete(row) {
 | 
			
		||||
      const ids = row.id || this.ids;
 | 
			
		||||
      this.$modal.confirm('是否确认删除角色编号为"' + ids + '"的数据项?').then(function() {
 | 
			
		||||
          return delRole(ids);
 | 
			
		||||
        }).then(() => {
 | 
			
		||||
			this.$modal
 | 
			
		||||
				.delConfirm(row.name)
 | 
			
		||||
				.then(function () {
 | 
			
		||||
					return delRole(row.id);
 | 
			
		||||
				})
 | 
			
		||||
				.then(() => {
 | 
			
		||||
					this.queryParams.pageNo = 1;
 | 
			
		||||
					this.getList();
 | 
			
		||||
          this.$modal.msgSuccess("删除成功");
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
					this.$modal.msgSuccess('删除成功');
 | 
			
		||||
				})
 | 
			
		||||
				.catch(() => {});
 | 
			
		||||
		},
 | 
			
		||||
		// 新增取消
 | 
			
		||||
		handleCancel() {
 | 
			
		||||
			this.$refs.roleAdd.formClear();
 | 
			
		||||
			this.centervisible = false;
 | 
			
		||||
			this.addOrEditTitle = '';
 | 
			
		||||
		},
 | 
			
		||||
		handleConfirm() {
 | 
			
		||||
			this.$refs.roleAdd.submitForm();
 | 
			
		||||
		},
 | 
			
		||||
		successSubmit() {
 | 
			
		||||
			this.handleCancel();
 | 
			
		||||
			this.getList();
 | 
			
		||||
		},
 | 
			
		||||
		// 菜单权限
 | 
			
		||||
		handleCancelm() {
 | 
			
		||||
			this.$refs.menuAuth.formClear();
 | 
			
		||||
			this.menuVisible = false;
 | 
			
		||||
		},
 | 
			
		||||
		handleConfirmm() {
 | 
			
		||||
			this.$refs.menuAuth.submitForm();
 | 
			
		||||
		},
 | 
			
		||||
		successSubmitm() {
 | 
			
		||||
			this.handleCancelm();
 | 
			
		||||
			this.getList();
 | 
			
		||||
		},
 | 
			
		||||
		// 数据权限
 | 
			
		||||
		handleCanceld() {
 | 
			
		||||
			this.$refs.dataAuth.formClear();
 | 
			
		||||
			this.dataVisible = false;
 | 
			
		||||
		},
 | 
			
		||||
		handleConfirmd() {
 | 
			
		||||
			this.$refs.dataAuth.submitForm();
 | 
			
		||||
		},
 | 
			
		||||
		successSubmitd() {
 | 
			
		||||
			this.handleCanceld();
 | 
			
		||||
			this.getList();
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
    /** 导出按钮操作 */
 | 
			
		||||
    handleExport() {
 | 
			
		||||
      const queryParams = this.queryParams;
 | 
			
		||||
      this.$modal.confirm('是否确认导出所有角色数据项?').then(function() {
 | 
			
		||||
          this.exportLoading = true;
 | 
			
		||||
          return exportRole(queryParams);
 | 
			
		||||
        }).then(response => {
 | 
			
		||||
          this.$download.excel(response, '角色数据.xls');
 | 
			
		||||
          this.exportLoading = false;
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.app-container {
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	height: calc(100vh - 164px);
 | 
			
		||||
	background-color: #fff;
 | 
			
		||||
	border-radius: 8px;
 | 
			
		||||
	padding: 8px;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,17 @@
 | 
			
		||||
<template>
 | 
			
		||||
	<div style="display: flex; gap: 16px; flex: 1; background: #eff1f6">
 | 
			
		||||
		<div
 | 
			
		||||
			class="app-container"
 | 
			
		||||
			style="background: white; width: 280px; border-radius: 8px">
 | 
			
		||||
	<div class="user-container">
 | 
			
		||||
		<!-- <doc-alert title="用户体系" url="https://doc.iocoder.cn/user-center/" />
 | 
			
		||||
    <doc-alert title="三方登陆" url="https://doc.iocoder.cn/social-user/" />
 | 
			
		||||
    <doc-alert
 | 
			
		||||
      title="Excel 导入导出"
 | 
			
		||||
      url="https://doc.iocoder.cn/excel-import-and-export/"
 | 
			
		||||
    /> -->
 | 
			
		||||
		<!-- 搜索工作栏 -->
 | 
			
		||||
 | 
			
		||||
		<el-row :gutter="8" class="user-box">
 | 
			
		||||
			<!--部门数据-->
 | 
			
		||||
			<el-col :span="4" :xs="24">
 | 
			
		||||
				<div class="user-box-left">
 | 
			
		||||
					<div class="head-container">
 | 
			
		||||
						<el-input
 | 
			
		||||
							v-model="deptName"
 | 
			
		||||
@@ -24,240 +33,47 @@
 | 
			
		||||
							@node-click="handleNodeClick" />
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
 | 
			
		||||
		<div
 | 
			
		||||
			class="app-container"
 | 
			
		||||
			style="background: #fff; border-radius: 8px; width: 1px; flex: 1">
 | 
			
		||||
			<el-form
 | 
			
		||||
				:model="queryParams"
 | 
			
		||||
				ref="queryForm"
 | 
			
		||||
				size="small"
 | 
			
		||||
				:inline="true"
 | 
			
		||||
				v-show="showSearch"
 | 
			
		||||
				label-width="68px">
 | 
			
		||||
				<el-form-item label="用户名称" prop="username">
 | 
			
		||||
					<el-input
 | 
			
		||||
						v-model="queryParams.username"
 | 
			
		||||
						placeholder="请输入用户名称"
 | 
			
		||||
						clearable
 | 
			
		||||
						style="width: 240px"
 | 
			
		||||
						@keyup.enter.native="handleQuery" />
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
				<el-form-item label="手机号码" prop="mobile">
 | 
			
		||||
					<el-input
 | 
			
		||||
						v-model="queryParams.mobile"
 | 
			
		||||
						placeholder="请输入手机号码"
 | 
			
		||||
						clearable
 | 
			
		||||
						style="width: 240px"
 | 
			
		||||
						@keyup.enter.native="handleQuery" />
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
				<el-form-item label="状态" prop="status">
 | 
			
		||||
					<el-select
 | 
			
		||||
						v-model="queryParams.status"
 | 
			
		||||
						placeholder="用户状态"
 | 
			
		||||
						clearable
 | 
			
		||||
						style="width: 240px">
 | 
			
		||||
						<el-option
 | 
			
		||||
							v-for="dict in statusDictDatas"
 | 
			
		||||
							:key="parseInt(dict.value)"
 | 
			
		||||
							:label="dict.label"
 | 
			
		||||
							:value="parseInt(dict.value)" />
 | 
			
		||||
					</el-select>
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
				<el-form-item label="创建时间" prop="createTime">
 | 
			
		||||
					<el-date-picker
 | 
			
		||||
						v-model="queryParams.createTime"
 | 
			
		||||
						style="width: 240px"
 | 
			
		||||
						value-format="yyyy-MM-dd HH:mm:ss"
 | 
			
		||||
						type="daterange"
 | 
			
		||||
						range-separator="-"
 | 
			
		||||
						start-placeholder="开始日期"
 | 
			
		||||
						end-placeholder="结束日期"
 | 
			
		||||
						:default-time="['00:00:00', '23:59:59']" />
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
				<el-form-item>
 | 
			
		||||
					<el-button type="primary" icon="el-icon-search" @click="handleQuery">
 | 
			
		||||
						搜索
 | 
			
		||||
					</el-button>
 | 
			
		||||
					<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-form>
 | 
			
		||||
 | 
			
		||||
			<el-row :gutter="10" class="mb8">
 | 
			
		||||
				<el-col :span="1.5">
 | 
			
		||||
					<el-button
 | 
			
		||||
						type="primary"
 | 
			
		||||
						plain
 | 
			
		||||
						icon="el-icon-plus"
 | 
			
		||||
						size="mini"
 | 
			
		||||
						@click="handleAdd"
 | 
			
		||||
						v-hasPermi="['system:user:create']">
 | 
			
		||||
						新增
 | 
			
		||||
					</el-button>
 | 
			
		||||
			</el-col>
 | 
			
		||||
				<el-col :span="1.5">
 | 
			
		||||
					<el-button
 | 
			
		||||
						type="info"
 | 
			
		||||
						icon="el-icon-upload2"
 | 
			
		||||
						size="mini"
 | 
			
		||||
						@click="handleImport"
 | 
			
		||||
						v-hasPermi="['system:user:import']">
 | 
			
		||||
						导入
 | 
			
		||||
					</el-button>
 | 
			
		||||
				</el-col>
 | 
			
		||||
				<el-col :span="1.5">
 | 
			
		||||
					<el-button
 | 
			
		||||
						type="warning"
 | 
			
		||||
						icon="el-icon-download"
 | 
			
		||||
						size="mini"
 | 
			
		||||
						@click="handleExport"
 | 
			
		||||
						:loading="exportLoading"
 | 
			
		||||
						v-hasPermi="['system:user:export']">
 | 
			
		||||
						导出
 | 
			
		||||
					</el-button>
 | 
			
		||||
				</el-col>
 | 
			
		||||
				<right-toolbar
 | 
			
		||||
					:showSearch.sync="showSearch"
 | 
			
		||||
					@queryTable="getList"
 | 
			
		||||
					:columns="columns"></right-toolbar>
 | 
			
		||||
			</el-row>
 | 
			
		||||
 | 
			
		||||
			<el-table v-loading="loading" :data="userList">
 | 
			
		||||
				<el-table-column
 | 
			
		||||
					label="用户编号"
 | 
			
		||||
					align="center"
 | 
			
		||||
					key="id"
 | 
			
		||||
					prop="id"
 | 
			
		||||
					v-if="columns[0].visible" />
 | 
			
		||||
				<el-table-column
 | 
			
		||||
					label="用户名称"
 | 
			
		||||
					align="center"
 | 
			
		||||
					key="username"
 | 
			
		||||
					prop="username"
 | 
			
		||||
					v-if="columns[1].visible"
 | 
			
		||||
					:show-overflow-tooltip="true" />
 | 
			
		||||
				<el-table-column
 | 
			
		||||
					label="用户昵称"
 | 
			
		||||
					align="center"
 | 
			
		||||
					key="nickname"
 | 
			
		||||
					prop="nickname"
 | 
			
		||||
					v-if="columns[2].visible"
 | 
			
		||||
					:show-overflow-tooltip="true" />
 | 
			
		||||
				<el-table-column
 | 
			
		||||
					label="部门"
 | 
			
		||||
					align="center"
 | 
			
		||||
					key="deptName"
 | 
			
		||||
					prop="dept.name"
 | 
			
		||||
					v-if="columns[3].visible"
 | 
			
		||||
					:show-overflow-tooltip="true" />
 | 
			
		||||
				<el-table-column
 | 
			
		||||
					label="手机号码"
 | 
			
		||||
					align="center"
 | 
			
		||||
					key="mobile"
 | 
			
		||||
					prop="mobile"
 | 
			
		||||
					v-if="columns[4].visible"
 | 
			
		||||
					width="120" />
 | 
			
		||||
				<el-table-column
 | 
			
		||||
					label="状态"
 | 
			
		||||
					key="status"
 | 
			
		||||
					v-if="columns[5].visible"
 | 
			
		||||
					align="center">
 | 
			
		||||
					<template v-slot="scope">
 | 
			
		||||
						<el-switch
 | 
			
		||||
							v-model="scope.row.status"
 | 
			
		||||
							:active-value="0"
 | 
			
		||||
							:inactive-value="1"
 | 
			
		||||
							@change="handleStatusChange(scope.row)" />
 | 
			
		||||
					</template>
 | 
			
		||||
				</el-table-column>
 | 
			
		||||
				<el-table-column
 | 
			
		||||
					label="创建时间"
 | 
			
		||||
					align="center"
 | 
			
		||||
					prop="createTime"
 | 
			
		||||
					v-if="columns[6].visible"
 | 
			
		||||
					width="160">
 | 
			
		||||
					<template v-slot="scope">
 | 
			
		||||
						<span>{{ parseTime(scope.row.createTime) }}</span>
 | 
			
		||||
					</template>
 | 
			
		||||
				</el-table-column>
 | 
			
		||||
				<el-table-column
 | 
			
		||||
			<!--用户数据-->
 | 
			
		||||
			<el-col :span="20" :xs="24">
 | 
			
		||||
				<div class="user-box-right">
 | 
			
		||||
					<search-bar
 | 
			
		||||
						:formConfigs="formConfig"
 | 
			
		||||
						ref="userSearchBarForm"
 | 
			
		||||
						@headBtnClick="buttonClick" />
 | 
			
		||||
					<!-- 列表 -->
 | 
			
		||||
					<base-table
 | 
			
		||||
						:page="queryParams.pageNo"
 | 
			
		||||
						:limit="queryParams.pageSize"
 | 
			
		||||
						:table-props="tableProps"
 | 
			
		||||
						:table-data="userList"
 | 
			
		||||
						:max-height="tableH"
 | 
			
		||||
						@emitFun="handleStatusChange">
 | 
			
		||||
						<method-btn
 | 
			
		||||
							v-if="tableBtn.length"
 | 
			
		||||
							slot="handleBtn"
 | 
			
		||||
							:width="220"
 | 
			
		||||
							label="操作"
 | 
			
		||||
					align="center"
 | 
			
		||||
					width="160"
 | 
			
		||||
					class-name="small-padding fixed-width">
 | 
			
		||||
					<template v-slot="scope">
 | 
			
		||||
						<el-button
 | 
			
		||||
							size="mini"
 | 
			
		||||
							type="text"
 | 
			
		||||
							icon="el-icon-edit"
 | 
			
		||||
							@click="handleUpdate(scope.row)"
 | 
			
		||||
							v-hasPermi="['system:user:update']">
 | 
			
		||||
							修改
 | 
			
		||||
						</el-button>
 | 
			
		||||
						<el-dropdown
 | 
			
		||||
							@command="
 | 
			
		||||
								(command) => handleCommand(command, scope.$index, scope.row)
 | 
			
		||||
							"
 | 
			
		||||
							v-hasPermi="[
 | 
			
		||||
								'system:user:delete',
 | 
			
		||||
								'system:user:update-password',
 | 
			
		||||
								'system:permission:assign-user-role',
 | 
			
		||||
							]">
 | 
			
		||||
							<el-button size="mini" type="text" icon="el-icon-d-arrow-right">
 | 
			
		||||
								更多
 | 
			
		||||
							</el-button>
 | 
			
		||||
							<el-dropdown-menu slot="dropdown">
 | 
			
		||||
								<el-dropdown-item
 | 
			
		||||
									command="handleDelete"
 | 
			
		||||
									v-if="scope.row.id !== 1"
 | 
			
		||||
									size="mini"
 | 
			
		||||
									type="text"
 | 
			
		||||
									icon="el-icon-delete"
 | 
			
		||||
									v-hasPermi="['system:user:delete']">
 | 
			
		||||
									删除
 | 
			
		||||
								</el-dropdown-item>
 | 
			
		||||
								<el-dropdown-item
 | 
			
		||||
									command="handleResetPwd"
 | 
			
		||||
									size="mini"
 | 
			
		||||
									type="text"
 | 
			
		||||
									icon="el-icon-key"
 | 
			
		||||
									v-hasPermi="['system:user:update-password']">
 | 
			
		||||
									重置密码
 | 
			
		||||
								</el-dropdown-item>
 | 
			
		||||
								<el-dropdown-item
 | 
			
		||||
									command="handleRole"
 | 
			
		||||
									size="mini"
 | 
			
		||||
									type="text"
 | 
			
		||||
									icon="el-icon-circle-check"
 | 
			
		||||
									v-hasPermi="['system:permission:assign-user-role']">
 | 
			
		||||
									分配角色
 | 
			
		||||
								</el-dropdown-item>
 | 
			
		||||
							</el-dropdown-menu>
 | 
			
		||||
						</el-dropdown>
 | 
			
		||||
					</template>
 | 
			
		||||
				</el-table-column>
 | 
			
		||||
			</el-table>
 | 
			
		||||
							:method-list="tableBtn"
 | 
			
		||||
							@clickBtn="handleClick" />
 | 
			
		||||
					</base-table>
 | 
			
		||||
 | 
			
		||||
					<pagination
 | 
			
		||||
				v-show="total > 0"
 | 
			
		||||
				:total="total"
 | 
			
		||||
						:page.sync="queryParams.pageNo"
 | 
			
		||||
						:limit.sync="queryParams.pageSize"
 | 
			
		||||
						:total="total"
 | 
			
		||||
						@pagination="getList" />
 | 
			
		||||
				</div>
 | 
			
		||||
			</el-col>
 | 
			
		||||
		</el-row>
 | 
			
		||||
 | 
			
		||||
		<!-- 添加或修改参数配置对话框 -->
 | 
			
		||||
			<el-dialog
 | 
			
		||||
				:title="title"
 | 
			
		||||
				:visible.sync="open"
 | 
			
		||||
				width="600px"
 | 
			
		||||
				append-to-body>
 | 
			
		||||
				<el-form ref="form" :model="form" :rules="rules" label-width="80px">
 | 
			
		||||
		<base-dialog :dialogTitle="title" :dialogVisible="open" width="50%">
 | 
			
		||||
			<el-form ref="form" :model="form" :rules="rules" label-width="100px">
 | 
			
		||||
				<el-row>
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
						<el-form-item label="用户昵称" prop="nickname">
 | 
			
		||||
								<el-input
 | 
			
		||||
									v-model="form.nickname"
 | 
			
		||||
									placeholder="请输入用户昵称" />
 | 
			
		||||
							<el-input v-model="form.nickname" placeholder="请输入用户昵称" />
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
@@ -296,9 +112,7 @@
 | 
			
		||||
							v-if="form.id === undefined"
 | 
			
		||||
							label="用户名称"
 | 
			
		||||
							prop="username">
 | 
			
		||||
								<el-input
 | 
			
		||||
									v-model="form.username"
 | 
			
		||||
									placeholder="请输入用户名称" />
 | 
			
		||||
							<el-input v-model="form.username" placeholder="请输入用户名称" />
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
@@ -317,7 +131,10 @@
 | 
			
		||||
				<el-row>
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
						<el-form-item label="用户性别">
 | 
			
		||||
								<el-select v-model="form.sex" placeholder="请选择">
 | 
			
		||||
							<el-select
 | 
			
		||||
								v-model="form.sex"
 | 
			
		||||
								placeholder="请选择"
 | 
			
		||||
								style="width: 100%">
 | 
			
		||||
								<el-option
 | 
			
		||||
									v-for="dict in sexDictDatas"
 | 
			
		||||
									:key="parseInt(dict.value)"
 | 
			
		||||
@@ -328,7 +145,11 @@
 | 
			
		||||
					</el-col>
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
						<el-form-item label="岗位">
 | 
			
		||||
								<el-select v-model="form.postIds" multiple placeholder="请选择">
 | 
			
		||||
							<el-select
 | 
			
		||||
								v-model="form.postIds"
 | 
			
		||||
								multiple
 | 
			
		||||
								placeholder="请选择"
 | 
			
		||||
								style="width: 100%">
 | 
			
		||||
								<el-option
 | 
			
		||||
									v-for="item in postOptions"
 | 
			
		||||
									:key="item.id"
 | 
			
		||||
@@ -350,17 +171,16 @@
 | 
			
		||||
				</el-row>
 | 
			
		||||
			</el-form>
 | 
			
		||||
			<div slot="footer" class="dialog-footer">
 | 
			
		||||
					<el-button type="primary" @click="submitForm">确 定</el-button>
 | 
			
		||||
				<el-button @click="cancel">取 消</el-button>
 | 
			
		||||
				<el-button type="primary" @click="submitForm">确 定</el-button>
 | 
			
		||||
			</div>
 | 
			
		||||
			</el-dialog>
 | 
			
		||||
		</base-dialog>
 | 
			
		||||
 | 
			
		||||
		<!-- 用户导入对话框 -->
 | 
			
		||||
			<el-dialog
 | 
			
		||||
				:title="upload.title"
 | 
			
		||||
				:visible.sync="upload.open"
 | 
			
		||||
				width="400px"
 | 
			
		||||
				append-to-body>
 | 
			
		||||
		<base-dialog
 | 
			
		||||
			:dialogTitle="upload.title"
 | 
			
		||||
			:dialogVisible="upload.open"
 | 
			
		||||
			width="400px">
 | 
			
		||||
			<el-upload
 | 
			
		||||
				ref="upload"
 | 
			
		||||
				:limit="1"
 | 
			
		||||
@@ -388,7 +208,7 @@
 | 
			
		||||
						:underline="false"
 | 
			
		||||
						style="font-size: 12px; vertical-align: baseline"
 | 
			
		||||
						@click="importTemplate">
 | 
			
		||||
							下载模板
 | 
			
		||||
						导出模板
 | 
			
		||||
					</el-link>
 | 
			
		||||
				</div>
 | 
			
		||||
			</el-upload>
 | 
			
		||||
@@ -396,14 +216,10 @@
 | 
			
		||||
				<el-button type="primary" @click="submitFileForm">确 定</el-button>
 | 
			
		||||
				<el-button @click="upload.open = false">取 消</el-button>
 | 
			
		||||
			</div>
 | 
			
		||||
			</el-dialog>
 | 
			
		||||
		</base-dialog>
 | 
			
		||||
 | 
			
		||||
		<!-- 分配角色 -->
 | 
			
		||||
			<el-dialog
 | 
			
		||||
				title="分配角色"
 | 
			
		||||
				:visible.sync="openRole"
 | 
			
		||||
				width="500px"
 | 
			
		||||
				append-to-body>
 | 
			
		||||
		<base-dialog dialogTitle="分配角色" :dialogVisible="openRole" width="500px">
 | 
			
		||||
			<el-form :model="form" label-width="80px">
 | 
			
		||||
				<el-form-item label="用户名称">
 | 
			
		||||
					<el-input v-model="form.username" :disabled="true" />
 | 
			
		||||
@@ -412,7 +228,11 @@
 | 
			
		||||
					<el-input v-model="form.nickname" :disabled="true" />
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
				<el-form-item label="角色">
 | 
			
		||||
						<el-select v-model="form.roleIds" multiple placeholder="请选择">
 | 
			
		||||
					<el-select
 | 
			
		||||
						v-model="form.roleIds"
 | 
			
		||||
						multiple
 | 
			
		||||
						placeholder="请选择"
 | 
			
		||||
						style="width: 100%">
 | 
			
		||||
						<el-option
 | 
			
		||||
							v-for="item in roleOptions"
 | 
			
		||||
							:key="parseInt(item.id)"
 | 
			
		||||
@@ -425,8 +245,7 @@
 | 
			
		||||
				<el-button type="primary" @click="submitRole">确 定</el-button>
 | 
			
		||||
				<el-button @click="cancelRole">取 消</el-button>
 | 
			
		||||
			</div>
 | 
			
		||||
			</el-dialog>
 | 
			
		||||
		</div>
 | 
			
		||||
		</base-dialog>
 | 
			
		||||
	</div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
@@ -453,12 +272,168 @@ import { DICT_TYPE, getDictDatas } from '@/utils/dict';
 | 
			
		||||
import { assignUserRole, listUserRoles } from '@/api/system/permission';
 | 
			
		||||
import { listSimpleRoles } from '@/api/system/role';
 | 
			
		||||
import { getBaseHeader } from '@/utils/request';
 | 
			
		||||
 | 
			
		||||
import tableHeightMixin from '@/mixins/tableHeightMixin';
 | 
			
		||||
import { parseTime } from '@/utils/ruoyi';
 | 
			
		||||
import statusBtn5 from './../components/statusBtn5.vue';
 | 
			
		||||
const tableProps = [
 | 
			
		||||
	{
 | 
			
		||||
		prop: 'id',
 | 
			
		||||
		label: '用户编号',
 | 
			
		||||
		showOverflowtooltip: true,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		prop: 'username',
 | 
			
		||||
		label: '用户名称',
 | 
			
		||||
		minWidth: 120,
 | 
			
		||||
		showOverflowtooltip: true,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		prop: 'nickname',
 | 
			
		||||
		label: '用户昵称',
 | 
			
		||||
		minWidth: 120,
 | 
			
		||||
		showOverflowtooltip: true,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		prop: 'dept',
 | 
			
		||||
		label: '部门',
 | 
			
		||||
		minWidth: 120,
 | 
			
		||||
		filter: (item) => item.name || '',
 | 
			
		||||
		showOverflowtooltip: true,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		prop: 'mobile',
 | 
			
		||||
		label: '手机号码',
 | 
			
		||||
		minWidth: 150,
 | 
			
		||||
		showOverflowtooltip: true,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		prop: 'status',
 | 
			
		||||
		label: '状态',
 | 
			
		||||
		minWidth: 80,
 | 
			
		||||
		// filter: publicFormatter(DICT_TYPE.SYSTEM_OPERATE_TYPE),
 | 
			
		||||
		subcomponent: statusBtn5,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		prop: 'createTime',
 | 
			
		||||
		label: '创建时间',
 | 
			
		||||
		filter: parseTime,
 | 
			
		||||
		minWidth: 150,
 | 
			
		||||
		showOverflowtooltip: true,
 | 
			
		||||
	},
 | 
			
		||||
];
 | 
			
		||||
export default {
 | 
			
		||||
	name: 'SystemUser',
 | 
			
		||||
	mixins: [tableHeightMixin],
 | 
			
		||||
	components: { Treeselect },
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			formConfig: [
 | 
			
		||||
				{
 | 
			
		||||
					type: 'input',
 | 
			
		||||
					label: '用户名称',
 | 
			
		||||
					placeholder: '用户名称',
 | 
			
		||||
					param: 'username',
 | 
			
		||||
					width: 150,
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'input',
 | 
			
		||||
					label: '手机号码',
 | 
			
		||||
					placeholder: '手机号码',
 | 
			
		||||
					param: 'mobile',
 | 
			
		||||
					width: 150,
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'select',
 | 
			
		||||
					label: '状态',
 | 
			
		||||
					selectOptions: this.getDictDatas(this.DICT_TYPE.COMMON_STATUS),
 | 
			
		||||
					labelField: 'label',
 | 
			
		||||
					valueField: 'value',
 | 
			
		||||
					param: 'status',
 | 
			
		||||
					width: 100,
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'datePicker',
 | 
			
		||||
					label: '创建时间',
 | 
			
		||||
					dateType: 'daterange',
 | 
			
		||||
					format: 'yyyy-MM-dd',
 | 
			
		||||
					valueFormat: 'yyyy-MM-dd HH:mm:ss',
 | 
			
		||||
					rangeSeparator: '-',
 | 
			
		||||
					startPlaceholder: '开始日期',
 | 
			
		||||
					endPlaceholder: '结束日期',
 | 
			
		||||
					param: 'createTime',
 | 
			
		||||
					defaultSelect: [],
 | 
			
		||||
					defaultTime: ['00:00:00', '23:59:59'],
 | 
			
		||||
					width: 250,
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'button',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'button',
 | 
			
		||||
					btnName: '重置',
 | 
			
		||||
					name: 'cancel',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermiOr([
 | 
			
		||||
						'system:user:create',
 | 
			
		||||
						'system:user:import',
 | 
			
		||||
						'system:user:export',
 | 
			
		||||
					])
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('system:user:import') ? 'button' : '',
 | 
			
		||||
					btnName: '导入',
 | 
			
		||||
					name: 'import',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
					plain: true,
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('system:user:export') ? 'button' : '',
 | 
			
		||||
					btnName: '导出',
 | 
			
		||||
					name: 'export',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
					plain: true,
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('system:user:create') ? 'button' : '',
 | 
			
		||||
					btnName: '新增',
 | 
			
		||||
					name: 'addNew',
 | 
			
		||||
					color: 'success',
 | 
			
		||||
					plain: true,
 | 
			
		||||
				},
 | 
			
		||||
			],
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('system:user:update-password')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'reset',
 | 
			
		||||
							btnName: '重置密码',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('system:permission:assign-user-role')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'role',
 | 
			
		||||
							btnName: '分配角色',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('system:user:update')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '修改',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('system:user:delete')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'delete',
 | 
			
		||||
							btnName: '删除',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
			].filter((v) => v),
 | 
			
		||||
			tableProps,
 | 
			
		||||
			// 遮罩层
 | 
			
		||||
			loading: true,
 | 
			
		||||
			// 导出遮罩层
 | 
			
		||||
@@ -468,7 +443,7 @@ export default {
 | 
			
		||||
			// 总条数
 | 
			
		||||
			total: 0,
 | 
			
		||||
			// 用户表格数据
 | 
			
		||||
			userList: null,
 | 
			
		||||
			userList: [],
 | 
			
		||||
			// 弹出层标题
 | 
			
		||||
			title: '',
 | 
			
		||||
			// 部门树选项
 | 
			
		||||
@@ -509,23 +484,13 @@ export default {
 | 
			
		||||
			// 查询参数
 | 
			
		||||
			queryParams: {
 | 
			
		||||
				pageNo: 1,
 | 
			
		||||
				pageSize: 10,
 | 
			
		||||
				pageSize: 20,
 | 
			
		||||
				username: undefined,
 | 
			
		||||
				mobile: undefined,
 | 
			
		||||
				status: undefined,
 | 
			
		||||
				deptId: undefined,
 | 
			
		||||
				createTime: [],
 | 
			
		||||
			},
 | 
			
		||||
			// 列信息
 | 
			
		||||
			columns: [
 | 
			
		||||
				{ key: 0, label: `用户编号`, visible: true },
 | 
			
		||||
				{ key: 1, label: `用户名称`, visible: true },
 | 
			
		||||
				{ key: 2, label: `用户昵称`, visible: true },
 | 
			
		||||
				{ key: 3, label: `部门`, visible: true },
 | 
			
		||||
				{ key: 4, label: `手机号码`, visible: true },
 | 
			
		||||
				{ key: 5, label: `状态`, visible: true },
 | 
			
		||||
				{ key: 6, label: `创建时间`, visible: true },
 | 
			
		||||
			],
 | 
			
		||||
			// 表单校验
 | 
			
		||||
			rules: {
 | 
			
		||||
				username: [
 | 
			
		||||
@@ -577,23 +542,44 @@ export default {
 | 
			
		||||
		// });
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		// 更多操作
 | 
			
		||||
		handleCommand(command, index, row) {
 | 
			
		||||
			switch (command) {
 | 
			
		||||
				case 'handleUpdate':
 | 
			
		||||
					this.handleUpdate(row); //修改客户信息
 | 
			
		||||
		handleClick(val) {
 | 
			
		||||
			switch (val.type) {
 | 
			
		||||
				case 'edit':
 | 
			
		||||
					this.handleUpdate(val.data);
 | 
			
		||||
					break;
 | 
			
		||||
				case 'handleDelete':
 | 
			
		||||
					this.handleDelete(row); //红号变更
 | 
			
		||||
				case 'delete':
 | 
			
		||||
					this.handleDelete(val.data.id, val.data.username);
 | 
			
		||||
					break;
 | 
			
		||||
				case 'handleResetPwd':
 | 
			
		||||
					this.handleResetPwd(row);
 | 
			
		||||
					break;
 | 
			
		||||
				case 'handleRole':
 | 
			
		||||
					this.handleRole(row);
 | 
			
		||||
				case 'reset':
 | 
			
		||||
					this.handleResetPwd(val.data);
 | 
			
		||||
					break;
 | 
			
		||||
				default:
 | 
			
		||||
					this.handleRole(val.data);
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		buttonClick(val) {
 | 
			
		||||
			console.log(val);
 | 
			
		||||
			switch (val.btnName) {
 | 
			
		||||
				case 'search':
 | 
			
		||||
					this.handleQuery(val);
 | 
			
		||||
					break;
 | 
			
		||||
				case 'cancel':
 | 
			
		||||
					this.$refs['userSearchBarForm'].resetForm();
 | 
			
		||||
					this.queryParams.pageNo = 1;
 | 
			
		||||
					this.queryParams.username = '';
 | 
			
		||||
					this.queryParams.mobile = '';
 | 
			
		||||
					this.queryParams.status = '';
 | 
			
		||||
					this.queryParams.createTime = [];
 | 
			
		||||
					this.getList();
 | 
			
		||||
					break;
 | 
			
		||||
				case 'addNew':
 | 
			
		||||
					this.handleAdd();
 | 
			
		||||
					break;
 | 
			
		||||
				case 'import':
 | 
			
		||||
					this.handleImport();
 | 
			
		||||
					break;
 | 
			
		||||
				default:
 | 
			
		||||
					this.handleExport();
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		/** 查询用户列表 */
 | 
			
		||||
@@ -630,20 +616,8 @@ export default {
 | 
			
		||||
		},
 | 
			
		||||
		// 用户状态修改
 | 
			
		||||
		handleStatusChange(row) {
 | 
			
		||||
			let text = row.status === CommonStatusEnum.ENABLE ? '启用' : '停用';
 | 
			
		||||
			this.$modal
 | 
			
		||||
				.confirm('确认要"' + text + '""' + row.username + '"用户吗?')
 | 
			
		||||
				.then(function () {
 | 
			
		||||
					return changeUserStatus(row.id, row.status);
 | 
			
		||||
				})
 | 
			
		||||
				.then(() => {
 | 
			
		||||
					this.$modal.msgSuccess(text + '成功');
 | 
			
		||||
				})
 | 
			
		||||
				.catch(function () {
 | 
			
		||||
					row.status =
 | 
			
		||||
						row.status === CommonStatusEnum.ENABLE
 | 
			
		||||
							? CommonStatusEnum.DISABLE
 | 
			
		||||
							: CommonStatusEnum.ENABLE;
 | 
			
		||||
			changeUserStatus(row.id, row.status).then((res) => {
 | 
			
		||||
				this.$modal.msgSuccess('操作成功');
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		// 取消按钮
 | 
			
		||||
@@ -675,15 +649,14 @@ export default {
 | 
			
		||||
			this.resetForm('form');
 | 
			
		||||
		},
 | 
			
		||||
		/** 搜索按钮操作 */
 | 
			
		||||
		handleQuery() {
 | 
			
		||||
		handleQuery(val) {
 | 
			
		||||
			this.queryParams.pageNo = 1;
 | 
			
		||||
			this.queryParams.username = val.username;
 | 
			
		||||
			this.queryParams.mobile = val.mobile;
 | 
			
		||||
			this.queryParams.status = val.status;
 | 
			
		||||
			this.queryParams.createTime = val.createTime;
 | 
			
		||||
			this.getList();
 | 
			
		||||
		},
 | 
			
		||||
		/** 重置按钮操作 */
 | 
			
		||||
		resetQuery() {
 | 
			
		||||
			this.resetForm('queryForm');
 | 
			
		||||
			this.handleQuery();
 | 
			
		||||
		},
 | 
			
		||||
		/** 新增按钮操作 */
 | 
			
		||||
		handleAdd() {
 | 
			
		||||
			this.reset();
 | 
			
		||||
@@ -703,15 +676,12 @@ export default {
 | 
			
		||||
				this.form = response.data;
 | 
			
		||||
				this.open = true;
 | 
			
		||||
				this.title = '修改用户';
 | 
			
		||||
				this.form.password = '';
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		/** 重置密码按钮操作 */
 | 
			
		||||
		handleResetPwd(row) {
 | 
			
		||||
			this.$prompt('请输入"' + row.username + '"的新密码', '提示', {
 | 
			
		||||
				confirmButtonText: '确定',
 | 
			
		||||
				cancelButtonText: '取消',
 | 
			
		||||
			})
 | 
			
		||||
			this.$modal
 | 
			
		||||
				.prompt('请输入 【' + row.username + '】 的新密码')
 | 
			
		||||
				.then(({ value }) => {
 | 
			
		||||
					resetUserPwd(row.id, value).then((response) => {
 | 
			
		||||
						this.$modal.msgSuccess('修改成功,新密码是:' + value);
 | 
			
		||||
@@ -775,12 +745,11 @@ export default {
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		/** 删除按钮操作 */
 | 
			
		||||
		handleDelete(row) {
 | 
			
		||||
			const ids = row.id || this.ids;
 | 
			
		||||
		handleDelete(id, detContent) {
 | 
			
		||||
			this.$modal
 | 
			
		||||
				.confirm('是否确认删除用户编号为"' + ids + '"的数据项?')
 | 
			
		||||
				.then(function () {
 | 
			
		||||
					return delUser(ids);
 | 
			
		||||
				.delConfirm(detContent)
 | 
			
		||||
				.then(() => {
 | 
			
		||||
					return delUser(id);
 | 
			
		||||
				})
 | 
			
		||||
				.then(() => {
 | 
			
		||||
					this.getList();
 | 
			
		||||
@@ -811,7 +780,7 @@ export default {
 | 
			
		||||
			this.upload.title = '用户导入';
 | 
			
		||||
			this.upload.open = true;
 | 
			
		||||
		},
 | 
			
		||||
		/** 下载模板操作 */
 | 
			
		||||
		/** 导出模板操作 */
 | 
			
		||||
		importTemplate() {
 | 
			
		||||
			importTemplate().then((response) => {
 | 
			
		||||
				this.$download.excel(response, '用户导入模板.xls');
 | 
			
		||||
@@ -867,3 +836,20 @@ export default {
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.user-container {
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	height: calc(100vh - 164px);
 | 
			
		||||
	background-color: #f2f4f9;
 | 
			
		||||
 | 
			
		||||
	.user-box {
 | 
			
		||||
		.user-box-left,
 | 
			
		||||
		.user-box-right {
 | 
			
		||||
			background-color: #fff;
 | 
			
		||||
			padding: 8px;
 | 
			
		||||
			border-radius: 8px;
 | 
			
		||||
			height: calc(100vh - 164px);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,9 +7,9 @@
 | 
			
		||||
            <span>个人信息</span>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <!-- <div class="text-center">
 | 
			
		||||
            <div class="text-center">
 | 
			
		||||
              <userAvatar :user="user" />
 | 
			
		||||
            </div> -->
 | 
			
		||||
            </div>
 | 
			
		||||
            <ul class="list-group list-group-striped">
 | 
			
		||||
              <li class="list-group-item">
 | 
			
		||||
                <svg-icon icon-class="user" />用户名称
 | 
			
		||||
@@ -66,7 +66,7 @@
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
// import userAvatar from "./userAvatar";
 | 
			
		||||
import userAvatar from "./userAvatar";
 | 
			
		||||
import userInfo from "./userInfo";
 | 
			
		||||
import resetPwd from "./resetPwd";
 | 
			
		||||
import userSocial from "./userSocial";
 | 
			
		||||
@@ -74,7 +74,7 @@ import { getUserProfile } from "@/api/system/user";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "Profile",
 | 
			
		||||
  components: { /** userAvatar , **/ userInfo, resetPwd, userSocial },
 | 
			
		||||
  components: { userAvatar, userInfo, resetPwd, userSocial },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      user: {},
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										183
									
								
								yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										183
									
								
								yarn.lock
									
									
									
									
									
								
							@@ -46,8 +46,7 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.5.tgz"
 | 
			
		||||
  "version" "7.22.5"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/highlight" "^7.22.13"
 | 
			
		||||
    "chalk" "^2.4.2"
 | 
			
		||||
    "@babel/highlight" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9":
 | 
			
		||||
  "integrity" "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ=="
 | 
			
		||||
@@ -80,7 +79,7 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/generator/-/generator-7.22.9.tgz"
 | 
			
		||||
  "version" "7.22.9"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/types" "^7.23.0"
 | 
			
		||||
    "@babel/types" "^7.22.5"
 | 
			
		||||
    "@jridgewell/gen-mapping" "^0.3.2"
 | 
			
		||||
    "@jridgewell/trace-mapping" "^0.3.17"
 | 
			
		||||
    "jsesc" "^2.5.1"
 | 
			
		||||
@@ -97,7 +96,7 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz"
 | 
			
		||||
  "version" "7.22.5"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/types" "^7.22.15"
 | 
			
		||||
    "@babel/types" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.22.9", "@babel/helper-compilation-targets@^7.9.6":
 | 
			
		||||
  "integrity" "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw=="
 | 
			
		||||
@@ -118,7 +117,7 @@
 | 
			
		||||
    "@babel/helper-annotate-as-pure" "^7.22.5"
 | 
			
		||||
    "@babel/helper-environment-visitor" "^7.22.5"
 | 
			
		||||
    "@babel/helper-function-name" "^7.22.5"
 | 
			
		||||
    "@babel/helper-member-expression-to-functions" "^7.22.15"
 | 
			
		||||
    "@babel/helper-member-expression-to-functions" "^7.22.5"
 | 
			
		||||
    "@babel/helper-optimise-call-expression" "^7.22.5"
 | 
			
		||||
    "@babel/helper-replace-supers" "^7.22.9"
 | 
			
		||||
    "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
 | 
			
		||||
@@ -155,8 +154,8 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz"
 | 
			
		||||
  "version" "7.22.5"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/template" "^7.22.15"
 | 
			
		||||
    "@babel/types" "^7.23.0"
 | 
			
		||||
    "@babel/template" "^7.22.5"
 | 
			
		||||
    "@babel/types" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-hoist-variables@^7.22.5":
 | 
			
		||||
  "integrity" "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw=="
 | 
			
		||||
@@ -170,25 +169,25 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz"
 | 
			
		||||
  "version" "7.22.5"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/types" "^7.23.0"
 | 
			
		||||
    "@babel/types" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.22.5", "@babel/helper-module-imports@^7.8.3":
 | 
			
		||||
  "integrity" "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg=="
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz"
 | 
			
		||||
  "version" "7.22.5"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/types" "^7.22.15"
 | 
			
		||||
    "@babel/types" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9":
 | 
			
		||||
  "integrity" "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ=="
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz"
 | 
			
		||||
  "version" "7.22.9"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-environment-visitor" "^7.22.20"
 | 
			
		||||
    "@babel/helper-module-imports" "^7.22.15"
 | 
			
		||||
    "@babel/helper-environment-visitor" "^7.22.5"
 | 
			
		||||
    "@babel/helper-module-imports" "^7.22.5"
 | 
			
		||||
    "@babel/helper-simple-access" "^7.22.5"
 | 
			
		||||
    "@babel/helper-split-export-declaration" "^7.22.6"
 | 
			
		||||
    "@babel/helper-validator-identifier" "^7.22.20"
 | 
			
		||||
    "@babel/helper-validator-identifier" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-optimise-call-expression@^7.22.5":
 | 
			
		||||
  "integrity" "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw=="
 | 
			
		||||
@@ -208,16 +207,16 @@
 | 
			
		||||
  "version" "7.22.9"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-annotate-as-pure" "^7.22.5"
 | 
			
		||||
    "@babel/helper-environment-visitor" "^7.22.20"
 | 
			
		||||
    "@babel/helper-wrap-function" "^7.22.20"
 | 
			
		||||
    "@babel/helper-environment-visitor" "^7.22.5"
 | 
			
		||||
    "@babel/helper-wrap-function" "^7.22.9"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9":
 | 
			
		||||
  "integrity" "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg=="
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz"
 | 
			
		||||
  "version" "7.22.9"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-environment-visitor" "^7.22.20"
 | 
			
		||||
    "@babel/helper-member-expression-to-functions" "^7.22.15"
 | 
			
		||||
    "@babel/helper-environment-visitor" "^7.22.5"
 | 
			
		||||
    "@babel/helper-member-expression-to-functions" "^7.22.5"
 | 
			
		||||
    "@babel/helper-optimise-call-expression" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/helper-simple-access@^7.22.5":
 | 
			
		||||
@@ -262,17 +261,17 @@
 | 
			
		||||
  "version" "7.22.9"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-function-name" "^7.22.5"
 | 
			
		||||
    "@babel/template" "^7.22.15"
 | 
			
		||||
    "@babel/types" "^7.22.19"
 | 
			
		||||
    "@babel/template" "^7.22.5"
 | 
			
		||||
    "@babel/types" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/helpers@^7.22.6":
 | 
			
		||||
  "integrity" "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA=="
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.22.6.tgz"
 | 
			
		||||
  "version" "7.22.6"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/template" "^7.22.15"
 | 
			
		||||
    "@babel/traverse" "^7.23.2"
 | 
			
		||||
    "@babel/types" "^7.23.0"
 | 
			
		||||
    "@babel/template" "^7.22.5"
 | 
			
		||||
    "@babel/traverse" "^7.22.6"
 | 
			
		||||
    "@babel/types" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/highlight@^7.22.5":
 | 
			
		||||
  "integrity" "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw=="
 | 
			
		||||
@@ -322,7 +321,7 @@
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.22.5"
 | 
			
		||||
    "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-optional-chaining" "^7.22.15"
 | 
			
		||||
    "@babel/plugin-transform-optional-chaining" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/plugin-proposal-class-properties@^7.8.3":
 | 
			
		||||
  "integrity" "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ=="
 | 
			
		||||
@@ -337,11 +336,11 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.7.tgz"
 | 
			
		||||
  "version" "7.22.7"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-create-class-features-plugin" "^7.22.15"
 | 
			
		||||
    "@babel/helper-create-class-features-plugin" "^7.22.6"
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.22.5"
 | 
			
		||||
    "@babel/helper-replace-supers" "^7.22.20"
 | 
			
		||||
    "@babel/helper-replace-supers" "^7.22.5"
 | 
			
		||||
    "@babel/helper-split-export-declaration" "^7.22.6"
 | 
			
		||||
    "@babel/plugin-syntax-decorators" "^7.22.10"
 | 
			
		||||
    "@babel/plugin-syntax-decorators" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2":
 | 
			
		||||
  "integrity" "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w=="
 | 
			
		||||
@@ -509,9 +508,9 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz"
 | 
			
		||||
  "version" "7.22.7"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-environment-visitor" "^7.22.20"
 | 
			
		||||
    "@babel/helper-environment-visitor" "^7.22.5"
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.22.5"
 | 
			
		||||
    "@babel/helper-remap-async-to-generator" "^7.22.20"
 | 
			
		||||
    "@babel/helper-remap-async-to-generator" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-syntax-async-generators" "^7.8.4"
 | 
			
		||||
 | 
			
		||||
"@babel/plugin-transform-async-to-generator@^7.22.5":
 | 
			
		||||
@@ -550,7 +549,7 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz"
 | 
			
		||||
  "version" "7.22.5"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-create-class-features-plugin" "^7.22.11"
 | 
			
		||||
    "@babel/helper-create-class-features-plugin" "^7.22.5"
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-syntax-class-static-block" "^7.14.5"
 | 
			
		||||
 | 
			
		||||
@@ -560,12 +559,12 @@
 | 
			
		||||
  "version" "7.22.6"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-annotate-as-pure" "^7.22.5"
 | 
			
		||||
    "@babel/helper-compilation-targets" "^7.22.15"
 | 
			
		||||
    "@babel/helper-compilation-targets" "^7.22.6"
 | 
			
		||||
    "@babel/helper-environment-visitor" "^7.22.5"
 | 
			
		||||
    "@babel/helper-function-name" "^7.22.5"
 | 
			
		||||
    "@babel/helper-optimise-call-expression" "^7.22.5"
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.22.5"
 | 
			
		||||
    "@babel/helper-replace-supers" "^7.22.9"
 | 
			
		||||
    "@babel/helper-replace-supers" "^7.22.5"
 | 
			
		||||
    "@babel/helper-split-export-declaration" "^7.22.6"
 | 
			
		||||
    "globals" "^11.1.0"
 | 
			
		||||
 | 
			
		||||
@@ -674,7 +673,7 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz"
 | 
			
		||||
  "version" "7.22.5"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-module-transforms" "^7.23.0"
 | 
			
		||||
    "@babel/helper-module-transforms" "^7.22.5"
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/plugin-transform-modules-commonjs@^7.22.5":
 | 
			
		||||
@@ -682,7 +681,7 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz"
 | 
			
		||||
  "version" "7.22.5"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-module-transforms" "^7.23.0"
 | 
			
		||||
    "@babel/helper-module-transforms" "^7.22.5"
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.22.5"
 | 
			
		||||
    "@babel/helper-simple-access" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
@@ -692,9 +691,9 @@
 | 
			
		||||
  "version" "7.22.5"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-hoist-variables" "^7.22.5"
 | 
			
		||||
    "@babel/helper-module-transforms" "^7.23.0"
 | 
			
		||||
    "@babel/helper-module-transforms" "^7.22.5"
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.22.5"
 | 
			
		||||
    "@babel/helper-validator-identifier" "^7.22.20"
 | 
			
		||||
    "@babel/helper-validator-identifier" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/plugin-transform-modules-umd@^7.22.5":
 | 
			
		||||
  "integrity" "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ=="
 | 
			
		||||
@@ -740,11 +739,11 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz"
 | 
			
		||||
  "version" "7.22.5"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/compat-data" "^7.22.9"
 | 
			
		||||
    "@babel/helper-compilation-targets" "^7.22.15"
 | 
			
		||||
    "@babel/compat-data" "^7.22.5"
 | 
			
		||||
    "@babel/helper-compilation-targets" "^7.22.5"
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
 | 
			
		||||
    "@babel/plugin-transform-parameters" "^7.22.15"
 | 
			
		||||
    "@babel/plugin-transform-parameters" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/plugin-transform-object-super@^7.22.5":
 | 
			
		||||
  "integrity" "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw=="
 | 
			
		||||
@@ -792,7 +791,7 @@
 | 
			
		||||
  "version" "7.22.5"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-annotate-as-pure" "^7.22.5"
 | 
			
		||||
    "@babel/helper-create-class-features-plugin" "^7.22.11"
 | 
			
		||||
    "@babel/helper-create-class-features-plugin" "^7.22.5"
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
 | 
			
		||||
 | 
			
		||||
@@ -823,7 +822,7 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz"
 | 
			
		||||
  "version" "7.22.9"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-module-imports" "^7.22.15"
 | 
			
		||||
    "@babel/helper-module-imports" "^7.22.5"
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.22.5"
 | 
			
		||||
    "babel-plugin-polyfill-corejs2" "^0.4.4"
 | 
			
		||||
    "babel-plugin-polyfill-corejs3" "^0.8.2"
 | 
			
		||||
@@ -902,12 +901,12 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.22.9.tgz"
 | 
			
		||||
  "version" "7.22.9"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/compat-data" "^7.23.2"
 | 
			
		||||
    "@babel/helper-compilation-targets" "^7.22.15"
 | 
			
		||||
    "@babel/compat-data" "^7.22.9"
 | 
			
		||||
    "@babel/helper-compilation-targets" "^7.22.9"
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.22.5"
 | 
			
		||||
    "@babel/helper-validator-option" "^7.22.15"
 | 
			
		||||
    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15"
 | 
			
		||||
    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15"
 | 
			
		||||
    "@babel/helper-validator-option" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2"
 | 
			
		||||
    "@babel/plugin-syntax-async-generators" "^7.8.4"
 | 
			
		||||
    "@babel/plugin-syntax-class-properties" "^7.12.13"
 | 
			
		||||
@@ -928,50 +927,50 @@
 | 
			
		||||
    "@babel/plugin-syntax-top-level-await" "^7.14.5"
 | 
			
		||||
    "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
 | 
			
		||||
    "@babel/plugin-transform-arrow-functions" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-async-generator-functions" "^7.23.2"
 | 
			
		||||
    "@babel/plugin-transform-async-generator-functions" "^7.22.7"
 | 
			
		||||
    "@babel/plugin-transform-async-to-generator" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-block-scoped-functions" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-block-scoping" "^7.23.0"
 | 
			
		||||
    "@babel/plugin-transform-block-scoping" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-class-properties" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-class-static-block" "^7.22.11"
 | 
			
		||||
    "@babel/plugin-transform-classes" "^7.22.15"
 | 
			
		||||
    "@babel/plugin-transform-class-static-block" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-classes" "^7.22.6"
 | 
			
		||||
    "@babel/plugin-transform-computed-properties" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-destructuring" "^7.23.0"
 | 
			
		||||
    "@babel/plugin-transform-destructuring" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-dotall-regex" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-duplicate-keys" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-dynamic-import" "^7.22.11"
 | 
			
		||||
    "@babel/plugin-transform-dynamic-import" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-exponentiation-operator" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-export-namespace-from" "^7.22.11"
 | 
			
		||||
    "@babel/plugin-transform-for-of" "^7.22.15"
 | 
			
		||||
    "@babel/plugin-transform-export-namespace-from" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-for-of" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-function-name" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-json-strings" "^7.22.11"
 | 
			
		||||
    "@babel/plugin-transform-json-strings" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-literals" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-logical-assignment-operators" "^7.22.11"
 | 
			
		||||
    "@babel/plugin-transform-logical-assignment-operators" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-member-expression-literals" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-modules-amd" "^7.23.0"
 | 
			
		||||
    "@babel/plugin-transform-modules-commonjs" "^7.23.0"
 | 
			
		||||
    "@babel/plugin-transform-modules-systemjs" "^7.23.0"
 | 
			
		||||
    "@babel/plugin-transform-modules-amd" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-modules-commonjs" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-modules-systemjs" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-modules-umd" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-new-target" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11"
 | 
			
		||||
    "@babel/plugin-transform-numeric-separator" "^7.22.11"
 | 
			
		||||
    "@babel/plugin-transform-object-rest-spread" "^7.22.15"
 | 
			
		||||
    "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-numeric-separator" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-object-rest-spread" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-object-super" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-optional-catch-binding" "^7.22.11"
 | 
			
		||||
    "@babel/plugin-transform-optional-chaining" "^7.23.0"
 | 
			
		||||
    "@babel/plugin-transform-parameters" "^7.22.15"
 | 
			
		||||
    "@babel/plugin-transform-optional-catch-binding" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-optional-chaining" "^7.22.6"
 | 
			
		||||
    "@babel/plugin-transform-parameters" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-private-methods" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-private-property-in-object" "^7.22.11"
 | 
			
		||||
    "@babel/plugin-transform-private-property-in-object" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-property-literals" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-regenerator" "^7.22.10"
 | 
			
		||||
    "@babel/plugin-transform-regenerator" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-reserved-words" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-shorthand-properties" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-spread" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-sticky-regex" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-template-literals" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-typeof-symbol" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-unicode-escapes" "^7.22.10"
 | 
			
		||||
    "@babel/plugin-transform-unicode-escapes" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-unicode-property-regex" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-unicode-regex" "^7.22.5"
 | 
			
		||||
    "@babel/plugin-transform-unicode-sets-regex" "^7.22.5"
 | 
			
		||||
@@ -989,6 +988,8 @@
 | 
			
		||||
  "version" "0.1.6"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-plugin-utils" "^7.0.0"
 | 
			
		||||
    "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
 | 
			
		||||
    "@babel/plugin-transform-dotall-regex" "^7.4.4"
 | 
			
		||||
    "@babel/types" "^7.4.4"
 | 
			
		||||
    "esutils" "^2.0.2"
 | 
			
		||||
 | 
			
		||||
@@ -1009,19 +1010,19 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/template/-/template-7.22.5.tgz"
 | 
			
		||||
  "version" "7.22.5"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/code-frame" "^7.22.13"
 | 
			
		||||
    "@babel/parser" "^7.22.15"
 | 
			
		||||
    "@babel/types" "^7.22.15"
 | 
			
		||||
    "@babel/code-frame" "^7.22.5"
 | 
			
		||||
    "@babel/parser" "^7.22.5"
 | 
			
		||||
    "@babel/types" "^7.22.5"
 | 
			
		||||
 | 
			
		||||
"@babel/traverse@^7.22.5", "@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8", "@babel/traverse@^7.7.0":
 | 
			
		||||
  "integrity" "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw=="
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.22.8.tgz"
 | 
			
		||||
  "version" "7.22.8"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/code-frame" "^7.22.13"
 | 
			
		||||
    "@babel/generator" "^7.23.0"
 | 
			
		||||
    "@babel/helper-environment-visitor" "^7.22.20"
 | 
			
		||||
    "@babel/helper-function-name" "^7.23.0"
 | 
			
		||||
    "@babel/code-frame" "^7.22.5"
 | 
			
		||||
    "@babel/generator" "^7.22.7"
 | 
			
		||||
    "@babel/helper-environment-visitor" "^7.22.5"
 | 
			
		||||
    "@babel/helper-function-name" "^7.22.5"
 | 
			
		||||
    "@babel/helper-hoist-variables" "^7.22.5"
 | 
			
		||||
    "@babel/helper-split-export-declaration" "^7.22.6"
 | 
			
		||||
    "@babel/parser" "^7.22.7"
 | 
			
		||||
@@ -1160,8 +1161,8 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz"
 | 
			
		||||
  "version" "0.3.18"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@jridgewell/resolve-uri" "^3.1.0"
 | 
			
		||||
    "@jridgewell/sourcemap-codec" "^1.4.14"
 | 
			
		||||
    "@jridgewell/resolve-uri" "3.1.0"
 | 
			
		||||
    "@jridgewell/sourcemap-codec" "1.4.14"
 | 
			
		||||
 | 
			
		||||
"@mrmlnc/readdir-enhanced@^2.2.1":
 | 
			
		||||
  "integrity" "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g=="
 | 
			
		||||
@@ -1732,24 +1733,8 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz"
 | 
			
		||||
  "version" "3.3.4"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@vue/compiler-core" "3.3.6"
 | 
			
		||||
    "@vue/shared" "3.3.6"
 | 
			
		||||
 | 
			
		||||
"@vue/compiler-sfc@^3.0.0-beta.14", "@vue/compiler-sfc@^3.0.1":
 | 
			
		||||
  "integrity" "sha512-/Kms6du2h1VrXFreuZmlvQej8B1zenBqIohP0690IUBkJjsFvJxY0crcvVRJ0UhMgSR9dewB+khdR1DfbpArJA=="
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.6.tgz"
 | 
			
		||||
  "version" "3.3.6"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/parser" "^7.23.0"
 | 
			
		||||
    "@vue/compiler-core" "3.3.6"
 | 
			
		||||
    "@vue/compiler-dom" "3.3.6"
 | 
			
		||||
    "@vue/compiler-ssr" "3.3.6"
 | 
			
		||||
    "@vue/reactivity-transform" "3.3.6"
 | 
			
		||||
    "@vue/shared" "3.3.6"
 | 
			
		||||
    "estree-walker" "^2.0.2"
 | 
			
		||||
    "magic-string" "^0.30.5"
 | 
			
		||||
    "postcss" "^8.4.31"
 | 
			
		||||
    "source-map-js" "^1.0.2"
 | 
			
		||||
    "@vue/compiler-core" "3.3.4"
 | 
			
		||||
    "@vue/shared" "3.3.4"
 | 
			
		||||
 | 
			
		||||
"@vue/compiler-sfc@^3.0.0-beta.14", "@vue/compiler-sfc@^3.0.1":
 | 
			
		||||
  "integrity" "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ=="
 | 
			
		||||
@@ -2502,7 +2487,7 @@
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz"
 | 
			
		||||
  "version" "0.5.2"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/helper-define-polyfill-provider" "^0.4.3"
 | 
			
		||||
    "@babel/helper-define-polyfill-provider" "^0.4.2"
 | 
			
		||||
 | 
			
		||||
"babel-runtime@^6.9.2", "babel-runtime@6.x":
 | 
			
		||||
  "integrity" "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g=="
 | 
			
		||||
@@ -3009,9 +2994,9 @@
 | 
			
		||||
    "lodash.uniq" "^4.5.0"
 | 
			
		||||
 | 
			
		||||
"caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30001109", "caniuse-lite@^1.0.30001503":
 | 
			
		||||
  "integrity" "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA=="
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz"
 | 
			
		||||
  "version" "1.0.30001517"
 | 
			
		||||
  "integrity" "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg=="
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz"
 | 
			
		||||
  "version" "1.0.30001651"
 | 
			
		||||
 | 
			
		||||
"canvg@^3.0.10", "canvg@^3.0.6":
 | 
			
		||||
  "integrity" "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q=="
 | 
			
		||||
@@ -3341,7 +3326,7 @@
 | 
			
		||||
    "chalk" "^2.4.1"
 | 
			
		||||
    "q" "^1.1.2"
 | 
			
		||||
 | 
			
		||||
"code-brick-zj@^1.0.2":
 | 
			
		||||
"code-brick-zj@^1.0.5":
 | 
			
		||||
  "integrity" "sha512-X4N7gt3Vn8MIItI0q2N7M521hXPeBpaIvJXDFApvHhdXl++nc6QtrFXPqbZ9KPNUovkXOc/D9eWcu3pq5WPxpQ=="
 | 
			
		||||
  "resolved" "https://registry.npmmirror.com/code-brick-zj/-/code-brick-zj-1.1.1.tgz"
 | 
			
		||||
  "version" "1.1.1"
 | 
			
		||||
@@ -11214,7 +11199,7 @@
 | 
			
		||||
  "version" "8.5.2"
 | 
			
		||||
  dependencies:
 | 
			
		||||
    "@babel/runtime" "^7.12.5"
 | 
			
		||||
    "@videojs/http-streaming" "3.6.0"
 | 
			
		||||
    "@videojs/http-streaming" "3.5.3"
 | 
			
		||||
    "@videojs/vhs-utils" "^4.0.0"
 | 
			
		||||
    "@videojs/xhr" "2.6.0"
 | 
			
		||||
    "aes-decrypter" "^4.0.1"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user