fix event list sort
This commit is contained in:
+41
-6
@@ -4,33 +4,68 @@ import { getCurrentStoreId, withCurrentStoreId, withCurrentStorePage } from "@/u
|
|||||||
|
|
||||||
const BASE_URI = "/gao/event";
|
const BASE_URI = "/gao/event";
|
||||||
|
|
||||||
|
const eventOrderMap: NonNullable<Page<EventItem>["orderMap"]> = {
|
||||||
|
sort: "ASC",
|
||||||
|
createdAt: "ASC"
|
||||||
|
};
|
||||||
|
|
||||||
type ListOptions = {
|
type ListOptions = {
|
||||||
allStores?: boolean;
|
allStores?: boolean;
|
||||||
storeId?: string;
|
storeId?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 为所有事件分页查询补充统一排序,避免后端未传排序参数时按数据库默认顺序返回。
|
||||||
|
*/
|
||||||
|
function withEventOrder(page: Page<EventItem>): Page<EventItem> {
|
||||||
|
return {
|
||||||
|
...page,
|
||||||
|
orderMap: {
|
||||||
|
...eventOrderMap,
|
||||||
|
...(page.orderMap || {})
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按事件排序值升序排列,缺少排序值的历史数据放到列表末尾。
|
||||||
|
*/
|
||||||
|
function sortEventList(list: EventItem[]): EventItem[] {
|
||||||
|
return [...list].sort((left, right) => {
|
||||||
|
const leftSort = left.sort ?? Number.MAX_SAFE_INTEGER;
|
||||||
|
const rightSort = right.sort ?? Number.MAX_SAFE_INTEGER;
|
||||||
|
if (leftSort !== rightSort) {
|
||||||
|
return leftSort - rightSort;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (left.createdAt ?? Number.MAX_SAFE_INTEGER) - (right.createdAt ?? Number.MAX_SAFE_INTEGER);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async function list(req: Page<EventItem>, options?: ListOptions): Promise<PageResult<EventItem>> {
|
async function list(req: Page<EventItem>, options?: ListOptions): Promise<PageResult<EventItem>> {
|
||||||
|
const orderedPage = withEventOrder(req);
|
||||||
if (options?.allStores) {
|
if (options?.allStores) {
|
||||||
return await axios.post(`${BASE_URI}/list`, req);
|
return await axios.post(`${BASE_URI}/list`, orderedPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options?.storeId) {
|
if (options?.storeId) {
|
||||||
return await axios.post(`${BASE_URI}/list`, {
|
return await axios.post(`${BASE_URI}/list`, {
|
||||||
...req,
|
...orderedPage,
|
||||||
equalsExample: {
|
equalsExample: {
|
||||||
...(req.equalsExample || {}),
|
...(orderedPage.equalsExample || {}),
|
||||||
storeId: options.storeId
|
storeId: options.storeId
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return await axios.post(`${BASE_URI}/list`, withCurrentStorePage(req));
|
return await axios.post(`${BASE_URI}/list`, withCurrentStorePage(orderedPage));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function listValid(): Promise<EventItem[]> {
|
async function listValid(): Promise<EventItem[]> {
|
||||||
return await axios.post(`${BASE_URI}/list/valid`, undefined, {
|
const list = await axios.post(`${BASE_URI}/list/valid`, undefined, {
|
||||||
params: { storeId: getCurrentStoreId() }
|
params: { storeId: getCurrentStoreId() }
|
||||||
});
|
}) as unknown as EventItem[];
|
||||||
|
return sortEventList(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function detail(id: string): Promise<EventItem> {
|
async function detail(id: string): Promise<EventItem> {
|
||||||
|
|||||||
@@ -130,7 +130,11 @@ const isLoading = ref(false);
|
|||||||
const isNoMore = ref(false);
|
const isNoMore = ref(false);
|
||||||
const page = reactive<Page<EventItem>>({
|
const page = reactive<Page<EventItem>>({
|
||||||
index: 0,
|
index: 0,
|
||||||
size: 15
|
size: 15,
|
||||||
|
orderMap: {
|
||||||
|
sort: "ASC",
|
||||||
|
createdAt: "ASC"
|
||||||
|
}
|
||||||
});
|
});
|
||||||
const pageResult = reactive<PageResult<EventItem>>({
|
const pageResult = reactive<PageResult<EventItem>>({
|
||||||
total: 0,
|
total: 0,
|
||||||
|
|||||||
@@ -131,7 +131,11 @@ async function loadData(): Promise<void> {
|
|||||||
try {
|
try {
|
||||||
const result = await EventAPI.list({
|
const result = await EventAPI.list({
|
||||||
index: 0,
|
index: 0,
|
||||||
size: 100
|
size: 100,
|
||||||
|
orderMap: {
|
||||||
|
sort: "ASC",
|
||||||
|
createdAt: "ASC"
|
||||||
|
}
|
||||||
});
|
});
|
||||||
eventList.value = result.list || [];
|
eventList.value = result.list || [];
|
||||||
sortDirty.value = false;
|
sortDirty.value = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user