Kaynağa Gözat

🎨 修复点击细节问题

快乐的梦鱼 3 hafta önce
ebeveyn
işleme
4fa929b5ed

+ 10 - 2
src/pages/home/discover/details.vue

@@ -145,7 +145,7 @@ import { computed, ref } from "vue";
 import { useSimpleDataLoader } from "@/components/composeabe/loader/SimpleDataLoader";
 import { useSwiperImagePreview } from "@/common/composeabe/SwiperImagePreview";
 import { useLoadQuerys } from "@/components/composeabe/LoadQuerys";
-import { backAndCallOnPageBack, navTo, back } from "@/components/utils/PageAction";
+import { backAndCallOnPageBack, navTo, back, isTopLevelPage, redirectTo } from "@/components/utils/PageAction";
 import { onShareTimeline, onShareAppMessage } from "@dcloudio/uni-app";
 import { DataDateUtils } from "@imengyu/js-request-transform";
 import SimplePageContentLoader from "@/components/loader/SimplePageContentLoader.vue";
@@ -202,10 +202,18 @@ function handleGoUserDetails(id: number) {
   navTo('/pages/home/village/volunteer/detail', { id: loader.content.value?.villageVolunteerId });
 }
 function handleGoVillageDetails(id: number) {
-  backAndCallOnPageBack('goVillage', { id });
+  if (isTopLevelPage()) {
+    redirectTo('/pages/home/index', { villageId: id });
+  } else {
+    backAndCallOnPageBack('goVillage', { id });
+  }
 }
 
 function handleBack() {
+  if (isTopLevelPage()) {
+    redirectTo('/pages/home/index');
+    return;
+  }
   if (isChangedStatus.value) {
     backAndCallOnPageBack('refresh', { needRefresh: true });
     return;

+ 4 - 0
src/pages/home/index.vue

@@ -183,6 +183,7 @@
               align="center"
               :flexShrink="0"
               :innerStyle="{ minWidth: '400rpx' }"
+              @click="handleDoTask(item)"
             >
               <Icon :icon="item.image || 'space'" :size="100" />
               <FlexCol gap="gap.md">
@@ -349,6 +350,7 @@ import TreeApi from '@/api/light/TreeApi';
 import Touchable from '@/components/feedback/Touchable.vue';
 import Icon from '@/components/basic/Icon.vue';
 import SimplePageContentLoader from '@/components/loader/SimplePageContentLoader.vue';
+import { useTaskActions } from './village/composeabe/TaskActions';
 
 const props = defineProps({
   currentScrollTop: {
@@ -433,6 +435,8 @@ function handleCloseLightTip() {
   showLightTipTimeout.recordTime();
 }
 
+const { handleDoTask } = useTaskActions(() => villageStore.currentVillage?.id || 0, true);
+
 const recommendTabCurrent = ref(0);
 const recommendTabs = ref([
   {

+ 7 - 0
src/pages/home/recommend/RecommendTab.vue

@@ -24,6 +24,7 @@ import VillageInfoApi, { type CommonInfoModel } from '@/api/inhert/VillageInfoAp
 import IndexCommonImageItem from '@/common/components/parts/IndexCommonImageItem.vue';
 import MasonryGrid from '@/components/layout/masonry/MasonryGrid.vue';
 import SimplePageListLoader from '@/components/loader/SimplePageListLoader.vue';
+import { onMounted } from 'vue';
 
 defineEmits<{
   (e: 'goDetails', item: CommonInfoModel): void;
@@ -31,5 +32,11 @@ defineEmits<{
 
 const loader = useSimplePageListLoader(20, async (page, pageSize) => {
   return await VillageInfoApi.getListForDiscover({ page, pageSize });
+}, false);
+
+onMounted(() => {
+  setTimeout(() => {
+    loader.load();
+  }, 500);
 });
 </script>

+ 46 - 0
src/pages/home/village/composeabe/TaskActions.ts

@@ -0,0 +1,46 @@
+import type { GrowthTaskItem } from "@/api/light/TreeApi";
+import { injectAppConfiguration } from "@/api/system/useAppConfiguration";
+import { backAndCallOnPageBack, callPrevOnPageBack, navTo } from "@/components/utils/PageAction";
+
+export function useTaskActions(getVillageId: () => number, topLevelPage = false) {
+  const appConfiguration = injectAppConfiguration();
+
+  function handleDoTask(item: GrowthTaskItem) {
+    switch (item.taskType) {
+      case 'collect':
+      case 'post':
+      case 'tree':
+        if (topLevelPage) {
+          callPrevOnPageBack('goVillage', {
+            id: getVillageId(),
+            taskType: item.taskType,
+          }, -1)
+        } else {
+          backAndCallOnPageBack('goVillage', {
+            id: getVillageId(),
+            taskType: item.taskType,
+          });
+        }
+        break;
+      default: 
+        switch (item.taskKey) {
+          case 'share_app':
+            uni.setStorageSync('ShareAppTempEntranceContent', {
+              content: appConfiguration.value.ShareAppTempEntranceContent.content || '',
+              images: appConfiguration.value.ShareAppTempEntranceContent.images || [],
+              title: appConfiguration.value.ShareAppTempEntranceContent.title || '',
+            });
+            navTo('/pages/home/chat/dependent/post/publish', {
+              entranceContent: 'ShareAppTempEntranceContent',
+              disableAiPops: true,
+            });
+            break;
+        }
+        break;
+    }
+  }
+
+  return {
+    handleDoTask,
+  }
+}

+ 1 - 1
src/pages/home/village/introd/card.vue

@@ -83,7 +83,7 @@
         <!-- 简介 -->
         <TextEllipsis 
           fontConfig="secondText"
-          :outerProps="{ direction: 'row', width: descOpen ? '' : '490rpx' }"
+          :outerProps="{ direction: 'row', width: descOpen || !isStaff ? '' : '490rpx' }"
           :lines="1" 
           :expandable="(villageInfoLoader.content.value?.desc as string || '').length > 20"
           :text="(villageInfoLoader.content.value?.desc as string) || '暂无简介,欢迎您来编写完善!'"

+ 2 - 29
src/pages/home/village/task/index.vue

@@ -95,6 +95,7 @@ import FrameButton from '@/common/components/FrameButton.vue';
 import Button from '@/components/basic/Button.vue';
 import Icon from '@/components/basic/Icon.vue';
 import Width from '@/components/layout/space/Width.vue';
+import { useTaskActions } from '../composeabe/TaskActions';
 
 const { querys } = useLoadQuerys({
   villageId: 0,
@@ -102,7 +103,7 @@ const { querys } = useLoadQuerys({
   listLoader.load();
 });
 
-const appConfiguration = injectAppConfiguration();
+const { handleDoTask } = useTaskActions(() => querys.value.villageId);
 
 const listLoader = useSimplePageListLoader(20, async (page, pageSize) => {
   const res = await TreeApi.getTaskList({
@@ -115,32 +116,4 @@ const listLoader = useSimplePageListLoader(20, async (page, pageSize) => {
     total: res.total,
   };
 }, false);
-
-function handleDoTask(item: GrowthTaskItem) {
-  switch (item.taskType) {
-    case 'collect':
-    case 'post':
-    case 'tree':
-      backAndCallOnPageBack('goVillage', {
-        id: querys.value.villageId,
-        taskType: item.taskType,
-      });
-      break;
-    default: 
-      switch (item.taskKey) {
-        case 'share_app':
-          uni.setStorageSync('ShareAppTempEntranceContent', {
-            content: appConfiguration.value.ShareAppTempEntranceContent.content || '',
-            images: appConfiguration.value.ShareAppTempEntranceContent.images || [],
-            title: appConfiguration.value.ShareAppTempEntranceContent.title || '',
-          });
-          navTo('/pages/home/chat/dependent/post/publish', {
-            entranceContent: 'ShareAppTempEntranceContent',
-            disableAiPops: true,
-          });
-          break;
-      }
-      break;
-  }
-}
 </script>