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.

560 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>
<div>
<a-input-search
v-model:value="searchValue"
style="margin-bottom: 8px"
placeholder="请输入关联企业"
@search="onSearch" />
10 months ago
<a-tree :tree-data="treeData" defaultExpandAll @select="handleSelect">
10 months ago
<template #title="{ title }">
{{ title }}
<!-- <span v-if="title.indexOf(searchValue) > -1">
{{ title.substring(0, title.indexOf(searchValue)) }}
</span>
<span v-else>{{ title }}</span> -->
</template>
</a-tree>
</div>
</div>
<div class="ns-table-title">关联部门</div>
<div>
<a-input-search
v-model:value="searchValue2"
style="margin-bottom: 8px"
placeholder="请输入关联部门"
@search="onSearch2" />
10 months ago
<a-tree :tree-data="treeData2" defaultExpandAll @select="handleSelect2">
10 months ago
<template #title="{ title }">
{{ title }}
<!-- <span v-if="title.indexOf(searchValue) > -1">
{{ title.substring(0, title.indexOf(searchValue)) }}
</span>
<span v-else>{{ title }}</span> -->
</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
:width="1200"
: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" />
10 months ago
<span class="admin">用户权限</span>
<ns-view-list-table v-bind="tableConfig2" :model="data" ref="mainRef" rowKey="uuid" />
<a-button style="margin-right: 8px" @click="onClose">取消</a-button>
<a-button type="primary" @click="onEdit">确定</a-button>
</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 { Modal } from 'ant-design-vue';
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';
import { NsMessage } from '/nerv-lib/component';
10 months ago
import { formConfig, formConfig2 } from './config';
import { mockData, mockData2, treeData, treeData2 } from './mock';
10 months ago
import { origanizemanage } from '/@/api/origanizemanage';
10 months ago
export default defineComponent({
name: 'OrderListIndex',
setup() {
const mainRef = ref();
const data = reactive({});
10 months ago
let formData = ref({});
let formData2 = ref({});
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 opMap: any = {
type: 'add',
fuc: () => {},
record: {},
};
10 months ago
const onSearch = () => {
console.log(searchValue.value);
};
const onSearch2 = () => {
console.log(searchValue2.value);
};
const handleSelect = (selectedKeys: any, info: any) => {
console.log(selectedKeys, 'selectedKeys');
console.log(info, 'info');
};
const handleSelect2 = (selectedKeys: any, info: any) => {
console.log(selectedKeys, 'selectedKeys');
console.log(info, 'info');
};
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');
opMap.fuc && opMap.fuc(formData.value);
visible.value = false;
});
10 months ago
};
const handleOk = () => {
10 months ago
console.log(formData2.value, 'formData2.value');
console.log(opMap.type, 'type');
if (opMap.type === 'add') {
mockData2.value.push({ information: casData.value.join('/') });
} else {
}
10 months ago
addformvisible.value = false;
};
const handleClose = () => {
addformvisible.value = false;
};
const tableConfig = {
10 months ago
title: '用户管理',
api: origanizemanage.userList,
params: {
orgId: JSON.parse(sessionStorage.getItem('userInfo')).orgId,
},
10 months ago
listField: 'data.records',
headerActions: [
{
label: '新增',
name: 'RoleTypeAdd',
type: 'primary',
handle: () => {
10 months ago
opMap.type = 'add';
opMap.fuc = (formData: any) => {
console.log(formData, 'formData');
10 months ago
// origanizemanage.addUser
// mockData.value.push({
// id: Math.random().toString().slice(2, 6),
// ...cloneDeep(formData),
// });
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',
name: 'RoleTypeAdd',
dynamicDisabled: (data: any) => {
return data.list.length === 0;
},
confirm: true,
isReload: true,
10 months ago
handle: (data: any) => {
10 months ago
console.log('object :>> ', data.list);
const idList = data.list.map((item) => item.id);
mockData.value.splice(0);
return;
const copyData = cloneDeep(mockData.value);
mockData.value = copyData.filter((tar) => {
return !idList.includes(tar.id);
});
console.log(mockData.value);
return;
copyData.map((item, index) => {
if (idList.includes(item.id)) {
mockData.value.filter((tar) => {
return !idList.includes(tar.id);
});
}
});
10 months ago
},
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: 'deptInfo',
customRender: (value) => {
return value.record.deptInfo.orgName;
},
10 months ago
},
{
10 months ago
title: '部门/角色',
dataIndex: 'orgInfo',
customRender: (value) => {
// // console.log(value.record.orgInfo.orgName, 'ss');
// console.log(
// value.record.userRoleList.map((item) => {
// return `${value.record.orgInfo.orgName}/${item.roleName}`;
// }),
// );
// value.record.userRoleList.map((item) => {
// return `${value.record.orgInfo.orgName}/${item.roleName}`;
// });
// return `${value.record.orgInfo.orgName}/`;
},
10 months ago
},
{
title: '状态',
10 months ago
dataIndex: 'userStatus',
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: '冻结',
name: 'RoleTypeEdit',
handle: (record: any) => {
console.log(record, 'record');
Modal.confirm({
title: '是否冻结该账户',
icon: createVNode(ExclamationCircleOutlined),
content: createVNode('div', { style: 'color:red;' }, ''),
10 months ago
10 months ago
onOk() {
// http
// .post('/api/parking_merchant/objs/gateInfo/delete', {
// uuid: record.uuid,
// })
// .then((res) => {
// mainRef.value.nsTableRef.reload();
// });
10 months ago
NsMessage.success('冻结成功');
10 months ago
},
class: 'test',
});
},
},
{
label: '重置密码',
name: 'RoleTypeEdit',
handle: (record: any) => {
console.log(record, 'record');
Modal.confirm({
title: '是否重置密码',
icon: createVNode(ExclamationCircleOutlined),
content: createVNode('div', { style: 'color:red;' }, ''),
onOk() {
10 months ago
// Modal.success({
// title: '密码重置成功,初始密码123456',
// });
NsMessage.success('密码重置成功,初始密码123456');
10 months ago
},
onCancel() {
console.log('Cancel');
},
class: 'test',
});
},
},
{
label: '删除',
name: 'RoleTypeEdit',
dynamicParams: {
uuid: 'uuid',
},
10 months ago
confirm: true,
10 months ago
handle: (record: any, name: any, reload: any) => {
10 months ago
console.log(record, name, reload, 'record');
mockData.value.splice(0, 1);
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
disabled: true,
10 months ago
options: [
{
label: '正常',
value: 1,
},
{
label: '冻结',
value: 2,
},
],
},
},
],
params: {},
},
// pagination: { defaultPageSize: 10 },
10 months ago
rowKey: 'id',
10 months ago
};
const tableConfig2 = {
10 months ago
// api: {
// url: '/carbon_emission/device/getGatewayList',
// method: 'post',
// },
value: mockData2.value,
10 months ago
listField: 'data.records',
rowSelection: null,
headerActions: [
{
label: '新增',
name: 'RoleTypeAdd',
type: 'primary',
handle: () => {
10 months ago
opMap.type = 'add';
opMap.fuc = (formData2: any) => {
console.log(formData2, 'formData2');
mockData2.value.push(cloneDeep(formData2));
};
10 months ago
addformvisible.value = true;
},
},
],
columns: [
{
title: '角色信息',
10 months ago
dataIndex: 'information',
10 months ago
},
],
columnActions: {
title: '操作',
actions: [
{
label: '编辑',
name: 'RoleTypeEdit',
// dynamicParams: 'uuid',
handle: (record: any) => {
console.log(record, 'record');
10 months ago
formData2.value = record;
opMap.type = 'edit';
opMap.fuc = (formData2: any) => {
Object.assign(
mockData.value.filter((item) => item.id === record.id)[0],
formData2,
);
};
10 months ago
addformvisible.value = true;
},
},
{
label: '删除',
name: 'RoleTypeEdit',
10 months ago
confirm: true,
10 months ago
handle: (record: any, name: any, reload: any) => {
10 months ago
console.log(record, name, reload, 'record');
mockData2.value.splice(0, 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 {
width: 400px;
border-right: 5px solid rgb(229, 235, 240);
10 months ago
min-width: fit-content;
10 months ago
}
10 months ago
.right {
flex: 1;
overflow: auto;
}
10 months ago
.top {
10 months ago
height: 46vh;
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;
padding-left: 16px;
width: calc(100% + 32px);
}
.form {
margin-left: 10px;
}
</style>