formComponent.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <template>
  2. <div>
  3. <el-form :model="form" ref="form" style="display:flex;flex-wrap: wrap">
  4. <el-form-item
  5. v-for="(item,index) in formOption" :key="item.index?item.index:index" v-if="(index+1) <= inDex"
  6. :prop="item.label"
  7. :label="item.name"
  8. :label-width="item.labelSize + 'px'"
  9. :rules="item.rules"
  10. >
  11. <el-input v-model="form[item.label]" :onkeyup="item.onabort" :disabled="item.disabled" v-if="item.inputType == 2" :style="{ width: item.width + 'px' }" size="small" :placeholder="'请输入'+item.name"></el-input>
  12. <span v-if="item.inputType == 1">
  13. <el-select :multiple="item.multiple" :clearable="item.clearable === true?false:true" v-model="form[item.label]" :disabled="item.disabled" :style="{ width: item.width + 'px' }" filterable slot="prepend" @change="change(item.label,dataList[item.label],form[item.label])" placeholder="请选择">
  14. <el-option v-for="(li,index) in dataList[item.label]" :key="index" :label="li.label" :value="li.value"></el-option>
  15. </el-select>
  16. </span>
  17. <el-input
  18. v-if="item.inputType == 4"
  19. type="textarea"
  20. :onkeyup="item.onabort"
  21. :style="{ width: item.width + 'px' }"
  22. autosize
  23. :disabled="item.disabled"
  24. placeholder="请输入内容"
  25. v-model="form[item.label]">
  26. </el-input>
  27. <div style="width: 100%;display:flex;" v-if="item.inputType == 5">
  28. <el-input v-model="number" :onkeyup="item.onabort" :style="{ width: item.width + 'px' }" placeholder="请输入内容" :disabled="item.disabled" @input="spellNumbers(item.label)"></el-input>
  29. <span style="padding-left: 10px;padding-right: 10px">至</span>
  30. <el-input v-model="numBer" :onkeyup="item.onabort" :style="{ width: item.width + 'px' }" placeholder="请输入内容" :disabled="item.disabled" @input="spellNumbers(item.label)"></el-input>
  31. </div>
  32. <el-date-picker
  33. v-if="item.inputType == 6"
  34. :disabled="item.disabled"
  35. v-model="form[item.label]"
  36. size="small"
  37. :style="{ width: item.width + 'px' }"
  38. value-format="yyyy-MM-dd"
  39. type="date"
  40. placeholder="选择日期">
  41. </el-date-picker>
  42. <el-date-picker
  43. :disabled="item.disabled"
  44. v-if="item.inputType == 3"
  45. :style="{ width: item.width + 'px' }"
  46. v-model="form[item.label]"
  47. type="daterange"
  48. value-format="yyyy-MM-dd"
  49. :default-time="['00:00:00', '23:59:59']"
  50. range-separator="至"
  51. start-placeholder="开始日期"
  52. end-placeholder="结束日期">
  53. </el-date-picker>
  54. </el-form-item>
  55. </el-form>
  56. </div>
  57. </template>
  58. <script>
  59. export default {
  60. name: 'formComponent',
  61. props:['formOption','dataList','inDex'],
  62. data() {
  63. return {
  64. form:{},
  65. numBer:'',
  66. number:'',
  67. };
  68. },
  69. created() {
  70. console.log(this.dataList)
  71. },
  72. methods: {
  73. returnToForm(){
  74. this.$emit('returnToForm', this.form)
  75. },
  76. assignmentTime(formLi){
  77. console.log(formLi)
  78. this.$set(this,'form',formLi)
  79. },
  80. spellNumbers(name){
  81. this.form[name] = [this.number,this.numBer]
  82. },
  83. //选中后触发
  84. change(name,list,id){
  85. this.$emit('selectTrigger',name,list,id)
  86. },
  87. //清除表单验证
  88. clearVerification(){
  89. this.$nextTick(()=>{
  90. this.$refs['form'].clearValidate();
  91. })
  92. },
  93. //表单验证
  94. submitForm(form,item) {
  95. this.$refs["form"].validate((valid) => {
  96. if (valid) {
  97. if (form === 'submit'){
  98. this.$emit('submitAndSave',item)
  99. }else if (form === 'check'){
  100. this.$emit('writeOff')
  101. }else {
  102. this.$emit('submitForm')
  103. }
  104. } else {
  105. return false;
  106. }
  107. });
  108. },
  109. }
  110. }
  111. </script>
  112. <style scoped>
  113. </style>