el-table中el-select俩列共用同一数据并且选择不能相同

需求:el-table中有el-select,el-select的下拉数据源是相同的,但是要同一行的俩列数据选择不相同,如果相同需要提示并且清空数据

1.效果

2.主要代码详解

主要是 @change="handleChange('后人员', scope.$index, scope.row.new_user)"

第一个属性是为了区分开前人员和后人员,第二个是当前行的索引值,第三个值是数据

html 复制代码
 <el-select
                        v-model="scope.row.new_user"
                        @change="handleChange('后人员', scope.$index, scope.row.new_user)"
                        filterable
                        size="small"
                        placeholder="请选择"
                    >
                        <el-option v-for="(item, index) in levelTable" :key="index" :label="item.label" :value="item.label"> </el-option>
                    </el-select> 

differenceTable:table表格的数据,如果当前是前人员选择,并且后人员等于前人员那么就清空前人员的数据

javascript 复制代码
    handleChange(columnName, rowIndex, newValue) {
            let row = this.differenceTable[rowIndex];
            if (columnName === '前人员' && row.new_user === newValue) {
                // this.$message.error('前人员和后人员不能相同!');
                this.message = '前人员和后人员不能相同!';
                row.old_user = '';
            } else if (columnName === '后人员' && row.old_user === newValue) {
                row.new_user = '';
                this.message = '前人员和后人员不能相同!';
                // this.$message.error('前人员和后人员不能相同!');
            } else {
                this.message = '';
            }
        }

3.完整代码

javascript 复制代码
<template>
    <div style="width: 100%; height: 300px">
        <el-table :data="differenceTable" style="width: 400px; margin-top: 50px">
            <el-table-column prop="name" label="前人员">
                <template slot-scope="scope">
                    <el-select
                        v-model="scope.row.old_user"
                        @change="handleChange('前人员', scope.$index, scope.row.old_user)"
                        filterable
                        size="small"
                        placeholder="请选择"
                    >
                        <el-option v-for="(item, index) in levelTable" :key="index" :label="item.label" :value="item.label">
                        </el-option> </el-select></template
            ></el-table-column>
            <el-table-column prop="name" label="后人员">
                <template slot-scope="scope">
                    <el-select
                        v-model="scope.row.new_user"
                        @change="handleChange('后人员', scope.$index, scope.row.new_user)"
                        filterable
                        size="small"
                        placeholder="请选择"
                    >
                        <el-option v-for="(item, index) in levelTable" :key="index" :label="item.label" :value="item.label"> </el-option>
                    </el-select> </template
            ></el-table-column>
        </el-table>
        <span>{{ message }}</span>
    </div>
</template>

<script>
export default {
    data() {
        return {
            differenceTable: [
                {
                    old_user: '',
                    new_user: ''
                }
            ],
            levelTable: [
                {
                    label: '张三',
                    value: 1
                },
                {
                    label: '李四',
                    value: 3
                },
                {
                    label: '王五',
                    value: 2
                }
            ],
            message: ''
        };
    },
    mounted() {},
    methods: {
        handleChange(columnName, rowIndex, newValue) {
            let row = this.differenceTable[rowIndex];
            if (columnName === '前人员' && row.new_user === newValue) {
                // this.$message.error('前人员和后人员不能相同!');
                this.message = '前人员和后人员不能相同!';
                row.old_user = '';
            } else if (columnName === '后人员' && row.old_user === newValue) {
                row.new_user = '';
                this.message = '前人员和后人员不能相同!';
                // this.$message.error('前人员和后人员不能相同!');
            } else {
                this.message = '';
            }
        }
    }
};
</script>

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

文章到此结束,希望对你有所帮助~

相关推荐
独立开发之道1 小时前
【three.js教程】Three.js 运行时更新:矩阵、几何体、材质怎么改才不卡
javascript·矩阵·材质
默_笙2 小时前
🌃 HTTP 不认识你:JWT 登录鉴权的完整"酒店入住"指南
前端·javascript
奋斗吧程序媛2 小时前
CSV文件导入功能
开发语言·javascript·ecmascript
天道kabuto3 小时前
vue-i18n 升级 9.x 踩坑:正则表达式引发的“花括号”惨案
vue.js
梨想橙汁3 小时前
JS 核心语法:运算符流程控制、函数、数组与对象实战详解
前端·javascript
七牛开发者3 小时前
拆解 dsh:Turn 与 Step 如何组织 Agent 主循环
前端·javascript·人工智能
空想兔3 小时前
前端网络请求的前世今生:从 Ajax、XHR 到 Fetch 和 Axios
javascript
梨想橙汁3 小时前
JavaScript 零基础入门:引入方式、变量与数据类型,吃透原始与引用类型
前端·javascript
WebInfra3 小时前
Rslib 1.0 正式发布:面向多场景的 JavaScript 库开发工具
前端·javascript·github
汉堡大王95274 小时前
面试官:讲讲归并排序 —— 为什么它能在面试里反复出现?
前端·javascript·面试