List.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. /**
  2. * 页面模板:
  3. * 列表定义
  4. */
  5. import type { HomeCommonCategoryBlockProps } from "../../common/CommonContent";
  6. import type { CommonListPageProps } from "../../common/CommonListPage.vue";
  7. import { CommonCategoryDynamicDataSerializedApi, type IHomeCommonCategoryDropdownDynamicData, type IHomeCommonCategoryDynamicData, type IHomeCommonCategoryDynamicDataCommonContent } from "../CommonCategoryDynamicData";
  8. /**
  9. * 页面模板:列表定义
  10. */
  11. export interface IHomeCommonCategoryListDefine {
  12. /**
  13. * 列表类型
  14. */
  15. type: 'CommonList',
  16. /**
  17. * 列表属性定义
  18. */
  19. props: Omit<CommonListPageProps, 'load'|'tabs'> & {
  20. /**
  21. * 列表选项卡定义
  22. */
  23. tabs?: IHomeCommonCategoryListTabItemDefine[],
  24. },
  25. }
  26. export type IHomeCommonCategoryListTabItemDefine = IHomeCommonCategoryListTabDefine & {
  27. /**
  28. * 列表选项卡文本
  29. */
  30. text: string,
  31. /**
  32. * 列表选项卡宽度
  33. */
  34. width?: number,
  35. /**
  36. * 列表选项卡是否可见
  37. */
  38. visible?: boolean,
  39. /**
  40. * 列表选项卡详情页
  41. */
  42. detailsPage?: string,
  43. }
  44. /**
  45. * 列表选项卡数据处理方法
  46. * * none: 不处理
  47. * * ich: 显示传承相关数据
  48. * * common: 显示通用数据
  49. * * date: 显示日期数据
  50. */
  51. export type IHomeCommonCategoryListTabListDataSolve = 'none'|'ich'|'common'|'date';
  52. /**
  53. * 列表选项卡下拉选择定义
  54. */
  55. export interface IHomeCommonCategoryListTabListDropdownDefine {
  56. key: string,
  57. text: string,
  58. defaultValue?: string|number,
  59. formQueryKey?: string,
  60. addAll?: string,
  61. data: IHomeCommonCategoryDropdownDynamicData,
  62. }
  63. /**
  64. * TAB定义 - 类型:列表
  65. */
  66. export interface IHomeCommonCategoryListTabListDefine {
  67. type: 'list',
  68. /**
  69. * 前缀嵌套子分类项定义
  70. */
  71. preInsertCategorys?: IHomeCommonCategoryListTabNestCategoryItemDefine[],
  72. /**
  73. * 列表选项卡数据
  74. */
  75. data?: IHomeCommonCategoryDynamicData,
  76. /**
  77. * 列表选项卡下拉选择定义
  78. */
  79. dropdownDefines?: IHomeCommonCategoryListTabListDropdownDefine[],
  80. /**
  81. * 列表数据解决方法
  82. */
  83. dataSolve?: IHomeCommonCategoryListTabListDataSolve[],
  84. }
  85. /**
  86. * TAB定义 - 类型:跳转
  87. */
  88. export interface IHomeCommonCategoryListTabJumpDefine {
  89. type: 'jump',
  90. /**
  91. * 跳转URL
  92. */
  93. url: string,
  94. /**
  95. * 跳转参数
  96. */
  97. params?: Record<string, any>,
  98. }
  99. /**
  100. * TAB定义 - 类型:嵌套子分类
  101. */
  102. export interface IHomeCommonCategoryListTabNestCategoryDefine {
  103. type: 'nestCategory',
  104. /**
  105. * 嵌套子分类项定义
  106. */
  107. categorys: IHomeCommonCategoryListTabNestCategoryItemDefine[],
  108. }
  109. /**
  110. * TAB定义 - 类型:嵌套子分类 - 子分类项定义
  111. */
  112. export interface IHomeCommonCategoryListTabNestCategoryItemDefine {
  113. /**
  114. * 是否可见
  115. * @default true
  116. */
  117. visible?: boolean,
  118. /**
  119. * 子分类项文本
  120. */
  121. text: string,
  122. /**
  123. * 子分类项标题级别
  124. * @default 'h2'
  125. */
  126. textLevel?: 'h1'|'h2'|'h3',
  127. /**
  128. * 是否显示标题
  129. * @default true
  130. */
  131. showTitle?: boolean,
  132. /**
  133. * 是否显示更多
  134. * @default false
  135. */
  136. showMore?: boolean,
  137. /**
  138. * 更多文本
  139. */
  140. moreText?: string,
  141. /**
  142. * 子分类项的小列表显示类型
  143. * @type CategoryDefine['type']
  144. */
  145. type: string,
  146. /**
  147. * 子分类项的更多列表显示类型
  148. * 'image-large-2'|'image-large'|'article-common'|'article-character'|'simple-text'
  149. */
  150. itemType?: string,
  151. /**
  152. * 子分类项数据
  153. */
  154. data: IHomeCommonCategoryDynamicData,
  155. /**
  156. * 更多页面定义
  157. */
  158. morePage?: string,
  159. /**
  160. * 详情页面定义
  161. */
  162. detailsPage?: string,
  163. /**
  164. * 子分类项数量
  165. * @default 4
  166. */
  167. count?: number,
  168. /**
  169. * 子分类项数据解决方法
  170. */
  171. dataSolve?: IHomeCommonCategoryListTabListDataSolve[],
  172. /**
  173. * 子分类项参数
  174. */
  175. params?: Record<string, any>,
  176. /**
  177. * 子分类项如果是预设块,定义块的属性
  178. */
  179. blockProps?: any;
  180. }
  181. /**
  182. * TAB定义 - 类型:列表、跳转、嵌套子分类
  183. */
  184. export type IHomeCommonCategoryListTabDefine = IHomeCommonCategoryListTabListDefine
  185. | IHomeCommonCategoryListTabJumpDefine
  186. | IHomeCommonCategoryListTabNestCategoryDefine;
  187. export function CommonCategoryListTabNestCategoryDataToContent(
  188. data: IHomeCommonCategoryDynamicData,
  189. define: IHomeCommonCategoryListTabNestCategoryDefine['categorys'][0],
  190. ) {
  191. if (!data)
  192. return null;
  193. switch (data.type) {
  194. case 'serializedApi':
  195. return CommonCategoryDynamicDataSerializedApi(data);
  196. case 'detailContent':
  197. return data;
  198. case 'parentKey':
  199. throw new Error(`未实现的动态数据接口 ${data.type}`);
  200. case 'request':
  201. throw new Error(`未实现的动态数据接口 ${data.type}`);
  202. case 'commonContent':
  203. return {
  204. title: define.text,
  205. mainBodyColumnId: data.params.mainBodyColumnId,
  206. modelId: data.params.modelId,
  207. itemType: define.itemType,
  208. detailsPage: define.detailsPage || 'byContent',
  209. count: define.count,
  210. params: (define.data as IHomeCommonCategoryDynamicDataCommonContent).otherParams || {},
  211. dataSolve: define.dataSolve || [],
  212. } as HomeCommonCategoryBlockProps;
  213. }
  214. }