|
|
|
@ -1,6 +1,7 @@
@@ -1,6 +1,7 @@
|
|
|
|
|
<template> |
|
|
|
|
<BasicModal v-bind="$attrs" |
|
|
|
|
width="720px" |
|
|
|
|
:maskClosable="false" |
|
|
|
|
@ok="handleSubmit" |
|
|
|
|
@register="registerModal" |
|
|
|
|
> |
|
|
|
@ -14,15 +15,18 @@
@@ -14,15 +15,18 @@
|
|
|
|
|
* Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved. |
|
|
|
|
* author entfrm开发团队-王翔 |
|
|
|
|
*/ |
|
|
|
|
import { ref, unref } from 'vue'; |
|
|
|
|
import { reactive } from 'vue'; |
|
|
|
|
import { BasicForm, useForm } from '/@/components/Form'; |
|
|
|
|
import { regionFormSchema } from './region.data'; |
|
|
|
|
import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal'; |
|
|
|
|
import { listRegionAll, addRegion, editRegion, getRegion } from '/@/api/platform/system/controller/region'; |
|
|
|
|
import { listToTree } from '/@/utils/helper/treeHelper'; |
|
|
|
|
import { listRegion, addRegion, editRegion, getRegion } from '/@/api/platform/system/controller/region'; |
|
|
|
|
|
|
|
|
|
/** 通用变量统一声明区域 */ |
|
|
|
|
const tag = ref<Nullable<string>>(''); |
|
|
|
|
const state = reactive({ |
|
|
|
|
tag: '', |
|
|
|
|
parentId: '', |
|
|
|
|
topRegion: [{ id: '0', name: '顶级区域', children: [] }] |
|
|
|
|
}); |
|
|
|
|
/** https://v3.cn.vuejs.org/api/options-data.html#emits */ |
|
|
|
|
const emit = defineEmits(['success', 'register']); |
|
|
|
|
const [registerForm, { resetFields, setFieldsValue, updateSchema, validate, clearValidate }] = useForm({ |
|
|
|
@ -31,36 +35,58 @@
@@ -31,36 +35,58 @@
|
|
|
|
|
showActionButtonGroup: false, |
|
|
|
|
baseColProps: { span: 24 } |
|
|
|
|
}); |
|
|
|
|
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data: WindowInnerData = { _tag: '' }) => { |
|
|
|
|
setModalProps({ loading: true } as Partial<ModalProps>); |
|
|
|
|
const [registerModal, { setModalProps, closeModal, changeLoading }] = useModalInner(async (data: WindowInnerData = { _tag: '' }) => { |
|
|
|
|
changeLoading(true); |
|
|
|
|
// 处理清除脏数据 |
|
|
|
|
await resetFields(); |
|
|
|
|
await clearValidate(); |
|
|
|
|
// 处理设置数据 |
|
|
|
|
tag.value = data._tag; |
|
|
|
|
const topRegion = { id: '0', name: '顶级区域', children: [] }; |
|
|
|
|
topRegion.children = listToTree(await listRegionAll()); |
|
|
|
|
state.tag = data._tag; |
|
|
|
|
await updateSchema({ |
|
|
|
|
field: 'parentId', |
|
|
|
|
componentProps: { |
|
|
|
|
treeData: [topRegion] |
|
|
|
|
treeData: state.topRegion, |
|
|
|
|
onChange: (selectedRowKeys: string) => { |
|
|
|
|
selectedRowKeys && (state.parentId = selectedRowKeys); |
|
|
|
|
}, |
|
|
|
|
loadData: (treeNode: any) => { |
|
|
|
|
const { id } = treeNode.dataRef; |
|
|
|
|
return listRegion({ parentId: id }).then(res => { |
|
|
|
|
treeNode.dataRef.children = (res || [])?.map(item => { |
|
|
|
|
if(item.hasOwnProperty('children')) { |
|
|
|
|
item.isLeaf = false; |
|
|
|
|
} else item.isLeaf = true; |
|
|
|
|
return item; |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
const regionId = data.record?.id; |
|
|
|
|
const props: Partial<ModalProps> = { confirmLoading: false, loading: false }; |
|
|
|
|
const props: Partial<ModalProps> = { confirmLoading: false }; |
|
|
|
|
// 采用tag标签区分操作 |
|
|
|
|
switch (unref(tag)) { |
|
|
|
|
switch (state.tag) { |
|
|
|
|
case 'add': |
|
|
|
|
props.title = '新增区域'; |
|
|
|
|
regionId && await setFieldsValue({ parentId: regionId }); |
|
|
|
|
if(regionId) { |
|
|
|
|
state.parentId = regionId; |
|
|
|
|
await setFieldsValue({ parentId: data.record?.name }); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case 'edit': |
|
|
|
|
props.title = '编辑区域'; |
|
|
|
|
await setFieldsValue(await getRegion(regionId)); |
|
|
|
|
const result = await getRegion(regionId); |
|
|
|
|
const region = result.result; |
|
|
|
|
state.parentId = region.parentId; |
|
|
|
|
if (result?.extend) { |
|
|
|
|
region.parentId = result?.extend.name; |
|
|
|
|
} |
|
|
|
|
await setFieldsValue(region); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
// 尾部:设置处理后的最终配置数据 |
|
|
|
|
setModalProps(props); |
|
|
|
|
changeLoading(false); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
/** 处理弹出框提交 */ |
|
|
|
@ -70,8 +96,9 @@
@@ -70,8 +96,9 @@
|
|
|
|
|
const formData = await validate(); |
|
|
|
|
// 处理提交之前逻辑 |
|
|
|
|
setModalProps({ confirmLoading: true }); |
|
|
|
|
formData.parentId = state.parentId; |
|
|
|
|
// 采用tag标签区分操作 |
|
|
|
|
switch (unref(tag)) { |
|
|
|
|
switch (state.tag) { |
|
|
|
|
case 'add': |
|
|
|
|
await addRegion(formData); |
|
|
|
|
break; |
|
|
|
|