add-or-update.vue.ftl 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <#assign editor=false/>
  2. <template>
  3. <el-dialog v-model="visible" :title="!dataForm.${pk.attrName} ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
  4. <el-form :model="dataForm" :rules="rules" ref="dataFormRef" @keyup.enter="dataFormSubmitHandle()" label-width="120px">
  5. <#list columnList as column>
  6. <#if column.form>
  7. <#if column.formType == 'text'>
  8. <el-form-item label="${column.comment!}" prop="${column.attrName}">
  9. <el-input v-model="dataForm.${column.attrName}" placeholder="${column.comment!}"></el-input>
  10. </el-form-item>
  11. <#elseif column.formType == 'textarea'>
  12. <el-form-item label="${column.comment!}" prop="${column.attrName}">
  13. <el-input type="textarea" v-model="dataForm.${column.attrName}"></el-input>
  14. </el-form-item>
  15. <#elseif column.formType == 'editor'>
  16. <el-form-item label="${column.comment!}" prop="${column.attrName}" style="height: 400px">
  17. <WangEditor v-model="dataForm.content"></WangEditor>
  18. </el-form-item>
  19. <#assign editor=true/>
  20. <#assign editorName="${column.attrName}"/>
  21. <#elseif column.formType == 'select'>
  22. <#if column.dictName??>
  23. <el-form-item label="${column.comment!}" prop="${column.attrName}">
  24. <ren-select v-model="dataForm.${column.attrName}" dict-type="${column.dictName}" placeholder="${column.comment!}"></ren-select>
  25. </el-form-item>
  26. <#else>
  27. <el-form-item label="${column.comment!}" prop="${column.attrName}">
  28. <el-select v-model="dataForm.${column.attrName}" placeholder="请选择">
  29. <el-option label="佳缘" value="0"></el-option>
  30. </el-select>
  31. </el-form-item>
  32. </#if>
  33. <#elseif column.formType == 'radio'>
  34. <#if column.dictName??>
  35. <el-form-item label="${column.comment!}" prop="${column.attrName}">
  36. <ren-radio-group v-model="dataForm.${column.attrName}" dict-type="${column.dictName}"></ren-radio-group>
  37. </el-form-item>
  38. <#else>
  39. <el-form-item label="${column.comment!}" prop="${column.attrName}">
  40. <el-radio-group v-model="dataForm.${column.attrName}">
  41. <el-radio :label="0">启用</el-radio>
  42. <el-radio :label="1">禁用</el-radio>
  43. </el-radio-group>
  44. </el-form-item>
  45. </#if>
  46. <#elseif column.formType == 'checkbox'>
  47. <el-form-item label="${column.comment!}" prop="${column.attrName}">
  48. <el-checkbox-group v-model="dataForm.${column.attrName}">
  49. <el-checkbox label="启用" name="type"></el-checkbox>
  50. <el-checkbox label="禁用" name="type"></el-checkbox>
  51. </el-checkbox-group>
  52. </el-form-item>
  53. <#elseif column.formType == 'date'>
  54. <el-form-item label="${column.comment!}" prop="${column.attrName}">
  55. <el-date-picker type="date" placeholder="${column.comment!}" v-model="dataForm.${column.attrName}" format="YYYY-MM-DD" value-format="YYYY-MM-DD"></el-date-picker>
  56. </el-form-item>
  57. <#elseif column.formType == 'datetime'>
  58. <el-form-item label="${column.comment!}" prop="${column.attrName}">
  59. <el-date-picker type="datetime" placeholder="${column.comment!}" v-model="dataForm.${column.attrName}" format="YYYY-MM-DD hh:mm:ss" value-format="YYYY-MM-DD hh:mm:ss"></el-date-picker>
  60. </el-form-item>
  61. <#else>
  62. <el-form-item label="${column.comment!}" prop="${column.attrName}">
  63. <el-input v-model="dataForm.${column.attrName}" placeholder="${column.comment!}"></el-input>
  64. </el-form-item>
  65. </#if>
  66. </#if>
  67. </#list>
  68. </el-form>
  69. <template v-slot:footer>
  70. <el-button @click="visible = false">{{ $t("cancel") }}</el-button>
  71. <el-button type="primary" @click="dataFormSubmitHandle()">{{ $t("confirm") }}</el-button>
  72. </template>
  73. </el-dialog>
  74. </template>
  75. <script lang="ts" setup>
  76. import { reactive, ref } from "vue";
  77. import baseService from "@/service/baseService";
  78. <#if editor>
  79. import WangEditor from "@/components/wang-editor/index.vue";
  80. </#if>
  81. import { useI18n } from "vue-i18n";
  82. import { ElMessage } from "element-plus";
  83. const { t } = useI18n();
  84. const emit = defineEmits(["refreshDataList"]);
  85. const visible = ref(false);
  86. const dataFormRef = ref();
  87. const dataForm = reactive({
  88. <#list columnList as column>
  89. ${column.attrName}: "",
  90. </#list>
  91. });
  92. const rules = ref({
  93. <#list columnList as column>
  94. <#if column.form && column.required>
  95. ${column.attrName}: [{ required: true, message: t("validate.required"), trigger: "blur" }],
  96. </#if>
  97. </#list>
  98. });
  99. const init = (${pk.attrName}?: number) => {
  100. visible.value = true;
  101. dataForm.${pk.attrName} = "";
  102. // 重置表单数据
  103. if (dataFormRef.value) {
  104. dataFormRef.value.resetFields();
  105. }
  106. if (${pk.attrName}) {
  107. getInfo(${pk.attrName});
  108. }
  109. };
  110. // 获取信息
  111. const getInfo = (${pk.attrName}: number) => {
  112. baseService.get("/${moduleName}/${classname}/" + ${pk.attrName}).then((res) => {
  113. Object.assign(dataForm, res.data);
  114. });
  115. };
  116. // 表单提交
  117. const dataFormSubmitHandle = () => {
  118. dataFormRef.value.validate((valid: boolean) => {
  119. if (!valid) {
  120. return false;
  121. }
  122. (!dataForm.${pk.attrName} ? baseService.post : baseService.put)("/${moduleName}/${classname}", dataForm).then((res) => {
  123. ElMessage.success({
  124. message: t("prompt.success"),
  125. duration: 500,
  126. onClose: () => {
  127. visible.value = false;
  128. emit("refreshDataList");
  129. }
  130. });
  131. });
  132. });
  133. };
  134. defineExpose({
  135. init
  136. });
  137. </script>