|
|
@@ -1,5 +1,163 @@
|
|
|
+<script lang="ts" setup>
|
|
|
+import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
|
|
|
+
|
|
|
+import { useVbenModal } from '@vben/common-ui';
|
|
|
+import { message, Tabs, Checkbox, Input, Textarea, Select,RadioGroup,CheckboxGroup, DatePicker } from 'ant-design-vue';
|
|
|
+## 特殊:主子表专属逻辑
|
|
|
+#if ( $table.templateType == 10 || $table.templateType == 12 )
|
|
|
+ #foreach ($subSimpleClassName in $subSimpleClassNames)
|
|
|
+ #set ($index = $foreach.count - 1)
|
|
|
+ #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index))
|
|
|
+ import ${subSimpleClassName}Form from './${subSimpleClassName_strikeCase}-form.vue'
|
|
|
+ #end
|
|
|
+#end
|
|
|
+
|
|
|
+import { computed, ref } from 'vue';
|
|
|
+import { $t } from '#/locales';
|
|
|
+import { useVbenForm } from '#/adapter/form';
|
|
|
+import { get${simpleClassName}, create${simpleClassName}, update${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
|
|
|
+
|
|
|
+import { useFormSchema } from '../data';
|
|
|
+
|
|
|
+const emit = defineEmits(['success']);
|
|
|
+const formData = ref<Partial<${simpleClassName}Api.${simpleClassName}>>({
|
|
|
+#foreach ($column in $columns)
|
|
|
+ #if ($column.createOperation || $column.updateOperation)
|
|
|
+ #if ($column.htmlType == "checkbox")
|
|
|
+ $column.javaField: [],
|
|
|
+ #else
|
|
|
+ $column.javaField: undefined,
|
|
|
+ #end
|
|
|
+ #end
|
|
|
+#end
|
|
|
+});
|
|
|
+#if (${table.templateType} == 2)## 树表特有:父ID处理
|
|
|
+const parentId = ref<number>(); // 新增下级时的父级 ID
|
|
|
+
|
|
|
+const getTitle = computed(() => {
|
|
|
+ if (formData.value?.id) {
|
|
|
+ return $t('ui.actionTitle.edit', ['${table.classComment}']);
|
|
|
+ }
|
|
|
+ return parentId.value
|
|
|
+ ? $t('ui.actionTitle.create', ['下级${table.classComment}'])
|
|
|
+ : $t('ui.actionTitle.create', ['${table.classComment}']);
|
|
|
+});
|
|
|
+#else## 标准表标题
|
|
|
+const getTitle = computed(() => {
|
|
|
+ return formData.value?.id
|
|
|
+ ? $t('ui.actionTitle.edit', ['${table.classComment}'])
|
|
|
+ : $t('ui.actionTitle.create', ['${table.classComment}']);
|
|
|
+});
|
|
|
+#end
|
|
|
+
|
|
|
+## 特殊:主子表专属逻辑
|
|
|
+#if ( $table.templateType == 10 || $table.templateType == 12 )
|
|
|
+ #if ( $subTables && $subTables.size() > 0 )
|
|
|
+
|
|
|
+ /** 子表的表单 */
|
|
|
+ const subTabsName = ref('$subClassNameVars.get(0)')
|
|
|
+ #foreach ($subClassNameVar in $subClassNameVars)
|
|
|
+ #set ($index = $foreach.count - 1)
|
|
|
+ #set ($subSimpleClassName = $subSimpleClassNames.get($index))
|
|
|
+ const ${subClassNameVar}FormRef = ref<InstanceType<typeof ${subSimpleClassName}Form>>()
|
|
|
+ #end
|
|
|
+ #end
|
|
|
+#end
|
|
|
+
|
|
|
+const [Modal, modalApi] = useVbenModal({
|
|
|
+ async onConfirm() {
|
|
|
+ const { valid } = await formApi.validate();
|
|
|
+ if (!valid) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ ## 特殊:主子表专属逻辑
|
|
|
+ #if ( $table.templateType == 10 || $table.templateType == 12 )
|
|
|
+ #if ( $subTables && $subTables.size() > 0 )
|
|
|
+ // 校验子表单
|
|
|
+ #foreach ($subTable in $subTables)
|
|
|
+ #set ($index = $foreach.count - 1)
|
|
|
+ #set ($subClassNameVar = $subClassNameVars.get($index))
|
|
|
+ #if ($subTable.subJoinMany) ## 一对多
|
|
|
+ ## TODO 列表值校验?
|
|
|
+ #else
|
|
|
+ const ${subClassNameVar}Valid = await ${subClassNameVar}FormRef.value?.validate();
|
|
|
+ if (!${subClassNameVar}Valid) {
|
|
|
+ subTabsName.value = '${subClassNameVar}';
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ #end
|
|
|
+ #end
|
|
|
+ #end
|
|
|
+ #end
|
|
|
+ modalApi.lock();
|
|
|
+ // 提交表单
|
|
|
+ const data = formData.value;
|
|
|
+ ## 特殊:主子表专属逻辑
|
|
|
+ #if ( $table.templateType == 10 || $table.templateType == 12 )
|
|
|
+ #if ( $subTables && $subTables.size() > 0 )
|
|
|
+ // 拼接子表的数据
|
|
|
+ #foreach ($subTable in $subTables)
|
|
|
+ #set ($index = $foreach.count - 1)
|
|
|
+ #set ($subClassNameVar = $subClassNameVars.get($index))
|
|
|
+ #if ($subTable.subJoinMany)
|
|
|
+ data.${subClassNameVar}s = ${subClassNameVar}FormRef.value?.getData();
|
|
|
+ #else
|
|
|
+ data.${subClassNameVar} = await ${subClassNameVar}FormRef.value?.getValues();
|
|
|
+ #end
|
|
|
+ #end
|
|
|
+ #end
|
|
|
+ #end
|
|
|
+ try {
|
|
|
+ await (formData.value?.id ? update${simpleClassName}(data) : create${simpleClassName}(data));
|
|
|
+ // 关闭并提示
|
|
|
+ await modalApi.close();
|
|
|
+ emit('success');
|
|
|
+ message.success({
|
|
|
+ content: $t('ui.actionMessage.operationSuccess'),
|
|
|
+ key: 'action_process_msg',
|
|
|
+ });
|
|
|
+ } finally {
|
|
|
+ modalApi.lock(false);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async onOpenChange(isOpen: boolean) {
|
|
|
+ if (!isOpen) {
|
|
|
+ formData.value = {
|
|
|
+ #foreach ($column in $columns)
|
|
|
+ #if ($column.createOperation || $column.updateOperation)
|
|
|
+ #if ($column.htmlType == "checkbox")
|
|
|
+ $column.javaField: [],
|
|
|
+ #else
|
|
|
+ $column.javaField: undefined,
|
|
|
+ #end
|
|
|
+ #end
|
|
|
+ #end
|
|
|
+ };
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 加载数据
|
|
|
+ let data = modalApi.getData<${simpleClassName}Api.${simpleClassName}>();
|
|
|
+ if (!data) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (data.id) {
|
|
|
+ modalApi.lock();
|
|
|
+ try {
|
|
|
+ data = await get${simpleClassName}(data.id);
|
|
|
+ } finally {
|
|
|
+ modalApi.lock(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 设置到 values
|
|
|
+ formData.value = data;
|
|
|
+ await formApi.setValues(formData.value);
|
|
|
+ },
|
|
|
+});
|
|
|
+</script>
|
|
|
+
|
|
|
<template>
|
|
|
- <Dialog :title="dialogTitle" v-model="dialogVisible">
|
|
|
+ <Modal :title="getTitle">
|
|
|
<Form
|
|
|
ref="formRef"
|
|
|
:model="formData"
|
|
|
@@ -7,294 +165,128 @@
|
|
|
label-col="{ span: 6 }"
|
|
|
:loading="formLoading"
|
|
|
>
|
|
|
-#foreach($column in $columns)
|
|
|
- #if ($column.createOperation || $column.updateOperation)
|
|
|
- #set ($dictType = $column.dictType)
|
|
|
- #set ($javaField = $column.javaField)
|
|
|
- #set ($javaType = $column.javaType)
|
|
|
- #set ($AttrName = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
|
|
|
- #set ($comment = $column.columnComment)
|
|
|
- #set ($dictMethod = "getDictOptions")## 计算使用哪个 dict 字典方法
|
|
|
- #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short")
|
|
|
+ #foreach($column in $columns)
|
|
|
+ #if ($column.createOperation || $column.updateOperation)
|
|
|
+ #set ($dictType = $column.dictType)
|
|
|
+ #set ($javaField = $column.javaField)
|
|
|
+ #set ($javaType = $column.javaType)
|
|
|
+ #set ($AttrName = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
|
|
|
+ #set ($comment = $column.columnComment)
|
|
|
+ #set ($dictMethod = "getDictOptions")## 计算使用哪个 dict 字典方法
|
|
|
+ #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short")
|
|
|
#set ($dictMethod = "getIntDictOptions")
|
|
|
- #elseif ($javaType == "String")
|
|
|
+ #elseif ($javaType == "String")
|
|
|
#set ($dictMethod = "getStrDictOptions")
|
|
|
- #elseif ($javaType == "Boolean")
|
|
|
+ #elseif ($javaType == "Boolean")
|
|
|
#set ($dictMethod = "getBoolDictOptions")
|
|
|
- #end
|
|
|
- #if ( $table.templateType == 2 && $column.id == $treeParentColumn.id )
|
|
|
- <FormItem label="${comment}" name="${javaField}">
|
|
|
- <TreeSelect
|
|
|
- v-model:value="formData.${javaField}"
|
|
|
- :treeData="${classNameVar}Tree"
|
|
|
- #if ($treeNameColumn.javaField == "name")
|
|
|
- :fieldNames="defaultProps"
|
|
|
- #else
|
|
|
- :fieldNames="{...defaultProps, label: '$treeNameColumn.javaField'}"
|
|
|
#end
|
|
|
- checkable
|
|
|
- treeDefaultExpandAll
|
|
|
- placeholder="请选择${comment}"
|
|
|
- />
|
|
|
- </FormItem>
|
|
|
- #elseif ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里
|
|
|
- <FormItem label="${comment}" name="${javaField}">
|
|
|
- <Input v-model:value="formData.${javaField}" placeholder="请输入${comment}" />
|
|
|
- </FormItem>
|
|
|
- #elseif($column.htmlType == "imageUpload")## 图片上传
|
|
|
- <FormItem label="${comment}" name="${javaField}">
|
|
|
- <UploadImg v-model:value="formData.${javaField}" />
|
|
|
- </FormItem>
|
|
|
- #elseif($column.htmlType == "fileUpload")## 文件上传
|
|
|
- <FormItem label="${comment}" name="${javaField}">
|
|
|
- <UploadFile v-model:value="formData.${javaField}" />
|
|
|
- </FormItem>
|
|
|
- #elseif($column.htmlType == "editor")## 文本编辑器
|
|
|
- <FormItem label="${comment}" name="${javaField}">
|
|
|
- <Editor v-model:value="formData.${javaField}" height="150px" />
|
|
|
- </FormItem>
|
|
|
- #elseif($column.htmlType == "select")## 下拉框
|
|
|
- <FormItem label="${comment}" name="${javaField}">
|
|
|
- <Select v-model:value="formData.${javaField}" placeholder="请选择${comment}">
|
|
|
+ #if ( $table.templateType == 2 && $column.id == $treeParentColumn.id )
|
|
|
+ <FormItem label="${comment}" name="${javaField}">
|
|
|
+ <TreeSelect
|
|
|
+ v-model:value="formData.${javaField}"
|
|
|
+ :treeData="${classNameVar}Tree"
|
|
|
+ #if ($treeNameColumn.javaField == "name")
|
|
|
+ :fieldNames="defaultProps"
|
|
|
+ #else
|
|
|
+ :fieldNames="{...defaultProps, label: '$treeNameColumn.javaField'}"
|
|
|
+ #end
|
|
|
+ checkable
|
|
|
+ treeDefaultExpandAll
|
|
|
+ placeholder="请选择${comment}"
|
|
|
+ />
|
|
|
+ </FormItem>
|
|
|
+ #elseif ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里
|
|
|
+ <FormItem label="${comment}" name="${javaField}">
|
|
|
+ <Input v-model:value="formData.${javaField}" placeholder="请输入${comment}" />
|
|
|
+ </FormItem>
|
|
|
+ #elseif($column.htmlType == "imageUpload")## 图片上传
|
|
|
+ <FormItem label="${comment}" name="${javaField}">
|
|
|
+ <UploadImg v-model:value="formData.${javaField}" />
|
|
|
+ </FormItem>
|
|
|
+ #elseif($column.htmlType == "fileUpload")## 文件上传
|
|
|
+ <FormItem label="${comment}" name="${javaField}">
|
|
|
+ <UploadFile v-model:value="formData.${javaField}" />
|
|
|
+ </FormItem>
|
|
|
+ #elseif($column.htmlType == "editor")## 文本编辑器
|
|
|
+ <FormItem label="${comment}" name="${javaField}">
|
|
|
+ <Editor v-model:value="formData.${javaField}" height="150px" />
|
|
|
+ </FormItem>
|
|
|
+ #elseif($column.htmlType == "select")## 下拉框
|
|
|
+ <FormItem label="${comment}" name="${javaField}">
|
|
|
+ <Select v-model:value="formData.${javaField}" placeholder="请选择${comment}">
|
|
|
#if ("" != $dictType)## 有数据字典
|
|
|
- <SelectOption
|
|
|
- v-for="dict in $dictMethod(DICT_TYPE.$dictType.toUpperCase())"
|
|
|
- :key="dict.value"
|
|
|
- :label="dict.label"
|
|
|
- :value="dict.value"
|
|
|
- />
|
|
|
+ <SelectOption
|
|
|
+ v-for="dict in $dictMethod(DICT_TYPE.$dictType.toUpperCase())"
|
|
|
+ :key="dict.value"
|
|
|
+ :label="dict.label"
|
|
|
+ :value="dict.value"
|
|
|
+ />
|
|
|
#else##没数据字典
|
|
|
- <SelectOption label="请选择字典生成" value="" />
|
|
|
+ <SelectOption label="请选择字典生成" value="" />
|
|
|
#end
|
|
|
- </Select>
|
|
|
- </FormItem>
|
|
|
- #elseif($column.htmlType == "checkbox")## 多选框
|
|
|
- <FormItem label="${comment}" name="${javaField}">
|
|
|
- <CheckboxGroup v-model:value="formData.${javaField}">
|
|
|
+ </Select>
|
|
|
+ </FormItem>
|
|
|
+ #elseif($column.htmlType == "checkbox")## 多选框
|
|
|
+ <FormItem label="${comment}" name="${javaField}">
|
|
|
+ <CheckboxGroup v-model:value="formData.${javaField}">
|
|
|
#if ("" != $dictType)## 有数据字典
|
|
|
- <Checkbox
|
|
|
- v-for="dict in $dictMethod(DICT_TYPE.$dictType.toUpperCase())"
|
|
|
- :key="dict.value"
|
|
|
- :label="dict.label"
|
|
|
- :value="dict.value"
|
|
|
- />
|
|
|
+ <Checkbox
|
|
|
+ v-for="dict in $dictMethod(DICT_TYPE.$dictType.toUpperCase())"
|
|
|
+ :key="dict.value"
|
|
|
+ :label="dict.label"
|
|
|
+ :value="dict.value"
|
|
|
+ />
|
|
|
#else##没数据字典
|
|
|
- <Checkbox label="请选择字典生成" />
|
|
|
+ <Checkbox label="请选择字典生成" />
|
|
|
#end
|
|
|
- </CheckboxGroup>
|
|
|
- </FormItem>
|
|
|
- #elseif($column.htmlType == "radio")## 单选框
|
|
|
- <FormItem label="${comment}" name="${javaField}">
|
|
|
- <RadioGroup v-model:value="formData.${javaField}">
|
|
|
+ </CheckboxGroup>
|
|
|
+ </FormItem>
|
|
|
+ #elseif($column.htmlType == "radio")## 单选框
|
|
|
+ <FormItem label="${comment}" name="${javaField}">
|
|
|
+ <RadioGroup v-model:value="formData.${javaField}">
|
|
|
#if ("" != $dictType)## 有数据字典
|
|
|
- <Radio
|
|
|
- v-for="dict in $dictMethod(DICT_TYPE.$dictType.toUpperCase())"
|
|
|
- :key="dict.value"
|
|
|
- :value="dict.value"
|
|
|
- >
|
|
|
- {{ dict.label }}
|
|
|
- </Radio>
|
|
|
+ <Radio
|
|
|
+ v-for="dict in $dictMethod(DICT_TYPE.$dictType.toUpperCase())"
|
|
|
+ :key="dict.value"
|
|
|
+ :value="dict.value"
|
|
|
+ >
|
|
|
+ {{ dict.label }}
|
|
|
+ </Radio>
|
|
|
#else##没数据字典
|
|
|
- <Radio value="1">请选择字典生成</Radio>
|
|
|
+ <Radio value="1">请选择字典生成</Radio>
|
|
|
#end
|
|
|
- </RadioGroup>
|
|
|
- </FormItem>
|
|
|
- #elseif($column.htmlType == "datetime")## 时间框
|
|
|
- <FormItem label="${comment}" name="${javaField}">
|
|
|
- <DatePicker
|
|
|
- v-model:value="formData.${javaField}"
|
|
|
- valueFormat="x"
|
|
|
- placeholder="选择${comment}"
|
|
|
- />
|
|
|
- </FormItem>
|
|
|
- #elseif($column.htmlType == "textarea")## 文本框
|
|
|
- <FormItem label="${comment}" name="${javaField}">
|
|
|
- <Textarea v-model:value="formData.${javaField}" placeholder="请输入${comment}" />
|
|
|
- </FormItem>
|
|
|
+ </RadioGroup>
|
|
|
+ </FormItem>
|
|
|
+ #elseif($column.htmlType == "datetime")## 时间框
|
|
|
+ <FormItem label="${comment}" name="${javaField}">
|
|
|
+ <DatePicker
|
|
|
+ v-model:value="formData.${javaField}"
|
|
|
+ valueFormat="x"
|
|
|
+ placeholder="选择${comment}"
|
|
|
+ />
|
|
|
+ </FormItem>
|
|
|
+ #elseif($column.htmlType == "textarea")## 文本框
|
|
|
+ <FormItem label="${comment}" name="${javaField}">
|
|
|
+ <Textarea v-model:value="formData.${javaField}" placeholder="请输入${comment}" />
|
|
|
+ </FormItem>
|
|
|
+ #end
|
|
|
#end
|
|
|
- #end
|
|
|
-#end
|
|
|
+ #end
|
|
|
</Form>
|
|
|
-## 特殊:主子表专属逻辑
|
|
|
-#if ( $table.templateType == 10 || $table.templateType == 12 )
|
|
|
- <!-- 子表的表单 -->
|
|
|
- <Tabs v-model:activeKey="subTabsName">
|
|
|
- #foreach ($subTable in $subTables)
|
|
|
- #set ($index = $foreach.count - 1)
|
|
|
- #set ($subClassNameVar = $subClassNameVars.get($index))
|
|
|
- #set ($subSimpleClassName = $subSimpleClassNames.get($index))
|
|
|
- #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index))
|
|
|
- <TabPane key="$subClassNameVar" tab="${subTable.classComment}">
|
|
|
- <${subSimpleClassName}Form ref="${subClassNameVar}FormRef" :${subJoinColumn_strikeCase}="formData.id" />
|
|
|
- </TabPane>
|
|
|
+ ## 特殊:主子表专属逻辑
|
|
|
+ #if ( $table.templateType == 10 || $table.templateType == 12 )
|
|
|
+ <!-- 子表的表单 -->
|
|
|
+ <Tabs v-model:active-key="subTabsName">
|
|
|
+ #foreach ($subTable in $subTables)
|
|
|
+ #set ($index = $foreach.count - 1)
|
|
|
+ #set ($subClassNameVar = $subClassNameVars.get($index))
|
|
|
+ #set ($subSimpleClassName = $subSimpleClassNames.get($index))
|
|
|
+ #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index))
|
|
|
+ <Tabs.TabPane key="$subClassNameVar" tab="${subTable.classComment}" force-render>
|
|
|
+ <${subSimpleClassName}Form ref="${subClassNameVar}FormRef" :${subJoinColumn_strikeCase}="formData?.id" />
|
|
|
+ </Tabs.TabPane>
|
|
|
+ #end
|
|
|
+ </Tabs>
|
|
|
#end
|
|
|
- </Tabs>
|
|
|
-#end
|
|
|
- <template #footer>
|
|
|
- <Button @click="submitForm" type="primary" :loading="formLoading">确 定</Button>
|
|
|
- <Button @click="dialogVisible = false">取 消</Button>
|
|
|
- </template>
|
|
|
- </Dialog>
|
|
|
+ </Modal>
|
|
|
</template>
|
|
|
-<script setup lang="ts">
|
|
|
-import { Form, FormItem, Input, Button, Select, SelectOption, DatePicker, Textarea, Checkbox, CheckboxGroup, Radio, RadioGroup, Tabs, TabPane, TreeSelect } from 'ant-design-vue'
|
|
|
-import { getIntDictOptions, getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
|
|
|
-import { ${simpleClassName}Api, ${simpleClassName}VO } from '@/api/${table.moduleName}/${table.businessName}'
|
|
|
-## 特殊:树表专属逻辑
|
|
|
-#if ( $table.templateType == 2 )
|
|
|
-import { defaultProps, handleTree } from '@/utils/tree'
|
|
|
-#end
|
|
|
-## 特殊:主子表专属逻辑
|
|
|
-#if ( $table.templateType == 10 || $table.templateType == 12 )
|
|
|
-#foreach ($subSimpleClassName in $subSimpleClassNames)
|
|
|
-import ${subSimpleClassName}Form from './components/${subSimpleClassName}Form.vue'
|
|
|
-#end
|
|
|
-#end
|
|
|
-
|
|
|
-/** ${table.classComment} 表单 */
|
|
|
-defineOptions({ name: '${simpleClassName}Form' })
|
|
|
-
|
|
|
-const { t } = useI18n() // 国际化
|
|
|
-const message = useMessage() // 消息弹窗
|
|
|
-
|
|
|
-const dialogVisible = ref(false) // 弹窗的是否展示
|
|
|
-const dialogTitle = ref('') // 弹窗的标题
|
|
|
-const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
|
|
-const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
|
|
-const formData = ref({
|
|
|
-#foreach ($column in $columns)
|
|
|
- #if ($column.createOperation || $column.updateOperation)
|
|
|
- #if ($column.htmlType == "checkbox")
|
|
|
- $column.javaField: [],
|
|
|
- #else
|
|
|
- $column.javaField: undefined,
|
|
|
- #end
|
|
|
- #end
|
|
|
-#end
|
|
|
-})
|
|
|
-const formRules = reactive({
|
|
|
-#foreach ($column in $columns)
|
|
|
- #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键
|
|
|
- #set($comment=$column.columnComment)
|
|
|
- $column.javaField: [{ required: true, message: '${comment}不能为空', trigger: #if($column.htmlType == 'select')'change'#else'blur'#end }],
|
|
|
- #end
|
|
|
-#end
|
|
|
-})
|
|
|
-const formRef = ref() // 表单 Ref
|
|
|
-## 特殊:树表专属逻辑
|
|
|
-#if ( $table.templateType == 2 )
|
|
|
-const ${classNameVar}Tree = ref([]) // 树形结构
|
|
|
-#end
|
|
|
-## 特殊:主子表专属逻辑
|
|
|
-#if ( $table.templateType == 10 || $table.templateType == 12 )
|
|
|
-#if ( $subTables && $subTables.size() > 0 )
|
|
|
-
|
|
|
-/** 子表的表单 */
|
|
|
-const subTabsName = ref('$subClassNameVars.get(0)')
|
|
|
-#foreach ($subClassNameVar in $subClassNameVars)
|
|
|
-const ${subClassNameVar}FormRef = ref()
|
|
|
-#end
|
|
|
-#end
|
|
|
-#end
|
|
|
-
|
|
|
-/** 打开弹窗 */
|
|
|
-const open = async (type: string, id?: number) => {
|
|
|
- dialogVisible.value = true
|
|
|
- dialogTitle.value = t('action.' + type)
|
|
|
- formType.value = type
|
|
|
- resetForm()
|
|
|
- // 修改时,设置数据
|
|
|
- if (id) {
|
|
|
- formLoading.value = true
|
|
|
- try {
|
|
|
- formData.value = await ${simpleClassName}Api.get${simpleClassName}(id)
|
|
|
- } finally {
|
|
|
- formLoading.value = false
|
|
|
- }
|
|
|
- }
|
|
|
-## 特殊:树表专属逻辑
|
|
|
-#if ( $table.templateType == 2 )
|
|
|
- await get${simpleClassName}Tree()
|
|
|
-#end
|
|
|
-}
|
|
|
-defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
|
|
-
|
|
|
-/** 提交表单 */
|
|
|
-const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
|
|
-const submitForm = async () => {
|
|
|
- // 校验表单
|
|
|
- await formRef.value.validate()
|
|
|
-## 特殊:主子表专属逻辑
|
|
|
-#if ( $table.templateType == 10 || $table.templateType == 12 )
|
|
|
-#if ( $subTables && $subTables.size() > 0 )
|
|
|
- // 校验子表单
|
|
|
- #foreach ($subTable in $subTables)
|
|
|
- #set ($index = $foreach.count - 1)
|
|
|
- #set ($subClassNameVar = $subClassNameVars.get($index))
|
|
|
- try {
|
|
|
- await ${subClassNameVar}FormRef.value.validate()
|
|
|
- } catch (e) {
|
|
|
- subTabsName.value = '${subClassNameVar}'
|
|
|
- return
|
|
|
- }
|
|
|
- #end
|
|
|
-#end
|
|
|
-#end
|
|
|
- // 提交请求
|
|
|
- formLoading.value = true
|
|
|
- try {
|
|
|
- const data = formData.value as unknown as ${simpleClassName}VO
|
|
|
-## 特殊:主子表专属逻辑
|
|
|
-#if ( $table.templateType == 10 || $table.templateType == 12 )
|
|
|
-#if ( $subTables && $subTables.size() > 0 )
|
|
|
- // 拼接子表的数据
|
|
|
- #foreach ($subTable in $subTables)
|
|
|
- #set ($index = $foreach.count - 1)
|
|
|
- #set ($subClassNameVar = $subClassNameVars.get($index))
|
|
|
- data.${subClassNameVar}#if ( $subTable.subJoinMany)s#end = ${subClassNameVar}FormRef.value.getData()
|
|
|
- #end
|
|
|
-#end
|
|
|
-#end
|
|
|
- if (formType.value === 'create') {
|
|
|
- await ${simpleClassName}Api.create${simpleClassName}(data)
|
|
|
- message.success(t('common.createSuccess'))
|
|
|
- } else {
|
|
|
- await ${simpleClassName}Api.update${simpleClassName}(data)
|
|
|
- message.success(t('common.updateSuccess'))
|
|
|
- }
|
|
|
- dialogVisible.value = false
|
|
|
- // 发送操作成功的事件
|
|
|
- emit('success')
|
|
|
- } finally {
|
|
|
- formLoading.value = false
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/** 重置表单 */
|
|
|
-const resetForm = () => {
|
|
|
- formData.value = {
|
|
|
-#foreach ($column in $columns)
|
|
|
- #if ($column.createOperation || $column.updateOperation)
|
|
|
- #if ($column.htmlType == "checkbox")
|
|
|
- $column.javaField: [],
|
|
|
- #else
|
|
|
- $column.javaField: undefined,
|
|
|
- #end
|
|
|
- #end
|
|
|
-#end
|
|
|
- }
|
|
|
- formRef.value?.resetFields()
|
|
|
-}
|
|
|
-## 特殊:树表专属逻辑
|
|
|
-#if ( $table.templateType == 2 )
|
|
|
-
|
|
|
-/** 获得${table.classComment}树 */
|
|
|
-const get${simpleClassName}Tree = async () => {
|
|
|
- ${classNameVar}Tree.value = []
|
|
|
- const data = await ${simpleClassName}Api.get${simpleClassName}List()
|
|
|
- const root = { id: 0, name: '顶级${table.classComment}', children: [] }
|
|
|
- root.children = handleTree(data, 'id', '${treeParentColumn.javaField}')
|
|
|
- ${classNameVar}Tree.value.push(root)
|
|
|
-}
|
|
|
-#end
|
|
|
-</script>
|