Pārlūkot izejas kodu

🤢 按要求修改栏目显示和首页文字

快乐的梦鱼 1 mēnesi atpakaļ
vecāks
revīzija
290f131652
5 mainītis faili ar 105 papildinājumiem un 62 dzēšanām
  1. 6 1
      src/App.vue
  2. 16 16
      src/pages/discover.vue
  3. 32 25
      src/pages/home.vue
  4. 10 7
      src/pages/inhert.vue
  5. 41 13
      src/pages/parts/StatsText.vue

+ 6 - 1
src/App.vue

@@ -12,7 +12,12 @@ onLaunch(() => {
     global: true,
     family: "SongtiSCBlack",
     source: 'url("https://mncdn.wenlvti.net/assets/fonts/STSongti-SC-Black.woff")',
-  })
+  });
+  uni.loadFontFace({
+    global: true,
+    family: "HUNdin1451",
+    source: 'url("https://mncdn.wenlvti.net/app_static/minnan/fonts/HUN-din1451.woff")',
+  });
 
   authStore.loadLoginState();
 })

+ 16 - 16
src/pages/discover.vue

@@ -141,22 +141,6 @@ const ImageTest5 = 'https://mncdn.wenlvti.net/app_static/minnan/images/home/Imag
 const UserHead = 'https://mncdn.wenlvti.net/app_static/minnan/images/home/UserHead.png';
 const categories = [
   { 
-    name: '建筑文化', 
-    icon: CategoryIcon2  , 
-    onClick: () => navTo('/pages/article/common/list', {
-      title: '建筑文化',
-      mainBodyColumnId: 252,
-      modelId: 3,
-      itemType: 'article-common',
-      detailsPage: '/pages/article/details',
-    }) 
-  },
-  { 
-    name: '闽南美食', 
-    icon: CategoryIcon4 , 
-    onClick: () => navTo('/pages/introduction/food/list')
-  },
-  { 
     name: '戏剧曲艺', 
     icon: 'https://mncdn.wenlvti.net/app_static/minnan/images/discover/CategoryIcon6.png', 
     onClick: () => navTo('/pages/article/common/list', {
@@ -195,6 +179,22 @@ const categories = [
     onClick: () => navTo('/pages/introduction/custom/list') 
   },
   { 
+    name: '建筑文化', 
+    icon: CategoryIcon2  , 
+    onClick: () => navTo('/pages/article/common/list', {
+      title: '建筑文化',
+      mainBodyColumnId: 252,
+      modelId: 3,
+      itemType: 'article-common',
+      detailsPage: '/pages/article/details',
+    }) 
+  },
+  { 
+    name: '闽南美食', 
+    icon: CategoryIcon4 , 
+    onClick: () => navTo('/pages/introduction/food/list')
+  },
+  { 
     name: '海洋文化', 
     icon: CategoryIcon5  , 
     onClick: () => navTo('/pages/article/common/list', {

+ 32 - 25
src/pages/home.vue

@@ -53,14 +53,16 @@
       <!-- 数据统计 -->
       <SimplePageContentLoader :loader="statsLoader">
         <view v-if="statsLoader.content.value" class="d-flex flex-col justify-center mt-3 pt-3 b-3">
-          <view class="d-flex flex-col align-center">
+          <view class="d-flex flex-row align-center">
             <StatsText
+              width="calc(50%)"
               :title="statsLoader.content.value[0].title" 
               :data="statsLoader.content.value[0].datas" 
               :type="statsLoader.content.value[0].type" 
             />
-            <view class="border-top-forth pt-2 mt-3 w-100"></view>
             <StatsText 
+              width="calc(50%)"
+              classNames="border-left-forth"
               :title="statsLoader.content.value[1].title" 
               :data="statsLoader.content.value[1].datas" 
               :type="statsLoader.content.value[1].type" 
@@ -68,7 +70,6 @@
           </view>
           <view class="border-top-forth pt-2 mt-3"></view>
           <StatsText
-            width="calc(33%)"
             :data="statsLoader.content.value[2].datas" 
             :type="statsLoader.content.value[2].type" 
           />
@@ -170,7 +171,7 @@ import AppCofig from '@/common/config/AppCofig';
 import VillageApi from '@/api/inhert/VillageApi';
 import ScenicSpotContent from '@/api/fusion/ScenicSpotContent';
 import IndexContent from '@/api/introduction/IndexContent';
-import StatsText from './parts/StatsText.vue';
+import StatsText, { type StatsTextItem } from './parts/StatsText.vue';
 import HomeTitle from '@/pages/parts/HomeTitle.vue'; 
 import Tabbar from '@/common/components/tabs/tabbar.vue';
 import Box1AudioPlay from '@/pages/parts/Box1AudioPlay.vue';
@@ -295,10 +296,10 @@ const recommendLoader = useSimpleDataLoader(async () => {
     p.itemType = p.type == GetContentListParams.TYPE_VIDEO ? 'video' : 'artifact';
     return p;
   }));
-  list.push(...(await ProductsContent.getContentList(new GetContentListParams(), 1, 6)).list.map((p) => {
+  /* list.push(...(await ProductsContent.getContentList(new GetContentListParams(), 1, 6)).list.map((p) => {
     p.itemType = p.type == GetContentListParams.TYPE_VIDEO ? 'video' : 'intangible';
     return p;
-  }));
+  })); */
   return list;
 });
 const statsLoader = useSimpleDataLoader(async () => {
@@ -310,34 +311,39 @@ const statsLoader = useSimpleDataLoader(async () => {
   let sumInheritor = 0;
   let sumProject = 0;
   const topLevelProject = data.ichData.find((p: any) => p.level_text == '人类非遗')?.total || 0;
+  const projects = (data.ichData as any[]).filter((p: any) => [ '国家级', '省级', '市级' ].includes(p.level_text)).map((item: any) => {
+    sumProject += item.total;
+    return {
+      title: item.level_text,
+      value: item.total,
+      onClick: () => navTo('/pages/inhert/intangible/list', { tab: 0, level: item.level }),
+    } as StatsTextItem
+  }).concat([
+    {
+      titlePrefix: '⭐',
+      title: `目前厦门市非遗项目\n市级以上共有${sumProject}项`,
+      value: '',
+      long: true,
+    }
+  ]);
+  projects.splice(1, 0, {
+    title: `(其中${topLevelProject}项为人类非遗)`,
+    value: ' ',
+    longTitle: true,
+    onClick: () => navTo('/pages/inhert/intangible/list', { tab: 0, level: 0 }),
+  })
   return [
     {
       title: '非遗项目',
-      type: 'text',
-      datas: data.ichData.filter((p: any) => [ '国家级', '省级', '市级' ].includes(p.level_text)).map((item: any) => {
-        sumProject += item.total;
-        return {
-          title: item.level_text,
-          value: item.total + ' 项' + (item.level_text == '国家级' ? ` (其中含${topLevelProject}项为人类非遗)` : ''),
-          long: item.level_text == '国家级',
-          onClick: () => navTo('/pages/inhert/intangible/list', { tab: 0, level: item.level }),
-        }
-      }).concat([
-        {
-          title: `目前厦门市非遗项目市级以上共有${sumProject}项`,
-          value: '',
-          long: true,
-        }
-      ])
+      datas: projects
     },
     {
       title: '非遗传承人',
-      type: 'text',
       datas: data.inheritorData.filter((p: any) => [ '国家级', '省级', '市级' ].includes(p.title)).map((item: any) => {
         sumInheritor += item.total;
         return {
           title: item.title,
-          value: item.total + ' 人',
+          value: item.total,
           onClick: () => navTo('/pages/inhert/inheritor/list', { level: item.level }),
         }
       }).concat([
@@ -347,7 +353,8 @@ const statsLoader = useSimpleDataLoader(async () => {
         }
       ], [
         {
-          title:  `目前厦门市非遗传承人市级以上共有${sumInheritor}人`,
+          titlePrefix: '⭐',
+          title:  `目前厦门市非遗传承人\n市级以上共有${sumInheritor}人`,
           value: '',
           long: true,
         }

+ 10 - 7
src/pages/inhert.vue

@@ -51,7 +51,7 @@
       </SimplePageContentLoader>
 
       <!-- 非遗作品 -->
-      <HomeTitle title="非遗作品" showMore inWing @clickMore="navTo('inhert/intangible/list', { tab: 1 })" />
+      <!-- <HomeTitle title="非遗作品" showMore inWing @clickMore="navTo('inhert/intangible/list', { tab: 1 })" />
       <SimplePageContentLoader :loader="productsData" >
         <scroll-view scroll-x>
           <view class="padding-wing-l pb-3 pt-3 d-flex flex-row overflow-visible align-stretch">
@@ -70,7 +70,7 @@
             />
           </view>
         </scroll-view>
-      </SimplePageContentLoader>
+      </SimplePageContentLoader> -->
 
       <!-- 文物 -->
       <HomeTitle title="文物古迹" showMore inWing @clickMore="navTo('inhert/artifact/list')" />
@@ -94,7 +94,7 @@
       </SimplePageContentLoader>
 
       <!-- 闽南语在线课程 -->
-      <HomeTitle title="闽南语在线课程" showMore inWing @clickMore="goCourseList" />
+      <HomeTitle title="闽南语在线课程" :showMore="false" inWing @clickMore="goCourseList" />
       <SimplePageContentLoader :loader="corseData" >
         <scroll-view scroll-x>
           <view class="padding-wing-l pb-3 pt-3 d-flex flex-row overflow-visible align-stretch">
@@ -135,15 +135,16 @@
             v-for="s in mingnanSongsData.content.value" 
             :key="s.id"
             :title="s.title" 
+            :image="s.thumbnail || s.image"
             :showPrev="false"
             :showNext="false"
-            innerClass="w-100 mt-3" 
+            innerClass="w-100 mt-1" 
             @playPauseClick="goMingnanSongsDetail(s.id)"
             @click="goMingnanSongsDetail(s.id)"
           />
         </SimplePageContentLoader>
 
-        <!-- 闽南语作品库 -->
+        <!-- 闽南语作品库 
         <HomeTitle title="闽南语作品库" showMore @clickMore="goSongsList" />
         <SimplePageContentLoader :loader="songsData" >
           <Box2LinePlayRightArrow 
@@ -154,6 +155,7 @@
             @click="goSongsDetail(s.id)"
           />
         </SimplePageContentLoader>
+        -->
       </view>
 
       <!-- 老字号 -->
@@ -178,7 +180,7 @@
         </scroll-view>
       </SimplePageContentLoader>
 
-      <!-- 童趣记忆 -->
+      <!-- 童趣记忆 
       <HomeTitle title="童趣记忆" showMore inWing @clickMore="goMemoryList" />
       <SimplePageContentLoader :loader="memoryData" >
         <scroll-view scroll-x>
@@ -197,6 +199,7 @@
           </view>
         </scroll-view>
       </SimplePageContentLoader>
+      -->
 
       <!-- 闽南文化百科 -->
       <view class="d-flex flex-col wing-l">
@@ -310,7 +313,7 @@ const {
   goDetail: goCourseDetail,
 } = useHomePageMiniCommonListGoMoreAndGoDetail({
   title: '闽南语在线课程',
-  mainBodyColumnId: [257,235,237,210],
+  mainBodyColumnId: [257/* ,235,237,210 */],
   modelId: 5,
   itemType: 'article-common',
   detailsPage: '/pages/video/details',

+ 41 - 13
src/pages/parts/StatsText.vue

@@ -4,7 +4,11 @@
       'main-stats-text',
       title ? '' : 'no-title',
       type,
+      classNames
     ]"
+    :style="{
+      width: width
+    }"
   >
     <text class="title">{{ title }}</text>
     <view class="stats">
@@ -17,8 +21,11 @@
         ]"
         @click="item.onClick"
       >
-        <text class="number">{{ item.value }}</text>
-        <text class="sub-title">{{ item.title }}</text>
+        <text class="number">{{ item.value == ' ' ? '&nbsp;' : item.value }}</text>
+        <view class="d-flex flex-row align-center justify-center">
+          <text v-if="item.titlePrefix" class="title-prefix mr-2">{{ item.titlePrefix }}</text>
+          <text :class="'sub-title' + (item.longTitle ? ' long' : '')">{{ item.title }}</text>
+        </view>
       </view>
     </view>
   </view>
@@ -27,6 +34,16 @@
 <script setup lang="ts">
 import type { PropType } from 'vue';
 
+export interface StatsTextItem {
+  title: string,
+  titlePrefix?: string,
+  value: string,
+  suffix?: string,
+  long?: boolean,
+  longTitle?: boolean,
+  onClick?: () => void
+}
+
 defineProps({	
   title: {
     type: String,
@@ -37,18 +54,16 @@ defineProps({
     default: 'stat'
   },
   data : {
-    type: Object as PropType<{
-      title: string,
-      value: string,
-      suffix?: string,
-      long?: boolean,
-      onClick?: () => void
-    }[]>,
+    type: Object as PropType<StatsTextItem[]>,
     default: () => ([])
   }	,
+  classNames: {
+    type: String,
+    default: ''
+  },
   width: {
     type: [Number, String],
-    default: ''
+    default: '100%'
   },
 })
 
@@ -66,6 +81,7 @@ defineOptions({
 
 $color-primary: map.get($colors, "primary");
 $color-text: map.get($colors, "text");
+$color-second: map.get($colors, "second");
 
 .main-stats-text {
   position: relative;
@@ -77,6 +93,7 @@ $color-text: map.get($colors, "text");
     margin: 10rpx 0;
     color: $color-primary;
     text-align: center;
+    letter-spacing: 0.2em;
   }
   .stats {
     display: flex;
@@ -96,13 +113,24 @@ $color-text: map.get($colors, "text");
       &.long {
         width: calc(100%);
       }
-
+      .title-prefix {
+        font-size: 26rpx;
+        color: $color-second;
+      }
       .sub-title {
-        font-size: 24rpx;
+        font-size: 22rpx;
+        color: $color-second;
+
+        &.long {
+          white-space: nowrap;
+          transform: translateX(-15%);
+        }
       }
       .number {
-        font-size: 50rpx;
+        margin: 25rpx 0 5rpx 0;
+        font-size: 60rpx;
         font-weight: bold;
+        font-family: HUNdin1451;
       }
     }
   }