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="hasFormP('${beforeVmodel}')"
  20. #elseif($mastKey == 'relationFormAttr' || $mastKey == 'popupAttr') v-if="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 '@jnpf/ui/modal';
  65. import { useMessage, usePermission } from '@jnpf/hooks';
  66. import { useUserStore } from '@vben/stores';
  67. import type { FormInstance } from 'ant-design-vue';
  68. import { JnpfRelationForm } from '@jnpf/ui';
  69. import { getDictionaryDataSelector } from '#/api/systemData/dictionary';
  70. import { getDataInterfaceRes } from '#/api/systemData/dataInterface';
  71. import { thousandsFormat , getDateTimeUnit, getTimeUnit} from '@jnpf/utils';
  72. import dayjs from 'dayjs';
  73. import { $t } from '#/locales';
  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 [registerModal, { openModal, setModalProps }] = useModal();
  83. const formRef = ref<FormInstance>();
  84. const state = reactive<State>({
  85. #createStateParam()
  86. title: '',
  87. });
  88. const { title, dataRule, dataForm, optionsObj, ableAll, maskConfig } = toRefs(state);
  89. // 表单权限
  90. const { hasFormP } = usePermission();
  91. defineExpose({ init });
  92. function init(data) {
  93. state.title = !data.id || data.id === 'jnpfAdd' ? $t('common.add2Text','新增') : $t('common.editText','编辑');
  94. setFormProps({ continueLoading: false });
  95. openModal();
  96. ##主表options
  97. #foreach($fieLdsModel in ${context.fields})
  98. #set($html = $fieLdsModel.formColumnModel.fieLdsModel)
  99. #set($vModel = "${html.vModel}")
  100. #set($config = $html.config)
  101. #set($dataType = "$!{config.dataType}")
  102. #if($!{config.dataType}=='dictionary'||$!{config.dataType}=='dynamic')
  103. get${vModel}Options();
  104. #end
  105. #end
  106. ##副表options
  107. #foreach($ColumnFieldModel in ${context.mastTable})
  108. #set($html =${ColumnFieldModel.formMastTableModel})
  109. #set($vModel = "${html.vModel}")
  110. #set($config = $html.mastTable.fieLdsModel.config)
  111. #if($!{config.dataType}=='dictionary'||$!{config.dataType}=='dynamic')
  112. get${vModel}Options();
  113. #end
  114. #end
  115. nextTick(() => {
  116. getForm().resetFields();
  117. state.dataForm = JSON.parse(JSON.stringify(data.formData));
  118. state.dataForm.id = !data.id || data.id === 'jnpfAdd' ? '' :data.id;
  119. });
  120. }
  121. function getForm() {
  122. const form = unref(formRef);
  123. if (!form) {
  124. throw new Error('form is null!');
  125. }
  126. return form;
  127. }
  128. async function handleSubmit() {
  129. try {
  130. const values = await getForm()?.validate();
  131. if (!values) return;
  132. setFormProps({ continueLoading: true });
  133. const formMethod = state.dataForm.id ? update : create;
  134. formMethod(state.dataForm)
  135. .then((res) => {
  136. createMessage.success(res.msg);
  137. setFormProps({ continueLoading: false });
  138. setFormProps({ open: false });
  139. emit('reload');
  140. })
  141. .catch(() => {
  142. setFormProps({ continueLoading: false });
  143. });
  144. } catch (_) {}
  145. }
  146. function setFormProps(data) {
  147. setModalProps(data);
  148. }
  149. function changeLoading(loading) {
  150. setModalProps({ loading });
  151. }
  152. async function onClose() {
  153. if (state.isContinue) emit('reload');
  154. return true;
  155. }
  156. //option方法
  157. #GetDataOptionsMethod()
  158. ##动态时间处理
  159. #GetRelationDate()
  160. </script>