index.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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"
  34. :multiple="item.__config__.jnpfKey === 'currOrganize' ? true : item.searchMultiple"
  35. :ableIds="item.ableIds" :selectType="item.selectType" />
  36. <JnpfPosSelect v-if="['posSelect','currPosition'].includes(item.__config__.jnpfKey)"
  37. v-model="formData[item.id]" :placeholder="selectPrefix+item.label" :ableIds="item.ableIds"
  38. :selectType="item.selectType"
  39. :multiple="item.__config__.jnpfKey === 'currPosition' ? true : item.searchMultiple" />
  40. <JnpfUserSelect v-if="['userSelect','createUser', 'modifyUser'].includes(item.__config__.jnpfKey)"
  41. v-model="formData[item.id]" :placeholder="selectPrefix+item.label" :ableDepIds="item.ableDepIds"
  42. :ableIds="item.ableIds" :selectType="item.selectType!='custom'?'all':'custom'"
  43. :multiple="item.searchMultiple" />
  44. <JnpfUsersSelect v-if="item.__config__.jnpfKey==='usersSelect'" v-model="formData[item.id]"
  45. :placeholder="selectPrefix+item.label" :clearable="item.clearable" />
  46. <JnpfTreeSelect v-if="item.__config__.jnpfKey==='treeSelect'" v-model="formData[item.id]"
  47. :options="item.options" :props="item.props" :placeholder="selectPrefix+item.label" filterable
  48. :multiple="item.searchMultiple" />
  49. <JnpfAreaSelect v-if="item.__config__.jnpfKey==='areaSelect'" v-model="formData[item.id]"
  50. :placeholder="selectPrefix+item.label" :level="item.level" :multiple="item.searchMultiple" />
  51. <template v-if="useDateList.includes(item.__config__.jnpfKey)">
  52. <JnpfDatePicker v-model="formData[item.id]" :format='item.format' v-if="item.__config__.isFromParam" />
  53. <JnpfDateRange v-model="formData[item.id]" :format='item.format' v-else />
  54. </template>
  55. <JnpfTimeRange v-if="item.__config__.jnpfKey==='timePicker'" v-model="formData[item.id]"
  56. :format='item.format' />
  57. </u-form-item>
  58. </u-form>
  59. </template>
  60. <script>
  61. import {
  62. getDictionaryDataSelector,
  63. getDataInterfaceRes
  64. } from '@/api/common'
  65. const dyOptionsList = ['radio', 'checkbox', 'select', 'cascader', 'treeSelect'];
  66. const useSelectList = ['radio', 'checkbox', 'select'];
  67. const useInputList = ['input', 'textarea', 'text', 'link', 'billRule', 'location'];
  68. const useDateList = ['createTime', 'modifyTime', 'datePicker', 'dateCalculate'];
  69. const useArrList = ['cascader', 'address', 'numInput', 'calculate', ...useDateList]
  70. export default {
  71. props: ['formConf', 'webType', 'searchFormData'],
  72. data() {
  73. const data = {
  74. useInputList,
  75. useDateList,
  76. useSelectList,
  77. formConfCopy: this.$u.deepClone(this.formConf),
  78. formData: this.$u.deepClone(this.searchFormData),
  79. key: +new Date(),
  80. textPrefix: this.$t('common.inputTextPrefix') + ' ',
  81. selectPrefix: this.$t('common.chooseTextPrefix') + ' ',
  82. }
  83. this.initRelationForm(data.formConfCopy)
  84. this.initFormData(data.formConfCopy, data.formData)
  85. return data
  86. },
  87. watch: {
  88. searchFormData(val) {
  89. this.formData = val
  90. }
  91. },
  92. methods: {
  93. initFormData(componentList, formData) {
  94. componentList.forEach(cur => {
  95. const config = cur.__config__
  96. if (dyOptionsList.indexOf(config.jnpfKey) > -1) {
  97. if (config.dataType === 'dictionary' && config.dictionaryType) {
  98. getDictionaryDataSelector(config.dictionaryType).then(res => {
  99. cur.options = res.data.list || []
  100. this.key = +new Date()
  101. this.resetForm()
  102. })
  103. }
  104. if (config.dataType === 'dynamic' && config.propsUrl) {
  105. const query = {
  106. paramList: this.jnpf.getParamList(config.templateJson) || []
  107. };
  108. getDataInterfaceRes(config.propsUrl, query).then(res => {
  109. let list = res.data || []
  110. cur.options = Array.isArray(list) ? list : [];
  111. this.key = +new Date()
  112. this.resetForm()
  113. })
  114. }
  115. }
  116. })
  117. },
  118. initRelationForm(componentList) {
  119. componentList.forEach(cur => {
  120. const config = cur.__config__
  121. if (config.jnpfKey == 'relationFormAttr' || config.jnpfKey == 'popupAttr') {
  122. const relationKey = cur.relationField.split("_jnpfTable_")[0]
  123. componentList.forEach(item => {
  124. const noVisibility = Array.isArray(item.__config__.visibility) && !item
  125. .__config__.visibility.includes('app')
  126. if ((relationKey == item.id) && (noVisibility || !!item.__config__
  127. .noShow)) {
  128. cur.__config__.noShow = true
  129. }
  130. })
  131. }
  132. if (cur.__config__.children && cur.__config__.children.length) this.initRelationForm(cur
  133. .__config__.children)
  134. })
  135. },
  136. allCondition() {
  137. for (let key in this.formData) {
  138. if (this.formData[key] !== 0 && !this.formData[key]) this.formData[key] = undefined;
  139. if (this.formData[key] && Array.isArray(this.formData[key]) && !this.formData[key]
  140. .length) {
  141. this.formData[key] = undefined
  142. }
  143. }
  144. return this.formData
  145. },
  146. submitForm() {
  147. this.$refs.dataForm.validate(valid => {
  148. if (!valid) return
  149. for (let key in this.formData) {
  150. if (this.formData[key] !== 0 && !this.formData[key]) this.formData[key] = undefined;
  151. if (this.formData[key] && Array.isArray(this.formData[key]) && !this.formData[key]
  152. .length) {
  153. this.formData[key] = undefined
  154. }
  155. }
  156. this.$emit('submit', this.formData)
  157. })
  158. },
  159. resetForm() {
  160. this.$refs.dataForm.resetFields()
  161. }
  162. }
  163. }
  164. </script>