ExtraForm.vue.vm 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. #parse("PublicMacro/FormMarco.vm")
  2. ## 行内-弹窗编辑生成表单字段
  3. #macro(FormRenderingExtra)
  4. #foreach($html in ${context.columnList})
  5. #set($vModel = "${html.vModel}")
  6. #set($beforeVmodel = "${html.vModel}")
  7. #set($mastModel="${context.formModel}.${beforeVmodel}")
  8. #set($config = $html.config)
  9. #set($mastKey = "${config.jnpfKey}")
  10. #set($show = $config.noShow)
  11. #set($pcshow = $config.pc)
  12. #set($startTime=${html.startTime})
  13. #set($endTime=${html.endTime})
  14. #if(${mastKey}=='datePicker'||${mastKey}=='timePicker')
  15. #GetStartAndEndTime($mastKey,$config,$html,$startTime,$endTime)
  16. #end
  17. #if($show == false && $pcshow == true && !$html.prop.toLowerCase().startsWith("tablefield"))
  18. <a-col :span="24" class="ant-col-item" #if($context.isFlow) v-if="judgeShow('${beforeVmodel}')"
  19. #elseif(${context.columnData.useFormPermission}) #if(${vModel}) v-if="jnpf.hasFormP('${beforeVmodel}')"
  20. #elseif($mastKey == 'relationFormAttr' || $mastKey == 'popupAttr') v-if="jnpf.hasFormP('${html.relationField}')" #end #end >
  21. <a-form-item #if($config.showLabel == true) #if($config.labelWidth && ${context.labelPosition}!="top") :labelCol="{ style: { width: '${config.labelWidth}px' } }"#end
  22. #else :labelCol="{ style: { width: '0px' } }"#end #if($vModel) name="${beforeVmodel}" #end>
  23. <template #label>#if(${config.labelI18nCode}) {{t('${config.labelI18nCode}','${config.label}')}} #else${config.label} #end
  24. #if((${config.label} || ${config.labelI18nCode}) && ${context.labelSuffix})${context.labelSuffix}#end
  25. #if((${config.label} || ${config.labelI18nCode}) && (${config.tipLabel} || ${config.tipLabelI18nCode}))
  26. <BasicHelp #if(${config.tipLabelI18nCode}) :text="t('${config.tipLabelI18nCode}','${config.tipLabel}')" #else text="${config.tipLabel}" #end />#end</template>
  27. #CreateFieldTag($mastKey,$html,$config,$mastModel,$beforeVmodel,-1,false)
  28. </a-form-item>
  29. </a-col>
  30. #end
  31. #end
  32. #end
  33. <template>
  34. ##
  35. ##<!-- 普通弹窗 -->
  36. <BasicModal v-bind="$attrs" @register="registerModal" :title="title" width="${context.generalWidth}"
  37. #if(${context.cancelButtonText} || ${context.cancelButtonTextI18nCode})
  38. #if(${context.cancelButtonTextI18nCode}):cancelText="t('${context.cancelButtonTextI18nCode}','${context.cancelButtonText}')"
  39. #else cancelText="${context.CancelButton}"#end
  40. #end
  41. #if(${context.confirmButtonText} || ${context.confirmButtonTextI18nCode})
  42. #if(${context.confirmButtonTextI18nCode}):okText="t('${context.confirmButtonTextI18nCode}','${context.confirmButtonText}')"
  43. #else okText="${context.confirmButtonText}"#end
  44. #end
  45. :minHeight="100" @ok="handleSubmit(0)" @continue="handleSubmit(1)" :closeFunc="onClose">
  46. <a-row class="dynamic-form ${context.formStyle}">
  47. <a-form :colon="false" size="${context.size}" layout=#if(${context.labelPosition}=="top") "vertical" #else "horizontal" #end
  48. labelAlign=#if(${context.labelPosition}=="right") "right" #else "left" #end
  49. #if(${context.labelPosition}!="top") :labelCol="{ style: { width: '${context.labelWidth}px' } }" #end
  50. :model="dataForm" :rules="dataRule" ref="formRef" class="${context.formStyle}">
  51. <a-row :gutter="#if(${context.formStyle}=='word-form')0#else${context.gutter}#end">
  52. <!-- 具体表单 -->
  53. #FormRenderingExtra()
  54. <!-- 表单结束 -->
  55. </a-row>
  56. </a-form>
  57. </a-row>
  58. </BasicModal>
  59. ##<!-- 普通弹窗 -->
  60. </template>
  61. <script lang="ts" setup>
  62. import { create, update, getInfo } from './helper/api';
  63. import { reactive, toRefs, nextTick, ref, unref, computed } from 'vue';
  64. import { BasicModal, useModal } from '@/components/Modal';
  65. import { useMessage } from '@/hooks/web/useMessage';
  66. import { useUserStore } from '@/store/modules/user';
  67. import type { FormInstance } from 'ant-design-vue';
  68. import { JnpfRelationForm } from '@/components/Jnpf';
  69. import { getDictionaryDataSelector } from '@/api/systemData/dictionary';
  70. import { getDataInterfaceRes } from '@/api/systemData/dataInterface';
  71. import { thousandsFormat , getDateTimeUnit, getTimeUnit} from '@/utils/jnpf';
  72. import dayjs from 'dayjs';
  73. import { useI18n } from '@/hooks/web/useI18n';
  74. interface State {
  75. #createStateParam("any")
  76. title: string;
  77. }
  78. const emit = defineEmits(['reload']);
  79. const userStore = useUserStore();
  80. const userInfo = userStore.getUserInfo;
  81. const { createMessage } = useMessage();
  82. const { t } = useI18n();
  83. const [registerModal, { openModal, setModalProps }] = useModal();
  84. const formRef = ref<FormInstance>();
  85. const state = reactive<State>({
  86. #createStateParam()
  87. title: '',
  88. });
  89. const { title, dataRule, dataForm, optionsObj, ableAll, maskConfig } = toRefs(state);
  90. defineExpose({ init });
  91. function init(data) {
  92. state.title = !data.id || data.id === 'jnpfAdd' ? t('common.add2Text','新增') : t('common.editText','编辑');
  93. setFormProps({ continueLoading: false });
  94. openModal();
  95. ##主表options
  96. #foreach($fieLdsModel in ${context.fields})
  97. #set($html = $fieLdsModel.formColumnModel.fieLdsModel)
  98. #set($vModel = "${html.vModel}")
  99. #set($config = $html.config)
  100. #set($dataType = "$!{config.dataType}")
  101. #if($!{config.dataType}=='dictionary'||$!{config.dataType}=='dynamic')
  102. get${vModel}Options();
  103. #end
  104. #end
  105. ##副表options
  106. #foreach($ColumnFieldModel in ${context.mastTable})
  107. #set($html =${ColumnFieldModel.formMastTableModel})
  108. #set($vModel = "${html.vModel}")
  109. #set($config = $html.mastTable.fieLdsModel.config)
  110. #if($!{config.dataType}=='dictionary'||$!{config.dataType}=='dynamic')
  111. get${vModel}Options();
  112. #end
  113. #end
  114. nextTick(() => {
  115. getForm().resetFields();
  116. state.dataForm = JSON.parse(JSON.stringify(data.formData));
  117. state.dataForm.id = !data.id || data.id === 'jnpfAdd' ? '' :data.id;
  118. });
  119. }
  120. function getForm() {
  121. const form = unref(formRef);
  122. if (!form) {
  123. throw new Error('form is null!');
  124. }
  125. return form;
  126. }
  127. async function handleSubmit() {
  128. try {
  129. const values = await getForm()?.validate();
  130. if (!values) return;
  131. setFormProps({ continueLoading: true });
  132. const formMethod = state.dataForm.id ? update : create;
  133. formMethod(state.dataForm)
  134. .then((res) => {
  135. createMessage.success(res.msg);
  136. setFormProps({ continueLoading: false });
  137. setFormProps({ open: false });
  138. emit('reload');
  139. })
  140. .catch(() => {
  141. setFormProps({ continueLoading: false });
  142. });
  143. } catch (_) {}
  144. }
  145. function setFormProps(data) {
  146. setModalProps(data);
  147. }
  148. function changeLoading(loading) {
  149. setModalProps({ loading });
  150. }
  151. async function onClose() {
  152. if (state.isContinue) emit('reload');
  153. return true;
  154. }
  155. //option方法
  156. #GetDataOptionsMethod()
  157. ##动态时间处理
  158. #GetRelationDate()
  159. </script>