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>

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

相关推荐
rfidunion8 分钟前
springboot+VUE+部署(1。新建项目)
java·vue.js·spring boot
wuk99825 分钟前
梁非线性动力学方程MATLAB编程实现
前端·javascript·matlab
Irene199126 分钟前
在 Vue 中使用 TypeScript 的几种方式
vue.js·typescript
XiaoYu200235 分钟前
第11章 LangChain
前端·javascript·langchain
hhcccchh2 小时前
学习vue第八天 Vue3 模板语法和内置指令 - 简单入门
前端·vue.js·学习
yyf198905252 小时前
Vue 框架相关中文文献
前端·javascript·vue.js
粥里有勺糖2 小时前
开发一个美观的 VitePress 图片预览插件
前端·vue.js·vitepress
行者962 小时前
Flutter适配OpenHarmony:国际化i18n实现中的常见陷阱与解决方案
开发语言·javascript·flutter·harmonyos·鸿蒙
我的写法有点潮2 小时前
推荐几个国外比较流行的UI库(上)
前端·javascript·css
鹏多多2 小时前
jsx/tsx使用cssModule和typescript-plugin-css-modules
前端·vue.js·react.js