feat(all): 修改分页

This commit is contained in:
plum 2026-04-17 12:44:21 +08:00
parent a8947696af
commit 37e1e58883

View File

@ -27,16 +27,21 @@
<div class="flex-1"> <div class="flex-1">
<div class="flex justify-between mb-3"> <div class="flex justify-between mb-3">
<n-input :placeholder="t('prompt.Please enter a name for the dataset')" class="max-w-64" show-count <n-input
:maxlength="25" @update:value="handleSearch"> :placeholder="t('prompt.Please enter a name for the dataset')"
class="max-w-64"
show-count
:maxlength="25"
@update:value="handleSearch"
>
<template #prefix> <template #prefix>
<n-icon :component="Search" /> <n-icon :component="Search" />
</template> </template>
</n-input> </n-input>
<n-button type="primary" @click="handleAddDataSet">{{ t('home.Add data set') }}</n-button> <n-button type="primary" @click="handleAddDataSet">{{ t("home.Add data set") }}</n-button>
</div> </div>
<n-data-table :columns="dataSetColumns" :data="dataSets" :pagination="pagination" :loading="tableLoading" /> <n-data-table :columns="dataSetColumns" :data="dataSets" :pagination="pagination" :loading="tableLoading" remote />
</div> </div>
</n-flex> </n-flex>
@ -45,92 +50,111 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, reactive, h, onMounted } from 'vue'; import { ref, reactive, h, onMounted } from "vue";
import { NButton, NPopconfirm } from 'naive-ui'; import { NButton, NPopconfirm } from "naive-ui";
import { Search } from '@vicons/carbon'; import { Search } from "@vicons/carbon";
import { t } from "@/language"; import { t } from "@/language";
import { fetchDataSetDetail, fetchDataSetPage, fetchDeleteDataSet } from "@/http/api/dataSet"; import { fetchDataSetDetail, fetchDataSetPage, fetchDeleteDataSet } from "@/http/api/dataSet";
import DataSetModal from "./DataSetModal.vue"; import DataSetModal from "./DataSetModal.vue";
import DataSetGroup from "./DataSetGroup.vue"; import DataSetGroup from "./DataSetGroup.vue";
const dataSets = ref<IDataSet.Item[]>([]) const dataSets = ref<IDataSet.Item[]>([]);
const tableLoading = ref(false); const tableLoading = ref(false);
const showDataSetModal = ref(false) const showDataSetModal = ref(false);
const searchName = ref(""); const searchName = ref("");
const selectedGroupId = ref<IDataSet.IGroup["id"] | null>(null); const selectedGroupId = ref<IDataSet.IGroup["id"] | null>(null);
const defaultDataSet: IDataSet.Item = { const defaultDataSet: IDataSet.Item = {
id: '', id: "",
groupId: '', groupId: "",
name: '', name: "",
type: 'API', type: "API",
method: 'GET', method: "GET",
api: '', api: "",
dataSourceId: '', dataSourceId: "",
sql: '', sql: "",
json: '' json: "",
}; };
const currentDataSet = reactive<IDataSet.Item>({ const currentDataSet = reactive<IDataSet.Item>({
...defaultDataSet ...defaultDataSet,
}) });
const dataSetColumns = [ const dataSetColumns = [
{ {
title: t("home.Data set name"), title: t("home.Data set name"),
key: 'name', key: "name",
defaultSortOrder: 'ascend', defaultSortOrder: "ascend",
sorter: 'default', sorter: "default",
resizable: true, resizable: true,
minWidth: 120, minWidth: 120,
maxWidth: 400, maxWidth: 400,
ellipsis: { ellipsis: {
tooltip: true tooltip: true,
}, },
filter(value, row) { filter(value, row) {
return ~row.name.indexOf(value); return ~row.name.indexOf(value);
} },
}, },
{ {
title: t("home.Data set type"), title: t("home.Data set type"),
key: 'type', key: "type",
defaultSortOrder: 'ascend', defaultSortOrder: "ascend",
sorter: 'default', sorter: "default",
resizable: true, resizable: true,
width: 180, width: 180,
minWidth: 120, minWidth: 120,
maxWidth: 260 maxWidth: 260,
}, },
{ {
title: t("other.Action"), title: t("other.Action"),
key: 'actions', key: "actions",
resizable: true, resizable: true,
minWidth: 120, minWidth: 120,
maxWidth: 300, maxWidth: 300,
render: (row) => h('div', [ render: row =>
h(NButton, { h("div", [
size: 'small', h(
NButton,
{
size: "small",
onClick: () => editDataSet(row), onClick: () => editDataSet(row),
style: { marginRight: '0.4rem' } style: { marginRight: "0.4rem" },
}, t("layout.sider.script.Edit")), },
h(NPopconfirm, { t("layout.sider.script.Edit")
onPositiveClick: () => deleteDataSet(row) ),
}, { h(
NPopconfirm,
{
onPositiveClick: () => deleteDataSet(row),
},
{
default: () => t("prompt.Are you sure you want to delete it?"), default: () => t("prompt.Are you sure you want to delete it?"),
trigger: () => h(NButton, { trigger: () =>
size: 'small' h(
}, t("home.Delete")) NButton,
}) {
]) size: "small",
},
t("home.Delete")
),
} }
] ),
]),
},
];
// //
const pagination = reactive({ const pagination = reactive({
page: 1, page: 1,
pageSize: 10, pageSize: 10,
pageCount: 1, pageCount: 1,
"on-update:page": (page: number) => { onChange: (page: number) => {
pagination.page = page; pagination.page = page;
getList(); getList();
} },
}) onUpdatePageSize: (pageSize: number) => {
pagination.pageSize = pageSize;
pagination.page = 1;
getList();
},
});
function resetCurrentDataSet(data?: Partial<IDataSet.Item>) { function resetCurrentDataSet(data?: Partial<IDataSet.Item>) {
Object.assign(currentDataSet, defaultDataSet, data || {}); Object.assign(currentDataSet, defaultDataSet, data || {});
@ -142,7 +166,7 @@ async function getList() {
page: pagination.page, page: pagination.page,
pageSize: pagination.pageSize, pageSize: pagination.pageSize,
name: searchName.value || undefined, name: searchName.value || undefined,
groupId: selectedGroupId.value ?? undefined groupId: selectedGroupId.value ?? undefined,
}); });
tableLoading.value = false; tableLoading.value = false;
dataSets.value = res.data?.items || []; dataSets.value = res.data?.items || [];
@ -166,7 +190,7 @@ function handleGroupSelect(group: IDataSet.IGroup | null) {
function handleAddDataSet() { function handleAddDataSet() {
resetCurrentDataSet({ resetCurrentDataSet({
groupId: selectedGroupId.value ?? "" groupId: selectedGroupId.value ?? "",
}); });
showDataSetModal.value = true; showDataSetModal.value = true;
} }
@ -179,9 +203,9 @@ async function editDataSet(item) {
const detail = (res.data || item) as any; const detail = (res.data || item) as any;
resetCurrentDataSet({ resetCurrentDataSet({
...detail, ...detail,
dataSourceId: detail.dataSourceId || detail.dataSource ? String(detail.dataSourceId || detail.dataSource) : "" dataSourceId: detail.dataSourceId || detail.dataSource ? String(detail.dataSourceId || detail.dataSource) : "",
}); });
showDataSetModal.value = true showDataSetModal.value = true;
} }
async function deleteDataSet(item) { async function deleteDataSet(item) {
@ -195,5 +219,5 @@ async function deleteDataSet(item) {
onMounted(() => { onMounted(() => {
getList(); getList();
}) });
</script> </script>