form.request.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. /**
  2. * Created by RaoMeng on 2020/12/11
  3. * Desc: 通用表单数据处理
  4. */
  5. import { isObjEmpty, isObjNull } from './common.util'
  6. import BillGroupModel from '../../model/common/BillGroupModel'
  7. import BillModel from '../../model/common/BillModel'
  8. import { message } from 'antd'
  9. export function analysisFormData (formData, isDetail) {
  10. let billGroupList = []
  11. if (!isObjEmpty(formData)) {
  12. const formList = formData.formList
  13. const gridList = formData.gridList
  14. /**
  15. * 主表数据
  16. */
  17. if (!isObjEmpty(formList)) {
  18. formList.forEach((formGroup, formIndex) => {
  19. const billGroup = getBillGroup(formGroup, billGroupList.length,
  20. isDetail)
  21. billGroup.isForm = true
  22. billGroupList.push(billGroup)
  23. })
  24. }
  25. /**
  26. * 从表数据
  27. */
  28. if (!isObjEmpty(gridList)) {
  29. gridList.forEach((gridGroup, gridIndex) => {
  30. //单个从表的明细列表
  31. const gridDetailList = gridGroup.fieldList
  32. if (!isObjEmpty(gridDetailList)) {
  33. gridDetailList.forEach((gridDetail, gridDetailIndex) => {
  34. const billGroup = getBillGroup({
  35. ...gridGroup,
  36. fieldList: gridDetail,
  37. }, billGroupList.length, isDetail)
  38. if (!isDetail && gridDetailIndex === (gridDetailList.length - 1)) {
  39. billGroup.lastInType = true
  40. } else {
  41. billGroup.lastInType = false
  42. }
  43. billGroup.isForm = false
  44. billGroupList.push(billGroup)
  45. })
  46. }
  47. })
  48. }
  49. }
  50. return billGroupList
  51. }
  52. export function getBillGroup (groupItem, groupIndex, isDetail) {
  53. let billGroup = new BillGroupModel()
  54. billGroup.group = groupItem.groupTitle
  55. billGroup.isForm = groupItem.isForm
  56. billGroup.keyField = groupItem.keyField
  57. billGroup.billCaller = groupItem.groupCaller
  58. billGroup.groupIndex = groupIndex
  59. let showBillFields = [], hideBillFields = []
  60. if (!isObjEmpty(groupItem.fieldList)) {
  61. groupItem.fieldList.forEach((fieldItem, filedIndex) => {
  62. let billModel = new BillModel()
  63. billModel.groupIndex = groupIndex
  64. // billModel.childIndex = filedIndex
  65. billModel.appwidth = fieldItem.appwidth
  66. billModel.length = fieldItem.length
  67. billModel.isdefault = fieldItem.isdefault
  68. billModel.caption = fieldItem.caption
  69. billModel.type = fieldItem.type//前端类型
  70. billModel.sourcetype = fieldItem.sourcetype//字段原类型
  71. billModel.readOnly = (fieldItem.readOnly || isDetail) ? 'T' : 'F'
  72. billModel.field = fieldItem.field
  73. billModel.logicType = fieldItem.logicType
  74. billModel.allowBlank = (fieldItem.allowBlank || isDetail) ? 'T' : 'F'
  75. billModel.value = fieldItem.value
  76. billModel.display = fieldItem.display
  77. billModel.defValue = fieldItem.defValue
  78. billModel.localDatas = fieldItem.localDatas
  79. if (isObjEmpty(billModel.value) &&
  80. !isObjEmpty(billModel.defValue, billModel.localDatas)) {
  81. billModel.localDatas.forEach(item => {
  82. if (item.display === billModel.defValue) {
  83. billModel.value = item.value
  84. billModel.display = item.display
  85. }
  86. })
  87. }
  88. if (billModel.isdefault) {
  89. showBillFields.push(billModel)
  90. } else {
  91. hideBillFields.push(billModel)
  92. }
  93. })
  94. }
  95. billGroup.showBillFields = showBillFields
  96. billGroup.hideBillFields = hideBillFields
  97. return billGroup
  98. }
  99. /**
  100. * 解析拼接单据数据
  101. * @param billGroupModelList
  102. * @returns {{form: *, grid: (null|[])}}
  103. */
  104. export function getFormAndGrid (billGroupModelList) {
  105. if (!isObjEmpty(billGroupModelList)) {
  106. const fields = analysisFields(billGroupModelList)
  107. let formStore = analysisForm(fields.formFields)
  108. if (isObjNull(formStore)) {
  109. return
  110. }
  111. let gridStoreList = analysisGrid(fields.gridGroupFields)
  112. if (isObjNull(gridStoreList)) {
  113. return
  114. }
  115. return {
  116. form: formStore,
  117. grid: gridStoreList,
  118. formFields: fields.formFields,
  119. gridFields: fields.gridGroupFields,
  120. }
  121. }
  122. }
  123. /**
  124. * 返回主表与从表字段配置列表
  125. * @param billGroupModelList
  126. * @returns {{formFields: [], gridGroupFields: []}}
  127. */
  128. function analysisFields (billGroupModelList) {
  129. let formFields = [], gridGroupFields = []
  130. for (let i = 0; i < billGroupModelList.length; i++) {
  131. let billGroup = billGroupModelList[i]
  132. if (isObjNull(billGroup)) {
  133. continue
  134. }
  135. if (billGroup.isForm) {
  136. if (!isObjEmpty(billGroup.showBillFields)) {
  137. formFields = formFields.concat(billGroup.showBillFields)
  138. }
  139. if (!isObjEmpty(billGroup.hideBillFields)) {
  140. formFields = formFields.concat(billGroup.hideBillFields)
  141. }
  142. } else {
  143. let gridFields = []
  144. if (!isObjEmpty(billGroup.showBillFields)) {
  145. gridFields = gridFields.concat(billGroup.showBillFields)
  146. }
  147. if (!isObjEmpty(billGroup.hideBillFields)) {
  148. gridFields = gridFields.concat(billGroup.hideBillFields)
  149. }
  150. gridGroupFields.push(gridFields)
  151. }
  152. }
  153. return {
  154. formFields,
  155. gridGroupFields,
  156. }
  157. }
  158. /**
  159. * 判断主表字段必填情况,拼接主表字段
  160. * @param formFields
  161. * @returns {null}
  162. */
  163. function analysisForm (formFields) {
  164. if (!isObjNull(formFields)) {
  165. let formStore = {}
  166. for (let i = 0; i < formFields.length; i++) {
  167. let billModel = formFields[i]
  168. if (isObjNull(billModel)) {
  169. continue
  170. }
  171. if (isObjEmpty(getValue(billModel)) &&
  172. (billModel.allowBlank === 'necessaryField'
  173. || billModel.allowBlank === 'F')) {
  174. message.error(`${billModel.caption}为必填项`)
  175. return null
  176. }
  177. //Todo 附件上传
  178. formStore[billModel.field] = getDisplay(billModel)
  179. }
  180. return formStore
  181. } else {
  182. return null
  183. }
  184. }
  185. function analysisGrid (gridBillMap) {
  186. let gridStoreList = []
  187. if (!isObjNull(gridBillMap)) {
  188. for (let i = 0; i < gridBillMap.length; i++) {
  189. let gridFields = gridBillMap[i]
  190. if (!isObjEmpty(gridFields)) {
  191. let gridStore = {}
  192. for (let j = 0; j < gridFields.length; j++) {
  193. let billModel = gridFields[j]
  194. if (isObjEmpty(getValue(billModel))
  195. && (billModel.allowBlank === 'necessaryField'
  196. || billModel.allowBlank === 'F')) {
  197. message.error(`${billModel.caption}为必填项`)
  198. return null
  199. }
  200. //Todo 附件上传
  201. gridStore[billModel.field] = getDisplay(billModel)
  202. }
  203. gridStoreList.push(gridStore)
  204. }
  205. }
  206. }
  207. return gridStoreList
  208. }
  209. function getValue (billModel) {
  210. return billModel.value || billModel.defValue || ''
  211. }
  212. function getDisplay (billModel) {
  213. return billModel.display || getValue(billModel)
  214. }