List.ts 4.9 KB

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