WkField.vue 9.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. <template>
  2. <div v-if="ignoreFields.includes(item.field)">
  3. <slot :data="item" :index="index" />
  4. </div>
  5. <el-input
  6. v-else-if="item.form_type == 'text'"
  7. v-model="fieldFrom[item.field]"
  8. :disabled="item.disabled || disabled"
  9. :maxlength="100"
  10. :placeholder="item.placeholder"
  11. :type="item.form_type"
  12. @input="commonChange(item, index, $event)"/>
  13. <el-input
  14. v-else-if="isTrimInput(item.form_type)"
  15. v-model.trim="fieldFrom[item.field]"
  16. :disabled="item.disabled || disabled"
  17. :prefix-icon="getInputIcon(item.form_type)"
  18. :maxlength="getInputMaxlength(item.form_type)"
  19. :placeholder="item.placeholder"
  20. type="text"
  21. @input="commonChange(item, index, $event)"/>
  22. <el-input-number
  23. v-else-if="item.form_type == 'number'"
  24. v-model="fieldFrom[item.field]"
  25. :placeholder="item.placeholder"
  26. :disabled="item.disabled || disabled"
  27. :controls="false"
  28. @change="commonChange(item, index, $event)" />
  29. <el-input-number
  30. v-else-if="item.form_type == 'floatnumber'"
  31. v-model="fieldFrom[item.field]"
  32. :placeholder="item.placeholder"
  33. :disabled="item.disabled || disabled"
  34. :controls="false"
  35. @change="commonChange(item, index, $event)" />
  36. <wk-percent-input
  37. v-else-if="item.form_type == 'percent'"
  38. v-model="fieldFrom[item.field]"
  39. :placeholder="item.placeholder"
  40. :disabled="item.disabled || disabled"
  41. :controls="false"
  42. @change="commonChange(item, index, $event)" />
  43. <el-input
  44. v-else-if="item.form_type == 'textarea'"
  45. v-model="fieldFrom[item.field]"
  46. :disabled="item.disabled || disabled"
  47. :rows="3"
  48. :autosize="{ minRows: 3}"
  49. :maxlength="item.maxlength || 800"
  50. :placeholder="item.placeholder"
  51. :type="item.form_type"
  52. resize="none"
  53. @input="commonChange(item, index, $event)" />
  54. <wk-select
  55. v-else-if="['select'].includes(item.form_type)"
  56. v-model="fieldFrom[item.field]"
  57. :disabled="item.disabled || disabled"
  58. :clearable="item.clearable"
  59. :placeholder="item.placeholder"
  60. :options="item.setting"
  61. :show-type="item.precisions === 1 ? 'tiled' : 'default'"
  62. :other-show-input="item.hasOwnProperty('optionsData')"
  63. @change="commonChange(item, index, $event)"/>
  64. <wk-checkbox
  65. v-else-if="['checkbox'].includes(item.form_type)"
  66. v-model="fieldFrom[item.field]"
  67. :disabled="item.disabled || disabled"
  68. :clearable="item.clearable"
  69. :placeholder="item.placeholder"
  70. :options="item.setting"
  71. :show-type="item.precisions === 1 ? 'tiled' : 'default'"
  72. :other-show-input="item.hasOwnProperty('optionsData')"
  73. @change="commonChange(item, index, $event)"/>
  74. <!-- <el-select
  75. v-else-if="['checkbox', 'select'].includes(item.form_type)"
  76. v-model="fieldFrom[item.field]"
  77. :disabled="item.disabled || disabled"
  78. :clearable="item.clearable"
  79. :placeholder="item.placeholder"
  80. :multiple="item.form_type === 'checkbox'"
  81. style="width: 100%;"
  82. @change="commonChange(item, index, $event)">
  83. <el-option
  84. v-for="(item, index) in item.setting"
  85. :key="index"
  86. :label="!isEmptyValue(item.value) ? item.label || item.name : item "
  87. :value="!isEmptyValue(item.value) ? item.value : item"/>
  88. </el-select> -->
  89. <!-- <el-select
  90. v-else-if="item.form_type == 'checkbox'"
  91. v-model="fieldFrom[item.field]"
  92. :disabled="item.disabled || disabled"
  93. :clearable="item.clearable"
  94. :placeholder="item.placeholder"
  95. multiple
  96. style="width: 100%;"
  97. @change="commonChange(item, index, $event)">
  98. <el-option
  99. v-for="(item, index) in item.setting"
  100. :key="index"
  101. :label="!isEmptyValue(item.value) ? item.label || item.name : item "
  102. :value="!isEmptyValue(item.value) ? item.value : item"/>
  103. </el-select> -->
  104. <el-date-picker
  105. v-else-if="item.form_type == 'date'"
  106. v-model="fieldFrom[item.field]"
  107. :disabled="item.disabled || disabled"
  108. clearable
  109. style="width: 100%;"
  110. type="date"
  111. value-format="yyyy-MM-dd"
  112. placeholder="选择日期"
  113. @change="commonChange(item, index, $event)"/>
  114. <el-date-picker
  115. v-else-if="item.form_type == 'dateRange'"
  116. v-model="fieldFrom[item.field]"
  117. :disabled="item.disabled || disabled"
  118. :type="item.dateType || 'daterange'"
  119. :value-format="item.dateValueFormat || 'yyyy-MM-dd'"
  120. clearable
  121. style="width: 100%;vertical-align: middle;"
  122. start-placeholder="开始日期"
  123. end-placeholder="结束日期"
  124. @change="commonChange(item, index, $event)"/>
  125. <el-date-picker
  126. v-else-if="item.form_type == 'datetime'"
  127. v-model="fieldFrom[item.field]"
  128. :disabled="item.disabled || disabled"
  129. clearable
  130. style="width: 100%;"
  131. type="datetime"
  132. value-format="yyyy-MM-dd HH:mm:ss"
  133. placeholder="选择日期"
  134. @change="commonChange(item, index, $event)"/>
  135. <wk-dep-select
  136. v-else-if="item.form_type == 'structure'"
  137. v-model="fieldFrom[item.field]"
  138. :request="item.request"
  139. :props="item.props"
  140. :params="item.params"
  141. :disabled="item.disabled || disabled"
  142. :radio="!isEmptyValue(item.radio) ? item.radio : true"
  143. style="width: 100%;"
  144. @change="depOrUserChange(item, index, arguments[0], arguments[1])"
  145. />
  146. <wk-user-select
  147. v-else-if="['single_user', 'user'].includes(item.form_type)"
  148. v-model="fieldFrom[item.field]"
  149. :request="item.request"
  150. :props="item.props"
  151. :params="item.params"
  152. :disabled="item.disabled || disabled"
  153. :radio="!isEmptyValue(item.radio) ? item.radio : true"
  154. style="width: 100%;"
  155. @change="depOrUserChange(item, index, arguments[0], arguments[1])"
  156. />
  157. <el-radio-group
  158. v-else-if="item.form_type == 'radio'"
  159. v-model="fieldFrom[item.field]"
  160. :disabled="item.disabled || disabled"
  161. :placeholder="item.placeholder"
  162. @change="commonChange(item, index, $event)">
  163. <el-radio
  164. v-for="(item, index) in item.setting"
  165. :key="index"
  166. :label="!isEmptyValue(item.value) ? item.value : item">
  167. {{ !isEmptyValue(item.value) ? item.label || item.name : item }}
  168. </el-radio>
  169. </el-radio-group>
  170. <el-switch
  171. v-else-if="item.form_type == 'boolean_value'"
  172. v-model="fieldFrom[item.field]"
  173. :disabled="item.disabled || disabled"
  174. active-value="1"
  175. inactive-value="0"
  176. @change="commonChange(item, index, $event)"/>
  177. <wk-position
  178. v-else-if="item.form_type == 'position'"
  179. :hide-area="item.hideArea"
  180. :only-province="item.onlyProvince"
  181. :show-detail="item.showDetail"
  182. v-model="fieldFrom[item.field]"
  183. :disabled="item.disabled || disabled"
  184. @change="commonChange(item, index, $event)"/>
  185. <wk-location
  186. v-else-if="item.form_type == 'location'"
  187. v-model="fieldFrom[item.field]"
  188. :disabled="item.disabled || disabled"
  189. @change="commonChange(item, index, $event)"/>
  190. <wk-signature-pad
  191. v-else-if="item.form_type == 'handwriting_sign'"
  192. v-model="fieldFrom[item.field]"
  193. :disabled="item.disabled || disabled"/>
  194. <wk-desc-text
  195. v-else-if="item.form_type == 'desc_text'"
  196. :value="fieldFrom[item.field]"/>
  197. <el-date-picker
  198. v-else-if="item.form_type === 'date_interval'"
  199. v-model="fieldFrom[item.field]"
  200. :type="item.dateType || 'daterange'"
  201. :value-format="item.dateValueFormat || 'yyyy-MM-dd'"
  202. :disabled="item.disabled || disabled"
  203. style="width: 100%;vertical-align: middle;"
  204. clearable
  205. start-placeholder="开始日期"
  206. end-placeholder="结束日期"
  207. @change="commonChange(item, index, $event)"/>
  208. <v-distpicker
  209. v-else-if="item.form_type == 'address'"
  210. :province="fieldFrom[item.field].province"
  211. :city="fieldFrom[item.field].city"
  212. :area="fieldFrom[item.field].area"
  213. @province="selectProvince($event, item, index)"
  214. @city="selectCity($event, item, index)"
  215. @area="selectArea($event, item, index)"/>
  216. <xh-files
  217. v-else-if="item.form_type == 'file'"
  218. :value="fieldFrom[item.field]"
  219. :disabled="item.disabled || disabled"
  220. @value-change="oldChange($event, item, index)"
  221. />
  222. <wk-detail-table
  223. v-else-if="item.form_type == 'detail_table'"
  224. :show-type="item.precisions === 2 ? 'table' : 'default'"
  225. :title="item.name"
  226. :prop-prefix="item.field"
  227. :btn-name="item.remark"
  228. :add-field-list="item.fieldExtendList"
  229. :add-field-form="item.fieldForm"
  230. :field-form="fieldFrom[item.field]"
  231. :field-list="item.fieldList"
  232. :disabled="item.disabled || disabled"/>
  233. <div v-else>
  234. <slot :data="item" :index="index" />
  235. </div>
  236. </template>
  237. <script>
  238. import WkUserSelect from '@/components/NewCom/WkUserSelect'
  239. import WkDepSelect from '@/components/NewCom/WkDepSelect'
  240. import WkPosition from '@/components/NewCom/WkPosition'
  241. import WkLocation from '@/components/NewCom/WkLocation'
  242. import WkSignaturePad from '@/components/NewCom/WkSignaturePad'
  243. import WkDescText from '@/components/NewCom/WkDescText'
  244. import WkPercentInput from '@/components/NewCom/WkPercentInput'
  245. import WkSelect from '@/components/NewCom/WkSelect'
  246. import WkCheckbox from '@/components/NewCom/WkCheckbox'
  247. import WkDetailTable from '@/components/NewCom/WkDetailTable'
  248. import VDistpicker from '@/components/VDistpicker'
  249. import { XhFiles } from '@/components/CreateCom'
  250. import Mixin from './Mixin'
  251. export default {
  252. // 字段
  253. name: 'WkField',
  254. components: {
  255. WkUserSelect,
  256. WkDepSelect,
  257. WkPosition,
  258. WkLocation,
  259. WkSignaturePad,
  260. WkDescText,
  261. WkPercentInput,
  262. WkSelect,
  263. WkCheckbox,
  264. WkDetailTable,
  265. VDistpicker,
  266. XhFiles
  267. },
  268. mixins: [Mixin],
  269. props: {
  270. item: Object,
  271. index: Number,
  272. fieldFrom: {
  273. type: Object,
  274. default: () => {
  275. return {}
  276. }
  277. },
  278. // 忽略的字段直接输出
  279. ignoreFields: {
  280. type: Array,
  281. default: () => {
  282. return []
  283. }
  284. },
  285. disabled: Boolean
  286. },
  287. data() {
  288. return {
  289. }
  290. },
  291. computed: {},
  292. watch: {},
  293. created() {},
  294. mounted() {},
  295. beforeDestroy() {},
  296. methods: {}
  297. }
  298. </script>
  299. <style lang="scss" scoped>
  300. .el-input-number {
  301. width: 100%;
  302. /deep/ .el-input__inner {
  303. text-align: left;
  304. padding: 0 8px;
  305. }
  306. }
  307. </style>