华西海圻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.

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