|
@@ -191,8 +191,8 @@
|
|
|
|
|
|
|
|
<script setup lang="ts">;
|
|
<script setup lang="ts">;
|
|
|
import { computed, onMounted, watch, type PropType } from 'vue';
|
|
import { computed, onMounted, watch, type PropType } from 'vue';
|
|
|
-import CommonContent, { CommonContentApi, GetContentListItem, GetContentListParams } from '@/api/CommonContent';
|
|
|
|
|
-import { navCommonDetail, navCommonList, resolveCommonContentGetPageDetailUrlAuto, resolveCommonContentSolveProps, useHomeCommonCategoryBlock, type HomeCommonCategoryBlockProps, type IHomeCommonCategoryBlock } from '../common/CommonContent';
|
|
|
|
|
|
|
+import CommonContent, { GetContentListItem, GetContentListParams } from '@/api/CommonContent';
|
|
|
|
|
+import { navCommonDetail, navCommonList, resolveCommonContentGetPageDetailUrlAuto, resolveCommonContentSolveProps } from '../common/CommonContent';
|
|
|
import { useSimpleDataLoader } from '@/common/composeabe/SimpleDataLoader';
|
|
import { useSimpleDataLoader } from '@/common/composeabe/SimpleDataLoader';
|
|
|
import { navTo } from '@/components/utils/PageAction';
|
|
import { navTo } from '@/components/utils/PageAction';
|
|
|
import HomeTitle from '@/pages/parts/HomeTitle.vue';
|
|
import HomeTitle from '@/pages/parts/HomeTitle.vue';
|
|
@@ -208,8 +208,9 @@ import MapCategoryBlock from '@/pages/blocks/MapBlock.vue';
|
|
|
import Image from '@/components/basic/Image.vue';
|
|
import Image from '@/components/basic/Image.vue';
|
|
|
import AppCofig from '@/common/config/AppCofig';
|
|
import AppCofig from '@/common/config/AppCofig';
|
|
|
import type { CategoryDefine } from './CommonCategoryBlocks';
|
|
import type { CategoryDefine } from './CommonCategoryBlocks';
|
|
|
-import type { IHomeCommonCategoryDynamicDataDetailContent } from './CommonCategoryDynamicData';
|
|
|
|
|
|
|
+import { CommonCategoryDynamicDataSerializedApi, doGetDynamicListDataParams, type IHomeCommonCategoryDynamicDataDetailContent } from './CommonCategoryDynamicData';
|
|
|
import AudioBlock from '@/pages/blocks/AudioBlock.vue';
|
|
import AudioBlock from '@/pages/blocks/AudioBlock.vue';
|
|
|
|
|
+import { toast } from '@/components/utils/DialogAction';
|
|
|
|
|
|
|
|
const props = defineProps({
|
|
const props = defineProps({
|
|
|
/**
|
|
/**
|
|
@@ -218,7 +219,14 @@ const props = defineProps({
|
|
|
categoryDefine: {
|
|
categoryDefine: {
|
|
|
type: Array as PropType<CategoryDefine[]>,
|
|
type: Array as PropType<CategoryDefine[]>,
|
|
|
default: () => [],
|
|
default: () => [],
|
|
|
- }
|
|
|
|
|
|
|
+ },
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 父级数据
|
|
|
|
|
+ */
|
|
|
|
|
+ parentData: {
|
|
|
|
|
+ type: Object as PropType<any>,
|
|
|
|
|
+ default: () => {},
|
|
|
|
|
+ },
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
const categoryDatas = computed(() => props.categoryDefine.map(item => {
|
|
const categoryDatas = computed(() => props.categoryDefine.map(item => {
|
|
@@ -232,89 +240,131 @@ const categoryDatas = computed(() => props.categoryDefine.map(item => {
|
|
|
},
|
|
},
|
|
|
data: null,
|
|
data: null,
|
|
|
};
|
|
};
|
|
|
|
|
+ return {
|
|
|
|
|
+ ...item,
|
|
|
|
|
+ detailsPage: (dataItem: GetContentListItem) => {
|
|
|
|
|
+ const id = dataItem.id;
|
|
|
|
|
+ let modelId = 0;
|
|
|
|
|
+ let mainBodyColumnId : string|number|number[]|undefined = undefined;
|
|
|
|
|
+ switch (item.data.type) {
|
|
|
|
|
+ case 'commonContent':
|
|
|
|
|
+ case 'serializedApi': {
|
|
|
|
|
+ const params = doGetDynamicListDataParams(item.data);
|
|
|
|
|
+ modelId = params.modelId;
|
|
|
|
|
+ mainBodyColumnId = params.mainBodyColumnId;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ case 'detailContent':
|
|
|
|
|
+ case 'parentKey':
|
|
|
|
|
+ case 'request':
|
|
|
|
|
+ toast(`此配置选项不支持默认的详情页面跳转!`);
|
|
|
|
|
+ console.warn(`此配置选项不支持默认的详情页面跳转!`);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- const defaultDetailsPageHandler = (dataItem: GetContentListItem) => {
|
|
|
|
|
- const id = dataItem.id;
|
|
|
|
|
- const content = item.content as CommonContentApi;
|
|
|
|
|
- if (item.detailsPage) {
|
|
|
|
|
- if (item.detailsPage === 'byContent')
|
|
|
|
|
- navTo(resolveCommonContentGetPageDetailUrlAuto(dataItem), { id });
|
|
|
|
|
- else
|
|
|
|
|
- navTo(item.detailsPage, { id });
|
|
|
|
|
- } else {
|
|
|
|
|
- navCommonDetail({
|
|
|
|
|
- id,
|
|
|
|
|
- mainBodyColumnId: content.mainBodyColumnId,
|
|
|
|
|
- modelId: content.modelId,
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
- };
|
|
|
|
|
- if (item.content instanceof CommonContentApi) {
|
|
|
|
|
- return {
|
|
|
|
|
- ...item,
|
|
|
|
|
- detailsPage: defaultDetailsPageHandler,
|
|
|
|
|
- morePage: () => {
|
|
|
|
|
- const content = item.content as CommonContentApi;
|
|
|
|
|
- if (item.morePage) {
|
|
|
|
|
- navTo(item.morePage, {});
|
|
|
|
|
- } else {
|
|
|
|
|
- let mainBodyColumnId : any = content.mainBodyColumnId;
|
|
|
|
|
- if (item.data.type === 'serializedApi' && item.data.params?.mainBodyColumnId)
|
|
|
|
|
- mainBodyColumnId = item.data.params.mainBodyColumnId;
|
|
|
|
|
- navCommonList({
|
|
|
|
|
- title: item.title,
|
|
|
|
|
- mainBodyColumnId: mainBodyColumnId,
|
|
|
|
|
- modelId: content.modelId,
|
|
|
|
|
- detailsPage: item.detailsPage,
|
|
|
|
|
- dataSolve: item.dataSolve || [],
|
|
|
|
|
- itemType: item.itemType,
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ const params = { id, mainBodyColumnId, modelId };
|
|
|
|
|
+ if (item.detailsPage) {
|
|
|
|
|
+ if (item.detailsPage === 'disabled')
|
|
|
|
|
+ return;
|
|
|
|
|
+ else if (item.detailsPage === 'byContent')
|
|
|
|
|
+ navTo(resolveCommonContentGetPageDetailUrlAuto(dataItem), params);
|
|
|
|
|
+ else
|
|
|
|
|
+ navTo(item.detailsPage, params);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ navCommonDetail(params);
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ morePage: () => {
|
|
|
|
|
+ if (item.morePage === 'disabled') {
|
|
|
|
|
+ return;
|
|
|
|
|
+ } else if (item.morePage) {
|
|
|
|
|
+ navTo(item.morePage, {});
|
|
|
|
|
+ } else {
|
|
|
|
|
+ let modelId = 0;
|
|
|
|
|
+ let mainBodyColumnId : string|number|number[]|undefined = undefined;
|
|
|
|
|
+ switch (item.data.type) {
|
|
|
|
|
+ case 'commonContent':
|
|
|
|
|
+ case 'serializedApi': {
|
|
|
|
|
+ const params = doGetDynamicListDataParams(item.data);
|
|
|
|
|
+ modelId = params.modelId;
|
|
|
|
|
+ mainBodyColumnId = params.mainBodyColumnId;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ case 'detailContent':
|
|
|
|
|
+ case 'parentKey':
|
|
|
|
|
+ case 'request':
|
|
|
|
|
+ toast(`此配置选项不支持默认的更多页面跳转!`);
|
|
|
|
|
+ console.warn(`此配置选项不支持默认的更多页面跳转!`);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ navCommonList({
|
|
|
|
|
+ title: item.title,
|
|
|
|
|
+ mainBodyColumnId: mainBodyColumnId,
|
|
|
|
|
+ modelId: modelId,
|
|
|
|
|
+ detailsPage: item.detailsPage,
|
|
|
|
|
+ dataSolve: item.dataSolve || [],
|
|
|
|
|
+ itemType: item.itemType,
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ data: useSimpleDataLoader(async () => {
|
|
|
|
|
+ let res : any[] = [];
|
|
|
|
|
+ const params = new GetContentListParams();
|
|
|
|
|
+ switch (item.data.type) {
|
|
|
|
|
+ case 'commonContent': {
|
|
|
|
|
+ params.setModelId(item.data.params.modelId);
|
|
|
|
|
+ if (item.data?.otherParams)
|
|
|
|
|
+ params.setSelfValues(item.data.otherParams);
|
|
|
|
|
+ if (item.data.params?.mainBodyColumnId)
|
|
|
|
|
+ params.setMainBodyColumnId(item.data.params.mainBodyColumnId);
|
|
|
|
|
+ res = (await CommonContent
|
|
|
|
|
+ .getContentList(params, 1, item.count || 4))
|
|
|
|
|
+ .list;
|
|
|
|
|
+ break;
|
|
|
}
|
|
}
|
|
|
- },
|
|
|
|
|
- data: useSimpleDataLoader(async () => {
|
|
|
|
|
- const params = new GetContentListParams();
|
|
|
|
|
- if (item.data.type === 'serializedApi' && item.data.params?.mainBodyColumnId)
|
|
|
|
|
- params.setMainBodyColumnId(item.data.params.mainBodyColumnId);
|
|
|
|
|
- let res = (await (item.content as CommonContentApi)
|
|
|
|
|
- .getContentList(params, 1, item.count || 4))
|
|
|
|
|
- .list;
|
|
|
|
|
- return resolveCommonContentSolveProps(res, item.dataSolve || []);;
|
|
|
|
|
- }, false)
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- switch (item.content.type) {
|
|
|
|
|
- case 'CommonCategoryBlock':
|
|
|
|
|
- return {
|
|
|
|
|
- ...item,
|
|
|
|
|
- detailsPage: item.content.goDetail,
|
|
|
|
|
- morePage: item.content.goList,
|
|
|
|
|
- data: item.content.loader,
|
|
|
|
|
|
|
+ case 'serializedApi': {
|
|
|
|
|
+ if (item.data.params?.mainBodyColumnId)
|
|
|
|
|
+ params.setMainBodyColumnId(item.data.params.mainBodyColumnId);
|
|
|
|
|
+ if (item.data?.otherParams)
|
|
|
|
|
+ params.setSelfValues(item.data.otherParams);
|
|
|
|
|
+ res = (await CommonCategoryDynamicDataSerializedApi(item.data)
|
|
|
|
|
+ .getContentList(params, 1, item.count || 4))
|
|
|
|
|
+ .list;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ case 'detailContent': {
|
|
|
|
|
+ const data = item.data as IHomeCommonCategoryDynamicDataDetailContent;
|
|
|
|
|
+ res = [ await CommonContent.getContentDetail(data.params!.id, undefined, data.params!.modelId || undefined) ];
|
|
|
|
|
+ break;
|
|
|
}
|
|
}
|
|
|
- case 'detailContent':
|
|
|
|
|
- return {
|
|
|
|
|
- ...item,
|
|
|
|
|
- detailsPage: defaultDetailsPageHandler,
|
|
|
|
|
- morePage: () => {},
|
|
|
|
|
- data: useSimpleDataLoader(async () => {
|
|
|
|
|
- console.log(item);
|
|
|
|
|
- const data = item.data as IHomeCommonCategoryDynamicDataDetailContent;
|
|
|
|
|
- const res = await CommonContent.getContentDetail(data.params!.id, undefined, data.params!.modelId || undefined);
|
|
|
|
|
- return resolveCommonContentSolveProps([res as any], item.dataSolve || []);;
|
|
|
|
|
- }, false),
|
|
|
|
|
|
|
+ case 'parentKey': {
|
|
|
|
|
+ if (!props.parentData)
|
|
|
|
|
+ throw new Error('父级数据未设置');
|
|
|
|
|
+ res = props.parentData[item.data.key];
|
|
|
|
|
+ break;
|
|
|
}
|
|
}
|
|
|
- default: {
|
|
|
|
|
- const block = useHomeCommonCategoryBlock({
|
|
|
|
|
- ...item.content,
|
|
|
|
|
- dataSolve: item.content.dataSolve ?? [],
|
|
|
|
|
- }, false);
|
|
|
|
|
- return {
|
|
|
|
|
- ...item,
|
|
|
|
|
- detailsPage: block.goDetail,
|
|
|
|
|
- morePage: block.goList,
|
|
|
|
|
- data: block.loader,
|
|
|
|
|
|
|
+ case 'request': {
|
|
|
|
|
+ res = (await CommonContent.request(
|
|
|
|
|
+ item.data.url,
|
|
|
|
|
+ {
|
|
|
|
|
+ page: 1,
|
|
|
|
|
+ pageSize: item.count || 4,
|
|
|
|
|
+ ...item.data.querys,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ method: item.data.method,
|
|
|
|
|
+ data: item.data.otherParams,
|
|
|
|
|
+ },
|
|
|
|
|
+ '',
|
|
|
|
|
+ undefined,
|
|
|
|
|
+ )).data as unknown as any[];
|
|
|
|
|
+ break;
|
|
|
}
|
|
}
|
|
|
|
|
+ default:
|
|
|
|
|
+ throw new Error(`未实现的动态数据接口 ${(item.data as any).type}`);
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ return resolveCommonContentSolveProps(res, item.dataSolve || []);
|
|
|
|
|
+ }, false)
|
|
|
}
|
|
}
|
|
|
}));
|
|
}));
|
|
|
|
|
|