refactor:【antd】【iot】设备分组和产品分类表单简化
This commit is contained in:
@@ -11,12 +11,12 @@ import { deleteDeviceGroup, getDeviceGroupPage } from '#/api/iot/device/group';
|
|||||||
import { $t } from '#/locales';
|
import { $t } from '#/locales';
|
||||||
|
|
||||||
import { useGridColumns, useGridFormSchema } from './data';
|
import { useGridColumns, useGridFormSchema } from './data';
|
||||||
import DeviceGroupForm from './modules/device-group-form.vue';
|
import Form from './modules/form.vue';
|
||||||
|
|
||||||
defineOptions({ name: 'IoTDeviceGroup' });
|
defineOptions({ name: 'IoTDeviceGroup' });
|
||||||
|
|
||||||
const [FormModal, formModalApi] = useVbenModal({
|
const [FormModal, formModalApi] = useVbenModal({
|
||||||
connectedComponent: DeviceGroupForm,
|
connectedComponent: Form,
|
||||||
destroyOnClose: true,
|
destroyOnClose: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<script setup lang="ts">
|
<script lang="ts" setup>
|
||||||
import type { IotDeviceGroupApi } from '#/api/iot/device/group';
|
import type { IotDeviceGroupApi } from '#/api/iot/device/group';
|
||||||
|
|
||||||
import { computed, ref } from 'vue';
|
import { computed, ref } from 'vue';
|
||||||
@@ -17,17 +17,9 @@ import { $t } from '#/locales';
|
|||||||
|
|
||||||
import { useFormSchema } from '../data';
|
import { useFormSchema } from '../data';
|
||||||
|
|
||||||
defineOptions({ name: 'IoTDeviceGroupForm' });
|
const emit = defineEmits(['success']);
|
||||||
|
|
||||||
// TODO @haohao:web-antd/src/views/iot/product/category/modules/product-category-form.vue 类似问题
|
|
||||||
|
|
||||||
const emit = defineEmits<{
|
|
||||||
success: [];
|
|
||||||
}>();
|
|
||||||
|
|
||||||
const formData = ref<IotDeviceGroupApi.DeviceGroup>();
|
const formData = ref<IotDeviceGroupApi.DeviceGroup>();
|
||||||
|
const getTitle = computed(() => {
|
||||||
const modalTitle = computed(() => {
|
|
||||||
return formData.value?.id
|
return formData.value?.id
|
||||||
? $t('ui.actionTitle.edit', ['设备分组'])
|
? $t('ui.actionTitle.edit', ['设备分组'])
|
||||||
: $t('ui.actionTitle.create', ['设备分组']);
|
: $t('ui.actionTitle.create', ['设备分组']);
|
||||||
@@ -40,11 +32,9 @@ const [Form, formApi] = useVbenForm({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
schema: useFormSchema(),
|
schema: useFormSchema(),
|
||||||
showCollapseButton: false,
|
|
||||||
showDefaultActions: false,
|
showDefaultActions: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO @haohao:参考别的 form;1)文件的命名可以简化;2)代码可以在简化下;
|
|
||||||
const [Modal, modalApi] = useVbenModal({
|
const [Modal, modalApi] = useVbenModal({
|
||||||
async onConfirm() {
|
async onConfirm() {
|
||||||
const { valid } = await formApi.validate();
|
const { valid } = await formApi.validate();
|
||||||
@@ -52,17 +42,13 @@ const [Modal, modalApi] = useVbenModal({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
modalApi.lock();
|
modalApi.lock();
|
||||||
|
// 提交表单
|
||||||
|
const data = (await formApi.getValues()) as IotDeviceGroupApi.DeviceGroup;
|
||||||
try {
|
try {
|
||||||
const values = await formApi.getValues();
|
|
||||||
|
|
||||||
await (formData.value?.id
|
await (formData.value?.id
|
||||||
? updateDeviceGroup({
|
? updateDeviceGroup(data)
|
||||||
...values,
|
: createDeviceGroup(data));
|
||||||
id: formData.value.id,
|
// 关闭并提示
|
||||||
} as IotDeviceGroupApi.DeviceGroup)
|
|
||||||
: createDeviceGroup(values as IotDeviceGroupApi.DeviceGroup));
|
|
||||||
|
|
||||||
await modalApi.close();
|
await modalApi.close();
|
||||||
emit('success');
|
emit('success');
|
||||||
message.success($t('ui.actionMessage.operationSuccess'));
|
message.success($t('ui.actionMessage.operationSuccess'));
|
||||||
@@ -70,28 +56,20 @@ const [Modal, modalApi] = useVbenModal({
|
|||||||
modalApi.unlock();
|
modalApi.unlock();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
async onOpenChange(isOpen: boolean) {
|
async onOpenChange(isOpen: boolean) {
|
||||||
if (!isOpen) {
|
if (!isOpen) {
|
||||||
formData.value = undefined;
|
formData.value = undefined;
|
||||||
await formApi.resetForm();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// 加载数据
|
||||||
// 重置表单
|
|
||||||
await formApi.resetForm();
|
|
||||||
|
|
||||||
const data = modalApi.getData<IotDeviceGroupApi.DeviceGroup>();
|
const data = modalApi.getData<IotDeviceGroupApi.DeviceGroup>();
|
||||||
// 如果没有数据或没有 id,表示是新增
|
|
||||||
if (!data || !data.id) {
|
if (!data || !data.id) {
|
||||||
formData.value = undefined;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 编辑模式:加载数据
|
|
||||||
modalApi.lock();
|
modalApi.lock();
|
||||||
try {
|
try {
|
||||||
formData.value = await getDeviceGroup(data.id);
|
formData.value = await getDeviceGroup(data.id);
|
||||||
|
// 设置到 values
|
||||||
await formApi.setValues(formData.value);
|
await formApi.setValues(formData.value);
|
||||||
} finally {
|
} finally {
|
||||||
modalApi.unlock();
|
modalApi.unlock();
|
||||||
@@ -101,7 +79,7 @@ const [Modal, modalApi] = useVbenModal({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Modal :title="modalTitle" class="w-2/5">
|
<Modal :title="getTitle">
|
||||||
<Form class="mx-4" />
|
<Form class="mx-4" />
|
||||||
</Modal>
|
</Modal>
|
||||||
</template>
|
</template>
|
||||||
@@ -14,12 +14,12 @@ import {
|
|||||||
import { $t } from '#/locales';
|
import { $t } from '#/locales';
|
||||||
|
|
||||||
import { useGridColumns, useGridFormSchema } from './data';
|
import { useGridColumns, useGridFormSchema } from './data';
|
||||||
import ProductCategoryForm from './modules/product-category-form.vue';
|
import Form from './modules/form.vue';
|
||||||
|
|
||||||
defineOptions({ name: 'IoTProductCategory' });
|
defineOptions({ name: 'IoTProductCategory' });
|
||||||
|
|
||||||
const [FormModal, formModalApi] = useVbenModal({
|
const [FormModal, formModalApi] = useVbenModal({
|
||||||
connectedComponent: ProductCategoryForm,
|
connectedComponent: Form,
|
||||||
destroyOnClose: true,
|
destroyOnClose: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ import { $t } from '#/locales';
|
|||||||
|
|
||||||
import { useFormSchema } from '../data';
|
import { useFormSchema } from '../data';
|
||||||
|
|
||||||
// TODO @haohao:应该是 form.vue,不用前缀;
|
|
||||||
|
|
||||||
const emit = defineEmits(['success']);
|
const emit = defineEmits(['success']);
|
||||||
const formData = ref<IotProductCategoryApi.ProductCategory>();
|
const formData = ref<IotProductCategoryApi.ProductCategory>();
|
||||||
const getTitle = computed(() => {
|
const getTitle = computed(() => {
|
||||||
@@ -40,7 +38,6 @@ const [Form, formApi] = useVbenForm({
|
|||||||
showDefaultActions: false,
|
showDefaultActions: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO @haohao:参考 apps/web-antd/src/views/system/dept/modules/form.vue 简化 useVbenModal 里的代码;
|
|
||||||
const [Modal, modalApi] = useVbenModal({
|
const [Modal, modalApi] = useVbenModal({
|
||||||
async onConfirm() {
|
async onConfirm() {
|
||||||
const { valid } = await formApi.validate();
|
const { valid } = await formApi.validate();
|
||||||
@@ -66,25 +63,19 @@ const [Modal, modalApi] = useVbenModal({
|
|||||||
async onOpenChange(isOpen: boolean) {
|
async onOpenChange(isOpen: boolean) {
|
||||||
if (!isOpen) {
|
if (!isOpen) {
|
||||||
formData.value = undefined;
|
formData.value = undefined;
|
||||||
formApi.resetForm();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// 加载数据
|
||||||
// 重置表单
|
|
||||||
await formApi.resetForm();
|
|
||||||
|
|
||||||
const data = modalApi.getData<IotProductCategoryApi.ProductCategory>();
|
const data = modalApi.getData<IotProductCategoryApi.ProductCategory>();
|
||||||
// 如果没有数据或没有 id,表示是新增
|
|
||||||
if (!data || !data.id) {
|
if (!data || !data.id) {
|
||||||
formData.value = undefined;
|
|
||||||
// 新增模式:设置默认值
|
// 新增模式:设置默认值
|
||||||
|
formData.value = undefined;
|
||||||
await formApi.setValues({
|
await formApi.setValues({
|
||||||
sort: 0,
|
sort: 0,
|
||||||
status: 1,
|
status: 1,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 编辑模式:加载数据
|
// 编辑模式:加载数据
|
||||||
modalApi.lock();
|
modalApi.lock();
|
||||||
try {
|
try {
|
||||||
Reference in New Issue
Block a user