新增 编辑弹出框

用的是table的column

js 复制代码
<el-dialog
   :title="title"
    :visible.sync="open"
    width="552px"
    append-to-body
    @close="handleClose"
>
    <el-form :model="formData" label-width="100px">
        <el-row>
            <el-col
                :span="12"
                v-for="(item, index) in columns"
                :key="index"
            >
                <el-form-item :label="item.label" :prop="item.prop">
                    <template v-if="item.type === 'input'">
                        <el-input
                            v-model="formData[item.prop]"
                            :placeholder="'请输入' + item.label"
                        ></el-input>
                    </template>
                    <template v-else-if="item.type === 'select'">
                        <el-select
                            v-model="formData[item.prop]"
                            :placeholder="'请选择' + item.label"
                        >
                            <!-- 这里的 options 数据根据 item.equipmentType 或其他条件来动态生成 -->
                            <el-option
                                v-for="(option, idx) in getOptions(
                                    item.prop
                                )"
                                :key="idx"
                                :label="option.label"
                                :value="option.value"
                            ></el-option>
                        </el-select>
                    </template>
                </el-form-item>
            </el-col>
        </el-row>
        <el-form-item class="dialog-footer">
            <el-button size="small" @click="resetForm">取消</el-button>
            <el-button size="small" type="primary" @click="submitForm"
                >保存</el-button
            >
        </el-form-item>
    </el-form>
</el-dialog>

 columns: [
	{ type: "input", label: "路段名称", prop: "roadName" },
	{ type: "select", label: "方向", prop: "direction" },
	{ type: "input", label: "开始桩号", prop: "startStakeNo" },
	{ type: "input", label: "结束桩号", prop: "endStakeNo" },
	{ type: "input", label: "布设里程", prop: "distance" },
	{
	    type: "select",
	    label: "设备类型",
	    prop: "equipmentType",
	},
	{ type: "input", label: "设备名称", prop: "equipmentName" },
],
formData: {
    id: "",
    roadName: "",
    direction: "",
    startStakeNo: "",
    endStakeNo: "",
    distance: "",
    equipmentType: "",
    equipmentName: "",
},

 getOptions(prop) {
   // 根据prop字段返回不同的options
    if (prop === "direction") {
        return [
            { label: "上行", value: "上行" },
            { label: "下行", value: "下行" },
        ];
    } else if (prop === "equipmentType") {
        return [
            { label: "诱导灯", value: "诱导灯" },
            { label: "能见度检测仪", value: "能见度检测仪" },
            { label: "诱导设备", value: "诱导设备" },
            { label: "警示装置", value: "警示装置" },
        ];
    }
    return [];
},

点击取消清空对象的值
resetForm() {
  Object.keys(this.formData).forEach((key) => {
       this.formData[key] = "";
   });
},

编辑赋值
 handleDetail(id) {
  getCurrentFacility(id).then(({ data }) => {
        this.open = true;
        this.title = "编辑";
        Object.keys(this.formData).forEach((key) => {
            this.formData[key] = data[key];
        });
        console.log(this.formData, "res");
    });
},
相关推荐
PedroQue9915 分钟前
uni-router v1.8.0新增冷启动守卫补执行
前端·uni-app
xiaok16 分钟前
部署之后,本地浏览器还在读取旧缓存导致页面一直显示loading中
前端
用户0595401744616 分钟前
Redis缓存一致性踩坑实录:线上故障排查6小时,我用pytest+内存快照把它永久关进了笼子
前端·css
星栈21 分钟前
我用 Rust + Dioxus 做了个全栈跨平台笔记应用:第一版先把列表和详情跑通
前端·rust·前端框架
用户17335980753735 分钟前
Vue 3 SPA 首屏优化:从 3s 到 1.2s 的 5 个实践
前端·vue.js
咖啡无伴侣35 分钟前
基础骨架:30 分钟搭好 pnpm workspace,完成双项目 Monorepo 迁入
前端
谷无姜39 分钟前
Webpack5 进阶思考:那些官方文档没讲清楚的事
前端·webpack
weedsfly39 分钟前
还在用 Axios?你可能需要重新理解 XHR 与 Fetch
前端·javascript·面试
CoderWeen41 分钟前
从零实现一个 Vue3 流程图编辑器:节点拖拽、贝塞尔连线与框选
前端·javascript
森鹿41 分钟前
express中间件原理以及大致实现
前端·express