NDataTable 数据表格自定义多选

NDataTable 数据表格自定义多选

<template>
 <n-data-table :columns="columnsPar" :data="paramList" />
</template>
<script lang="ts" setup>
let paramsAll = ref(false);
let paramsInde = ref(false);
let paramsChecked: any = ref([]);
let returnAll = ref(false);
let returnInde = ref(false);
let returnChecked: any = ref([]);
const columnsPar = [
    {
      title: h(
        NSpace,
        {
          justify: 'start',
        },
        {
          default: () => {
            return h(NCheckbox, {
              label: '设为请求参数',
              indeterminate: paramsInde.value,
              checked: paramsAll.value,
              onUpdateChecked(val) {
                addParams((paramsAll.value = val), 'param');
              },
            });
          },
        }
      ),
      render(row, index) {
        return h(NCheckbox, {
          defaultChecked: row.param,
          checked: row.param,
          onUpdateChecked(val) {
            subParams(val, index, 'param');
          },
        });
      },
    },
    {
      title: h(
        NSpace,
        {
          justify: 'start',
        },
        {
          default: () => {
            return h(NCheckbox, {
              label: '设为请求参数',
              indeterminate: returnInde.value,
              checked: returnAll.value,
              onUpdateChecked(val) {
                addParams((returnAll.value = val), 'return');
              },
            });
          },
        }
      ),
      render(row, index) {
        return h(NCheckbox, {
          defaultChecked: row.return,
          checked: row.return,
          onUpdateChecked(val) {
            subParams(val, index, 'return');
          },
        });
      },
    },
    {
      title: '字段名',
      key: 'api_name',
    },
    {
      title: '字段类型',
      key: 'api_port',
    },
    {
      title: '字段描述',
      key: 'api_protocol',
    },
    {
      title: '字段排序',
      render(row: never) {
        return h(
          NButton,
          {
            strong: true,
            size: 'small',
            onClick: () => addSortordList(row),
          },
          { default: () => '排序' }
        );
      },
    },
  ];
// 全选
  function addParams(val, node?) {
    paramList.forEach((v) => {
      v[node] = val;
    });
    switch (node) {
      case 'param':
        paramsChecked.value = val ? paramList : [];
        paramsAll.value = val;
        if (val) paramsInde.value = !val;
        break;
      default:
        returnChecked.value = val ? paramList : [];
        returnAll.value = val;
        if (val) returnInde.value = !val;
        break;
    }
    return paramList;
  }
  // 单选
  function subParams(val, index, node) {
    paramList[index][node] = val;
    switch (node) {
      case 'param':
        val
          ? 
          paramsChecked.value.push(paramList[index].api_protocol)
           : (paramsChecked.value = paramList.filter((v) => {
              return v[node] === true;
            }));
          paramsInde.value =
          paramsChecked.value.length != paramList.length && 
          paramsChecked.value.length != 0;
          paramsAll.value = paramsChecked.value.length == 
          paramList.length;
          break;
          default:
          val
          ? 
          returnChecked.value.push(paramList[index].api_protocol)
          : (returnChecked.value = paramList.filter((v) => {
              return v[node] === true;
            }));
          returnInde.value =
          returnChecked.value.length != paramList.length && 
          returnChecked.value.length != 0;
          returnAll.value = returnChecked.value.length == 
          paramList.length;
          break;
    }
  }
const sortordList: any = ref([]);
 function addSortordList(row: never) {
    if (sortordList.value.every((v) => v['id'] != row['id'])) {
      sortordList.value.push(row);
    } else {
      message.warning('字段排序中已经拥有该字段');
    }
  }
</script>

 

posted @ 2022-08-08 16:46  花-猫  阅读(757)  评论(0编辑  收藏  举报