vue+element 动态添加一项下拉框

23 篇文章 0 订阅

1.开发中有个实习生有一个需求,写了个demo记录下来了,东西不难,遇到同样的没头绪可以看看

 

 

<template>
    <div style="margin: 48px;">
        <el-table :data="list">
            <el-table-column label="偏远地区加价" min-width="300">
                <template #default="{row}">
                    <div style="display: flex;">
                        <el-input v-model="row.service" disabled style="width: 100px;"></el-input>
                        <span>元/单</span>
                    </div>
                </template>
            </el-table-column>
            <el-table-column label="使用区域" min-width="300">
                <template #default="{row}">{{ getArea(row.region) }}</template>
            </el-table-column>
            <el-table-column label="操作" width="200">
                <template #default="{$index}">
                    <el-button @click="openEdit($index)">查看</el-button>
                    <el-button @click="del($index)">删除</el-button>
                </template>
            </el-table-column>
        </el-table>
        <el-button @click="openAdd">添加</el-button>
        <div>{{ JSON.stringify(list) }}</div>
        <el-dialog :title="dialogTitle" width="480px" :visible.sync="visible">
            <el-form label-width="140px" size="small" :model="model" :rules="rules">
                <el-form-item label="加收费用:" prop="service">
                    <div style="display: flex;">
                        <el-input v-model="model.service" style="width: 100px;"></el-input>
                        <span>元/单</span>
                    </div>
                </el-form-item>
                <el-form-item label="偏远地区选择:" prop="region">
                    <div style="display: flex;justify-content: space-between;margin-bottom: 16px;" v-for="(i, index) in model.region" :key="index">
                        <el-select v-model="i.title" style="width: 150px;">
                            <el-option value="111"></el-option>
                            <el-option value="222"></el-option>
                            <el-option value="333"></el-option>
                            <el-option value="444"></el-option>
                            <el-option value="555"></el-option>
                        </el-select>
                        <el-button v-if="index == model.region.length - 1" @click="addArea">添加偏远地区</el-button>
                        <el-button v-else type="danger" @click="delArea(index)">删除偏远地区</el-button>
                    </div>
                </el-form-item>
            </el-form>
            <template #footer>
                <el-button type="primary" @click="confirm">确定</el-button>
                <el-button @click="visible = false">取消</el-button>
            </template>
        </el-dialog>
    </div>
</template>

<script>
    export default {
        data() {
            return {
                list: [],
                visible: false,
                editIndex: null,
                model: {
                    service: "",
                    region: [{ title: "" }]
                },
                rules: {
                    service: { required: true, message: '加收费用不能为空!' },
                    region: { required: true, message: '地区选择不能为空!' }
                }
            }
        },
        methods: {
            getArea(region){
                return (region || []).map(v => v.title).join(";")
            },
            del(index){
                this.list.splice(index, 1)
            },
            openAdd(){
                this.editIndex = null;
                this.visible = true;
            },
            openEdit(index){
                this.editIndex = index;
                let row = this.list[index];
                this.model.service = row.service;
                this.model.region = (row.region || []).map(v => ({ title: v.title }))
                this.visible = true;
            },
            addArea(){
                this.model.region.push({ title: "" })
            },
            delArea(index){
                this.model.region.splice(index, 1)
            },
            confirm(){
                if(this.editIndex === null){
                    this.list.push(this.model);
                }
                else{
                    this.list.splice(this.editIndex, 1, this.model)
                }
                this.model = {
                    service: "",
                    region: [{ title: "" }]
                }
                this.visible = false;
            }
        },
        computed: {
            dialogTitle(){
                return this.isEdit ? "添加偏远地区加价" : "偏远地区加价详情"
            }
        }
    }
</script>

<style scoped>
    
</style>

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值