You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
506 lines
14 KiB
506 lines
14 KiB
<!-- @format -->
|
|
|
|
<template>
|
|
<div class="main">
|
|
<div class="left">
|
|
<div class="ns-table-title">部门管理</div>
|
|
<a-row>
|
|
<a-col :span="12" class="tree">
|
|
<ns-button style="margin: 10px" type="primary" @click="addApartment">新增部门</ns-button>
|
|
<ns-button type="primary" @click="addApartmentSon">新增子部门</ns-button>
|
|
<ns-button style="margin: 10px" type="primary" @click="deleteApartment">删除</ns-button>
|
|
<a-tree :tree-data="apartmentTreeData" @select="SelectApartmentTree">
|
|
<template #title="{ title }">
|
|
{{ title }}
|
|
</template>
|
|
</a-tree>
|
|
</a-col>
|
|
<a-col :span="12" class="list">
|
|
<a-tabs v-model:activeKey="activeKey">
|
|
<a-tab-pane key="1" tab="部门信息">
|
|
<ns-form :schemas="formSchema" :model="formData" formLayout="vertical" class="form" />
|
|
</a-tab-pane>
|
|
<a-tab-pane key="2" tab="部门权限">
|
|
<a-tree
|
|
:tree-data="apartmentAdminTreeData"
|
|
v-model:checkedKeys="ApartcheckedKeys"
|
|
checkable
|
|
@select="ApartmentSelect">
|
|
<template #title="{ title }">
|
|
{{ title }}
|
|
</template>
|
|
</a-tree>
|
|
</a-tab-pane>
|
|
</a-tabs>
|
|
<ns-button style="margin: 20px" type="primary" @click="CancelApartment">取消</ns-button>
|
|
<ns-button type="primary" @click="ApartmentSure">{{
|
|
disabled ? '编辑' : '确定'
|
|
}}</ns-button>
|
|
</a-col>
|
|
</a-row>
|
|
</div>
|
|
<div class="right">
|
|
<div class="ns-table-title">角色管理</div>
|
|
<a-row>
|
|
<a-col :span="12" class="tree">
|
|
<ns-button style="margin: 10px" type="primary" @click="addUser">新增角色</ns-button>
|
|
<ns-button type="primary" @click="addUserSon">新增子角色</ns-button>
|
|
<ns-button style="margin: 10px" type="primary" @click="deleteUser">删除</ns-button>
|
|
<a-tree :tree-data="userTreeData" @select="SelectUserTree">
|
|
<template #title="{ title }">
|
|
{{ title }}
|
|
</template>
|
|
</a-tree>
|
|
</a-col>
|
|
<a-col :span="12" class="list">
|
|
<a-tabs v-model:activeKey="activeKey2">
|
|
<a-tab-pane key="1" tab="角色信息">
|
|
<ns-form
|
|
:schemas="formSchema2"
|
|
:model="formData2"
|
|
formLayout="vertical"
|
|
class="form" />
|
|
</a-tab-pane>
|
|
<a-tab-pane key="2" tab="角色权限">
|
|
<a-tree
|
|
:tree-data="userAdminTreeData"
|
|
v-model:checkedKeys="UsercheckedKeys"
|
|
checkable
|
|
@select="UserSelect">
|
|
<template #title="{ title }">
|
|
{{ title }}
|
|
</template>
|
|
</a-tree>
|
|
</a-tab-pane>
|
|
</a-tabs>
|
|
<ns-button style="margin: 20px" type="primary" @click="CancelUser">取消</ns-button>
|
|
<ns-button type="primary" @click="UserSure">{{ disabled2 ? '编辑' : '确定' }}</ns-button>
|
|
</a-col>
|
|
</a-row>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script lang="ts">
|
|
import { createVNode, defineComponent, reactive, ref, watch } from 'vue';
|
|
import { Modal } from 'ant-design-vue';
|
|
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
|
import { http } from '/nerv-lib/util/http';
|
|
export default defineComponent({
|
|
name: 'authorityManageIndex',
|
|
setup() {
|
|
const ApartcheckedKeys = ref<string[]>([]);
|
|
const UsercheckedKeys = ref<string[]>([]);
|
|
|
|
watch(ApartcheckedKeys, () => {
|
|
console.log('checkedKeys', ApartcheckedKeys.value);
|
|
});
|
|
watch(UsercheckedKeys, () => {
|
|
console.log('checkedKeys', UsercheckedKeys.value);
|
|
});
|
|
|
|
const activeKey = ref('1');
|
|
const activeKey2 = ref('1');
|
|
const disabled = ref(false);
|
|
const disabled2 = ref(false);
|
|
|
|
const addApartment = () => {
|
|
disabled.value = false;
|
|
};
|
|
|
|
const addApartmentSon = () => {
|
|
disabled.value = false;
|
|
};
|
|
const deleteApartment = () => {
|
|
Modal.confirm({
|
|
title: '是否确认删除',
|
|
icon: createVNode(ExclamationCircleOutlined),
|
|
content: createVNode('div', { style: 'color:red;' }, ''),
|
|
onOk() {},
|
|
onCancel() {
|
|
console.log('Cancel');
|
|
},
|
|
class: 'test',
|
|
});
|
|
};
|
|
const addUser = () => {
|
|
disabled2.value = false;
|
|
};
|
|
|
|
const addUserSon = () => {
|
|
disabled.value = false;
|
|
};
|
|
const deleteUser = () => {
|
|
Modal.confirm({
|
|
title: '是否确认删除',
|
|
icon: createVNode(ExclamationCircleOutlined),
|
|
content: createVNode('div', { style: 'color:red;' }, ''),
|
|
onOk() {},
|
|
onCancel() {
|
|
console.log('Cancel');
|
|
},
|
|
class: 'test',
|
|
});
|
|
};
|
|
|
|
const SelectApartmentTree = (selectedKeys: any, info: any) => {
|
|
console.log(selectedKeys, 'selectedKeys');
|
|
console.log(info, 'info');
|
|
};
|
|
const SelectUserTree = (selectedKeys: any, info: any) => {
|
|
console.log(selectedKeys, 'selectedKeys');
|
|
console.log(info, 'info');
|
|
};
|
|
|
|
const ApartmentSelect = (selectedKeys: any, info: any) => {
|
|
console.log(selectedKeys, 'selectedKeys');
|
|
console.log(info, 'info');
|
|
};
|
|
|
|
const UserSelect = (selectedKeys: any, info: any) => {
|
|
console.log(selectedKeys, 'selectedKeys');
|
|
console.log(info, 'info');
|
|
};
|
|
|
|
const ApartmentSure = () => {
|
|
disabled.value = !disabled.value;
|
|
};
|
|
const UserSure = () => {
|
|
disabled2.value = !disabled2.value;
|
|
};
|
|
|
|
const CancelApartment = () => {
|
|
disabled.value = true;
|
|
};
|
|
|
|
const CancelUser = () => {
|
|
disabled2.value = true;
|
|
};
|
|
|
|
const apartmentTreeData = [
|
|
{
|
|
title: '铁路总局',
|
|
key: '0-0',
|
|
children: [
|
|
{ title: '济阳站', key: '0-0-0' },
|
|
{ title: '临沂站', key: '0-0-1' },
|
|
],
|
|
},
|
|
];
|
|
const userTreeData = [
|
|
{
|
|
title: '产品总监',
|
|
key: '0-0',
|
|
children: [
|
|
{ title: '产品经理', key: '0-0-0' },
|
|
{ title: '产品助理', key: '0-0-1' },
|
|
],
|
|
},
|
|
];
|
|
|
|
const apartmentAdminTreeData = [
|
|
{
|
|
title: '首页',
|
|
key: '0-0',
|
|
children: [
|
|
{
|
|
title: '控制台',
|
|
key: '0-0-0',
|
|
children: [
|
|
{ title: 'leaf', key: '0-0-0-0' },
|
|
{ title: 'leaf', key: '0-0-0-1' },
|
|
],
|
|
},
|
|
{
|
|
title: '用户管理',
|
|
key: '0-0-1',
|
|
children: [{ key: '0-0-1-0', title: 'sss' }],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const userAdminTreeData = [
|
|
{
|
|
title: '首页',
|
|
key: '0-0',
|
|
children: [
|
|
{
|
|
title: '工作台',
|
|
key: '0-0-0',
|
|
children: [
|
|
{ title: 'leaf', key: '0-0-0-0' },
|
|
{ title: 'leaf', key: '0-0-0-1' },
|
|
],
|
|
},
|
|
{
|
|
title: '系统管理',
|
|
key: '0-0-1',
|
|
children: [{ key: '0-0-1-0', title: 'sss' }],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
let formData = reactive({
|
|
department: '',
|
|
remark: '',
|
|
});
|
|
let formData2 = reactive({
|
|
department: '',
|
|
remark: '',
|
|
});
|
|
|
|
const formSchema = reactive([
|
|
{
|
|
field: 'field111',
|
|
component: 'NsChildForm',
|
|
componentProps: {
|
|
schemas: [
|
|
{
|
|
label: '部门名称',
|
|
field: 'department',
|
|
component: 'NsInput',
|
|
componentProps: {
|
|
disabled: disabled,
|
|
placeholder: '请输入部门名称',
|
|
},
|
|
rules: [
|
|
{
|
|
required: false,
|
|
message: '请输入部门名称',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: '上级部门',
|
|
field: 'department',
|
|
component: 'NsSelect',
|
|
componentProps: {
|
|
disabled: disabled,
|
|
placeholder: '请选择上级部门',
|
|
options: [
|
|
{
|
|
label: '部门1',
|
|
value: 1,
|
|
},
|
|
{
|
|
label: '部门2',
|
|
value: 2,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
label: '部门编码',
|
|
field: 'department',
|
|
component: 'NsInput',
|
|
componentProps: {
|
|
disabled: disabled,
|
|
placeholder: '请输入部门编码',
|
|
},
|
|
rules: [
|
|
{
|
|
required: false,
|
|
message: '请输入部门编码',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: '排序',
|
|
field: 'order',
|
|
component: 'NsInput',
|
|
componentProps: {
|
|
disabled: disabled,
|
|
placeholder: '请输入排序',
|
|
},
|
|
rules: [
|
|
{
|
|
required: false,
|
|
message: '请输入排序',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
field: 'remark',
|
|
label: '备注',
|
|
component: 'NsTextarea',
|
|
componentProps: {
|
|
disabled: disabled,
|
|
placeholder: '请输入',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
]);
|
|
const formSchema2 = reactive([
|
|
{
|
|
field: 'field111',
|
|
component: 'NsChildForm',
|
|
componentProps: {
|
|
schemas: [
|
|
{
|
|
label: '角色名称',
|
|
field: 'departname',
|
|
component: 'NsInput',
|
|
componentProps: {
|
|
disabled: disabled2,
|
|
placeholder: '请输入角色名称',
|
|
},
|
|
rules: [
|
|
{
|
|
required: false,
|
|
message: '请输入角色名称',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: '上级领导',
|
|
field: 'department',
|
|
component: 'NsSelect',
|
|
componentProps: {
|
|
disabled: disabled2,
|
|
placeholder: '请选择上级领导',
|
|
options: [
|
|
{
|
|
label: '领导1',
|
|
value: 1,
|
|
},
|
|
{
|
|
label: '领导2',
|
|
value: 2,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
label: '节点编码',
|
|
field: 'department',
|
|
component: 'NsInput',
|
|
componentProps: {
|
|
disabled: disabled2,
|
|
placeholder: '请输入节点编码',
|
|
},
|
|
rules: [
|
|
{
|
|
required: false,
|
|
message: '请输入节点编码',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: '是否部门领导',
|
|
field: 'sex',
|
|
component: 'NsRadioGroup',
|
|
componentProps: {
|
|
disabled: disabled2,
|
|
radioType: 'radio',
|
|
options: [
|
|
{ label: '是', value: 1 },
|
|
{ label: '否', value: 2 },
|
|
],
|
|
rules: [
|
|
{
|
|
required: false,
|
|
message: '请选择是否部门领导',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
field: 'remark',
|
|
label: '备注',
|
|
component: 'NsTextarea',
|
|
componentProps: {
|
|
disabled: disabled2,
|
|
placeholder: '请输入',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
]);
|
|
return {
|
|
disabled,
|
|
disabled2,
|
|
formSchema,
|
|
formSchema2,
|
|
formData,
|
|
formData2,
|
|
apartmentTreeData,
|
|
userTreeData,
|
|
SelectApartmentTree,
|
|
SelectUserTree,
|
|
activeKey,
|
|
activeKey2,
|
|
ApartmentSure,
|
|
UserSure,
|
|
addApartment,
|
|
addApartmentSon,
|
|
deleteApartment,
|
|
deleteUser,
|
|
addUser,
|
|
addUserSon,
|
|
CancelApartment,
|
|
CancelUser,
|
|
apartmentAdminTreeData,
|
|
ApartmentSelect,
|
|
ApartcheckedKeys,
|
|
userAdminTreeData,
|
|
UsercheckedKeys,
|
|
UserSelect,
|
|
};
|
|
},
|
|
});
|
|
</script>
|
|
<style scoped>
|
|
.main {
|
|
display: flex;
|
|
flex: 1;
|
|
}
|
|
.left {
|
|
width: 50%;
|
|
height: calc(100vh-50px);
|
|
border-right: 5px solid rgb(229, 235, 240);
|
|
}
|
|
.tree {
|
|
width: 400px;
|
|
height: 89vh;
|
|
border-right: 2px solid rgb(229, 235, 240);
|
|
}
|
|
.right {
|
|
width: 50%;
|
|
}
|
|
|
|
.top {
|
|
height: 50vh;
|
|
border-bottom: 5px solid rgb(229, 235, 240);
|
|
}
|
|
.ns-table-title {
|
|
text-align: left;
|
|
height: 46px;
|
|
line-height: 46px;
|
|
font-size: 18px;
|
|
font-weight: bold;
|
|
user-select: text;
|
|
padding-left: 16px;
|
|
width: 100%;
|
|
border-bottom: 2px solid rgb(229, 235, 240);
|
|
}
|
|
.table {
|
|
width: 2000px;
|
|
}
|
|
.admin {
|
|
text-align: left;
|
|
height: 42px;
|
|
line-height: 42px;
|
|
font-size: 16px;
|
|
font-weight: bold;
|
|
user-select: text;
|
|
padding-left: 16px;
|
|
width: calc(100% + 32px);
|
|
}
|
|
.form {
|
|
margin: 20px;
|
|
}
|
|
</style>
|
|
|