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.

586 lines
16 KiB

10 months ago
<!-- @format -->
<template>
10 months ago
<div class="main">
<div class="left">
<div class="top">
<div class="ns-table-title">关联企业</div>
10 months ago
<div style="height: 100%; overflow-y: auto">
10 months ago
<a-input-search
v-model:value="searchValue"
style="margin-bottom: 8px"
placeholder="请输入关联企业"
@search="onSearch" />
10 months ago
<a-tree
v-if="treeData?.length"
:tree-data="treeData"
defaultExpandAll
@select="handleSelect">
<template #title="data">
{{ data.orgInfo?.orgName }}
10 months ago
</template>
</a-tree>
</div>
</div>
<div>
10 months ago
<div class="ns-table-title">关联部门</div>
10 months ago
<a-input-search
v-model:value="searchValue2"
style="margin-bottom: 8px"
placeholder="请输入关联部门"
@search="onSearch2" />
10 months ago
<a-tree
v-if="treeData2?.length"
:tree-data="treeData2"
defaultExpandAll
@select="handleSelect2">
<template #title="data">
{{ data.deptInfo?.deptName }}
10 months ago
</template>
</a-tree>
</div>
</div>
<div class="right">
10 months ago
<ns-view-list-table v-bind="tableConfig" :model="data" ref="mainRef" />
10 months ago
</div>
10 months ago
<a-drawer
10 months ago
:width="500"
10 months ago
:visible="visible"
:body-style="{ paddingBottom: '80px' }"
:footer-style="{ textAlign: 'right' }"
10 months ago
destroyOnClose
10 months ago
@close="onClose">
10 months ago
<ns-form
ref="formRef"
:schemas="formSchema"
:model="formData"
class="form"
:wrapperCol="{ span: 20 }"
formLayout="vertical" />
10 months ago
<span class="admin">用户权限</span>
10 months ago
<ns-view-list-table
v-bind="tableConfig2"
class="drawerTable"
:model="data"
:pagination="false"
ref="mainRef"
rowKey="uuid" />
<template #footer>
<a-button style="margin-right: 8px" @click="onClose">取消</a-button>
<a-button type="primary" @click="onEdit">确定</a-button>
</template>
10 months ago
</a-drawer>
10 months ago
10 months ago
<a-modal
title="用户信息"
:width="600"
:visible="addformvisible"
cancelText="取消"
@ok="handleOk"
@cancel="handleClose">
10 months ago
<ns-form :schemas="formSchema2" :model="formData2" formLayout="vertical" />
10 months ago
</a-modal>
</div>
10 months ago
</template>
<script lang="ts">
import { createVNode, defineComponent, reactive, ref } from 'vue';
import { http } from '/nerv-lib/util/http';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
10 months ago
import { cloneDeep } from 'lodash-es';
10 months ago
import { NsMessage, NsModal } from '/nerv-lib/component';
10 months ago
import { formConfig, formConfig2 } from './config';
10 months ago
import { origanizemanage, department } from '/@/api/origanizemanage';
10 months ago
10 months ago
export default defineComponent({
name: 'OrderListIndex',
setup() {
const mainRef = ref();
const data = reactive({});
10 months ago
let formData = ref({});
10 months ago
let formData2 = ref({ userRoleList: [1, 1, 3] });
10 months ago
const formRef = ref();
10 months ago
const visible = ref(false);
10 months ago
const addformvisible = ref(false);
10 months ago
const searchValue = ref<string>('');
const searchValue2 = ref<string>('');
10 months ago
const formSchema = formConfig;
const casData = ref([]);
const formSchema2 = formConfig2(casData);
10 months ago
const treeData = ref([]);
const treeData2 = ref([]);
const userAuthList = ref([]);
const orgId = JSON.parse(sessionStorage.getItem('userInfo')).orgId;
const fetch = (api, params = { orgId }) => {
return http.post(api, params);
};
// 企业树
fetch(origanizemanage.queryOrgTree).then((res) => {
treeData.value = res.data;
});
10 months ago
10 months ago
// 部门树
fetch(origanizemanage.queryDeptTree).then((res) => {
treeData2.value = res.data;
});
10 months ago
const opMap: any = {
type: 'add',
fuc: () => {},
record: {},
};
10 months ago
const onSearch = () => {
console.log(searchValue.value);
10 months ago
fetch(origanizemanage.queryOrgTree, { orgName: searchValue.value, orgId }).then((res) => {
treeData.value = res.data;
});
10 months ago
};
const onSearch2 = () => {
console.log(searchValue2.value);
10 months ago
fetch(origanizemanage.queryDeptTree, { deptName: searchValue2.value, orgId }).then(
(res) => {
treeData2.value = res.data;
},
);
};
const tableFetch = (params) => {
tableConfig.value.params = {
...tableConfig.value.params,
...params,
};
mainRef.value?.nsTableRef.reload();
10 months ago
};
const handleSelect = (selectedKeys: any, info: any) => {
10 months ago
fetch(origanizemanage.queryDeptTree, { orgId: info.node?.orgInfo.orgId }).then((res) => {
treeData2.value = res.data;
});
tableFetch({ orgId: info.node?.orgInfo.orgId });
10 months ago
};
10 months ago
10 months ago
const handleSelect2 = (selectedKeys: any, info: any) => {
10 months ago
tableFetch({ deptId: info.node?.deptInfo.deptId });
10 months ago
};
const onClose = () => {
visible.value = false;
};
10 months ago
10 months ago
const onEdit = () => {
10 months ago
formRef.value?.triggerSubmit().then(() => {
console.log(formData.value, 'formData.value');
10 months ago
if (!userAuthList.value.length) {
NsMessage.error('请添加用户权限');
return;
}
opMap.fuc && opMap.fuc({ ...formData.value, userRoleList: userAuthList.value, orgId });
10 months ago
visible.value = false;
});
10 months ago
};
const handleOk = () => {
10 months ago
console.log(formData2.value, 'formData2.value');
10 months ago
if (casData.value?.length !== 3) {
NsMessage.error('未选择角色');
10 months ago
}
10 months ago
userAuthList.value.push({
userAuthList: cloneDeep(casData.value),
roleId: casData.value[2].value,
roleName: casData.value[2].label,
});
10 months ago
addformvisible.value = false;
};
const handleClose = () => {
addformvisible.value = false;
};
10 months ago
const tableConfig = ref({
10 months ago
title: '用户管理',
api: origanizemanage.userList,
params: {
10 months ago
orgId,
10 months ago
},
10 months ago
headerActions: [
{
label: '新增',
name: 'RoleTypeAdd',
type: 'primary',
handle: () => {
10 months ago
opMap.type = 'add';
opMap.fuc = (formData: any) => {
console.log(formData, 'formData');
10 months ago
http.post(origanizemanage.addUser, formData).then(() => {
visible.value = false;
});
10 months ago
};
10 months ago
visible.value = true;
},
},
{
label: '导入',
type: 'primary',
name: 'RoleTypeAdd',
handle: () => {},
},
{
label: '模板下载',
type: 'primary',
name: 'RoleTypeAdd',
handle: () => {},
},
{
label: '导出',
type: 'primary',
10 months ago
name: 'exports',
10 months ago
},
{
label: '批量删除',
type: 'primary',
10 months ago
name: 'userBatchDel',
10 months ago
dynamicDisabled: (data: any) => {
return data.list.length === 0;
},
confirm: true,
isReload: true,
10 months ago
api: origanizemanage.batchDel,
dynamicParams: { userIds: 'userId[]' },
10 months ago
},
],
columns: [
{
title: '序号',
dataIndex: 'address',
customRender: (text: any) => {
return text.index + 1;
},
sorter: {
compare: (a, b) => a.address - b.address,
},
},
{
title: '账号',
10 months ago
dataIndex: 'accountNo',
10 months ago
sorter: {
10 months ago
compare: (a, b) => a.accountNo - b.accountNo,
10 months ago
},
},
{
title: '姓名',
10 months ago
dataIndex: 'realName',
10 months ago
sorter: {
10 months ago
compare: (a, b) => a.realName - b.realName,
10 months ago
},
},
{
title: '性别',
dataIndex: 'sex',
sorter: {
compare: (a, b) => a.name - b.name,
},
},
{
title: '手机号',
10 months ago
dataIndex: 'telephone',
10 months ago
},
{
title: '邮箱',
dataIndex: 'email',
},
{
title: '组织关系',
10 months ago
dataIndex: 'orgName',
10 months ago
},
{
10 months ago
title: '部门/角色',
10 months ago
dataIndex: 'deptRoleInfoList',
customRender: ({ value }) => {
if (!value) return '-';
return createVNode('div', {}, [
createVNode('span', {}, value[0]),
value.length > 1 &&
createVNode(
'a',
{
onClick: () =>
NsModal.info({
icon: null,
content: createVNode('div', { innerHTML: value.join('<br>') }),
}),
},
`+${value.length}`,
),
]);
10 months ago
},
10 months ago
},
{
title: '状态',
10 months ago
dataIndex: 'userStatus',
10 months ago
customRender: ({ value }) => ['正常', '冻结'][value],
10 months ago
},
],
columnActions: {
title: '操作',
actions: [
{
label: '编辑',
name: 'RoleTypeEdit',
// dynamicParams: 'uuid',
handle: (record: any) => {
console.log(record, 'record');
10 months ago
formData.value = record;
opMap.type = 'edit';
opMap.fuc = (formData: any) => {
Object.assign(
mockData.value.filter((item) => item.id === record.id)[0],
formData,
);
};
10 months ago
visible.value = true;
},
},
{
label: '冻结',
10 months ago
name: 'userFrozen',
confirm: true,
defaultParams: { userStatus: 1 },
dynamicParams: 'userId',
isReload: true,
api: origanizemanage.frozen,
10 months ago
},
{
label: '重置密码',
10 months ago
name: 'userCodeReset',
confirm: true,
handle: ({ userId }: any) => {
http
.post(origanizemanage.resetPwd, { userId })
.then(() => NsModal.success({ content: '密码重置成功,初始密码123456' }));
10 months ago
},
},
{
label: '删除',
10 months ago
name: 'userDelete',
dynamicParams: 'userId',
10 months ago
confirm: true,
10 months ago
isReload: true,
api: origanizemanage.del,
10 months ago
},
],
},
formConfig: {
schemas: [
{
10 months ago
field: 'accountNo',
10 months ago
label: '账号名',
component: 'NsInput',
componentProps: {
placeholder: '请输入账号名',
10 months ago
maxLength: 30,
10 months ago
},
},
{
10 months ago
field: 'realName',
10 months ago
label: '姓名',
component: 'NsInput',
componentProps: {
placeholder: '请输入姓名',
10 months ago
maxLength: 30,
10 months ago
},
},
{
10 months ago
field: 'telephone',
10 months ago
label: '手机号',
component: 'NsInput',
componentProps: {
placeholder: '请输入手机号',
10 months ago
maxLength: 11,
10 months ago
},
},
{
field: 'email',
label: '邮箱',
component: 'NsInput',
componentProps: {
placeholder: '请输入邮箱',
10 months ago
maxLength: 30,
10 months ago
},
},
{
10 months ago
field: 'userStatus',
10 months ago
label: '用户状态',
component: 'NsSelect',
componentProps: {
placeholder: '请选择',
10 months ago
allowClear: true,
10 months ago
options: [
{
label: '正常',
10 months ago
value: 0,
10 months ago
},
{
label: '冻结',
10 months ago
value: 1,
10 months ago
},
],
},
},
],
params: {},
},
// pagination: { defaultPageSize: 10 },
10 months ago
rowKey: 'id',
10 months ago
});
10 months ago
const tableConfig2 = {
10 months ago
// api: {
// url: '/carbon_emission/device/getGatewayList',
// method: 'post',
// },
10 months ago
value: userAuthList.value,
10 months ago
rowSelection: null,
headerActions: [
{
label: '新增',
name: 'RoleTypeAdd',
type: 'primary',
handle: () => {
10 months ago
// opMap.type = 'add';
// opMap.fuc = (formData2: any) => {
// console.log(formData2, 'formData2');
// userAuthList.value.push(cloneDeep(formData2));
// };
10 months ago
addformvisible.value = true;
},
},
],
columns: [
{
title: '角色信息',
10 months ago
dataIndex: 'userRoleList',
customRender: ({ record }) => {
if (record) {
const res = record.userAuthList.reduce((pre, cur) => {
pre.push(cur.label);
return pre;
}, []);
return res.join('/');
}
return '-';
},
10 months ago
},
],
columnActions: {
title: '操作',
actions: [
10 months ago
// {
// label: '编辑',
// name: 'RoleTypeEdit',
// // dynamicParams: 'uuid',
// handle: (record: any) => {
// console.log(record, 'record');
// formData2.value = record;
// opMap.type = 'edit';
// opMap.fuc = (formData2: any) => {
// Object.assign(
// mockData.value.filter((item) => item.id === record.id)[0],
// formData2,
// );
// };
// addformvisible.value = true;
// },
// },
10 months ago
{
label: '删除',
name: 'RoleTypeEdit',
10 months ago
confirm: true,
10 months ago
handle: (record: any, name: any, reload: any) => {
10 months ago
const id = record.roleId;
console.log(userAuthList.value, id);
let idx = 0;
userAuthList.value?.some((item, index) => {
idx = index;
if (item.roleId === id) return true;
});
userAuthList.value.splice(idx, 1);
10 months ago
},
},
],
},
};
return {
10 months ago
formRef,
10 months ago
tableConfig,
tableConfig2,
data,
mainRef,
visible,
10 months ago
addformvisible,
10 months ago
formSchema,
10 months ago
formSchema2,
10 months ago
formData,
10 months ago
formData2,
10 months ago
treeData,
treeData2,
searchValue,
searchValue2,
10 months ago
handleSelect,
handleSelect2,
onClose,
onEdit,
10 months ago
onSearch,
onSearch2,
handleOk,
handleClose,
};
},
});
</script>
10 months ago
<style lang="less" scoped>
10 months ago
.main {
display: flex;
}
.left {
10 months ago
width: 350px;
10 months ago
border-right: 5px solid rgb(229, 235, 240);
10 months ago
min-width: fit-content;
10 months ago
}
10 months ago
.right {
flex: 1;
10 months ago
min-width: 0;
10 months ago
}
10 months ago
.top {
10 months ago
height: 50%;
10 months ago
border-bottom: 5px solid rgb(229, 235, 240);
}
10 months ago
.ns-table-title {
10 months ago
text-align: left;
10 months ago
// height: 46px;
10 months ago
line-height: 46px;
font-size: 18px;
font-weight: bold;
padding-left: 16px;
}
.admin {
text-align: left;
height: 42px;
line-height: 42px;
font-size: 16px;
font-weight: bold;
user-select: text;
width: calc(100% + 32px);
}
10 months ago
.drawerTable {
:deep(.ns-table-container),
:deep(.ns-table-main) {
border-top: 0;
padding: 0;
}
10 months ago
}
</style>