element ui ---<el-table>表格里嵌套<el-select>下拉框单选互斥功能实现.

主要功能实现: 表格里嵌套下拉框并不少见,我这里主要实现效果是表格里多条数据共用一个下拉选项,并且每行选中之后,被选中项在下拉框里置灰不可再选中. 

主要代码如下:

当下拉项被选中时,触发下面的方法,遍历当前下拉项中符合当前选中项,然后置灰.当infoList 里属性值不包含当前被选中项则设置isCheck 为false 实现再次点击.

复制代码
 // 处置项更改
    chargeItemChanged(val,obj){
      this.chargeItems.forEach(item=>{
        if(item.id == val){
          this.$set(obj,'deductionExecutionStepId',item.id);
          this.$set(obj,'chargeItemName',item.label);
          this.$set(item,'isCheck',true);
        }
      })
      let arr = this.ruleData.infoList.map(v=> v.deductionExecutionStepId).filter(k=>k!=null);
      this.chargeItems.forEach(v=>{
        if(arr.indexOf(v.id) == -1){
          this.$set(v,'isCheck',false)
        }
      })
    },
复制代码

表格标签部分代码示例:

复制代码
<el-table-column align="center" 
            prop="chargeItemName" 
            label="处置项" 
            width="300" 
            fixed="right"
            v-if="ruleData.useType  == '销售领用'">
            <template slot-scope="scope">
              <el-form-item
                v-else
                label=" "
                :prop="'infoList.' + scope.$index + '.chargeItemName'"
                :rules="rules.chargeItemName"
                label-width="0"
                class="costValue">
                <el-select   
                  v-model="scope.row.chargeItemName"
                  placeholder="请选择"
                  @change="chargeItemChanged($event,scope.row)">
                  <el-option
                    :disabled="item.isCheck"
                    v-for="item in chargeItems"
                    :key="item.id"
                    :label="item.label"
                    :value="item.id">
                  </el-option>
                </el-select>
              </el-form-item>
            </template>
          </el-table-column>
复制代码
this.ruleData.infoList 为表格列表渲染数组,this.chargeItems 为每行下拉框的下拉选项数组集合
数据格式示例如下:
this.ruleData.infoList = [
{
   amount:2,
   deductionExecutionStepId: "ZXJL2106240024",
   chargeItemCode: "2801000006"
   chargeItemName: "儿童电动牙刷"
}
];
this.chargeItems = [{
    isCheck:false,
    id:'ZXJL2106240024',
    label:'儿童电动牙刷',
    Code: "2801000006"
}
]

 

posted @   巫小婆  阅读(2745)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示