处理banner插入
This commit is contained in:
@@ -11,8 +11,6 @@ import {
|
||||
getCityQrCode,
|
||||
getDistricts,
|
||||
} from "../services/listApi";
|
||||
// 不再在这里请求 banner 字典,统一由 dictionaryStore 启动时获取
|
||||
import { useDictionaryStore } from "./dictionaryStore";
|
||||
import {
|
||||
ListActions,
|
||||
IFilterOptions,
|
||||
@@ -20,26 +18,6 @@ import {
|
||||
IPayload,
|
||||
} from "../../types/list/types";
|
||||
|
||||
// 将 banner 按索引插入到列表的工具方法(0基;长度不足则插末尾;先移除已存在的 banner)
|
||||
function insertBannersToRows(rows: any[], dictData: any) {
|
||||
if (!Array.isArray(rows) || !dictData) return rows;
|
||||
const img = (dictData?.bannerListImage || "").trim();
|
||||
const indexRaw = (dictData?.bannerListIndex || "").toString().trim();
|
||||
if (!img) return rows;
|
||||
const parsed = parseInt(indexRaw, 10);
|
||||
const normalized = Number.isFinite(parsed) ? parsed : 0;
|
||||
// 先移除已有的 banner,确保列表中仅一条 banner
|
||||
const resultRows = rows?.filter((item) => item?.type !== "banner") || [];
|
||||
const target = Math.max(0, Math.min(normalized, resultRows.length));
|
||||
resultRows.splice(target, 0, {
|
||||
type: "banner",
|
||||
id: `banner-${target}`,
|
||||
banner_image_url: img,
|
||||
banner_detail_url: (dictData?.bannerDetailImage || "").trim(),
|
||||
} as any);
|
||||
return resultRows;
|
||||
}
|
||||
|
||||
function translateCityData(dataTree) {
|
||||
return dataTree.map((item) => {
|
||||
const { children, ...rest } = item;
|
||||
@@ -272,14 +250,11 @@ export const useListStore = create<TennisStore>()((set, get) => ({
|
||||
const currentPageState = state.isSearchResult ? state.searchPageState : state.listPageState;
|
||||
const currentData = currentPageState?.data || [];
|
||||
const newData = isAppend ? [...currentData, ...(data || [])] : (data || []);
|
||||
// 从字典缓存获取 banner,并将其插入到最终列表指定位置(全局索引)
|
||||
const dictData = useDictionaryStore.getState().bannerDict;
|
||||
const processedData = dictData ? insertBannersToRows(newData, dictData) : newData;
|
||||
state.updateCurrentPageState({
|
||||
data: processedData,
|
||||
data: newData,
|
||||
isHasMoreData,
|
||||
// 使用插入后的最终数据判断是否显示空状态,避免有 banner 时仍显示空
|
||||
isShowNoData: processedData?.length === 0,
|
||||
isShowNoData: newData?.length === 0,
|
||||
});
|
||||
|
||||
set({
|
||||
|
||||
Reference in New Issue
Block a user