vue3+ts+element-plus服务端表格跨页回显,保存参数

<el-table
      ref="modelListRef"
      :data="tableData"
      border
      style="max-height: calc(100% - 60px); overflow: auto"
      @selection-change="handleCurrentRowChange"//复选框选中事件
      :row-key="getRowKey" //每一行标识
      :key="pageInfo.page" //用于回显对应界面中的数据
    >
      <el-table-column type="selection" :selectable="selectable"  width="55" />
      <el-table-column
        :prop="`${dynamicsKey}_name`"
        label="名称"
      ></el-table-column>
    </el-table>
    <el-pagination
    :current-page="pageInfo.page"
    :page-size="pageInfo.size"
    :page-sizes="pageInfo.pageSizes"
    background
    layout="->, total,  prev, pager, next, sizes"
    :total="pageInfo.total"
    @size-change="handleSizeChange"
    @current-change="handleCurrentChange"
  ></el-pagination>


<script>
//禁用task_status等于ONLINE,可以选中
const selectable = (row: User) => ["ONLINE"].includes(row.task_status)
//禁用task_status不等于ERROR,禁用
const selectable = (row: User) => ["ERROR"].includes(row.task_status)

const pageInfo = reactive({
    page: 1,
    size: 10,
    pageSizes: [10, 20, 30, 40, 50],
    total:0
  })
  const nameList = reactive<any>({})
  const tableData = ref<any>([])
  const modelListRef = ref<any>()
  const selectTableList = ref([])
  let internalSelection = reactive<any>({});
//获取表格数据
   const getTableList = async() => {
    //动态接口
    let interfaceInfo = props.interfaceType == 'getReportList'?                getReportList:fetchTaskModelList
    const { content,total } = await interfaceInfo({
      page: pageInfo.page,
      size: pageInfo.size,
      model_type: props.taskTypes,
      model_is_complete: true,
    })
    tableData.value = content
    pageInfo.total = total
     // 恢复已勾选的行
  const selectedKeys = Object.keys(internalSelection).filter(key => internalSelection[key]);
  selectTableList.value = tableData.value.filter((row:any) => selectedKeys.includes(getRowKey(row)));
  setTimeout(()=>{
    if(selectTableList.value.length>0){
      selectTableList.value.forEach((el:any)=>{
      modelListRef.value!.toggleRowSelection(el,true)
    })
    }
  },100)
  }

//获取选择的参数
const handleConfirmModels = () => {

    const entries = Object.entries(internalSelection);
    const filteredEntries = entries.filter(([, value]) => value === true);
    let filteredObj = Object.keys(Object.fromEntries(filteredEntries));
    const entrieName = Object.entries(nameList);
    const filtereName = entrieName.filter(([, value]) => value !== "");
    let filtereNamenew = filtereName.map(item => item[1]);
    let obj = {
      model_ids: filteredObj,
      model_names: filtereNamenew
    }
  }
  // 表格选中事件
const handleCurrentRowChange = (val: any) => {
  selectTableList.value = val
    // 更新内部已勾选的行
    val.forEach((row:any) => {
       //存取后面需要的多个参数
      nameList[getRowKey(row)] = row[`${props.dynamicsKey}_name`]
      internalSelection[getRowKey(row)] = true;
    });
    // 清除未勾选的行
    tableData.value.filter((row:any) => !val.includes(row)).forEach((row:any) => {
      internalSelection[getRowKey(row)] = false;
      nameList[getRowKey(row)] = ''
    });
}
//表格每一行唯一标识
const getRowKey = (row:any) => {
   return row[`${props.dynamicsKey}_id`];
  }
//切换条数
const handleSizeChange = (val: number) => {
    pageInfo.size = val
    getTableList()
  }
//切换分页
  const handleCurrentChange = (val: number) => {
    pageInfo.page = val
    getTableList()
  }
<script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值