当前位置:   article > 正文

【Vue】vue动态添加表单项

vue 表单从接口获取动态添加

一、需求背景

有一个接口需要批量修改入参,但是不固定多少个入参,不固定是哪一个。就得做一个动态添加表单项,如下面的格式params里面,一个key,一个value

参数形式如下面params,忽略pvaId。

{"pvaId":9,"params":[{"paramName":"1","paramValue":"1"},{"paramName":"2","paramValue":"2"},{"paramName":"3","paramValue":"3"},{"paramName":"4","paramValue":"4"}]}

二、实现效果

一组值是一个参数名,一个参数值,

可动态添加一组,可删除一组。

三、实现过程

3.1、html

固定打开弹窗,会显示一组参数名1,参数值1;

点击添加参数后,会在下面动态生成参数名2,参数值2.......;

点击一组参数后面的删除按钮,会动态删除该组参数,下面的下标自动向上替代删除的一个

  1. 1 <!-- 批量修改参数的对话框 -->
  2. 2 <el-dialog :visible.sync="showModifyParametersVisible" title="批量修改参数" center customClass="customWidth" :before-close="closeDialog">
  3. 3 <el-form ref="modifyParametersForm" :inline="true" :model="modifyParametersForm" >
  4. 4 <el-form-item label='参数名1' prop="params[0].paramName" :rules="{
  5. 5 required: true, message: '参数名不能为空', trigger: 'blur'
  6. 6 }">
  7. 7 <el-input v-model="modifyParametersForm.params[0].paramName"></el-input>
  8. 8 </el-form-item>
  9. 9 <el-form-item label='参数值1' prop="params[0].paramValue" :rules="{
  10. 10 required: true, message: '参数值不能为空', trigger: 'blur'
  11. 11 }">
  12. 12 <el-input v-model="modifyParametersForm.params[0].paramValue"></el-input>
  13. 13 </el-form-item>
  14. 14 <el-form-item>
  15. 15 <i class="el-icon-delete" style="visibility:hidden;"></i>
  16. 16 </el-form-item>
  17. 17 <!-- 动态增加项目 -->
  18. 18
  19. 19 <div v-for="(item, index) in modifyParametersForm.params" v-if="index>=1" :key="index">
  20. 20 <el-form-item :label="'参数名' + (index+1)" :prop="'params.' + index + '.paramName'" :rules="{
  21. 21 required: true, message: '参数名不能为空', trigger: 'blur'
  22. 22 }">
  23. 23
  24. 24 <el-input v-model="item.paramName"></el-input>
  25. 25 </el-form-item>
  26. 26 <el-form-item :label="'参数值' + (index+1)" :prop="'params.' + index + '.paramValue'" :rules="{
  27. 27 required: true, message: '参数值不能为空', trigger: 'blur'
  28. 28 }">
  29. 29 <el-input v-model="item.paramValue"></el-input>
  30. 30 </el-form-item>
  31. 31
  32. 32 <el-form-item>
  33. 33 <i class="el-icon-delete" @click="deleteItem(item, index)"></i>
  34. 34 </el-form-item>
  35. 35 </div>
  36. 36 </el-form>
  37. 37 <div slot="footer" class="dialog-footer">
  38. 38 <el-button type="primary" @click="submitParameForm()">提交</el-button>
  39. 39 <el-button @click="addItem">添加参数</el-button>
  40. 40 </div>
  41. 41 </el-dialog>

3.2、data

  1. 1 // 批量修改入参表单
  2. 2 modifyParametersForm: {
  3. 3 pvaId: '',
  4. 4 params: [
  5. 5 {
  6. 6 "paramName": '',
  7. 7 "paramValue": ''
  8. 8 }
  9. 9 ]
  10. 10 },

3.3、JS

  1. 1 // 批量修改参数相关接口
  2. 2 // 添加一组key/value输入框
  3. 3 addItem() {
  4. 4 this.modifyParametersForm.params.push({
  5. 5 paramName: '',
  6. 6 paramValue: ''
  7. 7 })
  8. 8 },
  9. 9 // 删除一组输入框
  10. 10 deleteItem(item, index) {
  11. 11 this.modifyParametersForm.params.splice(index, 1)
  12. 12 },
  13. 13 // 关闭批量修改参数表单
  14. 14 closeDialog(){
  15. 15 this.showModifyParametersVisible = false
  16. 16 this.modifyParametersForm = {
  17. 17 pvaId: '',
  18. 18 params: [
  19. 19 {
  20. 20 "paramName": '',
  21. 21 "paramValue": ''
  22. 22 }
  23. 23 ]
  24. 24 }
  25. 25 },
  26. 26 // 提交批量修改入参表单
  27. 27 submitParameForm() {
  28. 28 this.$refs.modifyParametersForm.validate((valid) => {
  29. 29 if (valid) {
  30. 30 31 updateParams(this.modifyParametersForm).then(response => {
  31. 32 console.log(response.status)
  32. 33 if (response.status === 1) {
  33. 34 console.log('success!!')
  34. 35 this.$message.success('修改入参成功!')
  35. 36 // 提交后关闭弹窗,清空数据
  36. 37 this.$nextTick(() => {
  37. 38 this.closeDialog()
  38. 39 })
  39. 40
  40. 41 } else {
  41. 42 console.log('failed')
  42. 43 this.$message.error(response.message)
  43. 44 }
  44. 45 })
  45. 46 } else {
  46. 47 console.log('error submit!!')
  47. 48 return false
  48. 49 }
  49. 50 })
  50. 51 },
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/91420
推荐阅读