|
|
@@ -1,59 +1,3 @@
|
|
|
-<script lang='ts' setup>
|
|
|
-import {ref} from "vue"
|
|
|
-const roleName = ref<string>("")
|
|
|
-const roleId = ref<string>("")
|
|
|
-
|
|
|
-const roleList = ref([
|
|
|
- { name: "财务", id: "1" },
|
|
|
- { name: "运营", id: "2" },
|
|
|
- { name: "开发", id: "3" },
|
|
|
- { name: "admin", id: "4" },
|
|
|
-])
|
|
|
- function roleobj(id:string){
|
|
|
- roleId.value=id
|
|
|
- console.log(roleId.value)
|
|
|
- }
|
|
|
-interface Tree {
|
|
|
- id: string
|
|
|
- label: string
|
|
|
- children?: Tree[]
|
|
|
-}
|
|
|
-const getKey = (prefix: string, id: number) => {
|
|
|
- return `${prefix}-${id}`
|
|
|
-}
|
|
|
-
|
|
|
-const createData = (
|
|
|
- maxDeep: number,
|
|
|
- maxChildren: number,
|
|
|
- minNodesNumber: number,
|
|
|
- deep = 1,
|
|
|
- key = 'node'
|
|
|
-): Tree[] => {
|
|
|
- let id = 0
|
|
|
- return Array.from({ length: minNodesNumber })
|
|
|
- .fill(deep)
|
|
|
- .map(() => {
|
|
|
- const childrenNumber =
|
|
|
- deep === maxDeep ? 0 : Math.round(Math.random() * maxChildren)
|
|
|
- const nodeKey = getKey(key, ++id)
|
|
|
- return {
|
|
|
- id: nodeKey,
|
|
|
- label: nodeKey,
|
|
|
- children: childrenNumber
|
|
|
- ? createData(maxDeep, maxChildren, childrenNumber, deep + 1, nodeKey)
|
|
|
- : undefined,
|
|
|
- }
|
|
|
- })
|
|
|
-}
|
|
|
-
|
|
|
-const props = {
|
|
|
- value: 'id',
|
|
|
- label: 'label',
|
|
|
- children: 'children',
|
|
|
-}
|
|
|
-const data = createData(4, 30, 40)
|
|
|
-</script>
|
|
|
-<!-- 模板区域 -->
|
|
|
<template>
|
|
|
<div>
|
|
|
<ElRow :gutter="20">
|
|
|
@@ -71,9 +15,7 @@ const data = createData(4, 30, 40)
|
|
|
<ElButton type="primary">查找</ElButton>
|
|
|
</ElCol>
|
|
|
</ElFormItem>
|
|
|
- <div class="roleitem flex j-s a-c" :class="roleId===item.id?'active':''" v-for="(item, index) in roleList" :key="index" @click="roleobj(item.id)">
|
|
|
- <span>{{ item.name }}</span>
|
|
|
- </div>
|
|
|
+
|
|
|
</PageMain>
|
|
|
</ElCol>
|
|
|
<ElCol :md="18">
|
|
|
@@ -82,21 +24,100 @@ const data = createData(4, 30, 40)
|
|
|
<div class="flex j-s a-c">
|
|
|
<span class="strong">角色管理</span>
|
|
|
<div>
|
|
|
- <ElButton type="primary">编辑</ElButton>
|
|
|
- <ElButton type="primary">删除</ElButton>
|
|
|
+ <ElButton type="primary" @click="roleSubmit">提交</ElButton>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
+ <h5>基本信息</h5>
|
|
|
+ <ElCol :md="6"></ElCol>
|
|
|
+ <ElForm :model="roleInfo" :rules="roleRules" label-width="auto" size="" style="max-width: 500px;">
|
|
|
+ <ElFormItem prop="name" label="角色名称">
|
|
|
+ <ElInput v-model="roleInfo.name" placeholder="输入20个字以内的角色名称" type="text" tabindex="1">
|
|
|
+ </ElInput>
|
|
|
+ </ElFormItem>
|
|
|
+ <ElFormItem prop="desc" label="角色描述">
|
|
|
+ <ElInput v-model="roleInfo.desc" placeholder="请输入" type="textarea" tabindex="2">
|
|
|
+ </ElInput>
|
|
|
+ </ElFormItem>
|
|
|
+ </ElForm>
|
|
|
<ElDivider></ElDivider>
|
|
|
- <ElTreeV2 style="max-width: 600px;" :data="data" :props="props" show-checkbox :height="208"></ElTreeV2>
|
|
|
+ <div>
|
|
|
+ <h5>角色权限</h5>
|
|
|
+ <ElTree style="max-height: 350px;overflow-y: auto;" :data="treeData" :props="defaultProps" show-checkbox
|
|
|
+ node-key="id" :default-expand-all="true" :default-checked-keys="[6]" @check="handleCheckChange" />
|
|
|
+ </div>
|
|
|
</PageMain>
|
|
|
</ElCol>
|
|
|
</ElRow>
|
|
|
+
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
-<!-- 行为区域 -->
|
|
|
-<!-- 样式区域 -->
|
|
|
+<script lang='ts' setup>
|
|
|
+import { asyncRoutes } from '@/router/routes' // 请根据实际路径调整
|
|
|
+import { ref, reactive, onMounted } from 'vue';
|
|
|
+import type { FormRules } from 'element-plus';
|
|
|
+import { preprocessRoutes, convertToTreeData, TreeNode } from '@/utils/composables/routeUtils'; // 导入工具方法
|
|
|
+import api from '@/api'
|
|
|
+const roleName = ref<string>("");
|
|
|
+
|
|
|
+const roleInfo = reactive<{
|
|
|
+ name: string;
|
|
|
+ desc: string;
|
|
|
+ system: string,
|
|
|
+ permsId: number[],
|
|
|
+ perms: string[]
|
|
|
+}>({
|
|
|
+ name: "",//角色
|
|
|
+ desc: "",//描述
|
|
|
+ system: "PLATFORM",//系统
|
|
|
+ permsId: [],//权限id
|
|
|
+ perms: [],//权限标识
|
|
|
+});
|
|
|
+const roleRules = ref<FormRules>({
|
|
|
+ name: [
|
|
|
+ { required: true, trigger: 'blur', message: '请输入角色名称' },
|
|
|
+ ],
|
|
|
+
|
|
|
+});
|
|
|
+const treeData = ref<TreeNode[]>([]);
|
|
|
+const defaultProps = {
|
|
|
+ children: 'children',
|
|
|
+ label: 'title',
|
|
|
+};
|
|
|
+const handleCheckChange = (
|
|
|
+ _checkedNodes: TreeNode[],
|
|
|
+ checkedInfo: {
|
|
|
+ checkedKeys: number[];
|
|
|
+ checkedNodes: TreeNode[];
|
|
|
+ halfCheckedKeys: number[];
|
|
|
+ halfCheckedNodes: TreeNode[];
|
|
|
+ }
|
|
|
+) => {
|
|
|
+ // console.log('Checked keys:', checkedInfo.checkedKeys);
|
|
|
+ // console.log(checkedInfo.checkedNodes);
|
|
|
+ roleInfo.permsId = checkedInfo.checkedKeys;
|
|
|
+ roleInfo.perms = [];
|
|
|
+ checkedInfo.checkedNodes.forEach(val => {
|
|
|
+ if (val.type === '2' ) {
|
|
|
+ roleInfo.perms.push(val.auth);
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
+ function roleSubmit() {
|
|
|
+ api.roleApi.roleAdd(roleInfo).then((res)=>{
|
|
|
+ console.log(res)
|
|
|
+ })
|
|
|
+ }
|
|
|
+onMounted(() => {
|
|
|
+ // 对 asyncRoutes 进行预处理并转换为树形结构
|
|
|
+ const processedRoutes = preprocessRoutes(asyncRoutes);
|
|
|
+ treeData.value = convertToTreeData(processedRoutes);
|
|
|
+
|
|
|
+});
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
<style lang="scss" scoped>
|
|
|
.roleitem {
|
|
|
padding: 20px;
|