当前位置:   article > 正文

form嵌套table表单验证_form table嵌套验证

form table嵌套验证

###我们需要使用table但是table中会存在必要的输入框需要使用table和form进行组合嵌套

实现方式1:单个实现

##template

  1. <el-form
  2. :model="contract" //这里绑定的是form对象
  3. ref="contractForm"
  4. :rules="contract.rules" //表单的验证规则
  5. size="small"
  6. >
  7. <el-table
  8. border
  9. :header-cell-style="{background:'#D0DCEC',color:'#333',textAlign: 'center',}"
  10. //background 可以改变表头的背景颜色,textAlign可以更改表头的对齐居中
  11. :height="400"
  12. :data="contract.tableData" //这里是table的数据data
  13. width="100%"
  14. @selection-change="handleSelectionChange"
  15. >
  16. <el-table-column
  17. type="selection"
  18. width="55"
  19. fixed="left"
  20. align="center"
  21. >
  22. </el-table-column>
  23. <el-table-column
  24. type="index"
  25. align="center"
  26. :index="indexMethod"
  27. label="序号"
  28. width="55"
  29. fixed="left"
  30. >
  31. </el-table-column>
  32. <el-table-column
  33. :render-header="renderHeader"
  34. prop="swtcplxje"
  35. label="委托产品类型"
  36. width="150"
  37. >
  38. <template slot-scope="scope">
  39. <el-form-item
  40. :prop="'tableData.' + scope.$index + '.swtcplxje'"
  41. //tableData是table的数据data ,scope.$index 为下标 ,swtcplxje 为当前的prop绑定值
  42. :rules="contract.rules.swtcplxje"
  43. //表单的验证规则绑定
  44. >
  45. <el-input
  46. :maxlength="999"
  47. v-model="scope.row.swtcplxje"
  48. ></el-input>
  49. </el-form-item>
  50. </template>
  51. </el-table-column>
  52. <el-table>
  53. <el-form>

###script:

  1. //form绑定对象
  2. contract: {
  3. //表单验证的规则
  4. rules: {
  5. swtcplxje: [
  6. {
  7. required: true,
  8. message: "请输入",
  9. trigger: ["blur"],
  10. },
  11. ],
  12. },
  13. //table数据绑定数组
  14. tableData: [],
  15. },
  16. //动态根据rules中的keytable中的prop进行比对表头添加小红星
  17. renderHeader(h, { column }) {
  18. let arr = [];
  19. for (let key in this.contract.rules) {
  20. arr.push(key);
  21. }
  22. if (arr.includes(column.property)) {
  23. return [
  24. h("span", { style: "color:red" }, "*"),
  25. h("span", "" + column.label),
  26. ];
  27. } else {
  28. return [h("span", "" + column.label)];
  29. }
  30. },

###方式二:table循环绑定from验证

###template

  1. <div>
  2. <el-button @click="addrow" size="small">增行</el-button>
  3. //model表示为需要绑定的对象,rules表单验证的规则 :rules="contract.rules" 表单验证规则
  4. <el-form :model="contract" :rules="contract.rules" ref="contractForm">
  5. <el-table
  6. border
  7. :header-cell-style="{
  8. background: '#f2f2f2',
  9. fontSize: '14px',
  10. textAlign: 'center', //表头对齐方式
  11. padding: '0px !important',
  12. color: '#626262',
  13. }"
  14. :height="400"
  15. :loading="contract.tableLoading"
  16. :data="contract.tableData"
  17. row-key="id"
  18. width="100%"
  19. @selection-change="handleSelectionChange"
  20. >
  21. <el-table-column
  22. type="selection"
  23. width="55"
  24. fixed="left"
  25. align="center"
  26. >
  27. </el-table-column>
  28. <el-table-column
  29. type="index"
  30. align="center"
  31. :index="indexMethod"
  32. label="序号"
  33. width="55"
  34. fixed="left"
  35. >
  36. </el-table-column>
  37. //进行行的遍历循环contract.tableList表头数据 ,:fixed="item.fixed 表示固定的位置 :render-header="renderHeader 动态对比rules每个的key和 :prop="item.value" 中是否一样,一样表头添加*
  38. <!-- <template> -->
  39. <el-table-column
  40. v-for="(item,index) in contract.tableList"
  41. :key="index"
  42. :label="item.label"
  43. align="center"
  44. :width="item.width"
  45. :prop="item.value"
  46. :fixed="item.fixed"
  47. :render-header="renderHeader"
  48. >
  49. <template slot-scope="scope">
  50. // :prop="'tableData.' + scope.$index + '.'+ [item.value]" 动态关联每个prop
  51. //:rules="contract.rules[item.value]" rules动态添加
  52. <el-form-item
  53. v-if="scope.$index > -1 && item.type==='input'"
  54. :prop="'tableData.' + scope.$index + '.'+ [item.value]"
  55. :rules="contract.rules[item.value]"
  56. >
  57. <!-- -->
  58. <el-input
  59. size="small"
  60. v-model="scope.row[item.value]"
  61. :placeholder="item.label"
  62. ></el-input>
  63. </el-form-item>
  64. <el-form-item
  65. v-else-if="scope.$index > -1 && item.type==='number'"
  66. :prop="item.value"
  67. >
  68. <el-input
  69. size="small"
  70. v-model="scope.row[item.value]"
  71. placeholder="请输入"
  72. @input="blurNumberFixed(scope.row[item.value], scope.$index,item.value)"
  73. ></el-input>
  74. </el-form-item>
  75. <el-form-item
  76. v-else-if="scope.$index > -1 && item.type==='select'"
  77. :prop="item.value"
  78. >
  79. <el-select
  80. size="small"
  81. v-model="scope.row[item.value]"
  82. placeholder="请选择"
  83. >
  84. <el-option
  85. v-for="(i, k) in item.options"
  86. :key="k"
  87. :label="i.label"
  88. :value="i.value"
  89. >
  90. </el-option>
  91. </el-select>
  92. </el-form-item>
  93. <el-button
  94. v-else-if="item.type==='operateion'"
  95. type="danger"
  96. size="small"
  97. @click.native.prevent="deleteRow(scope.$index, contract.tableData)"
  98. >
  99. 删除
  100. </el-button>
  101. <el-form-item
  102. v-else-if="scope.$index > -1 && item.type==='date'"
  103. :prop="item.value"
  104. >
  105. <el-date-picker
  106. size="small"
  107. v-model="scope.row[item.value]"
  108. type="date"
  109. placeholder="选择日期"
  110. format="yyyy 年 MM 月 dd 日"
  111. value-format="yyyy-MM-dd HH:mm:ss"
  112. />
  113. </el-form-item>
  114. </template>
  115. </el-table-column>
  116. <!-- </template> -->
  117. </el-table>
  118. </el-form>
  119. </div>

实现效果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/329170
推荐阅读
相关标签
  

闽ICP备14008679号