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

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