|
|
@@ -3,11 +3,14 @@
|
|
|
<Result v-if="errorMessage" status="error" :description="errorMessage" />
|
|
|
<CommonListPage
|
|
|
v-else-if="currentCommonCategoryDefine"
|
|
|
+ :startTabIndex="pageStartTab"
|
|
|
v-bind="currentCommonCategoryDefine.content.props as any || undefined"
|
|
|
:title="currentCommonCategoryDefine.title || undefined"
|
|
|
:load="loadData"
|
|
|
:tabs="tabs"
|
|
|
+ :dropDownNames="dropdownNames"
|
|
|
:showListTabIds="showListTabIds"
|
|
|
+ :detailsPage="detailsPage"
|
|
|
>
|
|
|
<template #list="{ tabId }">
|
|
|
<CommonCategoryHome
|
|
|
@@ -24,15 +27,16 @@
|
|
|
import { computed, onMounted, ref, watch } from 'vue';
|
|
|
import { injectCommonCategory } from './CommonCategoryGlobalLoader';
|
|
|
import { navTo } from '@/components/utils/PageAction';
|
|
|
-import { doLoadDynamicListData } from './CommonCategoryDynamicData';
|
|
|
+import { doLoadDynamicDropdownData, doLoadDynamicListData } from './CommonCategoryDynamicData';
|
|
|
import { CommonCategoryListTabNestCategoryDataToContent, type IHomeCommonCategoryDefine, type IHomeCommonCategoryListTabDefine } from './CommonCategoryDefine';
|
|
|
-import type { CommonListPageProps } from '../common/CommonListPage.vue';
|
|
|
+import type { CommonListPageProps, DropDownNames } from '../common/CommonListPage.vue';
|
|
|
import CommonListPage from '../common/CommonListPage.vue';
|
|
|
import Result from '@/components/feedback/Result.vue';
|
|
|
import CommonCategoryHome, { type CategoryDefine } from '../common/CommonCategoryHome.vue';
|
|
|
import Footer from '@/components/display/Footer.vue';
|
|
|
import FlexCol from '@/components/layout/FlexCol.vue';
|
|
|
-import { resolveCommonContentFormData } from '../common/CommonContent';
|
|
|
+import { resolveCommonContentSolveProps } from '../common/CommonContent';
|
|
|
+import type { SimpleDropDownPickerItem } from '@/common/components/SimpleDropDownPicker.vue';
|
|
|
|
|
|
/**
|
|
|
* 动态通用内容 - 通用列表页
|
|
|
@@ -46,10 +50,18 @@ const props = defineProps({
|
|
|
pageConfigName: {
|
|
|
type: String,
|
|
|
default: '',
|
|
|
- }
|
|
|
+ },
|
|
|
+ pageStartTab: {
|
|
|
+ type: Number,
|
|
|
+ default: 0,
|
|
|
+ },
|
|
|
+ pageQuerys: {
|
|
|
+ type: Object as () => Record<string, string|number|number[]|undefined>,
|
|
|
+ default: () => ({}),
|
|
|
+ },
|
|
|
});
|
|
|
|
|
|
-function loadPageConfig() {
|
|
|
+async function loadPageConfig() {
|
|
|
if (!props.pageConfigName) {
|
|
|
errorMessage.value = '配置有误';
|
|
|
return;
|
|
|
@@ -63,6 +75,35 @@ function loadPageConfig() {
|
|
|
uni.setNavigationBarTitle({
|
|
|
title: currentCommonCategoryDefine.value?.title || '',
|
|
|
})
|
|
|
+
|
|
|
+ //加载下拉列表
|
|
|
+ const result = [] as DropDownNames[];
|
|
|
+ for (const [key, tab] of Object.entries(tabRenderDefines.value)) {
|
|
|
+ if (tab.type !== 'list')
|
|
|
+ continue;
|
|
|
+ if (tab.dropdownDefines) {
|
|
|
+ for (const dropdown of tab.dropdownDefines) {
|
|
|
+ const data : SimpleDropDownPickerItem[] = (dropdown.addAll ? [{
|
|
|
+ id: 0,
|
|
|
+ name: dropdown.addAll
|
|
|
+ }] : []);
|
|
|
+ if (dropdown.data) {
|
|
|
+ data.push(...(await doLoadDynamicDropdownData(dropdown.data)).map((item) => ({
|
|
|
+ id: item[dropdown.data.idKey || 'id'],
|
|
|
+ name: item[dropdown.data.nameKey || 'title'],
|
|
|
+ })))
|
|
|
+ }
|
|
|
+ result.push({
|
|
|
+ options: data,
|
|
|
+ activeTab: [Number(key)],
|
|
|
+ defaultSelectedValue: dropdown.formQueryKey ? (
|
|
|
+ props.pageQuerys[dropdown.formQueryKey] as number || 0
|
|
|
+ ) : dropdown.defaultValue || 0,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dropdownNames.value = result;
|
|
|
}
|
|
|
|
|
|
watch(() => props.pageConfigName, loadPageConfig);
|
|
|
@@ -90,13 +131,11 @@ const tabRenderDefines = computed(() => {
|
|
|
.filter((item) => item.visible !== false)
|
|
|
.map((item) => {
|
|
|
return {
|
|
|
+ ...item,
|
|
|
title: item.text,
|
|
|
content: CommonCategoryListTabNestCategoryDataToContent(
|
|
|
item.data, item
|
|
|
),
|
|
|
- morePage: item.morePage,
|
|
|
- detailPage: item.detailPage,
|
|
|
- noFrom: item.noFrom,
|
|
|
type: item.type as CategoryDefine['type'],
|
|
|
}
|
|
|
});
|
|
|
@@ -143,6 +182,17 @@ const tabs = computed<CommonListPageProps['tabs']>(() => {
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
+const dropdownNames = ref<DropDownNames[]>([]);
|
|
|
+const detailsPage = computed(() => {
|
|
|
+ if (tabDefines.value.find((item) => item.detailsPage)) {
|
|
|
+ const result = {} as Record<number, string>;
|
|
|
+ tabDefines.value.forEach((item, i) => {
|
|
|
+ result[i] = item.detailsPage || '';
|
|
|
+ });
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ return currentCommonCategoryDefine.value?.content.props.detailsPage || undefined;
|
|
|
+});
|
|
|
|
|
|
async function loadData(
|
|
|
page: number,
|
|
|
@@ -161,11 +211,11 @@ async function loadData(
|
|
|
page,
|
|
|
pageSize,
|
|
|
searchText,
|
|
|
+ tab.dropdownDefines || [],
|
|
|
dropDownValues,
|
|
|
);
|
|
|
- if (res && !currentCommonCategoryDefine.value?.content.props.noFrom) {
|
|
|
- res.list = resolveCommonContentFormData(res.list);
|
|
|
- }
|
|
|
+ if (res && tab.dataSolve)
|
|
|
+ res.list = resolveCommonContentSolveProps(res.list, tab.dataSolve);
|
|
|
return res;
|
|
|
}
|
|
|
</script>
|