华西海圻ELN前端工程
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

609 lines
32 KiB

3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
  1. <template>
  2. <div>
  3. <LineLabel v-if="label" :label="label" />
  4. <div v-for="(item, index) in formConfig" :key="index">
  5. <template v-if="item.type === 'cardItem'">
  6. <div class="grid-container">
  7. <div v-for="(sItem, key) in item.config" class="form-item"
  8. :class="sItem.span == 1 ? 'full-row' : ''" :key="key">
  9. <template v-if="sItem.type === 'input' || sItem.type === 'inputNumber'">
  10. <div class="form-title">{{ $t(sItem.label) }}</div>
  11. <HandleFormItem :field-item-label="fieldItemLabel" @blur="onBlur(key, $event)" :item="sItem"
  12. v-model="formFields[key]" :field-key="prefixKey + '_' + key" @copy="onCopy(sItem, key)"
  13. :error="errors[key]" @update:error="errors[key] = false"
  14. :type="sItem.type"
  15. :orange-bg="orangeBgFields[key]" />
  16. </template>
  17. </div>
  18. </div>
  19. </template>
  20. <template v-else-if="item.type === 'conditionItem'">
  21. <div class="form-item ">
  22. <div class="form-title fs-16" v-if="item.label">{{ $t(item.label) }}</div>
  23. <div v-for="(sItem, key) in item.config" class="c-Item grid-container">
  24. <div class="p-r-20">
  25. <div class="form-title">{{ $t(sItem.label) }}</div>
  26. <div class="flex flex1">
  27. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  28. type="select" :item="sItem" v-model="formFields[key]" @copy="onCopy(sItem, key)"
  29. @change="(e, type) => onSelectChange(key, e, type)" :error="errors[key]"
  30. @update:error="errors[key] = false" :orange-bg="orangeBgFields[key]" />
  31. </div>
  32. </div>
  33. <div class="p-l-20">
  34. <div v-show="isShowOther(formFields[key])">
  35. <div class="form-title" >{{ sItem.otherLabel ? $t(sItem.otherLabel) :
  36. $t("template.common.other") }}</div>
  37. <div class="flex flex1">
  38. <HandleFormItem :field-item-label="fieldItemLabel"
  39. :field-key="prefixKey + '_' + sItem.otherCode" @blur="onBlur(key, $event)"
  40. :item="getOtherItem(sItem)" v-model="formFields[sItem.otherCode]"
  41. @copy="onCopy(sItem, key)" :error="errors[sItem.otherCode]"
  42. @update:error="errors[sItem.otherCode] = false" />
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. </div>
  48. </template>
  49. <template v-else-if="item.type === 'attachment'">
  50. <div class="form-item ">
  51. <div class="form-title fs-16" v-if="item.label">{{ $t(item.label) }}</div>
  52. <div v-for="(sItem, key) in item.config" class="c-Item grid-container">
  53. <div class="p-r-20">
  54. <div class="form-title">{{ $t(sItem.label) }}</div>
  55. <div class="flex flex1">
  56. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  57. type="attachment" :item="sItem" :value="formFields[key]" @copy="onCopy(sItem, key)"
  58. @change="(e) => onAttachmentChange(key, e)" :error="errors[key]"
  59. @update:error="errors[key] = false" :orange-bg="orangeBgFields[key]" />
  60. </div>
  61. </div>
  62. </div>
  63. </div>
  64. </template>
  65. <template v-else-if="item.type === 'cellItem'">
  66. <div class="form-item ">
  67. <div class="form-title fs-16" v-if="item.label">{{ $t(item.label) }}</div>
  68. <div class="grid-container gap2">
  69. <div v-for="(sItem, key) in item.config" class="c-Item" :class="getSpanClass(sItem)" :key="key">
  70. <div class="form-title" v-if="sItem.label">{{ $t(sItem.label) }}</div>
  71. <div v-if="sItem.type === 'dateTime' || sItem.type === 'datePicker'" class="flex1">
  72. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  73. :type="sItem.type" :item="sItem" v-model="formFields[key]" @copy="onCopy(sItem, key)"
  74. :error="errors[key]" @update:error="errors[key] = false"
  75. :orange-bg="orangeBgFields[key]" />
  76. </div>
  77. <div v-else-if="sItem.type === 'select'" class = "flex flex1">
  78. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  79. type="select" :item="sItem" v-model="formFields[key]" @copy="onCopy(sItem, key)"
  80. @change="(e, type) => onSelectChange(key, e, type)" :error="errors[key]"
  81. @update:error="errors[key] = false" :orange-bg="orangeBgFields[key]" />
  82. <div v-show="isShowOther(formFields[key])" class="flex flex1 ml-10">
  83. <div class="other-title" v-if="isShowOtherLabel(sItem)">{{ sItem.otherLabel ? $t(sItem.otherLabel) :
  84. $t("template.common.other") }}</div>
  85. <div class="flex flex1">
  86. <HandleFormItem :field-item-label="fieldItemLabel"
  87. :field-key="prefixKey + '_' + sItem.otherCode" @blur="onBlur(key, $event)"
  88. :item="getOtherItem(sItem)" v-model="formFields[sItem.otherCode]"
  89. @copy="onCopy(sItem, key)" :error="errors[sItem.otherCode]"
  90. @update:error="errors[sItem.otherCode] = false"
  91. :orange-bg="orangeBgFields[sItem.otherCode]" />
  92. </div>
  93. </div>
  94. </div>
  95. <div v-else-if="sItem.type === 'input'||sItem.type === 'textarea' || sItem.type === 'inputNumber'" class="item-center">
  96. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  97. @blur="onBlur(key, $event)" :item="sItem" v-model="formFields[key]"
  98. :type="sItem.type"
  99. @copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
  100. :ref="key" :orange-bg="orangeBgFields[key]" />
  101. <span v-if="sItem.subType === 'text'" class="sub-text">{{ $t(sItem.subText) }}</span>
  102. <HandleFormItem class="ml-10" v-else-if="sItem.subType === 'button'" type="button"
  103. :item="getButtonItem(sItem)" :value="formFields[sItem.subKey]"
  104. @clickButton="(e, val, data) => handleClickButton(e, sItem, val, data)" />
  105. </div>
  106. <div v-else-if="sItem.type === 'clickable'" class="flex1">
  107. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  108. type="clickable" @clickable="handleClickable(sItem, key)" :error="errors[key]"
  109. @update:error="errors[key] = false" @resetRecord="resetRecord(key)" :item="sItem"
  110. :value="formFields[key]" />
  111. </div>
  112. <div v-else-if="isRegent(sItem)" class="flex1">
  113. <HandleFormItem
  114. @beforeReagentSubmit="(data, callback) => onBeforeReagentSubmit(data, callback, key)"
  115. :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  116. :type="sItem.type" sourceFrom="baseInfoFormPackage" :error="errors[key]"
  117. @update:error="errors[key] = false"
  118. @onRegentSubmit="(data, inputValue) => onRegentSubmit(data, inputValue, key, sItem)"
  119. :item="sItem" :value="formFields[key]" />
  120. </div>
  121. <!-- 勾选某些选项时出现其他输入框 -->
  122. <div v-else-if="sItem.type === 'radioAndOther'" class="item-center"
  123. :class="{'form-error-border': errors[key]}"
  124. >
  125. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  126. type="radio" :error="errors[key]" @update:error="errors[key] = false"
  127. @change="(e, type) => onSelectChange(key, e, type)" :item="sItem"
  128. :value="formFields[key]" />
  129. <div v-show="isShowOtherByRadioAndOther(formFields[key], sItem)" class="flex1 ml-10">
  130. <HandleFormItem :field-item-label="fieldItemLabel"
  131. :field-key="prefixKey + '_' + sItem.otherCode" @blur="onBlur(key, $event)"
  132. :item="getRadioOtherItem(sItem)" v-model="formFields[sItem.otherCode]"
  133. @copy="onCopy(sItem, key)" :error="errors[sItem.otherCode]"
  134. @update:error="errors[key] = false"
  135. :orange-bg="orangeBgFields[sItem.otherCode]" />
  136. </div>
  137. </div>
  138. <div v-else-if="sItem.type === 'fqyq'" class="flex1"
  139. :class="{ 'form-error-border': errors[key] }">
  140. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  141. type="fqyq" :item="sItem" :value="formFields[key]"
  142. @change="(e) => onFqyqChange(key, e)" :error="errors[key]"
  143. @update:error="errors[key] = false" />
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. </template>
  149. <template v-else-if="item.type === 'step'">
  150. <div class="grid-container gap2">
  151. <div v-for="(sItem, key) in item.config" class="c-Item flex item-center"
  152. :class="getSpanClass(sItem)" :key="key">
  153. <div class="step-form-title"
  154. :style="{ 'width': sItem.labelWidth ? sItem.labelWidth + 'px' : '150px' }"
  155. v-if="sItem.label">
  156. {{ $t(sItem.label) }}</div>
  157. <div v-if="sItem.type === 'dateTime'" class="flex1">
  158. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  159. type="dateTime" :item="sItem" v-model="formFields[key]" @copy="onCopy(sItem, key)"
  160. :error="errors[key]" @update:error="errors[key] = false"
  161. :orange-bg="orangeBgFields[key]" />
  162. </div>
  163. <div v-else-if="sItem.type === 'select'" class="flex flex1">
  164. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  165. type="select" :item="sItem" style="width: auto;flex:1" v-model="formFields[key]"
  166. @copy="onCopy(sItem, key)" @change="(e, type) => onSelectChange(key, e, type)"
  167. :error="errors[key]" @update:error="errors[key] = false"
  168. :orange-bg="orangeBgFields[key]" />
  169. <div v-show="isShowOther(formFields[key])" class="flex flex1 ml-10">
  170. <div class="other-title" v-if="isShowOtherLabel(sItem)">{{ sItem.otherLabel ? $t(sItem.otherLabel) :
  171. $t("template.common.other") }}</div>
  172. <div class="flex flex1">
  173. <HandleFormItem :field-item-label="fieldItemLabel"
  174. :field-key="prefixKey + '_' + sItem.otherCode" @blur="onBlur(key, $event)"
  175. :item="getOtherItem(sItem)" v-model="formFields[sItem.otherCode]"
  176. @copy="onCopy(sItem, key)" :error="errors[sItem.otherCode]"
  177. @update:error="errors[sItem.otherCode] = false"
  178. :orange-bg="orangeBgFields[sItem.otherCode]" />
  179. </div>
  180. </div>
  181. </div>
  182. <div v-else-if="sItem.type === 'input' || sItem.type === 'inputNumber'" class="flex flex1">
  183. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  184. :type="sItem.type"
  185. @blur="onBlur(key, $event)" class="flex1" :item="sItem" v-model="formFields[key]"
  186. @copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
  187. :orange-bg="orangeBgFields[key]" />
  188. <HandleFormItem :field-item-label="fieldItemLabel"
  189. :field-key="prefixKey + '_' + sItem.subKey" class="ml-10"
  190. v-if="sItem.subType === 'select'" type="select" :item="getSubItem(sItem)"
  191. v-model="formFields[sItem.subKey]" @copy="onCopy(sItem, key)"
  192. @change="(e, type) => onSelectChange(sItem.subKey, e, type)"
  193. :error="errors[sItem.subKey]" @update:error="errors[sItem.subKey] = false"
  194. :orange-bg="orangeBgFields[sItem.subKey]" />
  195. <HandleFormItem :field-item-label="fieldItemLabel"
  196. :field-key="prefixKey + '_' + sItem.subKey" class="ml-10"
  197. v-if="sItem.subType === 'input'" type="input" :item="getSubItem(sItem)"
  198. v-model="formFields[sItem.subKey]" @copy="onCopy(sItem, key)"
  199. :error="errors[sItem.subKey]" @blur="onBlur(sItem.subKey, $event)"
  200. @update:error="errors[sItem.subKey] = false"
  201. :orange-bg="orangeBgFields[sItem.subKey]" />
  202. <div class="ml-10 item-span" v-else-if="sItem.subType === 'span'">{{
  203. formFields[sItem.subKey] }}</div>
  204. <span v-else-if="sItem.subType === 'text'" class="sub-text">{{ $t(sItem.subText) }}</span>
  205. <HandleFormItem class="ml-10" v-else-if="sItem.subType === 'button'" type="button"
  206. :item="getButtonItem(sItem)" :value="formFields[sItem.subKey]"
  207. @clickButton="(e, val, data) => handleClickButton(e, sItem, val, data)" />
  208. <HandleFormItem :field-item-label="fieldItemLabel"
  209. :field-key="prefixKey + '_' + sItem.subKey" class="ml-10"
  210. v-else-if="sItem.subType === 'clickable'" type="clickable"
  211. @clickable="handleClickable(sItem, sItem.subKey)" :item="getClickableItem(sItem)"
  212. :error="errors[sItem.subKey]" @update:error="errors[sItem.subKey] = false"
  213. @resetRecord="resetRecord(sItem.subKey)" :value="formFields[sItem.subKey]" />
  214. <HandleFormItem :field-item-label="fieldItemLabel"
  215. :field-key="prefixKey + '_' + sItem.subKey" class="ml-10"
  216. v-else-if="isRegent(sItem, 'subType')" :type="sItem.subType"
  217. :item="getRegentItem(sItem, 'subType')" sourceFrom="baseInfoFormPackage"
  218. @beforeReagentSubmit="(data, callback) => onBeforeReagentSubmit(data, callback, sItem.subKey)"
  219. @onRegentSubmit="(data, inputValue) => onRegentSubmit(data, inputValue, sItem.subKey, sItem)"
  220. :error="errors[sItem.subKey]" @update:error="errors[sItem.subKey] = false"
  221. :value="formFields[sItem.subKey]" />
  222. <div v-show="isShowOther(formFields[sItem.subKey])" class="flex flex1 ml-10">
  223. <div class="other-title" v-if="isShowOtherLabel(sItem)">{{ sItem.otherLabel ? $t(sItem.otherLabel) :
  224. $t("template.common.other") }}</div>
  225. <div class="flex flex1">
  226. <HandleFormItem :field-item-label="fieldItemLabel"
  227. :field-key="prefixKey + '_' + sItem.otherCode" @blur="onBlur(key, $event)"
  228. :item="getOtherItem(sItem)" v-model="formFields[sItem.otherCode]"
  229. @copy="onCopy(sItem, key)" :error="errors[sItem.otherCode]"
  230. @update:error="errors[sItem.otherCode] = false"
  231. :orange-bg="orangeBgFields[sItem.otherCode]" />
  232. </div>
  233. </div>
  234. <!-- <div class="clickable" :class="getFillType(sItem.subFillType)" v-else-if = "sItem.subType ==='clickable'" @click="handleClickable(sItem,$event)">
  235. <span v-if="formFields[sItem.subKey]">{{ formFields[sItem.subKey] }}</span>
  236. <span v-else class="default-placeholder-text">请选择</span>
  237. </div> -->
  238. </div>
  239. <!-- <div v-else-if="sItem.type === 'inputNumber'" class="flex flex1">
  240. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  241. type="inputNumber" @blur="onBlur(key, $event)" class="flex1" :item="sItem"
  242. @input="onInputNumberChange(key, $event)" :value="formFields[key]"
  243. @copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
  244. :orange-bg="orangeBgFields[key]" />
  245. <HandleFormItem :field-item-label="fieldItemLabel"
  246. :field-key="prefixKey + '_' + sItem.subKey" class="ml-10"
  247. v-if="sItem.subType === 'select'" type="select" :item="getSubItem(sItem)"
  248. v-model="formFields[sItem.subKey]" @copy="onCopy(sItem, key)"
  249. @change="(e, type) => onSelectChange(sItem.subKey, e, type)"
  250. :error="errors[sItem.subKey]" @update:error="errors[sItem.subKey] = false"
  251. :orange-bg="orangeBgFields[sItem.subKey]" />
  252. <div class="ml-10 item-span" v-else-if="sItem.subType === 'span'">{{
  253. formFields[sItem.subKey] }}</div>
  254. <HandleFormItem class="ml-10" v-else-if="sItem.subType === 'button'" type="button"
  255. :item="getButtonItem(sItem)" :value="formFields[sItem.subKey]"
  256. @clickButton="(e, val, data) => handleClickButton(e, sItem, val, data)" />
  257. <HandleFormItem :field-item-label="fieldItemLabel"
  258. :field-key="prefixKey + '_' + sItem.subKey" class="ml-10"
  259. v-else-if="sItem.subType === 'clickable'"
  260. @clickable="handleClickable(sItem, sItem.subKey)" :error="errors[sItem.subKey]"
  261. type="clickable" @update:error="errors[sItem.subKey] = false"
  262. @resetRecord="resetRecord(sItem.subKey)" :item="getClickableItem(sItem)"
  263. :value="formFields[sItem.subKey]" />
  264. <HandleFormItem :field-item-label="fieldItemLabel"
  265. :field-key="prefixKey + '_' + sItem.subKey" class="ml-10"
  266. v-else-if="isRegent(sItem, 'subType')" sourceFrom="baseInfoFormPackage"
  267. :error="errors[sItem.subKey]" :type="sItem.subType"
  268. @beforeReagentSubmit="(data, callback) => onBeforeReagentSubmit(data, callback, sItem.subKey)"
  269. @onRegentSubmit="(data, inputValue) => onRegentSubmit(data, inputValue, sItem.subKey, sItem)"
  270. :item="getRegentItem(sItem, 'subType')" :value="formFields[sItem.subKey]" />
  271. </div> -->
  272. <div v-else-if="sItem.type === 'clickable'" class="flex flex1">
  273. <HandleFormItem :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  274. type="clickable" @clickable="handleClickable(sItem, key)" :error="errors[key]"
  275. @update:error="errors[key] = false" @resetRecord="resetRecord(key)" :item="sItem"
  276. :value="formFields[key]" />
  277. </div>
  278. <div v-else-if="isRegent(sItem)" class="flex item-center flex1">
  279. <HandleFormItem :field-item-label="fieldItemLabel" sourceFrom="baseInfoFormPackage"
  280. @beforeReagentSubmit="(data, callback) => onBeforeReagentSubmit(data, callback, key)"
  281. @onRegentSubmit="(data, inputValue) => onRegentSubmit(data, inputValue, key, sItem)"
  282. :field-key="prefixKey + '_' + key" :type="sItem.type" :error="errors[key]"
  283. @update:error="errors[key] = false" :item="getRegentItem(sItem)"
  284. :value="formFields[key]" />
  285. <span v-if="sItem.subType === 'text'" class="sub-text">{{ $t(sItem.subText) }}</span>
  286. <HandleFormItem :field-item-label="fieldItemLabel"
  287. :field-key="prefixKey + '_' + sItem.subKey" class="ml-10"
  288. v-else-if="sItem.subType === 'input' || sItem.subType === 'inputNumber' || sItem.subType === 'select'" :type="sItem.subType" :item="getSubItem(sItem)"
  289. v-model="formFields[sItem.subKey]" @copy="onCopy(sItem, key)"
  290. :error="errors[sItem.subKey]" @blur="onBlur(sItem.subKey, $event)"
  291. @update:error="errors[sItem.subKey] = false"
  292. :orange-bg="orangeBgFields[sItem.subKey]" />
  293. <HandleFormItem :field-item-label="fieldItemLabel"
  294. :field-key="prefixKey + '_' + sItem.thirdKey" class="ml-10"
  295. v-if="sItem.thirdType === 'select' || sItem.thirdType === 'input'" :type="sItem.thirdType" :item="getThirdItem(sItem)"
  296. v-model="formFields[sItem.thirdKey]" @copy="onCopy(sItem, key)"
  297. :error="errors[sItem.thirdKey]" @blur="onBlur(sItem.thirdKey, $event)"
  298. @update:error="errors[sItem.thirdKey] = false"
  299. :orange-bg="orangeBgFields[sItem.thirdKey]" />
  300. <HandleFormItem class="ml-10" v-if="sItem.fourthType === 'button'" type="button"
  301. :item="getFourthButtonItem(sItem)" :value="formFields[sItem.fourthKey]"
  302. @clickButton="(e, val, data) => handleClickButton(e, sItem, val, data)" />
  303. </div>
  304. </div>
  305. </div>
  306. </template>
  307. <template v-else-if="item.type === 'checkboxList'">
  308. <div class="form-item " >
  309. <div class="form-title fs-16" v-if="item.label">{{ $t(item.label) }}</div>
  310. <div v-for="(sItem, key) in item.config" class="c-Item grid-container">
  311. <div class="p-r-20 item-center" :class="sItem.span == 1 ? 'full-row' : ''">
  312. <div class="form-title mr-20 checkboxList-title">{{ $t(sItem.label) }}</div>
  313. <div class="flex flex1">
  314. <HandleFormItem
  315. v-if="sItem.type === 'checkboxTree'"
  316. :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  317. :type="sItem.type" :item="sItem" :value="formFields[key]"
  318. @change="(e) => onAttachmentChange(key, e)"
  319. :error="errors[key]" @update:error="errors[key] = false"
  320. :orange-bg="orangeBgFields[key]" />
  321. <HandleFormItem v-else-if="sItem.type === 'textarea'" :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  322. @blur="onBlur(key, $event)" type="textarea" :item="sItem" v-model="formFields[key]"
  323. @copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
  324. :orange-bg="orangeBgFields[key]" />
  325. <HandleFormItem v-else-if="sItem.type === 'input'" :field-item-label="fieldItemLabel" :field-key="prefixKey + '_' + key"
  326. @blur="onBlur(key, $event)" type="input" :item="sItem" v-model="formFields[key]"
  327. @copy="onCopy(sItem, key)" :error="errors[key]" @update:error="errors[key] = false"
  328. :orange-bg="orangeBgFields[key]" />
  329. </div>
  330. </div>
  331. </div>
  332. </div>
  333. </template>
  334. </div>
  335. </div>
  336. </template>
  337. <script>
  338. import HandleFormItem from "./HandleFormItem.vue";
  339. import LineLabel from "./LineLabel.vue";
  340. import { isShowOther, isShowOtherByRadioAndOther } from "@/utils/formPackageCommon.js";
  341. import { isRegent } from "@/utils/index.js";
  342. import formPackageMixins from '@/components/Template/mixins/formPackageMixins.js'
  343. export default {
  344. inject: ['templateFillType'],
  345. components: {
  346. HandleFormItem,
  347. LineLabel
  348. },
  349. mixins: [formPackageMixins],
  350. props: {
  351. label: {//当前表单的标题
  352. type: String,
  353. default: "",
  354. },
  355. formConfig: {
  356. type: Array,
  357. value: () => [],
  358. },
  359. formData: {
  360. type: Object,
  361. value: () => ({})
  362. },
  363. //主要标识当前表单属于哪个模块,用于传给后端
  364. fieldItemLabel: {
  365. type: String,
  366. default: "",
  367. },
  368. //循环组件的情况下需要用这个来区分字段
  369. prefixKey: {
  370. type: String,
  371. default: "",
  372. }
  373. },
  374. data() {
  375. return {
  376. formFields: {},//表单绑定字段
  377. allFieldsConfig: {},//包含config的所有字段,主要用于校验表单是否填写
  378. errors: {},//存储表单错误信息,用于标红提示
  379. orangeBgFields: {},// 存储需要橙色背景的字段
  380. oldFormFields: {},// 存储旧的表单数据,用于比较变化
  381. isShowOther,
  382. isShowOtherByRadioAndOther,
  383. isRegent
  384. };
  385. },
  386. methods: {
  387. onBeforeReagentSubmit(data, callback, key) {
  388. this.$emit('beforeReagentSubmit', { selectData: data, callback, key, formFields: this.formFields })
  389. },
  390. // 点击按钮
  391. handleClickButton(e, item, val, data) {
  392. if(!item.isClearForm){
  393. this.formFields[item.subKey] = val;
  394. }
  395. this.$emit("clickButton", item, data)
  396. },
  397. // 获取按钮项
  398. getButtonItem(sItem) {
  399. return {
  400. ...sItem,
  401. key: sItem.subKey,
  402. fillType: sItem.fourthFillType || sItem.fillType
  403. }
  404. },
  405. getFourthButtonItem(sItem) {
  406. return {
  407. ...sItem,
  408. key: sItem.fourthKey,
  409. buttonName:sItem.fourthButtonName,
  410. fillType: sItem.fourthFillType || sItem.fillType
  411. }
  412. },
  413. // 处理fqyq变化
  414. onFqyqChange(key, e) {
  415. console.log(e, key, 'fqyq');
  416. this.formFields[key] = e;
  417. },
  418. //是否显示其他输入框的标题
  419. isShowOtherLabel(sItem){
  420. if (sItem.hasOwnProperty("showOtherLabel")) {
  421. return sItem.showOtherLabel
  422. }
  423. return true
  424. },
  425. }
  426. }
  427. </script>
  428. <style lang="scss">
  429. .grid-container {
  430. display: grid;
  431. grid-template-columns: repeat(2, 1fr);
  432. /* 默认2列 */
  433. gap: 0 20px;
  434. /* 防止网格容器被分割到不同页面 */
  435. page-break-inside: avoid;
  436. break-inside: avoid;
  437. }
  438. .gap2 {
  439. gap: 0 48px;
  440. }
  441. .w-100 {
  442. width: 100%;
  443. }
  444. .form-item {
  445. background: #fff;
  446. padding: 20px;
  447. border-radius: 8px;
  448. box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
  449. margin-top: 20px;
  450. padding: 20px;
  451. border-radius: 5px 5px;
  452. page-break-inside: avoid;
  453. }
  454. /* 或者使用 span 语法 */
  455. .full-row {
  456. grid-column: span 2;
  457. }
  458. .three-row {
  459. grid-column: span 3;
  460. }
  461. .c-Item {
  462. // &:not(:last-child) {
  463. // margin-bottom: 16px;
  464. // }
  465. page-break-inside: avoid;
  466. padding: 8px 0px;
  467. }
  468. .eo {
  469. &:nth-child(even) {
  470. padding-left: 20px;
  471. }
  472. &:nth-child(odd) {
  473. padding-right: 20px;
  474. }
  475. }
  476. .default-placeholder-text {
  477. color: #C0C4CC;
  478. }
  479. .form-title {
  480. margin-bottom: 12px;
  481. font-size: 14px;
  482. font-weight: normal;
  483. color: #606266;
  484. }
  485. .step-form-title {
  486. font-size: 14px;
  487. font-weight: normal;
  488. color: #606266;
  489. width: 150px;
  490. text-align: right;
  491. padding-right: 10px;
  492. }
  493. .p-r-20 {
  494. padding-right: 20px;
  495. }
  496. .p-l-20 {
  497. padding-left: 20px;
  498. }
  499. .fs-16 {
  500. font-size: 0.96rem;
  501. font-weight: bold;
  502. color: #464647
  503. }
  504. .flex1 {
  505. flex: 1;
  506. }
  507. .flex {
  508. display: flex;
  509. }
  510. .other-title {
  511. width: 50px;
  512. text-align: right;
  513. margin: 0 10px;
  514. font-size: 14px;
  515. font-weight: normal;
  516. color: #606266;
  517. }
  518. .mr-24 {
  519. margin-right: 24px;
  520. }
  521. .sub-select {
  522. width: 100px;
  523. margin-left: 10px;
  524. }
  525. .orange-border {
  526. border-color: #f9c588;
  527. }
  528. .green-border {
  529. border-color: green;
  530. }
  531. .blue-border {
  532. border-color: #4ea2ff;
  533. }
  534. .ml-10 {
  535. margin-left: 10px;
  536. }
  537. .item-span {
  538. color: #606266;
  539. font-size: 14px;
  540. }
  541. .item-center {
  542. display: flex;
  543. align-items: center;
  544. }
  545. .ml-5 {
  546. margin-left: 5px;
  547. }
  548. .sub-text {
  549. color: #606266;
  550. font-size: 14px;
  551. margin-left: 5px;
  552. }
  553. .mr-20 {
  554. margin-right: 20px;
  555. }
  556. .form-error-border {
  557. box-shadow: 0 0 6px #ffc3c3;
  558. padding: 8px;
  559. border-radius: 4px;
  560. border: 1px solid #ff5d5d;
  561. }
  562. .checkboxList-title{
  563. width: 120px;
  564. text-align: center;
  565. }
  566. </style>