index.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <template>
  2. <u-form :model="formData" ref="dataForm" :errorType="['toast']" label-position="left" label-width="150">
  3. <u-form-item :label="item.label" :prop="item.id" v-for="(item, i) in formConfCopy" :key="i">
  4. <JnpfInput v-if="useInputList.includes(item.__config__.jnpfKey)" input-align='right'
  5. v-model="formData[item.id]" :placeholder="textPrefix+item.label" clearable />
  6. <template v-if="['inputNumber','calculate'].includes(item.__config__.jnpfKey)">
  7. <JnpfInputNumber v-model="formData[item.id]" :precision="item.precision"
  8. :placeholder="textPrefix+item.__config__.label" v-if="item.__config__.isFromParam" />
  9. <JnpfNumberRange v-model="formData[item.id]"
  10. :precision="!item.precision && item.__config__.jnpfKey=='calculate'?0:item.precision" v-else />
  11. </template>
  12. <template v-if="['rate', 'slider'].includes(item.__config__.jnpfKey)">
  13. <JnpfNumberRange v-model="formData[item.id]" :precision="item.allowHalf ? 1 : 0" />
  14. </template>
  15. <JnpfSelect v-if="useSelectList.includes(item.__config__.jnpfKey)" v-model="formData[item.id]"
  16. :placeholder="selectPrefix+item.label" :options="item.options" :props="item.props"
  17. :multiple="item.searchMultiple" :key="key" filterable />
  18. <JnpfCascader v-if="item.__config__.jnpfKey==='cascader'" v-model="formData[item.id]"
  19. :placeholder="selectPrefix+item.label" :options="item.options" :props="item.props" filterable
  20. :showAllLevels="item.showAllLevels" :multiple="item.searchMultiple" />
  21. <JnpfAutoComplete v-if="item.__config__.jnpfKey==='autoComplete'" v-model="formData[item.id]"
  22. :interfaceName="item.interfaceName" :placeholder="selectPrefix+item.label"
  23. :interfaceId="item.interfaceId" :total="item.total" :templateJson="item.templateJson"
  24. :formData='formData' :relationField="item.relationField" :propsValue="item.propsValue"
  25. :clearable='item.clearable' />
  26. <JnpfGroupSelect v-if="item.__config__.jnpfKey==='groupSelect'" v-model="formData[item.id]"
  27. :vModel='item.id' :multiple="item.searchMultiple" :disabled="item.disabled"
  28. :placeholder="selectPrefix+item.label" :ableIds="item.ableIds" :selectType="item.selectType" />
  29. <JnpfRoleSelect v-if="item.__config__.jnpfKey==='roleSelect'" v-model="formData[item.id]"
  30. :multiple="item.searchMultiple" :disabled="item.disabled" :placeholder="selectPrefix+item.label"
  31. :ableIds="item.ableIds" :selectType="item.selectType" />
  32. <JnpfOrganizeSelect v-if="['organizeSelect','currOrganize'].includes(item.__config__.jnpfKey)"
  33. v-model="formData[item.id]" :placeholder="selectPrefix+item.label" :multiple="item.searchMultiple"
  34. :ableIds="item.ableIds" :selectType="item.selectType" />
  35. <JnpfDepSelect v-if="['depSelect','currDept'].includes(item.__config__.jnpfKey)" v-model="formData[item.id]"
  36. :placeholder="selectPrefix+item.label" :ableIds="item.ableIds" :selectType="item.selectType"
  37. :multiple="item.searchMultiple" />
  38. <JnpfPosSelect v-if="['posSelect','currPosition'].includes(item.__config__.jnpfKey)"
  39. v-model="formData[item.id]" :placeholder="selectPrefix+item.label" :ableIds="item.ableIds"
  40. :selectType="item.selectType" :multiple="item.searchMultiple" />
  41. <JnpfUserSelect v-if="['userSelect','createUser', 'modifyUser'].includes(item.__config__.jnpfKey)"
  42. v-model="formData[item.id]" :placeholder="selectPrefix+item.label" :ableDepIds="item.ableDepIds"
  43. :ableIds="item.ableIds" :selectType="item.selectType!='custom'?'all':'custom'"
  44. :multiple="item.searchMultiple" />
  45. <JnpfUsersSelect v-if="item.__config__.jnpfKey==='usersSelect'" v-model="formData[item.id]"
  46. :multiple="item.searchMultiple" :placeholder="selectPrefix+item.label" :selectType="item.selectType"
  47. :ableIds="item.ableIds" :clearable="item.clearable" />
  48. <JnpfTreeSelect v-if="item.__config__.jnpfKey==='treeSelect'" v-model="formData[item.id]"
  49. :options="item.options" :props="item.props" :placeholder="selectPrefix+item.label" filterable
  50. :multiple="item.searchMultiple" />
  51. <JnpfAreaSelect v-if="item.__config__.jnpfKey==='areaSelect'" v-model="formData[item.id]"
  52. :placeholder="selectPrefix+item.label" :level="item.level" :multiple="item.searchMultiple" />
  53. <template v-if="useDateList.includes(item.__config__.jnpfKey)||item.__config__.jnpfKey==='datePicker'">
  54. <JnpfDatePicker v-model="formData[item.id]" :format='item.format' v-if="item.__config__.isFromParam" />
  55. <JnpfDateRange v-model="formData[item.id]" :format='item.format' v-else />
  56. </template>
  57. <JnpfTimeRange v-if="item.__config__.jnpfKey==='timePicker'" v-model="formData[item.id]"
  58. :format='item.format' />
  59. </u-form-item>
  60. </u-form>
  61. </template>
  62. <script>
  63. import {
  64. getDictionaryDataSelector,
  65. getDataInterfaceRes
  66. } from '@/api/common'
  67. const dyOptionsList = ['radio', 'checkbox', 'select', 'cascader', 'treeSelect'];
  68. const useSelectList = ['radio', 'checkbox', 'select'];
  69. const useInputList = ['input', 'textarea', 'text', 'link', 'billRule', 'location'];
  70. const useDateList = ['createTime', 'modifyTime'];
  71. const useArrList = ['cascader', 'address', 'numInput', 'calculate', ...useDateList]
  72. export default {
  73. props: ['formConf', 'webType', 'searchFormData'],
  74. data() {
  75. const data = {
  76. useInputList,
  77. useDateList,
  78. useSelectList,
  79. formConfCopy: this.$u.deepClone(this.formConf),
  80. formData: this.$u.deepClone(this.searchFormData),
  81. key: +new Date(),
  82. textPrefix: this.$t('common.inputTextPrefix') + ' ',
  83. selectPrefix: this.$t('common.chooseTextPrefix') + ' ',
  84. }
  85. this.initRelationForm(data.formConfCopy)
  86. this.initFormData(data.formConfCopy, data.formData)
  87. return data
  88. },
  89. watch: {
  90. searchFormData(val) {
  91. this.formData = val
  92. }
  93. },
  94. methods: {
  95. initFormData(componentList, formData) {
  96. componentList.forEach(cur => {
  97. const config = cur.__config__
  98. if (dyOptionsList.indexOf(config.jnpfKey) > -1) {
  99. if (config.dataType === 'dictionary' && config.dictionaryType) {
  100. getDictionaryDataSelector(config.dictionaryType).then(res => {
  101. cur.options = res.data.list || []
  102. this.key = +new Date()
  103. this.resetForm()
  104. })
  105. }
  106. if (config.dataType === 'dynamic' && config.propsUrl) {
  107. const query = {
  108. paramList: this.jnpf.getParamList(config.templateJson) || []
  109. };
  110. getDataInterfaceRes(config.propsUrl, query).then(res => {
  111. let list = res.data || []
  112. cur.options = Array.isArray(list) ? list : [];
  113. this.key = +new Date()
  114. this.resetForm()
  115. })
  116. }
  117. }
  118. })
  119. },
  120. initRelationForm(componentList) {
  121. componentList.forEach(cur => {
  122. const config = cur.__config__
  123. if (config.jnpfKey == 'relationFormAttr' || config.jnpfKey == 'popupAttr') {
  124. const relationKey = cur.relationField.split("_jnpfTable_")[0]
  125. componentList.forEach(item => {
  126. const noVisibility = Array.isArray(item.__config__.visibility) && !item
  127. .__config__.visibility.includes('app')
  128. if ((relationKey == item.id) && (noVisibility || !!item.__config__
  129. .noShow)) {
  130. cur.__config__.noShow = true
  131. }
  132. })
  133. }
  134. if (cur.__config__.children && cur.__config__.children.length) this.initRelationForm(cur
  135. .__config__.children)
  136. })
  137. },
  138. allCondition() {
  139. for (let key in this.formData) {
  140. if (!this.formData[key]) this.formData[key] = undefined
  141. if (this.formData[key] && Array.isArray(this.formData[key]) && !this.formData[key]
  142. .length) {
  143. this.formData[key] = undefined
  144. }
  145. }
  146. return this.formData
  147. },
  148. submitForm() {
  149. this.$refs.dataForm.validate(valid => {
  150. if (!valid) return
  151. for (let key in this.formData) {
  152. if (!this.formData[key]) this.formData[key] = undefined
  153. if (this.formData[key] && Array.isArray(this.formData[key]) && !this.formData[key]
  154. .length) {
  155. this.formData[key] = undefined
  156. }
  157. }
  158. this.$emit('submit', this.formData)
  159. })
  160. },
  161. resetForm() {
  162. this.$refs.dataForm.resetFields()
  163. }
  164. }
  165. }
  166. </script>