formComponent.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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" 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 v-model="form[item.label]" :disabled="item.disabled" filterable slot="prepend" @change="change(item.label,dataList[item.label],form[item.label])" placeholder="请选择">
  14. <el-option v-for="(item,index) in dataList[item.label]" :key="index" :label="item.label" :value="item.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" 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" 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. v-model="form[item.label]"
  46. type="daterange"
  47. value-format="yyyy-MM-dd"
  48. :default-time="['00:00:00', '23:59:59']"
  49. range-separator="至"
  50. start-placeholder="开始日期"
  51. end-placeholder="结束日期">
  52. </el-date-picker>
  53. </el-form-item>
  54. </el-form>
  55. </div>
  56. </template>
  57. <script>
  58. export default {
  59. name: 'formComponent',
  60. props:['formOption','dataList','inDex'],
  61. data() {
  62. return {
  63. form:{},
  64. numBer:'',
  65. number:'',
  66. };
  67. },
  68. methods: {
  69. returnToForm(){
  70. this.$emit('returnToForm', this.form)
  71. },
  72. spellNumbers(name){
  73. this.form[name] = [this.number,this.numBer]
  74. },
  75. //选中后触发
  76. change(name,list,id){
  77. this.$emit('selectTrigger',name,list,id)
  78. },
  79. //表单验证
  80. submitForm(form) {
  81. this.$refs["form"].validate((valid) => {
  82. if (valid) {
  83. if (form === 'submit'){
  84. this.$emit('submitAndSave')
  85. }else {
  86. this.$emit('submitForm')
  87. }
  88. } else {
  89. return false;
  90. }
  91. });
  92. },
  93. }
  94. }
  95. </script>
  96. <style scoped>
  97. </style>