瀏覽代碼

按要求修改

快乐的梦鱼 2 月之前
父節點
當前提交
ae22f273af

+ 4 - 4
src/api/inhert/VillageInfoApi.ts

@@ -244,12 +244,12 @@ export class VillageInfoApi extends AppServerRequestModule<DataModel> {
       .catch(e => { throw e });
   }
 
-  async getListForDiscover(collectModuleId: number|undefined, page: number, pageSize: number, keywords?: string) {
+  async getListForDiscover(page: number, pageSize: number, keywords?: string) {
     return (this.post(`/village/collect/list`, {
-      collect_module_id: collectModuleId,
       page,
       page_size: pageSize,
       keywords,
+      status: 4,
     }, '获取信息详情'))
       .then(res => ({
         total: res.data2.total as number,
@@ -257,10 +257,10 @@ export class VillageInfoApi extends AppServerRequestModule<DataModel> {
       }))
       .catch(e => { throw e });
   }
-  async getInfoForDiscover(collectModuleId: number|undefined, id?: number) {
+  async getInfoForDiscover(id: number) {
     return (await this.post(`/village/collect/info`, {
-      collect_module_id: collectModuleId,
       id,
+      status: 4,
     }, '通用获取信息详情', undefined, CommonInfoModel)).data as CommonInfoModel
   }
 

+ 7 - 1
src/common/components/parts/Box2LineImageRightShadow.vue

@@ -25,7 +25,8 @@
           'color-primary size-base',
           desc || title1 ? 'text-lines-1' : 'text-lines-2',
         ]">{{ title }}</text>
-        <text class="size-s color-second text-lines-2 mt-2">{{ desc }}</text>
+        <text class="size-s color-second text-lines-2 mt-2 mb-2">{{ desc }}</text>
+        <Tag v-if="badge" :text="badge" scheme="light" type="primary" size="small" />
         <RoundTags v-if="tags" :tags="tags" small />
       </view>
     </view>
@@ -36,6 +37,7 @@
 <script setup lang="ts">
 import type { PropType } from 'vue';
 import RoundTags from './RoundTags.vue';
+import Tag from '@/components/display/Tag.vue';
 
 defineProps({
   title: String,
@@ -54,6 +56,10 @@ defineProps({
   title1: {
     type: Boolean,
     default: false,
+  },
+  badge: {
+    type: String,
+    default: '',
   }
 })
 </script>

+ 0 - 25
src/common/components/parts/Box2LineRightShadow.vue

@@ -1,25 +0,0 @@
-<template>
-  <view 
-    class="d-flex flex-row justify-between shadow-s radius-base mt-3 p-2"
-    @click="$emit('click')"
-  >
-    <view class="d-flex flex-row">
-      <slot name="left" />
-      <view class="d-flex flex-col ml-3 flex-one">
-        <text class="color-primary">{{ title }}</text>
-        <text class="color-second mt-2">{{ desc }}</text>
-      </view>
-    </view>
-    <text v-if="right" class="color-primary-second-text size-ss">{{ right }}</text>
-    <text v-else class="color-title-text iconfont icon-arrow-right"></text>
-  
-  </view>
-</template>
-
-<script setup lang="ts">
-defineProps({
-  title: String,
-  desc: String,
-  right: String,
-})
-</script>

+ 0 - 19
src/common/components/parts/Box2LineRightSlot.vue

@@ -1,19 +0,0 @@
-<template>
-  <view 
-    class="d-flex w-100 flex-row align-center bg-light-light-primary radius-base mt-2 p-2 pb-3 pt-3"
-    @click="$emit('click')"
-  >
-    <view class="d-flex flex-col ml-3 flex-one">
-      <text class="color-primary">{{ title }}</text>
-      <text class="color-primary-second-text">{{ desc }}</text>
-    </view>
-    <slot />
-  </view>
-</template>
-
-<script setup lang="ts">
-defineProps({
-  title: String,
-  desc: String,
-})
-</script>

+ 5 - 1
src/pages/dig/admin.vue

@@ -17,7 +17,10 @@
           center 
           :padding="20"
           :height="300"
-          backgroundColor="background.primary"
+          :innerStyle="{
+            backgroundImage: `url('https://mn.wenlvti.net/app_static/xiangyuan/images/share-btn.jpg')`,
+            backgroundSize: 'cover',
+          }"
           @click=""
         >
           <FlexCol position="relative">
@@ -126,5 +129,6 @@ onShareAppMessage(() => ({
   title: '邀请你成为村社挖掘志愿者',
   desc: '分享给你的志愿者可以采编村社文化资源信息,加入志愿者队伍,为村社贡献力量。',
   path: '/pages/dig/sharereg/share-reg-page',
+  imageUrl: 'https://mn.wenlvti.net/app_static/xiangyuan/images/share-post.jpg',
 }))
 </script>

+ 60 - 34
src/pages/home/discover/details.vue

@@ -1,8 +1,8 @@
 <template>
-  <view class="d-flex flex-column bg-base pb-45">
+  <FlexCol :padding="[0,0,50,0]">
     <SimplePageContentLoader :loader="loader">
       <template v-if="loader.content.value">
-        <view class="d-flex flex-col">
+        <FlexCol :gap="20">
           <swiper 
             v-if="loader.content.value.images.length > 0"
             circular 
@@ -10,44 +10,66 @@
             :autoplay="true"
             :interval="3000"
             :duration="1000"
-            class="height-500"
+            :style="{ height: '500rpx' }"
           >
             <swiper-item v-for="(item, key) in loader.content.value.images" :key="key">
               <view class="item">
-                <image 
+                <Image 
                   :src="item" 
-                  class="w-100 height-500 radius-base"
+                  width="100%"
+                  :height="500"
+                  :radius="20"
                   mode="aspectFill" 
                   @click="onPreviewImage(key)"
                 />
               </view>
             </swiper-item>
           </swiper>
-          <image 
+          <Image
             v-else-if="loader.content.value.image"
-            class="w-100 radius-base"
             :src="loader.content.value.image"
+            width="100%"
             mode="widthFix"
           />
-          <view class="d-flex flex-col p-3">
-            <view class="size-ll color-title-text">{{ loader.content.value.title }}</view>
-            <view class="d-flex flex-row mt-2">
-              <text v-if="loader.content.value.from" class="size-s color-text-content-second mr-2 ">来源:{{ loader.content.value.from }}</text>
-              <text class="size-s color-text-content-second">{{ DataDateUtils.formatDate(loader.content.value.publishAt, 'YYYY-MM-dd') }}</text>
-            </view>
-          </view>
-          <view class="p-3 radius-ll bg-light mt-3">
+          <FlexCol :padding="30" :gap="20">
+            <H3 class="size-ll color-title-text">{{ loader.content.value.title }}</H3>
+            <FlexRow :gap="20">
+              <Text v-if="loader.content.value.from" color="text.second" :size="28">来源:{{ loader.content.value.from }}</Text>
+              <Text v-if="loader.content.value.keywords" color="text.second" :size="28">{{ loader.content.value.keywords.join(' ') }}</Text>
+              <Text color="text.second" :size="28">{{ DataDateUtils.formatDate(loader.content.value.publishAt, 'YYYY-MM-dd') }}</Text>
+            </FlexRow>
+          </FlexCol>
+          <Touchable 
+            direction="row" align="center"
+            justify="space-between" :margin="30" 
+            backgroundColor="white" :radius="20"
+          >
+            <FlexRow :padding="20" :gap="20" align="center">
+              <Image
+                :src="loader.content.value.image"
+                width="80"
+                height="80"
+                radius="10"
+                mode="aspectFill"
+              />
+              <FlexCol >
+                <Text bold>{{ loader.content.value.villageName }}</Text>
+              </FlexCol>
+            </FlexRow>
+            <Icon icon="arrow-right" />
+          </Touchable>
+          <FlexCol :padding="30">
             <Parse
               v-if="loader.content.value.content"
               :content="loader.content.value.content"
               :tagStyle="commonParserStyle"
             />
-            <text v-if="emptyContent">暂无简介</text>
-          </view>
+            <Text v-if="emptyContent">暂无简介</Text>
+          </FlexCol>
           
           <!-- 推荐 -->
-          <view v-if="recommendListLoader.content.value?.length" class="d-flex flex-col p-3">
-            <text class="size-base text-bold mb-3">相关推荐</text>
+          <FlexCol v-if="recommendListLoader.content.value?.length" :padding="30">
+            <H5>相关推荐</H5>
             <Box2LineImageRightShadow
               class="w-100"
               titleColor="title-text"
@@ -56,15 +78,15 @@
               :image="item.image || AppCofig.defaultImage"
               :title="item.title"
               :desc="item.desc"
-              :badge="item.badge"
+              :badge="item.villageName"
               :wideImage="true"
               @click="goDetails(item.id)"
             />
-          </view>
-        </view>
+          </FlexCol>
+        </FlexCol>
       </template>
     </SimplePageContentLoader>
-  </view>
+  </FlexCol>
 </template>
 
 <script setup lang="ts">
@@ -82,37 +104,41 @@ import Parse from "@/components/display/parse/Parse.vue";
 import Box2LineImageRightShadow from "@/common/components/parts/Box2LineImageRightShadow.vue";
 import AppCofig from "@/common/config/AppCofig";
 import VillageInfoApi from "@/api/inhert/VillageInfoApi";
+import Tag from "@/components/display/Tag.vue";
+import FlexRow from "@/components/layout/FlexRow.vue";
+import FlexCol from "@/components/layout/FlexCol.vue";
+import Icon from "@/components/basic/Icon.vue";
+import Image from "@/components/basic/Image.vue";
+import Text from "@/components/basic/Text.vue";
+import H5 from "@/components/typography/H5.vue";
+import H3 from "@/components/typography/H3.vue";
+import Touchable from "@/components/feedback/Touchable.vue";
 
 const { onPreviewImage } = useSwiperImagePreview(() => loader.content.value?.images || []);
 const emptyContent = computed(() => (loader.content.value?.content || '').trim() === '');
 
 const loader = useSimplePageContentLoader(async () => {
-  const res = await VillageInfoApi.getInfoForDiscover(
-    querys.value.collectModelId,
-    querys.value.id,
-  );
+  const res = await VillageInfoApi.getInfoForDiscover(querys.value.id);
   uni.setNavigationBarTitle({ title: res.title });
   return res;
 });
 const recommendListLoader = useSimpleDataLoader(async () => {
-  if (!querys.value.collectModelId)
+  if (!querys.value.keywords)
     return []
-  return (await VillageInfoApi.getListForDiscover(querys.value.collectModelId, 1, 5))
+  return (await VillageInfoApi.getListForDiscover(1, 5, querys.value.keywords))
     .list
     .filter((p) => p.id !== querys.value.id);
 });
 
 const { querys } = useLoadQuerys({ 
   id: 0,
-  collectModelId: 0,
-  collectModelInternalName: '',
+  keywords: '',
 }, (t) => loader.loadData(t));
 
 function goDetails(id: number) {
   navTo('details', { 
-    id, 
-    collectModelId: querys.value.collectModelId, 
-    collectModelInternalName: querys.value.collectModelInternalName 
+    id,
+    keywords: querys.value.keywords,
   });
 }
 

+ 15 - 17
src/pages/home/discover/index.vue

@@ -7,14 +7,14 @@
         GridItemPaddingHorizontal: 0,
       }">
         <Grid :borderGrid="false" :mainAxisCount="4">
-          <GridItem title="全部" icon="/static/images/icons/icon-all.png" touchable @click="goList('all', '全部')" />
-          <GridItem title="历史文化" icon="/static/images/icons/icon-history.png" touchable @click="goList('cultural', '历史文化')" />
-          <GridItem title="环境格局" icon="/static/images/icons/icon-envirounment.png" touchable @click="goList('environment', '环境格局')" />
-          <GridItem title="传统建筑" icon="/static/images/icons/icon-buliding.png" touchable @click="goList('building', '传统建筑')" />
-          <GridItem title="民俗文化" icon="/static/images/icons/icon-location.png" touchable @click="goList('folk_culture', '民俗文化')" />
-          <GridItem title="地道美食" icon="/static/images/icons/icon-foods.png" touchable @click="goList('food_product', '美食物产')" />
-          <GridItem title="物产资源" icon="/static/images/icons/icon-resource.png" touchable @click="goList('figure', '历史人物')" />
-          <GridItem title="旅游线路" icon="/static/images/icons/icon-route.png" touchable @click="goList('route', '旅游线路')" />
+          <GridItem title="全部" icon="/static/images/icons/icon-all.png" touchable @click="goList('')" />
+          <GridItem title="历史文化" icon="/static/images/icons/icon-history.png" touchable @click="goList('历史文化')" />
+          <GridItem title="环境格局" icon="/static/images/icons/icon-envirounment.png" touchable @click="goList('环境格局')" />
+          <GridItem title="传统建筑" icon="/static/images/icons/icon-buliding.png" touchable @click="goList('传统建筑')" />
+          <GridItem title="民俗文化" icon="/static/images/icons/icon-location.png" touchable @click="goList('民俗文化')" />
+          <GridItem title="地道美食" icon="/static/images/icons/icon-foods.png" touchable @click="goList('美食物产')" />
+          <GridItem title="物产资源" icon="/static/images/icons/icon-resource.png" touchable @click="goList('历史人物')" />
+          <GridItem title="旅游线路" icon="/static/images/icons/icon-route.png" touchable @click="goList('旅游线路')" />
         </Grid>
       </ProvideVar>
     </Box>
@@ -40,6 +40,7 @@
             <FlexCol >
               <Text :text="item.title" fontConfig="h4" />
               <Text :text="item.desc" fontConfig="subText" />
+              <Tag scheme="light" :text="item.villageName" type="primary" />
             </FlexCol>
           </Touchable>
         </FlexCol>
@@ -51,6 +52,7 @@
 </template>
 
 <script setup lang="ts">
+import { navTo } from '@/components/utils/PageAction';
 import { useSimpleDataLoader } from '@/common/composeabe/SimpleDataLoader';
 import Box from '@/common/components/parts/Box.vue';
 import SimplePageContentLoader from '@/common/components/SimplePageContentLoader.vue';
@@ -63,18 +65,14 @@ import Height from '@/components/layout/space/Height.vue';
 import ProvideVar from '@/components/theme/ProvideVar.vue';
 import Grid from '@/components/layout/grid/Grid.vue';
 import GridItem from '@/components/layout/grid/GridItem.vue';
-import { navTo } from '@/components/utils/PageAction';
-import { useCollectStore } from '@/store/collect';
 import VillageInfoApi from '@/api/inhert/VillageInfoApi';
 import AppCofig from '@/common/config/AppCofig';
+import Tag from '@/components/display/Tag.vue';
 
-const { getCollectModuleId } = useCollectStore();
-
-function goList(collectModelName: string, title: string) {
+function goList(keywords: string) {
   navTo('/pages/home/discover/list', {
-    collectModelInternalName: collectModelName,
-    collectModelId: collectModelName === 'all' ? undefined : getCollectModuleId(collectModelName),
-    title,
+    keywords,
+    title: keywords,
   });
 }
 function goDetails(item: any) {
@@ -86,7 +84,7 @@ function goDetails(item: any) {
 }
 
 const discoverLoader = useSimpleDataLoader(async () => {
-  return (await VillageInfoApi.getListForDiscover(undefined, 1, 30)).list.map((item) => {
+  return (await VillageInfoApi.getListForDiscover(1, 30)).list.map((item) => {
     return {
       ...item,
       image: (item.thumbnail || item.image) as string,

+ 12 - 8
src/pages/home/discover/list.vue

@@ -15,8 +15,7 @@ import { useLoadQuerys } from '@/common/composeabe/LoadQuerys';
 import { navTo } from '@/components/utils/PageAction';
 
 const { querys } = useLoadQuerys({
-  collectModelId: 0,
-  collectModelInternalName: '',
+  keywords: '',
   title: '',
 }, (querys) => {
   uni.setNavigationBarTitle({
@@ -27,8 +26,7 @@ const { querys } = useLoadQuerys({
 function goCustomDetails(item: any) {
   navTo('details', {
     id: item.id,
-    collectModelId: querys.value.collectModelId ?? item.collectModuleId,
-    collectModelInternalName: querys.value.collectModelInternalName,
+    keywords: querys.value.keywords,
   });
 }
 
@@ -40,10 +38,16 @@ async function loadData(
 ) {
   if (page > 1)
     return { list: [], total: 0 };
-  return (await VillageInfoApi.getListForDiscover(
-    querys.value.collectModelId > 0 ? 
-      querys.value.collectModelId : undefined
-    , page, pageSize, searchText
+  const res = (await VillageInfoApi.getListForDiscover(
+    page, pageSize, 
+    (querys.value.keywords || '') + ' ' + searchText, 
   ));
+   return { 
+    list: res.list.map((item) => ({
+      ...item,
+      badge: item.villageName || '',
+    })), 
+    total: res.total 
+  };
 }
 </script>

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

@@ -84,13 +84,14 @@
 </template>
 
 <script setup lang="ts">
-import CommonContent from '@/api/CommonContent';
+import { navTo } from '@/components/utils/PageAction';
+import { getCurrentInstance } from 'vue';
+import { useSimpleDataLoader } from '@/common/composeabe/SimpleDataLoader';
 import VillageApi from '@/api/inhert/VillageApi';
 import VillageInfoApi from '@/api/inhert/VillageInfoApi';
 import Box from '@/common/components/parts/Box.vue';
 import ImageSwiper from '@/common/components/parts/ImageSwiper.vue';
 import SimplePageContentLoader from '@/common/components/SimplePageContentLoader.vue';
-import { useSimpleDataLoader } from '@/common/composeabe/SimpleDataLoader';
 import AppCofig from '@/common/config/AppCofig';
 import Image from '@/components/basic/Image.vue';
 import Text from '@/components/basic/Text.vue';
@@ -100,8 +101,6 @@ import FlexCol from '@/components/layout/FlexCol.vue';
 import FlexRow from '@/components/layout/FlexRow.vue';
 import Height from '@/components/layout/space/Height.vue';
 import Width from '@/components/layout/space/Width.vue';
-import { navTo } from '@/components/utils/PageAction';
-import { getCurrentInstance } from 'vue';
 
 const instance = getCurrentInstance();
 const mapCtx = uni.createMapContext('prevMap', instance);

二進制
src/static/images/submit/num_shadow.png


二進制
src/static/logo.png