1 |
- <template>\n <el-drawer :title="form.${pk.attrName} ? (detail ? '详情' : '编辑') : '添加'" v-model="visible" size="50%">\n <el-form ref="dataFormRef" :model="form" :rules="dataRules" label-width="90px" :disabled="detail" v-loading="loading">\n <el-row :gutter="24">\n#foreach($field in $formList)\n#if($field.attrName != ${pk.attrName})\n#if($formLayout == 1)\n <el-col :span="24" class="mb20">\n#elseif($formLayout == 2)\n <el-col :span="12" class="mb20">\n#end\n#if($field.formType == 'text')\n <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" prop="${field.attrName}">\n <el-input v-model="form.${field.attrName}" placeholder="请输入#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end"/>\n </el-form-item>\n </el-col>\n#elseif($field.formType == 'textarea')\n <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" prop="${field.attrName}">\n <el-input type="textarea" v-model="form.${field.attrName}" placeholder="请输入#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end"/>\n </el-form-item>\n </el-col>\n#elseif($field.formType == 'select')\n <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" prop="${field.attrName}">\n <el-select v-model="form.${field.attrName}" placeholder="请选择#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end">\n #if($field.fieldDict)\n <el-option :value="item.value" :label="item.label" v-for="(item, index) in ${field.fieldDict}" :key="index"></el-option>\n #end\n #if(!$field.fieldDict)\n <el-option label="请选择">0</el-option>\n #end\n </el-select>\n </el-form-item>\n </el-col>\n#elseif($field.formType == 'radio')\n <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" prop="${field.attrName}">\n <el-radio-group v-model="form.${field.attrName}">\n #if($field.fieldDict)\n <el-radio :label="item.value" v-for="(item, index) in ${field.fieldDict}" border :key="index">{{ item.label }}\n </el-radio>\n #else\n <el-radio label="${field.fieldComment}" border>${field.fieldComment}</el-radio>\n #end\n </el-radio-group>\n </el-form-item>\n </el-col>\n#elseif($field.formType == 'checkbox')\n <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" prop="${field.attrName}">\n <el-checkbox-group v-model="form.${field.attrName}">\n #if($field.fieldDict)\n <el-checkbox :label="item.value" v-for="(item, index) in ${field.fieldDict}" :key="index">{{ item.label }}</el-checkbox>\n #end\n #if(!$field.fieldDict)\n <el-checkbox label="启用" name="type"></el-checkbox>\n <el-checkbox label="禁用" name="type"></el-checkbox>\n #end\n </el-checkbox-group>\n </el-form-item>\n </el-col>\n#elseif($field.formType == 'date')\n <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" prop="${field.attrName}">\n <el-date-picker type="date" placeholder="请选择#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" v-model="form.${field.attrName}" :value-format="dateStr"></el-date-picker>\n </el-form-item>\n </el-col>\n#elseif($field.formType == 'datetime')\n <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" prop="${field.attrName}">\n <el-date-picker type="datetime" placeholder="请选择#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" v-model="form.${field.attrName}" :value-format="dateTimeStr"></el-date-picker>\n </el-form-item>\n </el-col>\n#elseif($field.formType == 'number')\n <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" prop="${field.attrName}">\n <el-input-number :min="1" :max="1000" v-model="form.${field.attrName}" placeholder="请输入#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end"></el-input-number>\n </el-form-item>\n </el-col>\n#elseif($field.formType == 'upload-file')\n <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" prop="${field.attrName}">\n <upload-file v-model="form.${field.attrName}"></upload-file>\n </el-form-item>\n </el-col>\n#elseif($field.formType == 'upload-img')\n <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" prop="${field.attrName}">\n <upload-img v-model:imageUrl="form.${field.attrName}"></upload-img>\n </el-form-item>\n </el-col>\n#elseif($field.formType == 'editor')\n <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" prop="${field.attrName}">\n <editor v-model:get-html="form.${field.attrName}" placeholder="请输入#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end"></editor>\n </el-form-item>\n </el-col>\n#end\n#if(!$field.formType)\n <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end" prop="${column.attrName}">\n <el-input v-model="form.${field.attrName}" placeholder="请输入#if(${field.fieldComment})${field.fieldComment}#else ${field.attrName}#end"/>\n </el-form-item>\n </el-col>\n#end\n#end\n#end\n </el-row>\n <el-row :gutter="24">\n <sc-form-table\n v-model="form.${childClassName}List"\n :addTemplate="childTemp"\n @delete="deleteChild"\n placeholder="暂无数据"\n >\n#set($ignoreColumnList = ["create_by","create_time","update_by","update_time","del_flag","tenant_id"])\n#foreach($field in $childFieldList)\n#if($field.primaryPk == '1')\n#elseif($ignoreColumnList.contains(${field.fieldName}))\n#elseif($field.attrName == $childField)\n#else \n <el-table-column label="${field.fieldComment}" prop="${field.attrName}">\n <template #default="{ row, $index }">\n <el-form-item :prop="`${childClassName}List.${$index}.${field.attrName}`" :rules="[{ required: true, trigger: 'blur' }]">\n <el-input v-model="row.${field.attrName}" style="width: 100%" />\n </el-form-item>\n </template>\n </el-table-column>\n#end\n#end\n </sc-form-table>\n </el-row>\n </el-form>\n <template #footer>\n <span class="dialog-footer">\n <el-button @click="visible = false">取消</el-button>\n <el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>\n </span>\n </template>\n </el-drawer>\n</template>\n\n<script setup lang="ts" name="${ClassName}Dialog">\nimport { useDict } from '/@/hooks/dict';\nimport { rule } from '/@/utils/validate';\nimport { useMessage } from "/@/hooks/message";\nimport { getObj, addObj, putObj, delChildObj } from '/@/api/${moduleName}/${functionName}'\nconst scFormTable = defineAsyncComponent(() => import('/@/components/FormTable/index.vue'));\nconst emit = defineEmits(['refresh']);\n\n// 定义变量内容\nconst dataFormRef = ref();\nconst visible = ref(false);\nconst loading = ref(false);\nconst detail = ref(false);\n\n// 定义字典\n#set($fieldDict=[])\n#foreach($field in $gridList)\n\t#if($field.fieldDict)\n\t\t#set($void=$fieldDict.add($field.fieldDict))\n\t#end\n#end\n#if($fieldDict)\nconst { $dict.format($fieldDict) } = useDict($dict.quotation($fieldDict))\n#end\n\n// 提交表单数据\nconst form = reactive({\n#if(!$formList.contains(${pk.attrName}))\n\t\t${pk.attrName}:'',\n#end\n#foreach($field in $formList)\n#if($field.formType == 'number')\n\t\t${field.attrName}: 0,\n#elseif($field.formType == 'checkbox')\n ${field.attrName}: [],\n#else\n\t ${field.attrName}: '',\n#end\n#end\n\t ${childClassName}List:[],\n});\n\nconst childTemp = reactive({\n #foreach($field in $childFieldList)\n ${field.attrName}: '',\n #end\n})\n\n// 定义校验规则\nconst dataRules = ref({\n#foreach($field in $formList)\n#if($field.formRequired == '1' && $field.formValidator)\n ${field.attrName}: [{required: true, message: '${field.fieldComment}不能为空', trigger: 'blur'}, { validator: rule.${field.formValidator}, trigger: 'blur' }],\n#elseif($field.formRequired == '1')\n ${field.attrName}: [{required: true, message: '${field.fieldComment}不能为空', trigger: 'blur'}],\n#elseif($field.formValidator)\n ${field.attrName}: [{ validator: rule.${field.formValidator}, trigger: 'blur' }],\n#end\n#end\n})\n\n// 打开弹窗\nconst openDialog = (id: string, isDetail: boolean) => {\n visible.value = true\n detail.value = isDetail\n form.${pk.attrName} = ''\n\n // 重置表单数据\n nextTick(() => {\n dataFormRef.value?.resetFields();\n form.${childClassName}List = [];\n });\n\n // 获取${className}信息\n if (id) {\n form.${pk.attrName} = id\n get${ClassName}Data(id)\n }\n};\n\n// 提交\nconst onSubmit = async () => {\n const valid = await dataFormRef.value.validate().catch(() => {});\n if (!valid) return false;\n\n try {\n loading.value = true;\n form.${pk.attrName} ? await putObj(form) : await addObj(form);\n useMessage().success(form.${pk.attrName} ? '修改成功' : '添加成功');\n visible.value = false;\n emit('refresh');\n } catch (err: any) {\n useMessage().error(err.msg);\n } finally {\n loading.value = false;\n }\n};\n#foreach ($field in $childFieldList)\n#if($field.primaryPk == '1')\n#set($childPkName=$field.attrName)\n#end\n#end\n// 删除子表数据\nconst deleteChild = async (obj: { $childPkName: string }) => {\n if (obj.$childPkName) {\n try {\n await delChildObj([obj.$childPkName]);\n useMessage().success('删除成功');\n } catch (err: any) {\n useMessage().error(err.msg);\n }\n }\n};\n\n// 初始化表单数据\nconst get${ClassName}Data = (id: string) => {\n // 获取数据\n getObj(id).then((res: any) => {\n Object.assign(form, res.data)\n })\n};\n\n// 暴露变量\ndefineExpose({\n openDialog\n});\n</script>
|