el-table表格中多个选择框的级联效果

<template>
  <el-table
    ref="multipleTableRef"
    :data="tableData1.data"
    style="width: 100%"
    border
    size="small"
  >
    <el-table-column type="selection" width="55" />
    <el-table-column property="name" label="Name" width="120" />
    <el-table-column property="value" label="省" width="300" >
      <template #default="scope">
        <el-select
          v-model="scope.row.value1"
          placeholder="Select"
          style="width: 240px"
          @change="changeOneFn(scope.row)"
        >
          <el-option
            v-for="item in tableData2.data"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          />
        </el-select>
      </template>
    </el-table-column>
    <el-table-column property="value" label="市" width="300" >
      <template #default="scope">
        <el-select
          v-model="scope.row.value2"
          placeholder="Select"
          style="width: 240px"
          @click="clickFn(scope.row)"
        >
          <el-option
            v-for="item in scope.row.cityList"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          />
        </el-select>
      </template>
    </el-table-column>
  </el-table>
</template>

<script  setup>
import { ref, reactive } from 'vue'
import { ElTable } from 'element-plus'
const multipleTableRef = ref();
const multipleSelection = ref([]);

let tableData1 = reactive({data:[
  {
    name: 'Tom1',
    value1:'',
    value2:'',
    cityList:[]
  },
  {
    name: 'Tom2',
    value1:'',
    value2:''
  },
  {
    name: 'Tom3',
    value1:'',
    value2:''
  },
  {
    name: 'Tom4',
    value1:'',
    value2:''
  }
]});

let tableData2 =reactive( {data:[
  {
    id: '1',
    value: '陕西',
    label: '陕西',
    name: '陕西',
    city:['西安','咸阳','渭南']
  },
  {
    id: '2',
    value: '四川',
    label: '四川',
    name: '四川',
    city:['重庆','成都']

  }
]});

const changeOneFn=(row)=>{
  console.log('row',row);
  let data=tableData2.data.filter(item=>{
    return item.value==row.value1
  });
  row.cityList=data[0].city.map(item=>{
    return {label:item,value:item}
  })

};
const focusFn= (row)=>{
  if(!row.value1) {
    alert('请先选择省')
  }
}
const clickFn=(row)=>{
  console.log('点击下拉框');
  if(!row.value1){
    alert('请先选择省')
  }
}
</script>
<style scoped>
.box {
  width: 100%;
  height: 100%;
}
</style>

根据提供的引用内容,我们可以得知el-tableelement-ui的一个表格组件,而el-cascader是一个级联选择器组件。如果要在el-table使用el-cascader,并且要求el-cascader必填,可以通过以下步骤实现: 1. 在el-table使用el-cascader组件,并将el-cascader的v-model绑定到数据源。 2. 在el-cascader组件上添加一个ref属性,以便在后面的步骤可以访问该组件。 3. 在el-table的表头添加一个自定义列,该列包含一个自定义的表头模板和一个自定义的单元格模板。 4. 在自定义的表头模板添加一个必填的标记,例如一个红色的星号。 5. 在自定义的单元格模板添加一个验证逻辑,以确保el-cascader已经选择了一个值。可以使用$refs访问el-cascader组件,并使用其validate()方法进行验证。 下面是一个示例代码,演示如何在el-table使用el-cascader并进行必填校验: ```html <template> <el-table :data="tableData"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> <<el-table-column label="级联选择器"> <template slot-scope="scope"> <el-cascader v-model="scope.row.cascaderValue" :options="cascaderOptions" ref="cascader" placeholder="请选择" clearable ></el-cascader> </template> <template slot="header"> <span>级联选择器</span> <span style="color: red">*</span> </template> </el-table-column>> <el-table-column label="操作"> <template slot-scope="scope"> <el-button type="primary" @click="handleValidate(scope.row)">验证</el-button> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: "张三", address: "北京", cascaderValue: [] }, { name: "李四", address: "上海", cascaderValue: [] }, { name: "王五", address: "广州", cascaderValue: [] } ], cascaderOptions: [ { value: "beijing", label: "北京", children: [ { value: "chaoyang", label: "朝阳区" }, { value: "haidian", label: "海淀区" } ] }, { value: "shanghai", label: "上海", children: [ { value: "pudong", label: "浦东新区" }, { value: "minhang", label: "闵行区" } ] }, { value: "guangzhou", label: "广州", children: [ { value: "tianhe", label: "天河区" }, { value: "yuexiu", label: "越秀区" } ] } ] }; }, methods: { handleValidate(row) { this.$refs.cascader.forEach(cascader => { cascader.clearValidate(); if (!cascader.cascaderValue || cascader.cascaderValue.length === 0) { cascader.validate(); } }); } } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值