Commit d72b1fa3 authored by 罗林杰's avatar 罗林杰

Merge remote-tracking branch 'origin/master'

parents 7413ce11 25a03f72
<template>
<PageWrapper
:title="`用户` + userId + `的资料`"
content="这是用户资料详情页面。本页面仅用于演示相同路由在tab中打开多个页面并且显示不同的数据"
contentBackground
@back="goBack"
>
<template #extra>
<a-button type="primary" danger> 禁用账号 </a-button>
<a-button type="primary"> 修改密码 </a-button>
</template>
<template #footer>
<a-tabs default-active-key="detail" v-model:activeKey="currentKey">
<a-tab-pane key="detail" tab="用户资料" />
<a-tab-pane key="logs" tab="操作日志" />
</a-tabs>
</template>
<div class="pt-4 m-4 desc-wrap">
<template v-if="currentKey == 'detail'">
<div v-for="i in 10" :key="i">这是用户{{ userId }}资料Tab</div>
</template>
<template v-if="currentKey == 'logs'">
<div v-for="i in 10" :key="i">这是用户{{ userId }}操作日志Tab</div>
</template>
</div>
</PageWrapper>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import { useRoute } from 'vue-router';
import { PageWrapper } from '@/components/Page';
import { useGo } from '@/hooks/web/usePage';
import { useTabs } from '@/hooks/web/useTabs';
import { Tabs } from 'ant-design-vue';
defineOptions({ name: 'AccountDetail' });
const ATabs = Tabs;
const ATabPane = Tabs.TabPane;
const route = useRoute();
const go = useGo();
// 此处可以得到用户ID
const userId = ref(route.params?.id);
const currentKey = ref('detail');
const { setTitle } = useTabs();
// TODO
// 本页代码仅作演示,实际应当通过userId从接口获得用户的相关资料
// 设置Tab的标题(不会影响页面标题)
setTitle('详情:用户' + userId.value);
// 页面左侧点击返回链接时的操作
function goBack() {
// 本例的效果时点击返回始终跳转到账号列表页,实际应用时可返回上一页
go('/system/account');
}
</script>
<style></style>
...@@ -18,7 +18,7 @@ import {ref, computed, unref, reactive} from 'vue'; ...@@ -18,7 +18,7 @@ import {ref, computed, unref, reactive} from 'vue';
const emit = defineEmits(['success', 'register']); const emit = defineEmits(['success', 'register']);
const { createMessage } = useMessage(); const { createMessage } = useMessage();
const isUpdate = ref(true); const isUpdate = ref(true);
const isRemove = ref(true); const isMove = ref(false);
const rowId = ref(''); const rowId = ref('');
//获取接口数据并放在下拉框里(这里是打开了一个弹框) //获取接口数据并放在下拉框里(这里是打开了一个弹框)
//初始化表单 //初始化表单
...@@ -36,7 +36,7 @@ import {ref, computed, unref, reactive} from 'vue'; ...@@ -36,7 +36,7 @@ import {ref, computed, unref, reactive} from 'vue';
resetFields(); resetFields();
setModalProps({ confirmLoading: false }); setModalProps({ confirmLoading: false });
isUpdate.value = !!data?.isUpdate; isUpdate.value = !!data?.isUpdate;
isRemove.value = !!data?.isRemove; isMove.value = !!data?.isMove;
if (unref(isUpdate)) { if (unref(isUpdate)) {
// 获取行数据的id // 获取行数据的id
rowId.value = data.record.businessId; rowId.value = data.record.businessId;
...@@ -44,27 +44,11 @@ import {ref, computed, unref, reactive} from 'vue'; ...@@ -44,27 +44,11 @@ import {ref, computed, unref, reactive} from 'vue';
setFieldsValue({ setFieldsValue({
...data.record, ...data.record,
}); });
if (unref(isRemove)){
updateSchema ([
{
field: 'username',
ifShow: false,
},
{
field: 'username',
ifShow: false,
},
])
}
} }
const treeList = handleTree(TreeData, 'businessId',undefined,undefined,undefined) const treeList = handleTree(TreeData, 'businessId',undefined,undefined,undefined)
updateSchema([ updateSchema([
{
field: 'username',
show: !unref(isUpdate),
},
{ {
field: 'institutionId', field: 'institutionId',
componentProps: { componentProps: {
...@@ -99,11 +83,16 @@ import {ref, computed, unref, reactive} from 'vue'; ...@@ -99,11 +83,16 @@ import {ref, computed, unref, reactive} from 'vue';
/**确定按钮*/ /**确定按钮*/
async function handleSubmit() { async function handleSubmit() {
try { try {
//拿到表单内容
const values = await validate(); const values = await validate();
//通过表单获取的institutionId去查找相同TreeData中的institutionId的institutionName
const institutionName = TreeData.find(item => item.businessId === values.institutionId).institutionName
values.institutionName = institutionName
setModalProps({ confirmLoading: true }); setModalProps({ confirmLoading: true });
// 编辑 // 编辑
if(unref(isUpdate)) { if(unref(isUpdate)) {
values.businessId = rowId.value values.businessId = rowId.value
//修改列表值
emit('success', { isUpdate: unref(isUpdate), values: { ...values, id: rowId.value } }); emit('success', { isUpdate: unref(isUpdate), values: { ...values, id: rowId.value } });
createMessage.success('编辑成功'); createMessage.success('编辑成功');
closeModal(); closeModal();
......
<template>
<BasicModal width="50%" v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit">
<BasicTable @register="registerTable"></BasicTable>
</BasicModal>
</template>
<script lang="ts" setup>
import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form';
import { reactive,unref,onDeactivated,onMounted,ref } from 'vue';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { useMessage } from '@/hooks/web/useMessage';
import { useModal } from '@/components/Modal';
import {addUserData, columns, searchFormSchema, TreeData} from './institutionData';
import { useGo } from '@/hooks/web/usePage';
import { downloadByData } from '@/utils/file/download';
import { useRoute,onBeforeRouteLeave } from 'vue-router';
import { useFilterStore } from '@/store/modules/filterData';
import {useUserStore} from "@/store/modules/user";
import { userData } from "@/views/system/institution/institutionData";
defineOptions({ name: 'AccountManagement' });
const { createMessage } = useMessage();
const filterStore = useFilterStore();
const route = useRoute();
const go = useGo();
const [registerMoveUser, { openModal: openMoveUserModal }] = useModal();
const searchInfo = reactive<Recordable>({});
const emit = defineEmits(['success', 'register']);
const tableData = ref([])
const isAdd = ref(true)
const [registerTable, { reload, updateTableDataRecord, getSearchInfo,getForm,getRowSelection }] = useTable({
title: '添加用户',
api: async (params) => {
const response = {
pageNu: "1",
pageSize: "10",
pages: "1",
total: tableData.value.length,
code:'',
message:'',
data: [],
};
var data = []
data = tableData.value
if (params.name != undefined && params.name != '' && params.name != null){
//过滤出名字包含params.name的数据
data = data.filter((item) => item.name.includes(params.name));
}
if (params.username != undefined && params.username != '' && params.username != null){
data = data.filter((item) => item.username.includes(params.username));
}
return { ...response, data: data };
},
rowKey: 'businessId',
columns,
rowSelection: true,
formConfig: {
labelWidth: 100,
schemas: searchFormSchema,
autoSubmitOnEnter: true,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
handleSearchInfoFn(info) {
return info;
},
});
//初始化弹框
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
setModalProps({ confirmLoading: false });
isAdd.value = !!data?.isAdd;
});
/** 新增成功*/
function handleSubmit() {
const rowSelection = getRowSelection().selectedRowKeys;
if (rowSelection.length>0){
//已选中
//根据选中的查询用户 然后进行添加
let data = []
data = tableData.value.filter((item) => rowSelection.includes(item.businessId));
emit('success', { isAdd: unref(isAdd), values: { ...data },length: rowSelection.length });
closeModal();
}
}
onMounted(() => {
tableData.value = addUserData
});
</script>
...@@ -6,27 +6,7 @@ import { Switch } from 'ant-design-vue'; ...@@ -6,27 +6,7 @@ import { Switch } from 'ant-design-vue';
import {useMessage} from "@/hooks/web/useMessage"; import {useMessage} from "@/hooks/web/useMessage";
import {changeFlagApi} from "@/api/system/user/user"; // 引入开关组件 import {changeFlagApi} from "@/api/system/user/user"; // 引入开关组件
type CheckedType = boolean | string | number; type CheckedType = boolean | string | number;
/**
* transform mock data
* {
* 0: '华东分部',
* '0-0': '华东分部-研发部'
* '0-1': '华东分部-市场部',
* ...
* }
*/
export const deptMap = (() => {
const pDept = ['华东分部', '华南分部', '西北分部'];
const cDept = ['研发部', '市场部', '商务部', '财务部'];
return pDept.reduce((map, p, pIdx) => {
map[pIdx] = p;
cDept.forEach((c, cIndex) => (map[`${pIdx}-${cIndex}`] = `${p}-${c}`));
return map;
}, {});
})();
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
{ {
...@@ -53,7 +33,6 @@ export const columns: BasicColumn[] = [ ...@@ -53,7 +33,6 @@ export const columns: BasicColumn[] = [
// }, // },
}, },
]; ];
export const searchFormSchema: FormSchema[] = [ export const searchFormSchema: FormSchema[] = [
{ {
field: 'name', field: 'name',
...@@ -73,39 +52,7 @@ export const searchFormSchema: FormSchema[] = [ ...@@ -73,39 +52,7 @@ export const searchFormSchema: FormSchema[] = [
}, },
colProps: { span: 7 }, colProps: { span: 7 },
}, },
{
field: 'flag',
label: '状态',
component: 'Select',
componentProps: {
placeholder: '请选择状态',
options: [
{ label: '启用', value: '1' },
{ label: '停用', value: '0' },
],
},
colProps: { span: 7 },
},
]; ];
export const resetPasswordFormSchema: any[] = [
{
field: 'newPassword',
label: '新密码',
component: 'InputPassword',
componentProps: {
placeholder: '请输入8~16位,由字母和数字混合所组成的新密码',
},
required: true,
// ifShow: false,
},
]
const passwordCheck = (rule, value, callback) => {
const pattern = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/
if (!pattern.test(value)) {
callback(new Error('新密码必须为数字与字母的组合'))
}
callback()
}
export const accountFormSchema: any[] = [ export const accountFormSchema: any[] = [
{ {
field: 'name', field: 'name',
...@@ -157,16 +104,22 @@ export const accountFormSchema: any[] = [ ...@@ -157,16 +104,22 @@ export const accountFormSchema: any[] = [
}, },
required: true, required: true,
}, },
// {
// field: 'code',
// label: '机构编码',
// component: 'Input',
// colProps: { lg: 24, md: 24 },
// rules: [
// {
// required: true,
// message: '请输入机构编码',
// },
// ],
// },
]; ];
/**移动*/
export const MoveFormSchema: any[] = [
{
field: 'institutionId',
label: '所属机构',
component: 'TreeSelect',
colProps: { lg: 24, md: 24 },
componentProps: {
fieldNames: {
label: 'institutionName',
value: 'businessId',
},
getPopupContainer: () => document.body,
},
required: true,
},
]
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
<BasicTable @register="registerTable" class="w-3/4 xl:w-4/5" :searchInfo="searchInfo"> <BasicTable @register="registerTable" class="w-3/4 xl:w-4/5" :searchInfo="searchInfo">
<template #toolbar> <template #toolbar>
<a-button type="primary" @click="handleCreate">新增</a-button> <a-button type="primary" @click="handleCreate">新增</a-button>
<a-button type="primary" @click="handleCreate">批量删除</a-button> <a-button type="primary" @click="handleDeleteBatch">批量删除</a-button>
<a-button type="primary" @click="handleCreate">批量移动</a-button> <a-button type="primary" @click="handleMoveBatch">批量移动</a-button>
</template> </template>
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'"> <template v-if="column.key === 'action'">
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
}, },
{ {
label: '移动', label: '移动',
onClick: handleEdit.bind(null, record), onClick: handleMove.bind(null, record),
}, },
]" ]"
/> />
...@@ -35,8 +35,8 @@ ...@@ -35,8 +35,8 @@
</template> </template>
</BasicTable> </BasicTable>
<AccountModal @register="registerModal" @success="handleSuccess" /> <AccountModal @register="registerModal" @success="handleSuccess" />
<resetPassword @register="registerResetPassword" @success="handleResetPasswordSuccess" /> <MoveUser @register="registerMoveUser" @success="handleMoveSuccess" />
<importModal @register="registerImport" @success="handleImportSuccess" /> <AddUserModal @register="registerAddUserModal" @success="handleAddSuccess" />
</PageWrapper> </PageWrapper>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
import { useModal } from '@/components/Modal'; import { useModal } from '@/components/Modal';
import AccountModal from './AccountModal.vue'; import AccountModal from './AccountModal.vue';
import importModal from './importModal.vue'; import importModal from './importModal.vue';
import resetPassword from './resetPassword.vue'; import MoveUser from './moveUser.vue';
import { columns, searchFormSchema } from './account.data'; import { columns, searchFormSchema } from './account.data';
import { useGo } from '@/hooks/web/usePage'; import { useGo } from '@/hooks/web/usePage';
import { downloadByData } from '@/utils/file/download'; import { downloadByData } from '@/utils/file/download';
...@@ -58,7 +58,9 @@ ...@@ -58,7 +58,9 @@
import {useUserStore} from "@/store/modules/user"; import {useUserStore} from "@/store/modules/user";
import {getMenuListByPage} from "@/api/system/menu/menu"; import {getMenuListByPage} from "@/api/system/menu/menu";
import { userData } from "@/views/system/institution/institutionData"; import { userData } from "@/views/system/institution/institutionData";
import AddUserModal from './AddUserModal.vue';
import user from "../../../../mock/sys/user"; import user from "../../../../mock/sys/user";
import {forEach} from "lodash-es";
defineOptions({ name: 'AccountManagement' }); defineOptions({ name: 'AccountManagement' });
const { createMessage } = useMessage(); const { createMessage } = useMessage();
...@@ -66,11 +68,11 @@ ...@@ -66,11 +68,11 @@
const route = useRoute(); const route = useRoute();
const go = useGo(); const go = useGo();
const [registerModal, { openModal }] = useModal(); const [registerModal, { openModal }] = useModal();
const [registerResetPassword, { openModal: openResetPasswordModal }] = useModal(); const [registerAddUserModal, { openModal:addUserModal }] = useModal();
const [registerImport, { openModal: openImportModal }] = useModal(); const [registerMoveUser, { openModal: openMoveUserModal }] = useModal();
const searchInfo = reactive<Recordable>({}); const searchInfo = reactive<Recordable>({});
const tableData = ref([]) const tableData = ref([])
const [registerTable, { reload, updateTableDataRecord, getSearchInfo,getForm }] = useTable({ const [registerTable, { reload, updateTableDataRecord, getSearchInfo,getForm,getRowSelection }] = useTable({
title: '用户管理列表', title: '用户管理列表',
api: async (params) => { api: async (params) => {
console.log(params) console.log(params)
...@@ -85,12 +87,19 @@ ...@@ -85,12 +87,19 @@
}; };
//过滤data中的数据,取出等于params.deptId的数据 //过滤data中的数据,取出等于params.deptId的数据
var data = [] var data = []
//按照部门筛选 如果有进行过滤相应部门的 没有就赋值全部
if (params.institutionId != undefined && params.institutionId != ''){ if (params.institutionId != undefined && params.institutionId != ''){
data = tableData.value.filter((item) => item.institutionId === params.institutionId); data = tableData.value.filter((item) => item.institutionId === params.institutionId);
} else { } else {
data = tableData.value data = tableData.value
} }
console.log('data:',data) if (params.name != undefined && params.name != '' && params.name != null){
//过滤出名字包含params.name的数据
data = data.filter((item) => item.name.includes(params.name));
}
if (params.username != undefined && params.username != '' && params.username != null){
data = data.filter((item) => item.username.includes(params.username));
}
return { ...response, data: data }; return { ...response, data: data };
}, },
rowKey: 'businessId', rowKey: 'businessId',
...@@ -116,10 +125,28 @@ ...@@ -116,10 +125,28 @@
dataIndex: 'action', dataIndex: 'action',
}, },
}); });
/** 新增按钮*/ /** 新增按钮*/
function handleCreate() { function handleCreate() {
openModal(true, { addUserModal(true, {
isUpdate: false, isAdd: true,
});
}
/**批量移动*/
function handleMoveBatch() {
const rowSelection = getRowSelection().selectedRowKeys;
openMoveUserModal(true, {
idList:rowSelection,
isMove: true,
});
}
/** 移动按钮*/
function handleMove(record: Recordable) {
openMoveUserModal(true, {
record,
isMove: true,
}); });
} }
...@@ -127,21 +154,18 @@ ...@@ -127,21 +154,18 @@
function handleEdit(record: Recordable) { function handleEdit(record: Recordable) {
openModal(true, { openModal(true, {
record, record,
isRemove: true, isUpdate: true,
}); });
} }
/** 重置密码按钮*/ /**批量删除*/
function handleResetPassword(record: Recordable) { function handleDeleteBatch() {
openResetPasswordModal(true,{ const rowSelection = getRowSelection().selectedRowKeys;
record for (let i = 0; i < rowSelection.length; i++){
}) tableData.value.splice(tableData.value.findIndex(item => item.businessId === rowSelection[i]), 1);
} }
createMessage.success('删除成功!');
/** 导入按钮*/ reload();
function handleImport() {
openImportModal(true,{
})
} }
/** 删除按钮*/ /** 删除按钮*/
...@@ -150,30 +174,58 @@ ...@@ -150,30 +174,58 @@
createMessage.success('删除成功!'); createMessage.success('删除成功!');
reload(); reload();
} }
/** 导出按钮*/ /** 导出按钮*/
async function handleExport() { async function handleExport() {
const params = Object.assign({},getSearchInfo(),getForm().getFieldsValue()); const params = Object.assign({},getSearchInfo(),getForm().getFieldsValue());
const data = await exportUserList(params); const data = await exportUserList(params);
downloadByData(data, '用户列表' + '.xlsx'); downloadByData(data, '用户列表' + '.xlsx');
} }
/** 导入成功*/ /** 导入成功*/
function handleImportSuccess() { function handleImportSuccess() {
reload(); reload();
} }
/** 新增/编辑成功*/ /** 新增/编辑成功*/
function handleSuccess({ isUpdate, values }) { function handleSuccess({ isUpdate, values }) {
if (isUpdate) { if (isUpdate) {
// 注意:updateTableDataRecord要求表格的rowKey属性为string并且存在于每一行的record的keys中 // 注意:updateTableDataRecord要求表格的rowKey属性为string并且存在于每一行的record的keys中
console.log('values:',values) //修改表单的值
const result = updateTableDataRecord(values.id, values); const result = updateTableDataRecord(values.businessId, values);
console.log('result:',result)
reload(); reload();
} else { } else {
console.log('22222---:',values)
tableData.value.push(values) tableData.value.push(values)
reload(); reload();
} }
} }
/** 移动*/
function handleMoveSuccess({ isMove, values }) {
const rowSelection = getRowSelection().selectedRowKeys;
if (rowSelection.length > 0){
//批量移动
for (let i = 0; i < rowSelection.length; i++){
const result = updateTableDataRecord(values[i].institutionId, values[i]);
}
}else {
//单个移动
const result = updateTableDataRecord(values.businessId, values);
}
reload();
}
/** 添加用户*/
function handleAddSuccess({ isAdd, values,length }) {
if (length > 0){
//批量添加
for (let i = 0; i < length; i++){
tableData.value.push(values[i])
}
}
reload();
}
/** 部门树的select*/ /** 部门树的select*/
function handleSelect(institutionId = '') { function handleSelect(institutionId = '') {
searchInfo.institutionId = institutionId; searchInfo.institutionId = institutionId;
...@@ -183,6 +235,7 @@ ...@@ -183,6 +235,7 @@
function handleView(record: Recordable) { function handleView(record: Recordable) {
go('/system/account_detail/' + record.id); go('/system/account_detail/' + record.id);
} }
onMounted(() => { onMounted(() => {
tableData.value = userData tableData.value = userData
const path = route.path const path = route.path
......
...@@ -7,6 +7,49 @@ import {useMessage} from "@/hooks/web/useMessage"; ...@@ -7,6 +7,49 @@ import {useMessage} from "@/hooks/web/useMessage";
import {changeFlagApi} from "@/api/system/user/user"; // 引入开关组件 import {changeFlagApi} from "@/api/system/user/user"; // 引入开关组件
type CheckedType = boolean | string | number; type CheckedType = boolean | string | number;
export const columns: BasicColumn[] = [
{
title: '姓名',
dataIndex: 'name',
width: 150,
},
{
title: '登录名',
dataIndex: 'username',
width: 150,
},
{
title: '用户角色',
dataIndex: 'roleName',
width: 150,
},
{
title: '创建时间',
dataIndex: 'createDate',
width: 150,
},
];
export const searchFormSchema: FormSchema[] = [
{
field: 'name',
label: '姓名',
component: 'Input',
componentProps: {
placeholder: '请输入姓名',
},
colProps: { span: 7 },
},
{
field: 'username',
label: '登录名',
component: 'Input',
componentProps: {
placeholder: '请输入登录名',
},
colProps: { span: 7 },
},
];
export const TreeData: any[] = [ export const TreeData: any[] = [
{ {
...@@ -228,6 +271,68 @@ export const userData: any[] = [ ...@@ -228,6 +271,68 @@ export const userData: any[] = [
} }
]; ];
export const addUserData: any[] = [
{
"delFlag" : "0",
"flag" : "1",
"businessId" : 400,
"username" : "tianjia1",
"nickName" : "添加用户1",
"userType" : "1",
"name" : "添加用户1",
"roleName":"工作区访客",
"createDate": "2024-10-24 10:04:04",
"institutionId" : null,
"institutionName" : "",
"code":"123f",
"identity" : "1",
"roleIds" : null,
"roleNames" : "三级用户",
"roleList" : null,
"menuList" : [ ]
},
{
"delFlag" : "0",
"flag" : "1",
"businessId" : 402,
"username" : "tianjia2",
"nickName" : "添加用户2",
"userType" : "1",
"name" : "添加用户2",
"roleName":"工作区访客",
"createDate": "2024-10-25 10:05:05",
"sex" : "0",
"institutionId" : null,
"institutionName" : "",
"code":"123a",
"identity" : "1",
"roleIds" : null,
"roleNames" : null,
"roleList" : null,
"menuList" : [ ]
},
{
"delFlag": "0",
"flag": "1",
"businessId": 403,
"username": "tianjia3",
"nickName": "添加用户3",
"userType": "1",
"name": "添加用户3",
"roleName":"工作区访客",
"createDate": "2024-10-26 10:06:06",
"sex": "1",
"institutionId": null,
"institutionName" : "",
"code":"123c",
"identity": "1",
"roleIds": null,
"roleNames": "超级管理员",
"roleList": null,
"menuList": []
},
];
export const accountFormSchema: any[] = [ export const accountFormSchema: any[] = [
]; ];
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" minHeight="50">
<BasicForm @register="registerForm" />
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref, reactive} from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form';
import {accountFormSchema, MoveFormSchema, resetPasswordFormSchema} from './account.data';
import { getDeptList } from '@/api/system/dept/dept';
import {resetUserPwd} from '@/api/system/user/user'
import { encryptTwo } from '../../../../src/utils/jsencrypt.js'
import { useMessage } from '@/hooks/web/useMessage';
import {TreeData, userData} from "@/views/system/institution/institutionData";
defineOptions({ name: 'AccountModal' });
const emit = defineEmits(['success', 'register']);
const { createMessage } = useMessage();
const isUpdate = ref(true);
const rowId = ref('');
const idList = ref([])
const rowData = ref([])
//获取接口数据并放在下拉框里(这里是打开了一个弹框)
//初始化表单
const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = useForm({
labelWidth: 100,
baseColProps: { span: 24 },
schemas: MoveFormSchema,
showActionButtonGroup: false,
actionColOptions: {
span: 23,
},
});
//初始化弹框
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
//每次点击弹窗 需要清空存储的数据
rowData.value = []
//重置表单数据
resetFields();
setModalProps({ confirmLoading: false });
if (data.idList != null && data.idList != undefined && data.idList.length > 0){
//批量移动
//根据id查用户信息
idList.value = data.idList;
//过滤出userData中businessId与idList相等的数据
const result = userData.filter(item => data.idList.includes(item.businessId));
result.forEach(item => {
rowData.value.push(item)
})
}else {
rowData.value.push(data.record)
//单个移动
rowId.value = data.record.businessId;
setFieldsValue({
...data.record,
});
}
const treeList = handleTree(TreeData, 'businessId',undefined,undefined,undefined)
updateSchema([
{
field: 'institutionId',
componentProps: {
treeData: treeList
},
},
]);
});
const getTitle = computed(() => ('移动用户'));
/**确定按钮*/
async function handleSubmit() {
try {
//校验并得到表单数据
const values = await validate();
setModalProps({ confirmLoading: true });
//拿到表单里修改后的值 进行修改赋值 传给父组件
console.log('rowData.value:',rowData.value)
rowData.value.forEach(item => {
item.institutionId = values.institutionId
})
emit('success', { values: { ...rowData.value }})
createMessage.success('移动成功');
closeModal();
} finally {
setModalProps({ confirmLoading: false });
}
}
/**数组对象转成树*/
function handleTree(data, id, parentId, children, rootId) {
id = id || 'id'
parentId = parentId || 'parentId'
children = children || 'children'
rootId = rootId || Math.min.apply(Math, data.map(item => { return item[parentId] })) || 0
// 对源数据深度克隆
const cloneData = JSON.parse(JSON.stringify(data))
// 循环所有项
const treeData = cloneData.filter(father => {
const branchArr = cloneData.filter(child => {
// 返回每一项的子级数组
return father[id] === child[parentId]
})
branchArr.length > 0 ? father.children = branchArr : ''
// 返回第一层
return father[parentId] === rootId
})
return treeData !== '' ? treeData : data
}
</script>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment