<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>