<Element-ui el-form>动态添加表单项-el-select

 1.场景描述,根据下拉选择框,选定某个值然后动态添加一个下拉框2

目录

 1.场景描述,根据下拉选择框,选定某个值然后动态添加一个下拉框2


  

<template>
  <div>
    <template>
      <el-form ref="form" :model="form" label-width="80px" class="demo-dynamic">
        <el-form-item label="活动名称">
          <el-input v-model="form.name"></el-input>
        </el-form-item>
        <el-form-item label="模式">
          <el-select v-model="form.region" placeholder="请选择模式">
            <el-option v-for="item in selectmode" :key="item.value" :label="item.label" :value="item.value"></el-option>
          </el-select>
        </el-form-item>
        <div v-show="form.region === 'repair'">
          <el-form-item label="修复模式">
            <el-select v-model="form.region2" placeholder="请选择选项">
              <el-option v-for="item in selectmode2" :key="item.value" :label="item.label" :value="item.value"></el-option>
            </el-select>
          </el-form-item>
        </div>
        <el-form-item label="活动时间">
          <el-col :span="11">
            <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 100%;"></el-date-picker>
          </el-col>
          <el-col class="line" :span="2">-</el-col>
          <el-col :span="11">
            <el-time-picker placeholder="选择时间" v-model="form.date2" style="width: 100%;"></el-time-picker>
          </el-col>
        </el-form-item>
        <el-form-item label="即时配送">
          <el-switch v-model="form.delivery"></el-switch>
        </el-form-item>
        <el-form-item label="活动性质">
          <el-checkbox-group v-model="form.type">
            <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
            <el-checkbox label="地推活动" name="type"></el-checkbox>
            <el-checkbox label="线下主题活动" name="type"></el-checkbox>
            <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
          </el-checkbox-group>
        </el-form-item>
        <el-form-item label="特殊资源">
          <el-radio-group v-model="form.resource">
            <el-radio label="线上品牌商赞助"></el-radio>
            <el-radio label="线下场地免费"></el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="活动形式">
          <el-input type="textarea" v-model="form.desc"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="onSubmit">立即创建</el-button>
          <el-button>取消</el-button>
        </el-form-item>
      </el-form>
    </template>
  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {
        name: '',
        region: '',
        region2: '',
        date1: '',
        date2: '',
        delivery: false,
        type: [],
        resource: '',
        desc: ''
      },
      selectmode: [
        { value: 'repair', label: '修复' },
        { value: 'append', label: '追加' },
        { value: 'overwirtte', label: '覆盖' }
      ],
      selectmode2: [
        { value: 'repair1', label: '选项1' },
        { value: 'append2', label: '选项2' },
        { value: 'overwirtte3', label: '选项3' }
      ]
    }
  }
}
</script>

<style lang="scss" scoped></style>

2.完整代码

<template>
  <div class="profile">
    <el-main>
      <el-button type="primary" @click="centerDialogVisible = true">弹框按钮</el-button>
    </el-main>
    <div>
      <el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic">
        <el-form-item label="下拉框" prop="typeSelect">
          <el-select v-model="dynamicValidateForm.typeSelect" placeholder="请选择">
            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
          </el-select>
        </el-form-item>
        <div v-show="dynamicValidateForm.typeSelect === 0" v-for="item in array" :key="item.index">
          <el-form-item label="输入项">
            <input type="text" class="select_first input_common input_border_right" readonly="true" v-model="item.selectNumber" />
            <input type="text" class="select_two input_common input_border_left" readonly="true" v-model="item.selectText" />
            <span class="select_three input_common input_border_right">扣分:</span>
            <input type="number" class="select_four input_common input_border_left" v-model="item.selectInput" />
          </el-form-item>
        </div>
        <div v-show="dynamicValidateForm.typeSelect === 2" v-for="(item, index) in newarray" :key="index">
          <el-form-item label="修复类型">
            <el-select v-model="item.selectText" placeholder="请选择">
              <el-option v-for="item in repForm" :key="item.value" :label="item.label" :value="item.value"> </el-option>
            </el-select>
          </el-form-item>
        </div>
        <el-form-item>
          <span>
            <el-button @click="centerDialogVisible = false">取 消</el-button>
            <el-button type="primary" @click="submit">确 定</el-button>
          </span>
        </el-form-item>
      </el-form>
    </div>
    <!-- <el-dialog title="增加删除元素" :visible.sync="centerDialogVisible" width="50%" center>
      <el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic">
        <el-form-item label="下拉框" prop="typeSelect">
          <el-select v-model="dynamicValidateForm.typeSelect" placeholder="请选择">
            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
          </el-select>
        </el-form-item>
        <div v-show="dynamicValidateForm.typeSelect === 0" v-for="item in array" :key="item.index">
          <el-form-item label="输入项">
            <input type="text" class="select_first input_common input_border_right" readonly="true" v-model="item.selectNumber" />
            <input type="text" class="select_two input_common input_border_left" readonly="true" v-model="item.selectText" />
            <span class="select_three input_common input_border_right">扣分:</span>
            <input type="number" class="select_four input_common input_border_left" v-model="item.selectInput" />
          </el-form-item>
        </div>
        <div v-show="dynamicValidateForm.typeSelect === 1" v-for="(item, index) in newarray" :key="index">
          <el-form-item label="输入项">
            <input type="text" class="select_first input_common input_border_right" readonly="true" v-model="item.selectNumber" />
            <input type="text" class="select_two input_common input_border_left" readonly="true" v-model="item.selectText" />
            <span class="select_three input_common input_border_right">扣分:</span>
            <input type="number" class="select_four input_common input_border_left" v-model="item.selectInput" />
            <el-button type="danger" icon="el-icon-delete" circle @click="deleteData(item.index)"></el-button>
            <el-button type="primary" icon="el-icon-edit" circle v-if="newarray.length - 1 === index" @click="add"></el-button>
          </el-form-item>
        </div>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="centerDialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="submit">确 定</el-button>
      </span>
    </el-dialog> -->
  </div>
</template>
<script>
const TYPE = ['A.', 'B.', 'C.', 'D.', 'E.', 'F.']
//import HeaderTop from '../../components/HeaderTop.vue'
export default {
  name: 'profile',
  components: {
    //HeaderTop
  },
  data() {
    return {
      centerDialogVisible: false,
      dynamicValidateForm: {
        typeSelect: '',
        type: []
      },
      repForm: [
        {
          value: 0,
          label: '修复项1'
        },
        {
          value: 1,
          label: '修复项2'
        },
        {
          value: 3,
          label: '修复项3'
        }
      ],
      options: [
        {
          value: 0,
          label: '覆盖'
        },
        {
          value: 1,
          label: '追加'
        },
        {
          value: 2,
          label: '修复'
        }
      ],
      array: [
        {
          selectNumber: 'A.',
          selectText: '是',
          selectInput: ''
        },
        {
          selectNumber: 'B.',
          selectText: '否',
          selectInput: ''
        }
      ],
      newarray: [
        {
          selectText: ''
        }
      ]
    }
  },
  created() {
    this.onchangeSelect()
  },
  methods: {
    // 赋值字母
    // onchangeSelect() {
    //   this.newarray = this.newarray.map((item, index) => {
    //     item.selectNumber = TYPE[index]
    //     return item
    //   })
    // },
    // 增加
    add() {
      if (this.newarray.length + 1 > 6) {
        this.$alert('最多输入6项')
        return
      } else {
        this.newarray.push({
          index: this.newarray.length,
          value: ''
        })
      }
      this.onchangeSelect()
    },
    // 删除
    deleteData(index) {
      if (this.newarray.length - 1 < 3) {
        this.$alert('至少输入3项')
        return
      } else {
        this.newarray.splice(index, 1)
      }
      this.onchangeSelect()
    },
    submit() {
      console.log(this.array)
      console.log(this.newarray)
    }
  }
}
</script>
<style scoped>
.profile {
  width: 100%;
  height: 100%;
  overflow: auto;
}
/* 每个input都有 */
.input_common {
  border: 1px solid rgba(205, 205, 205, 1);
  border-radius: 2px;
}

/* 2,4 */
.input_border_left {
  border-left: none;
  margin-left: -5px;
}

/* 1,3 */
.input_border_right {
  border-right: none;
}

.select_first {
  width: 25px;
  height: 34px;
  padding-left: 10px;
}
.select_two {
  width: 55px;
  height: 33px;
  padding-bottom: 1px;
}
.select_three {
  padding: 7px 0px 8px 10px;
}
.select_four {
  width: 100px;
  height: 34px;
}
</style>

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值