/** * 页面模板: * 列表定义 */ import type { HomeCommonCategoryBlockProps } from "../../common/CommonContent"; import type { CommonListPageProps } from "../../common/CommonListPage.vue"; import { CommonCategoryDynamicDataSerializedApi, type IHomeCommonCategoryDropdownDynamicData, type IHomeCommonCategoryDynamicData, type IHomeCommonCategoryDynamicDataCommonContent } from "../CommonCategoryDynamicData"; /** * 页面模板:列表定义 */ export interface IHomeCommonCategoryListDefine { /** * 列表类型 */ type: 'CommonList', /** * 列表属性定义 */ props: Omit & { /** * 列表选项卡定义 */ tabs?: IHomeCommonCategoryListTabItemDefine[], }, } export type IHomeCommonCategoryListTabItemDefine = IHomeCommonCategoryListTabDefine & { /** * 列表选项卡文本 */ text: string, /** * 列表选项卡宽度 */ width?: number, /** * 列表选项卡是否可见 */ visible?: boolean, /** * 列表选项卡详情页 */ detailsPage?: string, } /** * 列表选项卡数据处理方法 * * none: 不处理 * * ich: 显示传承相关数据 * * common: 显示通用数据 * * date: 显示日期数据 */ export type IHomeCommonCategoryListTabListDataSolve = 'none'|'ich'|'common'|'date'; /** * 列表选项卡下拉选择定义 */ export interface IHomeCommonCategoryListTabListDropdownDefine { key: string, text: string, defaultValue?: string|number, formQueryKey?: string, addAll?: string, data: IHomeCommonCategoryDropdownDynamicData, } /** * TAB定义 - 类型:列表 */ export interface IHomeCommonCategoryListTabListDefine { type: 'list', /** * 前缀嵌套子分类项定义 */ preInsertCategorys?: IHomeCommonCategoryListTabNestCategoryItemDefine[], /** * 列表选项卡数据 */ data?: IHomeCommonCategoryDynamicData, /** * 列表选项卡下拉选择定义 */ dropdownDefines?: IHomeCommonCategoryListTabListDropdownDefine[], /** * 列表数据解决方法 */ dataSolve?: IHomeCommonCategoryListTabListDataSolve[], } /** * TAB定义 - 类型:跳转 */ export interface IHomeCommonCategoryListTabJumpDefine { type: 'jump', /** * 跳转URL */ url: string, /** * 跳转参数 */ params?: Record, } /** * TAB定义 - 类型:嵌套子分类 */ export interface IHomeCommonCategoryListTabNestCategoryDefine { type: 'nestCategory', /** * 嵌套子分类项定义 */ categorys: IHomeCommonCategoryListTabNestCategoryItemDefine[], } /** * TAB定义 - 类型:嵌套子分类 - 子分类项定义 */ export interface IHomeCommonCategoryListTabNestCategoryItemDefine { /** * 是否可见 * @default true */ visible?: boolean, /** * 子分类项文本 */ text: string, /** * 子分类项标题级别 * @default 'h2' */ textLevel?: 'h1'|'h2'|'h3', /** * 是否显示标题 * @default true */ showTitle?: boolean, /** * 是否显示更多 * @default false */ showMore?: boolean, /** * 更多文本 */ moreText?: string, /** * 子分类项的小列表显示类型 * @type CategoryDefine['type'] */ type: string, /** * 子分类项的更多列表显示类型 * 'image-large-2'|'image-large'|'article-common'|'article-character'|'simple-text' */ itemType?: string, /** * 子分类项数据 */ data: IHomeCommonCategoryDynamicData, /** * 更多页面定义 */ morePage?: string, /** * 详情页面定义 */ detailsPage?: string, /** * 子分类项数量 * @default 4 */ count?: number, /** * 子分类项数据解决方法 */ dataSolve?: IHomeCommonCategoryListTabListDataSolve[], /** * 子分类项参数 */ params?: Record, /** * 子分类项如果是预设块,定义块的属性 */ blockProps?: any; } /** * TAB定义 - 类型:列表、跳转、嵌套子分类 */ export type IHomeCommonCategoryListTabDefine = IHomeCommonCategoryListTabListDefine | IHomeCommonCategoryListTabJumpDefine | IHomeCommonCategoryListTabNestCategoryDefine; export function CommonCategoryListTabNestCategoryDataToContent( data: IHomeCommonCategoryDynamicData, define: IHomeCommonCategoryListTabNestCategoryDefine['categorys'][0], ) { if (!data) return null; switch (data.type) { case 'serializedApi': return CommonCategoryDynamicDataSerializedApi(data); case 'detailContent': return data; case 'parentKey': throw new Error(`未实现的动态数据接口 ${data.type}`); case 'request': throw new Error(`未实现的动态数据接口 ${data.type}`); case 'commonContent': return { title: define.text, mainBodyColumnId: data.params.mainBodyColumnId, modelId: data.params.modelId, itemType: define.itemType, detailsPage: define.detailsPage || 'byContent', count: define.count, params: (define.data as IHomeCommonCategoryDynamicDataCommonContent).otherParams || {}, dataSolve: define.dataSolve || [], } as HomeCommonCategoryBlockProps; } }