Pārlūkot izejas kodu

💊 优化采集ID与表单匹配逻辑

快乐的梦鱼 1 mēnesi atpakaļ
vecāks
revīzija
f5ceada830

+ 0 - 3
src/api/inhert/VillageInfoApi.ts

@@ -219,7 +219,6 @@ export class VillageInfoApi extends AppServerRequestModule<DataModel> {
 
   async getInfo<T extends DataModel>(
     collectModuleId: number|undefined,
-    subType: string,
     subId: number|undefined,
     subKey: string|undefined,
     villageId: number,
@@ -235,7 +234,6 @@ export class VillageInfoApi extends AppServerRequestModule<DataModel> {
   }
   async getList<T extends DataModel = CommonInfoModel>(
     collectModuleId: number|undefined,
-    subType: string,
     subId: number|undefined,
     subKey: string|undefined,
     villageId: number,
@@ -293,7 +291,6 @@ export class VillageInfoApi extends AppServerRequestModule<DataModel> {
   }
   async updateInfo<T extends DataModel>(
     collectModuleId: number|undefined,
-    subType: string,
     subKey: string,
     subId: number,
     villageId: number,

+ 3 - 7
src/pages/dig/admin/preview.vue

@@ -65,7 +65,6 @@
 import { computed, ref } from 'vue';
 import { useLoadQuerys } from '@/components/composeabe/LoadQuerys';
 import { useSimpleDataLoader } from '@/components/composeabe/loader/SimpleDataLoader';
-import { useCollectStore } from '@/store/collect';
 import FlexCol from '@/components/layout/FlexCol.vue';
 import CollectModuleList from '../components/CollectModuleList.vue';
 import XBarSpace from '@/components/layout/space/XBarSpace.vue';
@@ -76,6 +75,7 @@ import IntroBlock from '@/pages/article/common/IntroBlock.vue';
 import Parse from '@/components/display/parse/Parse.vue';
 import Text from '@/components/basic/Text.vue';
 import ImagesUrls from '@/common/config/ImagesUrls';
+import { CollectableModulesIdMap } from '../forms/forms';
 
 const { querys } = useLoadQuerys({ 
   villageId: 0,  
@@ -83,8 +83,6 @@ const { querys } = useLoadQuerys({
   villageVolunteerId: 0,
 });
 
-const { getCollectModuleId } = useCollectStore();
-
 const center = ref([118.15723, 24.48147]);
 const markers = ref<any>([]);
   
@@ -98,17 +96,15 @@ const imageList = computed(() => {
   return ["https://mn.wenlvti.net/app_static/xiangan/banner_dig_1.jpg" ];
 });
 const overviewLoader = useSimpleDataLoader<CommonInfoModel>(async () => {
-  const subType = 'overview';
-  const collectModuleId = getCollectModuleId('overview');
+  const collectModuleId = CollectableModulesIdMap['overview'];
   const list = await VillageInfoApi.getList(
-    collectModuleId, subType, undefined, undefined,
+    collectModuleId, undefined, undefined,
     querys.value.villageId, querys.value.villageVolunteerId
   );
 
   if (list.length > 0) {
     const info =  (await VillageInfoApi.getInfo(
       collectModuleId,
-      subType,
       undefined,
       undefined,
       querys.value.villageId,

+ 11 - 11
src/pages/dig/components/CollectModuleList.vue

@@ -15,7 +15,7 @@
       :desc="item.desc"
       :extra="item.extra"
       :goButtonText="isView ? '查看' : '去完成'"
-      :enable="typeof item.enable === 'string' ? canCollect(item.enable) : item.enable"
+      :enable="item.enable"
       @click="handleClick(item)"
     />
   </FlexCol>
@@ -28,7 +28,7 @@ import { useTaskEntryForm } from '../forms/composeable/TaskEntryForm';
 import { useAuthStore } from '@/store/auth';
 import { type TaskMenuDefGoForm, type TaskMenuDefItem } from '../forms/tasks';
 import { alert } from '@/components/utils/DialogAction';
-import { getVillageInfoForm } from '../forms/forms';
+import { CollectableModulesIdMap, getVillageInfoForm } from '../forms/forms';
 import { navTo } from '@/components/utils/PageAction';
 import FlexCol from '@/components/layout/FlexCol.vue';
 import Image from '@/components/basic/Image.vue';
@@ -38,7 +38,7 @@ import { waitTimeOut } from '@imengyu/imengyu-utils';
 
 const { goForm, goPreviewForm } = useTaskEntryForm();
 const authStore = useAuthStore();
-const { canCollect, canCollectCatalog, getCollectModuleInternalNameById } = useCollectStore();
+const { canCollect, canCollectCatalog } = useCollectStore();
 
 const props = withDefaults(defineProps<{
   villageId: number,
@@ -65,18 +65,18 @@ async function loadList() {
   currentTaskDefItems.value = res
     .map(item => {
       try {
-        const collectModuleInternalName = getCollectModuleInternalNameById(item.collectModuleId);
-        const formDefine = collectModuleInternalName ? getVillageInfoForm(collectModuleInternalName, -1) : undefined;
+        const formDefine = item.collectModuleId ? getVillageInfoForm(item.collectModuleId, -1) : undefined;
         return {
           ...item,
           extra: authStore.isAdmin && item.total >= 0 ? `已采编 ${item.total}` : '',
-          enable: canCollectCatalog(item.id) || collectModuleInternalName,
+          enable: canCollectCatalog(item.id) || item.haschild,
           catalogItem: item,
-          goForm: !item.haschild && collectModuleInternalName ? [ 
-            collectModuleInternalName, 
+          collectModuleId: item.collectModuleId,
+          goForm: !item.haschild ? [ 
+            item.collectModuleId, 
             item.typeId ?? -1, 
             formDefine?.[2].typeName, 
-            collectModuleInternalName === 'overview' ? 'common' : undefined,
+            item.collectModuleId === CollectableModulesIdMap['overview'] ? 'common' : undefined,
             item.title,
             item.id
           ] as TaskMenuDefGoForm : undefined,
@@ -91,7 +91,7 @@ async function loadList() {
             } else {
               alert({
                 title: item.title,
-                content: '您暂无权限采集该板块',
+                content: `未找到表单定义:collectModuleId: ${item.collectModuleId}`,
               })
             }
           }
@@ -109,7 +109,7 @@ async function loadList() {
 watch(() => props.taskPid, loadList);
 onMounted(loadList);
 
-const currentTaskDefItems = ref<TaskMenuDefItem[]>([]);
+const currentTaskDefItems = ref<(TaskMenuDefItem & { collectModuleId: number })[]>([]);
 const currentTaskBanner = ref('');
 const handleClick = (item: TaskMenuDefItem) => {
   

+ 2 - 1
src/pages/dig/details.vue

@@ -97,6 +97,7 @@ import Width from '@/components/layout/space/Width.vue';
 import Alert from '@/components/feedback/Alert.vue';
 import Result from '@/components/feedback/Result.vue';
 import Button from '@/components/basic/Button.vue';
+import { CollectableModulesIdMap } from './forms/forms';
 
 const { querys } = useLoadQuerys({ 
   name: '',
@@ -121,7 +122,7 @@ function goCollect() {
     });
     return;
   } */
-  goForm('collect', 1, '随手记')
+  goForm(CollectableModulesIdMap['collect'], 1, '随手记')
 }
 
 function goJoin() {

+ 7 - 11
src/pages/dig/forms/common.vue

@@ -29,9 +29,8 @@
 
 <script setup lang="ts">
 import { nextTick, ref, watch, type Ref } from 'vue';
-import { useCollectStore } from '@/store/collect';
 import { useLoadQuerys } from '@/components/composeabe/LoadQuerys';
-import { getVillageInfoForm, getVillageInfoFormIds, type SingleForm } from './forms';
+import { CollectableModulesIdMap, getVillageInfoForm, getVillageInfoFormIds, type SingleForm } from './forms';
 import { showError } from '@/common/composeabe/ErrorDisplay';
 import { backAndCallOnPageBack } from '@/components/utils/PageAction';
 import { toast } from '@/components/utils/DialogAction';
@@ -52,7 +51,6 @@ import type { UploaderFieldInstance } from '@/components/form/UploaderField.vue'
 
 const loading = ref(false);
 const subTitle = ref('');
-const collectStore = useCollectStore();
 
 const formRef = ref<IDynamicFormRef>();
 const formModel = ref(new CommonInfoModel()) as Ref<CommonInfoModel>;
@@ -73,7 +71,7 @@ const { querys } = useLoadQuerys({
   villageId: 0,  
   villageVolunteerId: 0,
   catalogId: 0,
-  subType: '',
+  collectModuleId: 0,
   subId: 0,
   subKey: '',
   subTitle: '',
@@ -92,7 +90,7 @@ const { querys } = useLoadQuerys({
   await waitTimeOut(800);
 
   try {
-    currentFormInfo = getVillageInfoForm(querys.subType, querys.subId);
+    currentFormInfo = getVillageInfoForm(querys.collectModuleId, querys.subId);
     const [model, forms] = currentFormInfo;
     formModel.value = new model() as any;
     formDefine.value = {
@@ -103,7 +101,7 @@ const { querys } = useLoadQuerys({
     };
     let findId = querys.id;
     if (findId <= 0) {
-      if (querys.subType === 'overview') {
+      if (querys.collectModuleId === CollectableModulesIdMap['overview']) {
         const info = await VillageInfoApi.getInfoByVillageId(querys.villageId);
         console.log(info);
         findId = (info.myOverviewId || info.overviewId) as number;
@@ -111,8 +109,7 @@ const { querys } = useLoadQuerys({
     }
     if (findId > 0) {
       formData = await VillageInfoApi.getInfo(
-        collectStore.getCollectModuleId(querys.subType),
-        querys.subType, 
+        querys.collectModuleId,
         querys.subId,
         querys.subKey,
         querys.villageId, 
@@ -180,8 +177,7 @@ async function submit() {
     // 提交表单数据
     await waitTimeOut(800);
     await VillageInfoApi.updateInfo(
-      collectStore.getCollectModuleId(querys.value.subType),
-      querys.value.subType,
+      querys.value.collectModuleId,
       querys.value.subKey,
       querys.value.subId,
       querys.value.villageId,
@@ -239,7 +235,7 @@ const saveLocalSaveDebounce = new Debounce(1000, saveLocalSave);
 let canSaveNow = false;
 
 function getSaveName() {
-  return `FormLocalSave-${querys.value.id}-${querys.value.subType}-${querys.value.subId}-${querys.value.villageId}-${querys.value.villageVolunteerId}`;
+  return `FormLocalSave-${querys.value.id}-${querys.value.collectModuleId}-${querys.value.subId}-${querys.value.villageId}-${querys.value.villageVolunteerId}`;
 }
 async function loadLocalSave(formData: CommonInfoModel|undefined) {
   if (!currentFormInfo)

+ 6 - 6
src/pages/dig/forms/composeable/TaskEntryForm.ts

@@ -7,25 +7,25 @@ export function useTaskEntryForm() {
     villageVolunteerId: 0,
   });
   
-  function goForm(subType: string, subId: number, subKey = 'type', type = 'list', subTitle = '', catalogId : number|undefined = undefined) {
+  function goForm(collectModuleId: number, subId: number, subKey = 'type', type = 'list', subTitle = '', catalogId : number|undefined = undefined) {
     navTo('/pages/dig/forms/' + type, {
       id: type === 'common' ? -1 : undefined,
       villageId: querys.value.villageId,  
       villageVolunteerId: querys.value.villageVolunteerId,  
       catalogId,
-      subType,
+      collectModuleId,
       subId,
       subKey,
       subTitle,
     })
   }
-  function goPreviewForm(subType: string, subId: number, subKey = 'type', type = 'list', subTitle = '', catalogId : number|undefined = undefined) {
+  function goPreviewForm(collectModuleId: number, subId: number, subKey = 'type', type = 'list', subTitle = '', catalogId : number|undefined = undefined) {
     navTo('/pages/dig/forms/' + type, {
       id: type === 'common' ? -1 : undefined,
       villageId: querys.value.villageId,  
       villageVolunteerId: querys.value.villageVolunteerId,  
       catalogId,
-      subType,
+      collectModuleId,
       subId,
       subKey,
       subTitle,
@@ -39,13 +39,13 @@ export function useTaskEntryForm() {
   }
 }
 
-export function goFormStatic(villageId: number, villageVolunteerId: number, subType: string, subId: number, subKey = 'type', type = 'list', subTitle = '', catalogId : number|undefined = undefined) {
+export function goFormStatic(villageId: number, villageVolunteerId: number, collectModuleId: number, subId: number, subKey = 'type', type = 'list', subTitle = '', catalogId : number|undefined = undefined) {
   navTo('/pages/dig/forms/' + type, {
     id: type === 'common' ? -1 : undefined,
     villageId,  
     villageVolunteerId,  
     catalogId,
-    subType,
+    collectModuleId,
     subId,
     subKey,
     subTitle,

+ 7 - 8
src/pages/dig/forms/data/cultural.ts

@@ -1,5 +1,5 @@
 import VillageInfoApi, { CommonInfoModel, VillageBulidingInfo } from "@/api/inhert/VillageInfoApi";
-import type { GroupForm, SingleForm } from "../forms";
+import { CollectableModulesIdMap, type GroupForm, type SingleForm } from "../forms";
 import type { IDynamicFormItemCallback, IDynamicFormItemCallbackAdditionalProps } from "@/components/dynamic";
 import type { PickerIdFieldProps } from "@/components/dynamic/wrappers/PickerIdField";
 import type { FieldProps } from "@/components/form/Field.vue";
@@ -35,10 +35,9 @@ export function villageInfoFolkCultureForm(title: string) : SingleForm {
         additionalProps: {
           loadData: {
             callback: (m, r, p, i) => async () => {
-              const collectStore = useCollectStore();
               return (await VillageInfoApi.getList(
-                collectStore.getCollectModuleId('ich'),
-                'ich', undefined, undefined,
+                CollectableModulesIdMap['ich'],
+                undefined, undefined,
                 i.formGlobalParams.villageId,
                 i.formGlobalParams.villageVolunteerId
               )).map((p) => ({
@@ -111,8 +110,8 @@ export const villageInfoCulture : GroupForm = {
               callback(_, m, p, i) { 
                 const collectStore = useCollectStore();
                 return async () => (await VillageInfoApi.getList(
-                  collectStore.getCollectModuleId('speaker'),
-                  'speaker', undefined, undefined,
+                  CollectableModulesIdMap['speaker'],
+                  undefined, undefined,
                   i.formGlobalParams.villageId,
                   i.formGlobalParams.villageVolunteerId
                 ))
@@ -139,7 +138,7 @@ export const villageInfoCulture : GroupForm = {
             onClick: { callback(v, m, p, i) {
               return () => {
                 const collectStore = useCollectStore();
-                if (!collectStore.getCollectModuleId('speaker')) {
+                if (!collectStore.canCollect(CollectableModulesIdMap['speaker'])) {
                   uni.showToast({
                     title: '您暂无权限采编口述人,请联系管理员。',
                     icon: 'none',
@@ -150,7 +149,7 @@ export const villageInfoCulture : GroupForm = {
                 goFormStatic(
                   i.formGlobalParams.villageId,
                   i.formGlobalParams.villageVolunteerId,
-                  'speaker',
+                  CollectableModulesIdMap['speaker'],
                   1,
                   undefined,
                   undefined,

+ 80 - 24
src/pages/dig/forms/forms.ts

@@ -25,47 +25,71 @@ export type SingleForm = [NewDataModel, (formRef: Ref<IDynamicFormRef>) => IDyna
   order?: number,
   id?: number,
 }]
-export type GroupForm = Record<number, SingleForm>
+export type GroupForm = Record<number, SingleForm>;
 
-const villageInfoForm : Record<string, GroupForm> = {
-  'overview': villageInfoOverviewForm,
-  'cultural': villageInfoCulture,
-  'story': {
+export const CollectableModulesIdMap : Record<string, number> = {
+  'overview': 11,
+  'cultural': 2,
+  'story': 14,
+  'spots': 13,
+  'speaker': 17,
+  'figure': 7,
+  'element': 5,
+  'environment': 6,
+  'building': 16,
+  'distribution': 4,
+  'relic': 3,
+  'folk_culture': 8,
+  'food_product': 9,
+  'route': 12,
+  'travel_guide': 15,
+  'ich': 10,
+  'collect': 18,
+  'glory': 23,
+};
+
+/**
+ * 采集模块ID到表单定义的映射
+ */
+const villageInfoForm : Record<number, GroupForm> = {
+  11: villageInfoOverviewForm,//村落概况
+  2: villageInfoCulture,//历史文化
+  14: {//掌故轶事
     [0]: villageInfoStoryFormItems
   },
-  'spots': {
+  13: {//风景名胜
     [0]: villageInfoSpotsFormItems,
   },
-  'speaker': {
+  17: {//口述者
     [1]: villageInfoSpeakerForm,
   },
-  'figure': {
+  7: {//历史人物
     [0]: villageInfoFigureFormItems,
   },
-  'element': {
+  5: {//环境要素
     [0]: vilElementForm,
   },
-  'environment': {
+  6: {//环境格局
     [0]: villageInfoEnvironmentForm
   },
-  'building': {
+  16: {//传统建筑
     [1]: villageInfoBuildingForm('文物建筑'),
     [2]: villageInfoBuildingForm('历史建筑'),
     [3]: villageInfoBuildingForm('重要传统建筑'),
   },
-  'distribution': { [0]: villageInfoDistributionForm },
-  'relic': { [0]: villageInfoRelicForm },
-  'folk_culture': {
+  4: { [0]: villageInfoDistributionForm },//建筑分布
+  3: { [0]: villageInfoRelicForm },//文物古迹
+  8: {//民俗文化
     [1]: villageInfoFolkCultureForm('节庆活动'),
     [2]: villageInfoFolkCultureForm('祭祀崇礼'),
     [3]: villageInfoFolkCultureForm('婚丧嫁娶'),
     [4]: villageInfoFolkCultureForm('地方方言'),
     [5]: villageInfoFolkCultureForm('特色文化'),
   },
-  'ich': { [0]: ichFormItems },
-  'travel_guide': { [0]: villageInfoTravelGuideForm },
-  'route': { [0]: villageInfoRouteForm },
-  'food_product': {
+  10: { [0]: ichFormItems },//非遗
+  15: { [0]: villageInfoTravelGuideForm },//旅游导览
+  12: { [0]: villageInfoRouteForm },//旅游路线
+  9: {//美食物产
     [1]: villageInfoFoodProductsForm('农副产品'),
     [2]: villageInfoFoodProductsForm('食品产品'),
     [3]: villageInfoFoodProductsForm('特色美食'),
@@ -73,7 +97,7 @@ const villageInfoForm : Record<string, GroupForm> = {
     [5]: villageInfoFoodProductsForm('服装服饰'),
     [6]: villageInfoFoodProductsForm('运输工具'),
   },
-  'collect': {
+  18: {//随手记
     [1]: [CommonInfoModel, (r) => ({
       formItems: [
         {
@@ -108,18 +132,50 @@ const villageInfoForm : Record<string, GroupForm> = {
       ]
     }), { title: '随手记', typeName: '', }]
   },
+  23: {//乡源荣光
+    [1]: [CommonInfoModel, (r) => ({
+      formItems: [
+        {
+          label: '标题',
+          name: 'name',
+          type: 'text',
+          defaultValue: '',
+          additionalProps: {
+            placeholder: '请输入标题',
+          } as FieldProps,
+          rules: [{
+            required: true,
+            message: '请输入标题',
+          }]
+        },
+        {
+          label: '描述',
+          name: 'desc',
+          type: 'textarea',
+          defaultValue: '',
+          additionalProps: {
+            placeholder: '请输入描述',
+          } as FieldProps,
+        },
+        ...villageCommonContent(r, {
+          title: '记录',
+          showTitle: false,
+        }).formItems
+      ]
+    }), { title: '乡源荣光', typeName: '', }]
+  },
 }
 
-export function getVillageInfoForm(subType: string, subId: number) {
-  const group = villageInfoForm[subType];
+export function getVillageInfoForm(collectModuleId: number, subId: number) {
+  const group = villageInfoForm[collectModuleId];
   if (!group)
-    throw new Error('未定义的表单类型: ' + subType);
+    throw new Error('未定义的表单类型: ' + collectModuleId);
   if (subId === -1) 
     return mergeFormItems(group);
   return group[subId];
 }
-export function getVillageInfoFormIds(subType: string) {
-  return Object.keys(villageInfoForm[subType]).map((k) => Number(k));
+export function getVillageInfoFormIds(collectModuleId: number) {
+  return Object.keys(villageInfoForm[collectModuleId]).map((k) => Number(k));
 }
 
 export function mergeFormItems(group: GroupForm) {

+ 29 - 35
src/pages/dig/forms/list-ordinary.vue

@@ -86,7 +86,6 @@ import { onPullDownRefresh } from '@dcloudio/uni-app';
 import { DataDateUtils } from '@imengyu/js-request-transform';
 import { useSimplePageListLoader } from '@/components/composeabe/loader/SimplePageListLoader';
 import { useLoadQuerys } from '@/components/composeabe/LoadQuerys';
-import { useCollectStore } from '@/store/collect';
 import { useAuthStore } from '@/store/auth';
 import { type TaskMenuDefGoForm, type TaskMenuDefItem } from './tasks';
 import { useUserTools } from '@/common/composeabe/UserTools';
@@ -106,14 +105,12 @@ import H4 from '@/components/typography/H4.vue';
 import Touchable from '@/components/feedback/Touchable.vue';
 import XBarSpace from '@/components/layout/space/XBarSpace.vue';
 import Result from '@/components/feedback/Result.vue';
-import { getVillageInfoForm } from './forms';
+import { CollectableModulesIdMap, getVillageInfoForm } from './forms';
 import VillageApi, { type VillageCatalogListItem } from '@/api/inhert/VillageApi';
 import Icon from '@/components/basic/Icon.vue';
 
 const subTitle = ref('');
 const searchText = ref('');
-const collectStore = useCollectStore();
-const { getCollectModuleInternalNameById } = collectStore;
 const { getIsVolunteer, getIsJoinedVillage, volunteerInfo } = useUserTools();
 const isJoined = ref(false);
 const authStore = useAuthStore();
@@ -128,19 +125,18 @@ const listLoader = useSimplePageListLoader<{
 }, {
   villageId: number,  
   villageVolunteerId: number,
-  subType: string,
+  collectModuleId: number,
   subId: number,
   subKey: string,
 }>(8, async (page, pageSize, params) => {
   if (!params )
     throw new Error("未传入参数,当前页面需要参数");
-  if (!params.subType)
-    throw new Error("params.subType");
+  if (!params.collectModuleId)
+    throw new Error("params.collectModuleId");
   if (!params.villageId)
     throw new Error("params.villageId");
   let res = await VillageInfoApi.getList(
-    collectStore.getCollectModuleId(params.subType),
-    params.subType,
+    params.collectModuleId,
     params.subKey ? params.subId : undefined,
     params.subKey,
     params.villageId,
@@ -186,7 +182,7 @@ function newData() {
     villageId: querys.value.villageId,  
     villageVolunteerId: querys.value.villageVolunteerId,  
     catalogId: currentCatalog.value?.id || 0,
-    subType: currentLoadData.value.subType,  
+    collectModuleId: currentLoadData.value.collectModuleId,  
     subId: currentLoadData.value.subId,  
   });
 }
@@ -205,7 +201,7 @@ function goDetail(item: { id: number, villageVolunteerId: number }) {
       villageId: querys.value.villageId,
       villageVolunteerId: querys.value.villageVolunteerId,
       catalogId: currentCatalog.value?.id || 0,
-      subType: currentLoadData.value.subType,
+      collectModuleId: currentLoadData.value.collectModuleId,
       subKey: currentLoadData.value.subKey,
       subId: currentLoadData.value.subId,
       subTitle: currentLoadData.value.subTitle,
@@ -231,7 +227,7 @@ const currentCatalogList = computed(() => {
 });
 const currentCatalog = ref<VillageCatalogListItem | null>(null);
 const currentLoadData = ref({
-  subType: '',
+  collectModuleId: 0,
   subId: 0,
   subKey: '',
   subTitle: '',
@@ -251,32 +247,30 @@ function loadListCatalog(catalog: VillageCatalogListItem) {
     return;
   currentCatalog.value = catalog;
   
-  const collectModuleInternalName = getCollectModuleInternalNameById(querys.value.collectModuleId);
-  if (!collectModuleInternalName) {
+  try {
+    const formDefine = getVillageInfoForm(querys.value.collectModuleId, -1);
+    const goForm = [ 
+      querys.value.collectModuleId, 
+      catalog.typeId ?? -1, 
+      formDefine?.[2].typeName, 
+      querys.value.collectModuleId === CollectableModulesIdMap['overview'] ? 'common' : undefined,
+      catalog.title,
+      catalog.id
+    ] as TaskMenuDefGoForm;
+
+    currentLoadData.value = {
+      collectModuleId: querys.value.collectModuleId,
+      subId: goForm[1],
+      subKey: goForm[2] || 'type',
+      subTitle: goForm[4] || querys.value.title,
+      catalogId: goForm[5] || 0,
+      villageId: querys.value.villageId,
+      villageVolunteerId: volunteerInfo.value?.id || 0,
+    }
+  } catch {
     error.value = '任务不存在';
     return;
   }
-
-  const formDefine = collectModuleInternalName ? getVillageInfoForm(collectModuleInternalName, -1) : undefined;
-  const goForm = [ 
-    collectModuleInternalName, 
-    catalog.typeId ?? -1, 
-    formDefine?.[2].typeName, 
-    collectModuleInternalName === 'overview' ? 'common' : undefined,
-    catalog.title,
-    catalog.id
-  ] as TaskMenuDefGoForm;
-
-  currentLoadData.value = {
-    ...querys.value,
-    subType: goForm[0],
-    subId: goForm[1],
-    subKey: goForm[2] || 'type',
-    subTitle: goForm[4] || querys.value.title,
-    catalogId: goForm[5] || 0,
-    villageId: querys.value.villageId,
-    villageVolunteerId: volunteerInfo.value?.id || 0,
-  }
   listLoader.load(false, currentLoadData.value)
 }
 

+ 34 - 34
src/pages/dig/forms/list.vue

@@ -62,7 +62,6 @@ import { onPullDownRefresh } from '@dcloudio/uni-app';
 import { DataDateUtils } from '@imengyu/js-request-transform';
 import { useSimplePageListLoader } from '@/components/composeabe/loader/SimplePageListLoader';
 import { useLoadQuerys } from '@/components/composeabe/LoadQuerys';
-import { useCollectStore } from '@/store/collect';
 import { useAuthStore } from '@/store/auth';
 import { type TaskMenuDefGoForm } from './tasks';
 import { useUserTools } from '@/common/composeabe/UserTools';
@@ -82,13 +81,11 @@ import H4 from '@/components/typography/H4.vue';
 import Touchable from '@/components/feedback/Touchable.vue';
 import XBarSpace from '@/components/layout/space/XBarSpace.vue';
 import Result from '@/components/feedback/Result.vue';
-import { getVillageInfoForm } from './forms';
+import { CollectableModulesIdMap, getVillageInfoForm } from './forms';
 import VillageApi from '@/api/inhert/VillageApi';
 
 const subTitle = ref('');
 const searchText = ref('');
-const collectStore = useCollectStore();
-const { getCollectModuleInternalNameById } = collectStore;
 const { getIsVolunteer, getIsJoinedVillage, volunteerInfo } = useUserTools();
 const isJoined = ref(false);
 const authStore = useAuthStore();
@@ -103,19 +100,18 @@ const listLoader = useSimplePageListLoader<{
 }, {
   villageId: number,  
   villageVolunteerId: number,
-  subType: string,
+  collectModuleId: number,
   subId: number,
   subKey: string,
 }>(8, async (page, pageSize, params) => {
   if (!params )
     throw new Error("未传入参数,当前页面需要参数");
-  if (!params.subType)
-    throw new Error("params.subType");
+  if (!params.collectModuleId)
+    throw new Error("params.collectModuleId");
   if (!params.villageId)
     throw new Error("params.villageId");
   let res = await VillageInfoApi.getList(
-    collectStore.getCollectModuleId(params.subType),
-    params.subType,
+    params.collectModuleId,
     params.subKey ? params.subId : undefined,
     params.subKey,
     params.villageId,
@@ -165,7 +161,7 @@ function newData() {
     villageId: querys.value.villageId,  
     villageVolunteerId: querys.value.villageVolunteerId,  
     catalogId: querys.value.catalogId,
-    subType: querys.value.subType,  
+    collectModuleId: querys.value.collectModuleId,  
     subId: querys.value.subId,  
   });
 }
@@ -184,7 +180,7 @@ function goDetail(item: { id: number, villageVolunteerId: number }) {
       villageId: querys.value.villageId,
       villageVolunteerId: querys.value.villageVolunteerId,
       catalogId: querys.value.catalogId,
-      subType: querys.value.subType,
+      collectModuleId: querys.value.collectModuleId,
       subKey: querys.value.subKey,
       subId: querys.value.subId,
       subTitle: querys.value.subTitle,
@@ -202,11 +198,10 @@ function goJoin() {
 }
 
 const { querys } = useLoadQuerys({ 
-  collectModuleId: 0,
   villageId: 0,  
   villageVolunteerId: 0,
   catalogId: 0,
-  subType: '',
+  collectModuleId: 0,
   subKey: '',
   subId: 0,
   subTitle: '',
@@ -222,33 +217,38 @@ const { querys } = useLoadQuerys({
       querys.villageId, 
       authStore.isAdmin ? undefined : querys.villageVolunteerId,
     ));
-    const collectModuleInternalName = getCollectModuleInternalNameById(querys.collectModuleId);
-    if (!collectModuleInternalName) {
-      error.value = '任务不存在';
-      return;
-    }
     console.log('catalogList', catalogList, 'find', querys.collectModuleId);
     const catalog = catalogList.find((p) => p.collectModuleId === querys.collectModuleId || p.childlist.find((c) => c.collectModuleId === querys.collectModuleId));
     if (!catalog) {
       error.value = '未找到采集目录';
       return;
     }
-    const formDefine = collectModuleInternalName ? getVillageInfoForm(collectModuleInternalName, -1) : undefined;
-    const goForm = [ 
-      collectModuleInternalName, 
-      catalog.typeId ?? -1, 
-      formDefine?.[2].typeName, 
-      collectModuleInternalName === 'overview' ? 'common' : undefined,
-      catalog.title,
-      catalog.id
-    ] as TaskMenuDefGoForm;
-    querys.subType = goForm[0];
-    querys.subId = goForm[1];
-    querys.subKey = goForm[2] || 'type';
-    querys.subTitle = goForm[4] || querys.subTitle;
-    querys.catalogId = goForm[5] || 0;
-    querys.villageVolunteerId = volunteerInfo.value?.id || 0;
-    listLoader.load(false, querys)
+    try {
+      const formDefine = getVillageInfoForm(querys.collectModuleId, -1);
+      const goForm = [ 
+        querys.collectModuleId, 
+        catalog.typeId ?? -1, 
+        formDefine?.[2].typeName, 
+        querys.collectModuleId === CollectableModulesIdMap['overview'] ? 'common' : undefined,
+        catalog.title,
+        catalog.id
+      ] as TaskMenuDefGoForm;
+      querys.subId = goForm[1];
+      querys.subKey = goForm[2] || 'type';
+      querys.subTitle = goForm[4] || querys.subTitle;
+      querys.catalogId = goForm[5] || 0;
+      querys.villageVolunteerId = volunteerInfo.value?.id || 0;
+      listLoader.load(false, {
+        villageId: querys.villageId,
+        villageVolunteerId: querys.villageVolunteerId,
+        collectModuleId: querys.collectModuleId,
+        subId: querys.subId,
+        subKey: querys.subKey,
+      })
+    } catch {
+      error.value = '任务不存在';
+      return;
+    }
 
   } else {
     //原有采集页进入

+ 1 - 4
src/pages/dig/forms/submits.vue

@@ -95,7 +95,6 @@ import { DataDateUtils } from '@imengyu/js-request-transform';
 import { useSimplePageListLoader } from '@/components/composeabe/loader/SimplePageListLoader';
 import { useSimpleDataLoader } from '@/components/composeabe/loader/SimpleDataLoader';
 import { useLoadQuerys } from '@/components/composeabe/LoadQuerys';
-import { useCollectStore } from '@/store/collect';
 import { selectObjectByType } from '@/components/theme/ThemeTools';
 import { navTo } from '@/components/utils/PageAction';
 import SimplePageListLoader from '@/components/loader/SimplePageListLoader.vue';
@@ -118,7 +117,6 @@ import VillageApi from '@/api/inhert/VillageApi';
 import { waitTimeOut } from '@imengyu/imengyu-utils';
 
 const searchText = ref('');
-const collectStore = useCollectStore();
 const filterStatus = ref(-100);
 const filterVillage = ref(0);
 
@@ -135,7 +133,6 @@ const listLoader = useSimplePageListLoader<CommonInfoModel>(8, async (page, page
   await waitTimeOut(300);
   let res = await VillageInfoApi.getList(
     undefined,
-    '',
     undefined,
     undefined,
     filterVillage.value,
@@ -158,7 +155,7 @@ function goDetail(item: CommonInfoModel) {
     villageId: querys.value.villageId,
     villageVolunteerId: querys.value.villageVolunteerId,
     catalogId: item.catalogId,
-    subType:  collectStore.getCollectModuleInternalNameById(item.collectModuleId),
+    collectModuleId: item.collectModuleId,
     subKey: '',
     subId: -1,
     subTitle: item.catalogName || item.collectModuleName || '',

+ 2 - 2
src/pages/dig/forms/tasks.ts

@@ -3,7 +3,7 @@ export type TaskMenuDefGroup = {
   list: TaskMenuDefItem[];
 }
 export type TaskMenuDefGoForm = [
-  string,
+  number,
   number, 
   string|undefined, 
   string|undefined, 
@@ -14,7 +14,7 @@ export type TaskMenuDefItem = {
   title: string;
   desc: string;
   icon: string;
-  enable: string|boolean;
+  enable: boolean;
   name?: string;
   extra?: string;
   goForm?: {

+ 10 - 35
src/store/collect.ts

@@ -1,22 +1,21 @@
 import { computed, ref } from 'vue'
 import { defineStore } from 'pinia'
 import { useAuthStore } from './auth';
-import { CollectableModulesNameMapping } from '@/common/data/CollectableModulesNameMapping';
 import VillageApi from '@/api/inhert/VillageApi';
 
 /** 
  * 采集模块状态 
  */
 export const useCollectStore = defineStore('collect', () => {
-  const collectableModules = ref(new Map<string, number>());
-  const collectableAllModules = ref(new Map<string, number>());
+  const collectableModules = ref(new Set<number>());
+  const collectableAllModules = ref(new Map<number, string>());
   const collectableCatalogs = ref<number[]>([]);
   const authStore = useAuthStore();
 
   /**
    * 设置采集模块状态数据
    */
-  function setCollectableModules(modules: Map<string, number>) {
+  function setCollectableModules(modules: Set<number>) {
     collectableModules.value = modules;
   }
   /**
@@ -30,35 +29,12 @@ export const useCollectStore = defineStore('collect', () => {
   /**
    * 判断是否可以采集指定模块
    */
-  function canCollect(module: string) {
+  function canCollect(collectModuleId: number) {
     if (authStore.isAdmin)
       return true;
-    if (collectableModules.value.has(CollectableModulesNameMapping[module]))
+    if (collectableModules.value.has(collectModuleId))
       return true;
-    return collectableModules.value.has(module);
-  }
-  /**
-   * 获取采集模块的内部名称
-   */
-  function getCollectModuleId(module: string) {
-    if (collectableAllModules.value.has(CollectableModulesNameMapping[module]))
-      return collectableAllModules.value.get(CollectableModulesNameMapping[module]);
-    return collectableAllModules.value.get(module);
-  }
-  /**
-   * 从ID获取采集模块的内部名称
-   */
-  function getCollectModuleInternalNameById(id: number) {
-    for (const [key, value] of collectableAllModules.value) {
-      if (value == id) {
-        for (const k2 in CollectableModulesNameMapping) {
-          if (CollectableModulesNameMapping[k2] == key) {
-            return k2;
-          }
-        }
-      }
-    }
-    return '';
+    return collectableModules.value.has(collectModuleId);
   }
 
   async function loadCollectableModules() {
@@ -66,7 +42,7 @@ export const useCollectStore = defineStore('collect', () => {
     const collectableModules = res.collectModule || [];
     const collectableModulesMap = await VillageApi.getCollectModuleMap();
     for (const [k,v] of collectableModulesMap)
-      collectableAllModules.value.set(k, v);
+      collectableAllModules.value.set(v, k);
     const needRemoveKeys = new Set<string>();
     if (!authStore.isAdmin) {
       for (const [key,id] of collectableModulesMap)
@@ -76,8 +52,8 @@ export const useCollectStore = defineStore('collect', () => {
     for (const key of needRemoveKeys)
       collectableModulesMap.delete(key);
     collectableCatalogs.value = res.catalogIds || [];
-    console.log('collectableModulesMap', collectableModules, collectableModulesMap);
-    setCollectableModules(collectableModulesMap);
+    console.log('CollectableModulesMap', collectableModules, collectableModulesMap);
+    setCollectableModules(new Set(collectableModules));
   }
   
   /**
@@ -88,9 +64,8 @@ export const useCollectStore = defineStore('collect', () => {
   return { 
     isEmpty,
     collectableModules,
+    collectableCatalogs,
     setCollectableModules,
-    getCollectModuleInternalNameById,
-    getCollectModuleId,
     canCollect,
     canCollectCatalog,
     loadCollectableModules,