formComponent.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 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="(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" :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. methods: {
  70. returnToForm(){
  71. this.$emit('returnToForm', this.form)
  72. },
  73. spellNumbers(name){
  74. this.form[name] = [this.number,this.numBer]
  75. },
  76. //选中后触发
  77. change(name,list,id){
  78. this.$emit('selectTrigger',name,list,id)
  79. },
  80. //表单验证
  81. submitForm(form) {
  82. this.$refs["form"].validate((valid) => {
  83. if (valid) {
  84. if (form === 'submit'){
  85. this.$emit('submitAndSave')
  86. }else if (form === 'check'){
  87. this.$emit('writeOff')
  88. }else {
  89. this.$emit('submitForm')
  90. }
  91. } else {
  92. return false;
  93. }
  94. });
  95. },
  96. }
  97. }
  98. </script>
  99. <style scoped>
  100. </style>