Selaa lähdekoodia

🎨 按要求修改

快乐的梦鱼 1 viikko sitten
vanhempi
commit
ca37775a29

+ 1 - 1
src/common/components/tabs/tabbar.vue

@@ -12,7 +12,7 @@
     }"
   >
     <TabBarItem icon="https://mncdn.wenlvti.net/app_static/minnan/images/tabs/icon_home_off.png" activeIcon="https://mncdn.wenlvti.net/app_static/minnan/images/tabs/icon_home_on.png" text="首页" />
-    <TabBarItem icon="https://mncdn.wenlvti.net/app_static/minnan/images/tabs/icon_discover_off.png" activeIcon="https://mncdn.wenlvti.net/app_static/minnan/images/tabs/icon_discover_on.png" text="发现" />
+    <TabBarItem icon="https://mncdn.wenlvti.net/app_static/minnan/images/tabs/icon_discover_off.png" activeIcon="https://mncdn.wenlvti.net/app_static/minnan/images/tabs/icon_discover_on.png" text="资讯" />
     <TabBarItem icon="https://mncdn.wenlvti.net/app_static/minnan/images/tabs/icon_inhert_off.png" activeIcon="https://mncdn.wenlvti.net/app_static/minnan/images/tabs/icon_inhert_on.png" hump :humpHeight="[0,0]" :humpSpace="[20,20]" :iconSize="140" text="传承" />
     <TabBarItem icon="https://mncdn.wenlvti.net/app_static/minnan/images/tabs/icon_shop_off.png" activeIcon="https://mncdn.wenlvti.net/app_static/minnan/images/tabs/icon_shop_on.png" text="文旅" />
     <TabBarItem icon="https://mncdn.wenlvti.net/app_static/minnan/images/tabs/icon_profile_off.png" activeIcon="https://mncdn.wenlvti.net/app_static/minnan/images/tabs/icon_profile_on.png" text="我的" />

+ 1 - 0
src/common/scss/define/colors.scss

@@ -10,6 +10,7 @@ $colors: (
   light-blue: #0059ff,
   light-primary: #d9492e35,
   light-light-primary: #d9492e15,
+  light-page: #f7f4ec,
   success: #09ad32,
   warning: #FFD666,
   error: #ec4545,

+ 1 - 0
src/common/scss/global/shadow.scss

@@ -8,6 +8,7 @@
   box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.055) !important;
 }
 
+.shadow-base,
 .shadow {
   box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.075) !important;
 }

+ 3 - 3
src/pages.json

@@ -41,7 +41,7 @@
       }
     },
     {
-      "path": "pages/introduction/map",
+      "path": "pages/introduction/explore",
       "style": {
         "navigationBarTitleText": "探索闽南文化",
         "enablePullDownRefresh": true
@@ -50,7 +50,7 @@
     {
       "path": "pages/introduction/inhert",
       "style": {
-        "navigationBarTitleText": "保护传承"
+        "navigationBarTitleText": "保护传承"
       }
     },
     {
@@ -345,7 +345,7 @@
       },
       {
         "pagePath": "pages/discover",
-        "text": "发现"
+        "text": "资讯"
       },
       {
         "pagePath": "pages/inhert",

+ 23 - 332
src/pages/discover.vue

@@ -1,325 +1,31 @@
 <template>
-  <view class="home-container page-discover d-flex flex-col bg-base">
-    <image 
-      class="position-absolute title"
-      src="https://mncdn.wenlvti.net/app_static/minnan/images/discover/Title.png"
-      mode="widthFix"
-    />
-    <view class="content d-flex flex-col wing-l">
-      
-      <!-- 文化百科 
-      <HomeTitle title="文化百科" />
-      <scroll-view scroll-x>
-        <view class="d-flex flex-row">
-          <view 
-            v-for="(item, i) in categories" 
-            :key="i"
-            class="width-150 d-flex flex-col align-center flex-shrink-0"
-            @click="item.onClick"
-          >
-            <image :src="item.icon" class="width-100 height-100" />
-            <text class="width-130 text-align-center mt-2 color-primary size-s">{{ item.name }}</text>
-          </view>
-        </view>
-      </scroll-view>-->
-
-      <!-- 闽南语猜猜猜 -->
-      <!-- <view class="home-title">
-        <text>闽南语猜猜猜</text>
-      </view>
-      <Box2LinePlayRightArrow 
-        title="听语音猜词语"
-        desc="每日更新,赢取积分"
-        @click="navTo('/pages/article/web/ewebview', {
-          url: 'https://mncdn.wenlvti.net/assets/addons/yunexamine/h5/#/pages/home/dashboard'
-        })"
-      /> -->
-
-      <!-- 文化挑战 -->
-      <!--<HomeTitle title="文化挑战" />
-       
-      方言配音大赛隐藏
-      <Box2LineRightSlot 
-        title="方言配音大赛"
-        desc="参与人数:1,234"
-        @click="navTo('/pages/answer/index')"
-      >
-        <image class="width-60 height-60 radius-base" src="https://mncdn.wenlvti.net/app_static/minnan/images/discover/IconCup.png" mode="aspectFill" />
-      </Box2LineRightSlot>
-      <Box2LineRightSlot
-        title="非遗百科问答"
-        desc="可获积分:500"
-      >
-        <Button :radius="40" type="primary" size="small" @click="goAnswer">立即报名</Button>
-      </Box2LineRightSlot> -->
-
-      <!-- 老照片
-      <HomeTitle title="老照片" showMore @clickMore="goImagesList" />
-      <SimplePageContentLoader :loader="imagesData">
-        <scroll-view scroll-x>
-          <view class="d-flex flex-row">
-            <view 
-              v-for="(item, i) in imagesData.content.value"
-              :key="i"
-              class="mr-2"
-              @click="goImagesDetail(item.id)"
-            >
-              <Image 
-                class="width-300 height-200 radius-base"
-                :src="item.image"
-                :style="{
-                  backgroundImage: `url('${item.image}')`,
-                  backgroundSize: 'cover',
-                }"
-                mode="aspectFit"
-              />
-            </view>
-          </view>
-        </scroll-view>
-      </SimplePageContentLoader>
-      -->
-      
-      <!-- 闽南文化资讯 -->
-      <HomeTitle title="闽南文化资讯" showMore @clickMore="navTo('/pages/article/list')" />
-      <SimplePageContentLoader :loader="cultureData">
-        <view class="d-flex w-100 flex-row flex-wrap align-stretch justify-between">
-          <Box2LineLargeImageUserShadow 
-            v-for="(item, i) in cultureData.content.value"
-            :key="i"
-            :title="item.title"
-            :desc="item.desc"
-            :image="item.thumbnail || item.image"
-            fixSize
-            @click="goCultureDetail(item.id)"
-          />
-        </view>
-      </SimplePageContentLoader> 
-
-      <!-- 闽南文化百科 -->
-      <view class="d-flex flex-col">
-        <HomeTitle title="闽南文化百科" showMore @clickMore="goTopicsList" />
-        <SimplePageContentLoader :loader="topicsData">
-          <Box2LineRightShadow
-            v-for="(item, i) in topicsData.content.value" 
-            :key="i" 
-            :title="item.title"
-            :desc="item.desc"
-            @click="goTopicsDetail(item.id)"
-          />
-        </SimplePageContentLoader>
-      </view>
-
-      <!-- 传播交流 -->
-      <!-- <view class="d-flex flex-col">
-        <HomeTitle title="传播交流" showMore @clickMore="goCommunicationList" />
-        <SimplePageContentLoader :loader="communicationData">
-          <Box2LineLargeImageUserShadow
-            v-for="(item, i) in communicationData.content.value" 
-            :key="i" 
-            :title="item.title"
-            :image="item.thumbnail || item.image"
-            :desc="item.desc"
-            @click="goCommunicationDetail(item.id)"
-          />
-        </SimplePageContentLoader>
-      </view> -->
-
-      <!-- 理论研究 -->
-      <!-- <view class="d-flex flex-col">
-        <HomeTitle title="理论研究" showMore @clickMore="goDiscoveryList" />
-        <SimplePageContentLoader :loader="discoveryData">
-          <Box2LineLargeImageUserShadow
-            v-for="(item, i) in discoveryData.content.value" 
-            :key="i" 
-            :title="item.title"
-            :desc="item.desc"
-            :image="item.thumbnail || item.image"
-            @click="goDiscoveryDetail(item.id)"
-          />
-        </SimplePageContentLoader>
-      </view> -->
-
-      <!-- 热门话题 -->
-      <!-- <HomeTitle title="热门话题" />
-      <SimplePageContentLoader :loader="topicsData">
-        <view class="d-flex flex-col">
-          <Box2LineRightShadow 
-            v-for="(item, i) in topicsData.content.value" 
-            :key="i" 
-            :title="item.title"
-            :desc="item.desc"
-            :right="item.right"
-          />
-        </view>
-      </SimplePageContentLoader> -->
-
-    </view>
-  </view> 
-  <tabbar :current="1"></tabbar>
+  <FlexCol>
+    <StatusBarSpace backgroundColor="background.page" />
+    <NavBar leftButton="custom" backgroundColor="background.page">
+      <template #left>
+        <Image
+          src="https://mn.wenlvti.net/app_static/minnan/images/discover/Title.png"
+          mode="widthFix"
+          :width="110"
+          :innerStyle="{ marginLeft: '30rpx', marginTop: '30rpx' }"
+        />
+      </template>
+    </NavBar>
+    <News />
+    <Height :height="180" />
+    <Tabbar :current="1" />
+  </FlexCol>
 </template>
 
 <script setup lang="ts">
-import { onShareTimeline, onShareAppMessage } from '@dcloudio/uni-app';
-import { useSimpleDataLoader } from '@/common/composeabe/SimpleDataLoader';
-import { useAuthStore } from '@/store/auth';
-import { useHomePageMiniCommonListGoMoreAndGoDetail } from './article/common/CommonContent';
-import { navTo } from '@/components/utils/PageAction';
 import Tabbar from '@/common/components/tabs/Tabbar.vue';
-import Box2LineRightSlot from './parts/Box2LineRightSlot.vue';
-import Box2LineLargeImageUserShadow from './parts/Box2LineLargeImageUserShadow.vue';
-import HomeTitle from './parts/HomeTitle.vue';
-import SimplePageContentLoader from '@/common/components/SimplePageContentLoader.vue';
-import NewsIndexContent from '@/api/news/NewsIndexContent';
-import Button from '@/components/basic/Button.vue';
+import News from './introduction/news.vue';
+import FlexCol from '@/components/layout/FlexCol.vue';
+import { onShareAppMessage, onShareTimeline } from '@dcloudio/uni-app';
+import NavBar from '@/components/nav/NavBar.vue';
+import StatusBarSpace from '@/components/layout/space/StatusBarSpace.vue';
 import Image from '@/components/basic/Image.vue';
-import Box2LineRightShadow from './parts/Box2LineRightShadow.vue';
-
-const authStore = useAuthStore();
-
-const CategoryIcon1 = 'https://mncdn.wenlvti.net/app_static/minnan/images/discover/CategoryIcon1.png';
-const CategoryIcon2 = 'https://mncdn.wenlvti.net/app_static/minnan/images/discover/CategoryIcon2.png';
-const CategoryIcon4 = 'https://mncdn.wenlvti.net/app_static/minnan/images/discover/CategoryIcon4.png';
-const CategoryIcon5 = 'https://mncdn.wenlvti.net/app_static/minnan/images/discover/CategoryIcon5.png';
-const ImageTest2 = 'https://mncdn.wenlvti.net/app_static/minnan/images/home/ImageTest2.jpg';
-const ImageTest3 = 'https://mncdn.wenlvti.net/app_static/minnan/images/home/ImageTest3.jpg';
-const ImageTest4 = 'https://mncdn.wenlvti.net/app_static/minnan/images/home/ImageTest4.jpg';
-const ImageTest5 = 'https://mncdn.wenlvti.net/app_static/minnan/images/home/ImageTest5.jpg';
-const UserHead = 'https://mncdn.wenlvti.net/app_static/minnan/images/home/UserHead.png';
-const categories = [
-  { 
-    name: '戏剧曲艺', 
-    icon: 'https://mncdn.wenlvti.net/app_static/minnan/images/discover/CategoryIcon6.png', 
-    onClick: () => navTo('/pages/article/common/list', {
-      title: '戏剧曲艺',
-      mainBodyColumnId: '240,241',
-      modelId: 3,
-      itemType: 'article-common',
-      detailsPage: '/pages/article/details',
-    }) 
-  },
-  { 
-    name: '音乐舞蹈', 
-    icon: 'https://mncdn.wenlvti.net/app_static/minnan/images/discover/CategoryIcon7.png', 
-    onClick: () => navTo('/pages/article/common/list', {
-      title: '音乐舞蹈',
-      mainBodyColumnId: 239,
-      modelId: 3,
-      itemType: 'article-common',
-      detailsPage: '/pages/article/details',
-    }) 
-  },
-  { 
-    name: '民间技艺', 
-    icon: 'https://mncdn.wenlvti.net/app_static/minnan/images/discover/CategoryIcon8.png', 
-    onClick: () => navTo('/pages/article/common/list', {
-      title: '民间技艺',
-      mainBodyColumnId: 242,
-      modelId: 3,
-      itemType: 'article-common',
-      detailsPage: '/pages/article/details',
-    }) 
-  },
-  { 
-    name: '闽南民俗', 
-    icon: CategoryIcon1  , 
-    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', {
-      title: '海洋文化',
-      mainBodyColumnId: 254,
-      modelId: 3,
-      itemType: 'article-common',
-      detailsPage: '/pages/article/details',
-    }) 
-  },
-];
-const {
-  loader: cultureData,
-  goDetail: goCultureDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '闽南文化',
-  mainBodyColumnId: [228/* , 298, 299 */],
-  modelId: NewsIndexContent.modelId,
-  params: {
-    platfrom: 327,
-  },
-  itemType: 'article-common',
-  detailsPage: '/pages/article/details',
-});
-
-const {
-  loader: imagesData,
-  goList: goImagesList,
-  goDetail: goImagesDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '老照片',
-  mainBodyColumnId: 102,
-  modelId: 8,
-  itemType: 'image-large-2',
-  detailsPage: '/pages/article/details',
-});
-
-const {
-  loader: topicsData,
-  goList: goTopicsList,
-  goDetail: goTopicsDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '闽南文化百科',
-  mainBodyColumnId: 320,
-  modelId: 18,
-  itemType: 'article-common',
-  detailsPage: '/pages/article/details',
-});
-
-const {
-  loader: discoveryData,
-  goList: goDiscoveryList,
-  goDetail: goDiscoveryDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '理论研究',
-  mainBodyColumnId: 266,
-  modelId: 19,
-  itemType: 'article-common',
-  detailsPage: '/pages/article/details',
-});
-
-
-const {
-  loader: communicationData,
-  goList: goCommunicationList,
-  goDetail: goCommunicationDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '传播交流',
-  mainBodyColumnId: [260,261,262],
-  modelId: 18,
-  itemType: 'article-common',
-  detailsPage: '/pages/article/details',
-});
-
-function goAnswer() {
-  navTo('/pages/article/web/ewebview', { url: encodeURIComponent(
-    `https://mn.wenlvti.net/app_static/minnan-answer/index.html?token=${authStore.token}&t=${new Date().getTime()}#/pages/home/dashboard/`
-  ) })
-}
+import Height from '@/components/layout/space/Height.vue';
 
 onShareTimeline(() => {
   return {}; 
@@ -327,19 +33,4 @@ onShareTimeline(() => {
 onShareAppMessage(() => {
   return {}; 
 })
-</script>
-
-<style lang="scss">
-.page-discover {
-  > .content {
-    margin-top: 10vh;
-  }
-  > .title {
-    width: 100rpx;
-  }
-
-  .grid4-item {
-    width: 330rpx;
-  }
-}
-</style>
+</script>

+ 8 - 8
src/pages/home.vue

@@ -9,7 +9,7 @@
     <view class="content d-flex flex-col wing-l">
 
       <!-- 分栏 -->
-      <view class="shadow-l radius-l bg-base p-3">
+      <view class="shadow-base radius-l bg-base p-3">
         <view 
           class="main-banner-box mb-25"
           @click="navTo('home/introduction')"
@@ -31,7 +31,7 @@
           icon="https://mncdn.wenlvti.net/app_static/minnan/images/home/IconMap.png"
           bg="https://mncdn.wenlvti.net/app_static/minnan/images/home/ButtonMapBg.png"
           large
-          @click="navTo('/pages/introduction/map')"
+          @click="navTo('/pages/introduction/explore')"
         />
 
         <view class="position-relative d-flex flex-row flex-wrap justify-between mt-25 row-gap-sss">
@@ -74,7 +74,7 @@
 
       <!-- 数据统计 -->
       <SimplePageContentLoader :loader="statsLoader">
-        <view v-if="statsLoader.content.value" class="d-flex flex-col justify-center mt-3 pt-3 pb-3 bg-light-light-primary radius-s">
+        <view v-if="statsLoader.content.value" class="d-flex flex-col justify-center mt-3 pt-3 pb-3 bg-light-page radius-base">
           <view class="d-flex flex-col">
             <StatsText
               :title="statsLoader.content.value[0].title" 
@@ -97,7 +97,7 @@
             </view>
           </view>
         </view>
-        <view v-if="statsLoader.content.value" class="d-flex flex-col justify-center mt-3 pt-3 pb-3 bg-light-light-primary radius-s">
+        <view v-if="statsLoader.content.value" class="d-flex flex-col justify-center pt-3 pb-3 bg-light-page radius-base">
           <StatsText
             :title="statsLoader.content.value[2].title" 
             :data="statsLoader.content.value[2].datas" 
@@ -315,13 +315,13 @@ const statsLoader = useSimpleDataLoader(async () => {
       title: item.level_text,
       value: item.total,
       titleSuffix: '项',
-      subText: '\u00a0',
-      type: 'normal',
+      //subText: '\u00a0',
+      type: 'forth',
       onClick: () => navTo('/pages/inhert/intangible/list', { tab: 0, level: item.level }),
     } as StatsTextItem
   });
-  projects.shift();
-  projects[0].subText = `人类非遗 ${topLevelProject}`;
+  //projects.shift();
+  //projects[0].subText = `人类非遗 ${topLevelProject}`;
   const inheritors = data.inheritorData.filter((p: any) => [ '国家级', '省级', '市级' ].includes(p.title)).map((item: any) => {
     sumInheritor += item.total;
     return {

+ 1 - 1
src/pages/home/introduction.vue

@@ -16,7 +16,7 @@
       </view>
 
       <!-- 分栏 -->
-      <view class="shadow-l radius-l bg-base p-3">
+      <view class="shadow-base radius-l bg-base p-3">
         <SimplePageContentLoader :loader="introdData">
           <Parse :content="introdData.content.value" :tag-style="commonParserStyle" />
         </SimplePageContentLoader>

+ 20 - 2
src/pages/home/laws.vue

@@ -1,10 +1,17 @@
 <template>
   <CommonListPage 
     title="政策法规"
-    itemType="image-large-2"
+    itemType="article-common"
     showTotal
     :dropDownNames="dropdownNames"
     :load="loadData" 
+    :tabs="[{
+      id: 360,
+      text: '国家政策',
+    },{
+      id: 361,
+      text: '地方政策',
+    }]"
   />
   <!--  -->
 </template>
@@ -14,6 +21,7 @@ import { ref } from 'vue';
 import CommonListPage, { type DropDownNames } from '@/pages/article/common/CommonListPage.vue';
 import { GetContentListParams } from '@/api/CommonContent';
 import PolicyContent from '@/api/introduction/PolicyContent';
+import { DateUtils } from '@imengyu/imengyu-utils';
 
 const dropdownNames = ref<DropDownNames[]>([]);
 
@@ -24,6 +32,16 @@ async function loadData(
   dropDownValues: number[],
   tabSelect: number,
 ) {
-  return await PolicyContent.getContentList(new GetContentListParams().setKeywords(searchText), page, pageSize);
+  const res = (await PolicyContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+    .setMainBodyColumnId(tabSelect)
+  , page, pageSize));
+  return { 
+    list: res.list.map((p) => ({ 
+      ...p, 
+      desc: DateUtils.formatDate(p.publishAt, 'yyyy-MM-dd') + '\n' + `${p.from}`,
+    })), 
+    total: res.total 
+  }
 }
 </script>

+ 22 - 416
src/pages/inhert.vue

@@ -1,417 +1,31 @@
 <template>
-  <view class="home-container page-inhert d-flex flex-col bg-base">
-    <image 
-      class="position-absolute title"
-      src="https://mncdn.wenlvti.net/app_static/minnan/images/inhert/Title.png"
-      mode="widthFix"
-    />
-    <view class="content d-flex flex-col ">
-
-      <!-- 非遗项目 -->
-      <HomeTitle title="非遗项目" showMore inWing @clickMore="navTo('inhert/intangible/list')" />
-      <SimplePageContentLoader :loader="intangibleData" >
-        <scroll-view scroll-x>
-          <view class="padding-wing-l pb-3 pt-3 d-flex flex-row overflow-visible align-stretch">
-            <Box2LineLargeImageUserShadow
-              v-for="(item, i) in intangibleData.content.value"
-              classNames="width-2-3 mr-2"
-              titleColor="title-text"
-              fixSize
-              :key="i"
-              :title="item.title"
-              :desc="item.desc"
-              :image="item.image"
-              :tags="item.bottomTags"
-              @click="navTo('inhert/intangible/details', { id: item.id })"
-            />
-          </view>
-        </scroll-view>
-      </SimplePageContentLoader>
-      
-      <!-- 非遗传承人 -->
-      <HomeTitle title="非遗传承人" showMore inWing @clickMore="navTo('inhert/inheritor/list')" />
-      <SimplePageContentLoader :loader="inheritorData">
-        <scroll-view scroll-x>
-          <view class="padding-wing-l pb-3 pt-3 d-flex flex-row overflow-visible align-stretch">
-            <Box2LineLargeImageUserShadow
-              v-for="(item, i) in inheritorData.content.value"
-              classNames="width-2-5 mr-2"
-              titleColor="title-text"
-              fixSize
-              :key="i"
-              :title="item.title"
-              :image="item.image"
-              :tags="item.bottomTags"
-              :titleBox="item.titleBox"
-              title1
-              @click="navTo('inhert/inheritor/details', { id: item.id })"
-            />
-          </view>
-        </scroll-view>
-      </SimplePageContentLoader>
-
-      <!-- 非遗作品 -->
-      <!-- <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">
-            <Box2LineLargeImageUserShadow
-              v-for="(item, i) in productsData.content.value"
-              classNames="width-2-3 mr-2"
-              titleColor="title-text"
-              fixSize
-              :key="i"
-              :title="item.title"
-              :desc="item.desc"
-              :image="item.image"
-              :bottomLocate="item.bottomLocate"
-              :bottomScore="item.bottomScore"
-              @click="navTo('inhert/product/details', { id: item.id })"
-            />
-          </view>
-        </scroll-view>
-      </SimplePageContentLoader> -->
-
-      <!-- 文物 -->
-      <HomeTitle title="文物古迹" showMore inWing @clickMore="navTo('inhert/artifact/list')" />
-      <SimplePageContentLoader :loader="artifactData">
-        <scroll-view scroll-x>
-          <view class="padding-wing-l pb-3 pt-3 d-flex flex-row overflow-visible align-stretch">
-            <Box2LineLargeImageUserShadow
-              v-for="(item, i) in artifactData.content.value"
-              classNames="width-2-5 mr-2"
-              titleColor="title-text"
-              fixSize
-              :key="i"
-              :title="item.title"
-              :image="item.image"
-              :tags="item.tags"
-              title1
-              @click="navTo('inhert/artifact/details', { id: item.id })"
-            />
-          </view>
-        </scroll-view>
-      </SimplePageContentLoader>
-
-      <!-- 老字号 -->
-      <HomeTitle title="老字号" showMore inWing @clickMore="navTo('/pages/inhert/old/list')" />
-      <SimplePageContentLoader :loader="oldData">
-        <scroll-view scroll-x>
-          <view class="padding-wing-l pb-3 pt-3 d-flex flex-row overflow-visible align-stretch">
-            <Box2LineLargeImageUserShadow
-              v-for="(item, i) in oldData.content.value"
-              classNames="width-2-3 mr-2"
-              fixSize
-              titleColor="title-text"
-              :key="i"
-              :title="item.title"
-              :desc="item.desc"
-              :image="item.thumbnail"
-              :bottomLocate="(item.regionText as string)"
-              :bottomScore="''"
-              @click="navTo('/pages/inhert/intangible/details', { id: item.id })"
-            />
-          </view>
-        </scroll-view>
-      </SimplePageContentLoader>
-      
-
-      <!-- 闽南语在线课程-->
-      <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">
-            <Box2LineLargeImageUserShadow
-              v-for="(item, i) in corseData.content.value"
-              classNames="width-2-3 mr-2"
-              titleColor="title-text"
-              fixSize
-              :key="i"
-              :title="item.title"
-              :desc="item.desc"
-              :image="item.thumbnail || item.image"
-              @click="goCourseDetail(item.id)"
-            />
-          </view>
-        </scroll-view>
-        <view class="d-flex flex-col wing-l">
-          <Box1AudioPlay
-            class="w-100 mt-3" 
-            :title="indexAudioPlayer.currentTitle.value"
-            :image="indexAudioPlayer.currentItem?.value?.image"
-            :playState="indexAudioPlayer.isPlaying.value"
-            :playTime="indexAudioPlayer.timeString.value"
-            @playPauseClick="indexAudioPlayer.playpause"
-            @nextClick="indexAudioPlayer.next"
-            @prevClick="indexAudioPlayer.prev"
-            @click="handleGoAudioList"
-          />
-        </view>
-      </SimplePageContentLoader>
-      
-      <!-- 传统村落 -->
-      <HomeTitle title="传统村落" showMore inWing @clickMore="navTo('/pages/inhert/village/list')" />
-      <SimplePageContentLoader :loader="villageData">
-        <scroll-view scroll-x>
-          <view class="padding-wing-l pb-3 pt-3 d-flex flex-row overflow-visible align-stretch">
-            <Box2LineLargeImageUserShadow
-              v-for="(item, i) in villageData.content.value"
-              classNames="width-2-3 mr-2"
-              fixSize
-              titleColor="title-text"
-              :key="i"
-              :title="item.title"
-              :desc="item.desc"
-              :image="item.image"
-              @click="navTo('/pages/inhert/village/details', { id: item.id })"
-            />
-          </view>
-        </scroll-view>
-      </SimplePageContentLoader>
-
-      <view class="d-flex flex-col wing-l">
-        <!-- 闽南语原创歌曲 
-        <HomeTitle title="闽南语原创歌曲" showMore @clickMore="goMingnanSongsList" />
-
-        <SimplePageContentLoader :loader="mingnanSongsData" >
-          <Box1AudioPlay 
-            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-1" 
-            @playPauseClick="goMingnanSongsDetail(s.id)"
-            @click="goMingnanSongsDetail(s.id)"
-          />
-        </SimplePageContentLoader>
-        -->
-
-        <!-- 闽南语作品库 
-        <HomeTitle title="闽南语作品库" showMore @clickMore="goSongsList" />
-        <SimplePageContentLoader :loader="songsData" >
-          <Box2LinePlayRightArrow 
-            v-for="s in songsData.content.value" 
-            :key="s.id"
-            :title="s.title" 
-            :desc="s.desc"
-            @click="goSongsDetail(s.id)"
-          />
-        </SimplePageContentLoader>
-        -->
-      </view>
-
-      <!-- 童趣记忆 
-      <HomeTitle title="童趣记忆" showMore inWing @clickMore="goMemoryList" />
-      <SimplePageContentLoader :loader="memoryData" >
-        <scroll-view scroll-x>
-          <view class="padding-wing-l pb-3 pt-3 d-flex flex-row overflow-visible align-stretch">
-            <Box2LineLargeImageUserShadow
-              v-for="(item, i) in memoryData.content.value"
-              classNames="width-2-3 mr-2"
-              titleColor="title-text"
-              fixSize
-              :key="i"
-              :title="item.title"
-              :desc="item.desc"
-              :image="item.thumbnail || item.image"
-              @click="goMemoryDetail(item.id)"
-            />
-          </view>
-        </scroll-view>
-      </SimplePageContentLoader>
-      -->
-
-      <!-- 闽南文化百科
-      <view class="d-flex flex-col wing-l">
-        <HomeTitle title="闽南文化百科" showMore @clickMore="goTopicsList" />
-        <SimplePageContentLoader :loader="topicsData">
-          <Box2LineRightShadow
-            v-for="(item, i) in topicsData.content.value" 
-            :key="i" 
-            :title="item.title"
-            :desc="item.desc"
-            @click="goTopicsDetail(item.id)"
-          />
-        </SimplePageContentLoader>
-      </view> -->
-
-    </view>
-  </view>
-  <Tabbar :current="2" />
+  <FlexCol>
+    <StatusBarSpace backgroundColor="background.page" />
+    <NavBar leftButton="custom" backgroundColor="background.page">
+      <template #left>
+        <Image
+          src="https://mncdn.wenlvti.net/app_static/minnan/images/inhert/Title.png"
+          mode="widthFix"
+          :width="110"
+          :innerStyle="{ marginLeft: '30rpx', marginTop: '30rpx' }"
+        />
+      </template>
+    </NavBar>
+    <Inhert />
+    <Height :height="180" />
+    <Tabbar :current="2" />
+  </FlexCol>
 </template>
 
 <script setup lang="ts">
-import { navTo } from '@/components/utils/PageAction';
-import { useSimpleDataLoader } from '@/common/composeabe/SimpleDataLoader';
-import CommonContent, { GetContentListParams } from '@/api/CommonContent';
 import Tabbar from '@/common/components/tabs/Tabbar.vue';
-import HomeTitle from './parts/HomeTitle.vue';
-import Box2LineLargeImageUserShadow from './parts/Box2LineLargeImageUserShadow.vue';
-import Box2LinePlayRightArrow from './parts/Box2LinePlayRightArrow.vue';
-import Box1AudioPlay from './parts/Box1AudioPlay.vue';
-import Box2LineRightShadow from './parts/Box2LineRightShadow.vue';
-import SimplePageContentLoader from '@/common/components/SimplePageContentLoader.vue';
-import ProjectsContent from '@/api/inheritor/ProjectsContent';
-import UnmoveableContent from '@/api/inheritor/UnmoveableContent';
-import { useHomePageMiniCommonListGoMoreAndGoDetail } from './article/common/CommonContent';
-import ProductsContent from '@/api/inheritor/ProductsContent';
-import InheritorContent from '@/api/inheritor/InheritorContent';
 import { onShareTimeline, onShareAppMessage } from '@dcloudio/uni-app';
-import { useSimpleListAudioPlayer } from '@/common/composeabe/SimpleAudioPlayer';
-import VillageApi from '@/api/inhert/VillageApi';
-
-const artifactData = useSimpleDataLoader(async () => 
-  (await UnmoveableContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
-    id: p.id,
-    title: p.title, 
-    desc: '', 
-    image: p.thumbnail || p.image,
-    likes: p.likes,
-    tags: [p.levelText, p.district] as string[],
-    comment: p.comments,
-  }))
-);
-const intangibleData = useSimpleDataLoader(async () => 
-  (await ProjectsContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
-    id: p.id,
-    title: p.title, 
-    desc: p.desc, 
-    image: p.thumbnail || p.image,
-    bottomTags: [
-      p.levelText, 
-      p.ichTypeText, 
-      p.batchText,
-      p.regionText,
-    ] as string[],
-  }))
-);
-const inheritorData = useSimpleDataLoader(async () => 
-  (await InheritorContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
-    id: p.id,
-    title: p.title, 
-    desc: '', 
-    image: p.thumbnail || p.image,
-    titleBox: Boolean(p.deathBirth),
-    bottomTags: [
-      p.levelText, 
-      p.nation,
-      p.ichName
-    ] as string[],
-  }))
-);
-const productsData = useSimpleDataLoader(async () => 
-  (await ProductsContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
-    id: p.id,
-    title: p.title, 
-    desc: p.desc, 
-    image: p.thumbnail || p.image,
-    bottomLocate: p.area as string,
-    bottomScore: '5.0',
-  }))
-);
-const villageData = useSimpleDataLoader(async () =>   {
-  const res = await CommonContent.getCategoryList(151);
-  const it2 = res.find(p => p.title == '省级');
-  return (await VillageApi.getVallageList(it2?.id)).map(p => ({
-    id: p.id,
-    title: p.title, 
-    desc: '', 
-    image: p.thumbnail || p.image,
-    tags: [p.levelText, p.district] as string[],
-    comment: p.comments,
-  }))
-});
-
-const indexAudioPlayer = useSimpleListAudioPlayer(async () => {
-  return (await CommonContent.getContentList(new GetContentListParams()
-    .setModelId(5)
-    .setMainBodyColumnId(313)
-  , 1, 6)).list.sort(() => Math.random()>0.5?-1:1).map((p) => {
-    return {
-      id: p.id,
-      title: p.title,
-      image: p.thumbnail || p.image,
-      src: p.audio as string, 
-    }
-  });
-})
-function handleGoAudioList() {
-  navTo('/pages/inhert/language/list') 
-}
-
-const {
-  loader: corseData,
-  goList: goCourseList,
-  goDetail: goCourseDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '闽南语在线课程',
-  mainBodyColumnId: [257/* ,235,237,210 */],
-  modelId: 5,
-  itemType: 'article-common',
-  detailsPage: '/pages/video/details',
-});
-
-const {
-  loader: songsData,
-  goList: goSongsList,
-  goDetail: goSongsDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '闽南语作品库',
-  mainBodyColumnId: 189,
-  modelId: 16,
-  itemType: 'article-common',
-  detailsPage: '/pages/video/details',
-});
-
-const {
-  loader: mingnanSongsData,
-  goList: goMingnanSongsList,
-  goDetail: goMingnanSongsDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '闽南语原创歌曲',
-  mainBodyColumnId: 315,
-  modelId: 16,
-  itemType: 'article-common',
-  detailsPage: '/pages/video/details',
-});
-
-const {
-  loader: memoryData,
-  goList: goMemoryList,
-  goDetail: goMemoryDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '童趣记忆',
-  mainBodyColumnId: 96,
-  modelId: 8,
-  itemType: 'article-common',
-  detailsPage: '/pages/article/details',
-});
-
-const {
-  loader: oldData,
-  goList: goOldList,
-  goDetail: goOldDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '老字号',
-  mainBodyColumnId: 312,
-  modelId: 17,
-  itemType: 'article-common',
-  detailsPage: '/pages/article/details',
-});
-
-const {
-  loader: topicsData,
-  goList: goTopicsList,
-  goDetail: goTopicsDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '闽南文化百科',
-  mainBodyColumnId: 320,
-  modelId: 18,
-  itemType: 'article-common',
-  detailsPage: '/pages/article/details',
-});
+import Inhert from './introduction/inhert.vue';
+import FlexCol from '@/components/layout/FlexCol.vue';
+import StatusBarSpace from '@/components/layout/space/StatusBarSpace.vue';
+import NavBar from '@/components/nav/NavBar.vue';
+import Image from '@/components/basic/Image.vue';
+import Height from '@/components/layout/space/Height.vue';
 
 onShareTimeline(() => {
   return {}; 
@@ -422,12 +36,4 @@ onShareAppMessage(() => {
 </script>
 
 <style lang="scss">
-.page-inhert {
-  > .content {
-    margin-top: 10vh;
-  }
-  > .title {
-    width: 100rpx;
-  }
-}
 </style>

+ 33 - 3
src/pages/introduction/map.vue

@@ -25,8 +25,9 @@
           </FlexCol>
         </SimplePageContentLoader>  
       </template>
+
       <!-- 闽南文化概况 -->
-      <HomeTitle title="闽南文化概况(厦门市)" />
+      <!-- <HomeTitle title="闽南文化概况(厦门市)" />
       <SimplePageContentLoader :loader="introdData" >
         <FlexCol>
           <FlexRow
@@ -56,7 +57,23 @@
             </Box2LineImageRightShadow>
           </FlexRow>
         </FlexCol>
-      </SimplePageContentLoader>  
+      </SimplePageContentLoader>   -->
+      
+      <!-- 闽南文化百科 -->
+      <view class="d-flex flex-col">
+        <HomeTitle title="闽南文化百科" showMore @clickMore="goTopicsList" />
+        <SimplePageContentLoader :loader="topicsData">
+          <Box2LineRightShadow
+            v-for="(item, i) in topicsData.content.value" 
+            :key="i" 
+            :title="item.title"
+            :desc="item.desc"
+            @click="goTopicsDetail(item.id)"
+          />
+        </SimplePageContentLoader>
+      </view>
+
+      <Footer text="我也是有底线的~" />
     </FlexCol>
   </CommonRoot>
 </template>
@@ -70,7 +87,7 @@ import SimplePageContentLoader from '@/common/components/SimplePageContentLoader
 import { navTo } from '@/components/utils/PageAction';
 import { useSimpleDataLoader } from '@/common/composeabe/SimpleDataLoader';
 import { GetColumListParams, GetContentListParams } from '@/api/CommonContent';
-import { navHomePageMiniCommonDetailGo, navHomePageMiniCommonListGo } from '../article/common/CommonContent';
+import { navHomePageMiniCommonDetailGo, navHomePageMiniCommonListGo, useHomePageMiniCommonListGoMoreAndGoDetail } from '../article/common/CommonContent';
 import CharacterContent from '@/api/introduction/CharacterContent';
 import Box2LineImageRightShadow from '../parts/Box2LineImageRightShadow.vue';
 import LanguageContent from '@/api/introduction/LanguageContent';
@@ -86,6 +103,8 @@ import Divider from '@/components/display/Divider.vue';
 import Width from '@/components/layout/space/Width.vue';
 import Parse from '@/components/display/parse/Parse.vue';
 import TextEllipsis from '@/components/display/TextEllipsis.vue';
+import Box2LineRightShadow from '../parts/Box2LineRightShadow.vue';
+import Footer from '@/components/display/Footer.vue';
 
 const categoryDefine = [
   {
@@ -185,4 +204,15 @@ const introdData = useSimpleDataLoader(async () => {
     }
   });
 });
+const {
+  loader: topicsData,
+  goList: goTopicsList,
+  goDetail: goTopicsDetail,
+} = useHomePageMiniCommonListGoMoreAndGoDetail({
+  title: '闽南文化百科',
+  mainBodyColumnId: 320,
+  modelId: 18,
+  itemType: 'article-common',
+  detailsPage: '/pages/article/details',
+});
 </script>

+ 34 - 0
src/pages/introduction/inhert.vue

@@ -98,6 +98,27 @@
         />
       </FlexRow>
     </SimplePageContentLoader>
+
+    <!-- 文物 -->
+    <HomeTitle title="文物古迹" showMore @clickMore="navTo('inhert/artifact/list')" />
+    <SimplePageContentLoader :loader="artifactData">
+      <FlexRow wrap align="stretch" justify="space-between" overflow="visible">
+        <Box2LineLargeImageUserShadow
+          v-for="(item, i) in artifactData.content.value"
+          width="calc(50% - 10rpx)"
+          titleColor="title-text"
+          fixSize
+          :key="i"
+          :title="item.title"
+          :image="item.image"
+          :tags="item.tags"
+          title1
+          @click="navTo('inhert/artifact/details', { id: item.id })"
+        />
+      </FlexRow>
+    </SimplePageContentLoader>
+
+    <Footer text="我也是有底线的~" />
   </FlexCol>
 </template>
 
@@ -116,6 +137,8 @@ import UnitContent from '@/api/inheritor/UnitContent';
 import SeminarContent from '@/api/inheritor/SeminarContent';
 import { navHomePageMiniCommonListGo, useHomePageMiniCommonListGoMoreAndGoDetail } from '../article/common/CommonContent';
 import FlexRow from '@/components/layout/FlexRow.vue';
+import UnmoveableContent from '@/api/inheritor/UnmoveableContent';
+import Footer from '@/components/display/Footer.vue';
 
 const intangibleData = useSimpleDataLoader(async () => 
   (await ProjectsContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
@@ -173,6 +196,17 @@ const seminarData = useSimpleDataLoader(async () =>
     ] as string[],
   }))
 );
+const artifactData = useSimpleDataLoader(async () => 
+  (await UnmoveableContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
+    id: p.id,
+    title: p.title, 
+    desc: '', 
+    image: p.thumbnail || p.image,
+    likes: p.likes,
+    tags: [p.levelText, p.district] as string[],
+    comment: p.comments,
+  }))
+);
 
 const {
   loader: activityData,

+ 9 - 51
src/pages/introduction/news.vue

@@ -2,34 +2,14 @@
 <template>
   <CommonRoot>
     <FlexCol :padding="30" innerClass="bg-base">
-      <FlexRow>
-        <Touchable 
-          direction="row"
-          width="450"
-          align="center"
-          :activeOpacity="1"
-          @click="($refs.pickerField as any).show()"
-        >
-          <Text>筛选日期:</Text>
-          <PickerField 
-            ref="pickerField"
-            v-model="filterDate"
-            placeholder="选择日期"
-            title="筛选日期"
-            :columns="[filterDates]" 
-          />
-          <Icon name="arrow-down" />
-        </Touchable>
-        <SearchBar
-          v-model="searchText"
-          inputBackgroundColor="transparent"
-          leftIcon=""
-          placeholder="搜索新闻"
-          cancelState="hidden"
-          searchState="show"
-          @search="loadNews"
-        />
-      </FlexRow>
+      <SearchBar
+        v-model="searchText"
+        leftIcon=""
+        placeholder="搜索新闻"
+        cancelState="hidden"
+        searchState="show"
+        @search="loadNews"
+      />
       <Box2LineImageRightShadow 
         v-for="(item, i) in newsLoader.list.value"
         :key="item.id"
@@ -51,45 +31,26 @@
 </template>
 
 <script setup lang="ts">
-import { onMounted, ref, watch } from 'vue';
+import { onMounted, ref } from 'vue';
 import { type GetContentListItem, GetContentListParams } from '@/api/CommonContent';
-import { type PickerItem } from '@/components/form/Picker';
 import { useSimplePageListLoader } from '@/common/composeabe/SimplePageListLoader';
 import NewsIndexContent from '@/api/news/NewsIndexContent';
 import SimplePageListLoader from '@/common/components/SimplePageListLoader.vue';
 import CommonRoot from '@/components/dialog/CommonRoot';
 import FlexCol from '@/components/layout/FlexCol.vue';
-import FlexRow from '@/components/layout/FlexRow.vue';
 import SearchBar from '@/components/form/SearchBar.vue';
-import PickerField from '@/components/form/PickerField.vue';
 import Box2LineImageRightShadow from '../parts/Box2LineImageRightShadow.vue';
-import Icon from '@/components/basic/Icon.vue';
-import Text from '@/components/basic/Text.vue';
-import Touchable from '@/components/feedback/Touchable.vue';
 import ApiCofig from '@/common/config/ApiCofig';
 
 const searchText = ref('');
-const filterDate = ref(['']);
 
 const newsLoader = useSimplePageListLoader(10, async (page, pageSize) => {
   return await NewsIndexContent.getContentList(new GetContentListParams().setSelfValues({
     keywords: searchText.value,
-    publishAt: filterDate.value[0],
     platform: ApiCofig.platformId,
   }), page, pageSize);
 });
 
-const nowYear = new Date().getFullYear();
-const filterDates : PickerItem[] = [
-  { text: '全部', value: 0 },
-  ...(new Array(21).fill(0).map((_, index) => {
-    return { 
-      text: `${nowYear - index}`, 
-      value: nowYear - index 
-    }
-  }))
-];
-
 function loadNews() {
   newsLoader.loadData(undefined, true);
 }
@@ -99,9 +60,6 @@ function goDetails(item: GetContentListItem, id: number) {
   });
 }
 
-watch(filterDate, () => {
-  loadNews();
-});
 onMounted(() => {
   loadNews();
 });

+ 37 - 49
src/pages/introduction/travel.vue

@@ -2,8 +2,8 @@
   <FlexCol :padding="30" backgroundColor="background.page">
     
     <!-- 闽南节庆日历 -->
-    <HomeTitle title="闽南节庆日历" showMore @clickMore="navTo('/pages/travel/calendar/index')" />
-    <CalendarBlock />
+    <!-- <HomeTitle title="闽南节庆日历" showMore @clickMore="navTo('/pages/travel/calendar/index')" />
+    <CalendarBlock /> -->
 
     <!-- 闽南文化景区、景点 -->
     <HomeTitle title="闽南文化景区、景点" showMore @clickMore="navTo('/pages/travel/scenic-spot/list')" />
@@ -81,6 +81,28 @@
         </view>
       </scroll-view>
     </SimplePageContentLoader>
+
+    <!-- 闽南语在线课程-->
+    <HomeTitle title="闽南语在线课程" :showMore="false" @clickMore="goCourseList" />
+    <SimplePageContentLoader :loader="corseData" >
+      <scroll-view scroll-x>
+        <view class="pb-3 pt-3 d-flex flex-row overflow-visible align-stretch">
+          <Box2LineLargeImageUserShadow
+            v-for="(item, i) in corseData.content.value"
+            classNames="width-2-3 mr-2"
+            titleColor="title-text"
+            fixSize
+            :key="i"
+            :title="item.title"
+            :desc="item.desc"
+            :image="item.thumbnail || item.image"
+            @click="goCourseDetail(item.id)"
+          />
+        </view>
+      </scroll-view>
+    </SimplePageContentLoader>
+
+    <Footer text="我也是有底线的~" />
   </FlexCol>
 </template>
 
@@ -94,41 +116,10 @@ import FlexCol from '@/components/layout/FlexCol.vue';
 import HomeTitle from '../parts/HomeTitle.vue';
 import Box2LineLargeImageUserShadow from '../parts/Box2LineLargeImageUserShadow.vue';
 import Box2LineImageRightShadow from '../parts/Box2LineImageRightShadow.vue';
-import InheritorContent from '@/api/inheritor/InheritorContent';
-import ProjectsContent from '@/api/inheritor/ProjectsContent';
-import CalendarBlock from '../travel/calendar/block.vue';
-import SeminarContent from '@/api/inheritor/SeminarContent';
 import ScenicSpotContent from '@/api/fusion/ScenicSpotContent';
 import FlexRow from '@/components/layout/FlexRow.vue';
+import Footer from '@/components/display/Footer.vue';
 
-const intangibleData = useSimpleDataLoader(async () => 
-  (await ProjectsContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
-    id: p.id,
-    title: p.title, 
-    desc: p.desc, 
-    image: p.thumbnail || p.image,
-    bottomTags: [
-      p.levelText, 
-      p.ichTypeText, 
-      p.batchText,
-      p.regionText,
-    ] as string[],
-  }))
-);
-const inheritorData = useSimpleDataLoader(async () => 
-  (await InheritorContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
-    id: p.id,
-    title: p.title, 
-    desc: p.desc, 
-    image: p.thumbnail || p.image,
-    titleBox: Boolean(p.deathBirth),
-    bottomTags: [
-      p.levelText, 
-      p.nation,
-      p.ichName
-    ] as string[],
-  }))
-);
 const spotData = useSimpleDataLoader(async () => 
   (await ScenicSpotContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
     id: p.id,
@@ -143,24 +134,9 @@ const spotData = useSimpleDataLoader(async () =>
     ] as string[],
   }))
 );
-const seminarData = useSimpleDataLoader(async () => 
-  (await SeminarContent.getContentList(new GetContentListParams(), 1, 4)).list.map(p => ({
-    id: p.id,
-    title: p.title, 
-    desc: p.desc, 
-    image: p.thumbnail || p.image,
-    bottomTags: [
-      p.levelText, 
-      p.ichTypeText, 
-      p.batchText,
-      p.regionText,
-    ] as string[],
-  }))
-);
 
 const {
   loader: songsData,
-  goList: goSongsList,
   goDetail: goSongsDetail,
 } = useHomePageMiniCommonListGoMoreAndGoDetail({
   title: '闽南时尚',
@@ -171,6 +147,18 @@ const {
 });
 
 const {
+  loader: corseData,
+  goList: goCourseList,
+  goDetail: goCourseDetail,
+} = useHomePageMiniCommonListGoMoreAndGoDetail({
+  title: '闽南语在线课程',
+  mainBodyColumnId: [257/* ,235,237,210 */],
+  modelId: 5,
+  itemType: 'article-common',
+  detailsPage: '/pages/video/details',
+});
+
+const {
   loader: routeData,
   goList: goRouteList,
   goDetail: goRouteDetail,

+ 1 - 1
src/pages/parts/Box2LineLargeImageUserShadow.vue

@@ -2,7 +2,7 @@
   <view 
     :class="[
       'position-relative grid4-item',
-      'd-flex flex-col shadow-l radius-l bg-base p-2 mb-2 overflow-hidden',
+      'd-flex flex-col shadow-base radius-l bg-base p-2 mb-2 overflow-hidden',
       'border-all-light-light-primary',
       classNames,
       fixSize ? 'flex-shrink-0' : ' flex-grow-1',

+ 10 - 6
src/pages/parts/StatsText.vue

@@ -47,7 +47,7 @@ export interface StatsTextItem {
   suffix?: string,
   subText?: string,
   longTitle?: boolean,
-  type?: 'long'|'normal'|''|undefined,
+  type?: 'long'|'normal'|'forth'|''|undefined,
   onClick?: () => void
 }
 
@@ -128,23 +128,27 @@ $color-second: map.get($colors, "second");
       &.half {
         width: calc(50%);
       }
+      &.forth {
+        width: calc(25%);
+      }
+
       &.normal {
         width: calc(33%);
       }
 
       .title-prefix {
         font-size: 32rpx;
-        color: $color-primary;
+        color: $color-second;
       }
       .title-suffix {
         font-size: 26rpx;
-        color: $color-primary;
+        color: $color-second;
         margin-bottom: 12rpx;
         margin-left: -6rpx;
       }
       .sub-title {
         font-size: 26rpx;
-        color: $color-primary;
+        color: $color-second;
 
         &.long {
           white-space: nowrap;
@@ -156,11 +160,11 @@ $color-second: map.get($colors, "second");
         font-size: 46rpx;
         font-weight: bold;
         font-family: HUNdin1451;
-        color: $color-primary;
+        color: $color-text;
       }
       .sub-text {
         font-size: 26rpx;
-        color: $color-primary;
+        color: $color-second;
       }
     }
   }

+ 22 - 227
src/pages/travel.vue

@@ -1,227 +1,31 @@
 <template>
-  <view class="home-container page-travel d-flex flex-col bg-base">
-    <image 
-      class="position-absolute title"
-      src="https://mncdn.wenlvti.net/app_static/minnan/images/travel/Title.png"
-      mode="widthFix"
-    />
-    <view class="content d-flex flex-col">
-      
-      <view class="content d-flex flex-col wing-l">
-        <!-- 大图 -->
-        <image 
-          class="w-100"
-          src="https://mncdn.wenlvti.net/app_static/minnan/images/travel/Banner.jpg"
-          mode="widthFix" 
+  <FlexCol>
+    <StatusBarSpace backgroundColor="background.page" />
+    <NavBar leftButton="custom" backgroundColor="background.page">
+      <template #left>
+        <Image
+          src="https://mncdn.wenlvti.net/app_static/minnan/images/travel/Title.png"
+          mode="widthFix"
+          :width="110"
+          :innerStyle="{ marginLeft: '30rpx', marginTop: '30rpx' }"
         />
-
-        <!-- 分栏 -->
-        <view 
-          class="position-relative d-grid mt-3"
-          style="grid: repeat(2, 3fr) / auto-flow; grid-gap: 20rpx;"
-        >
-          <view  
-            v-for="(tab, k) in subTabs" 
-            :key="k"
-            class="d-flex bg-light-light-primary radius-base p-2 flex-column align-center"
-            @click="tab.onClick"
-          >
-            <image class="width-100" :src="tab.icon" mode="widthFix" />
-            <text class="color-title-text mt-2">{{ tab.name }}</text>
-          </view>
-        </view>
-      </view>
-
-      <!-- 精品路线 -->
-      <HomeTitle title="精品路线" showMore inWing @clickMore="goRouteList" />
-      <SimplePageContentLoader :loader="routeData">
-        <scroll-view scroll-x>
-          <view class="padding-wing-l pb-3 pt-3 d-flex flex-row overflow-visible align-stretch">
-            <Box2LineLargeImageUserShadow
-              v-for="(item, i) in routeData.content.value"
-              classNames="width-2-3 mr-2"
-              titleColor="title-text"
-              fixSize
-              :key="i"
-              :title="item.title"
-              :desc="item.desc"
-              :image="item.thumbnail || item.image"
-              @click="goRouteDetail(item.id)"
-            />
-          </view>
-        </scroll-view>
-      </SimplePageContentLoader>
-
-      <!-- 精选推荐 -->
-      <HomeTitle title="精选推荐" showMore inWing @clickMore="navTo('/pages/travel/scenic-spot/list')" />
-      <SimplePageContentLoader :loader="recommendData">
-        <scroll-view scroll-x>
-          <view class="padding-wing-l pb-3 pt-3 d-flex flex-row overflow-visible align-stretch">
-            <Box2LineLargeImageUserShadow
-              v-for="(item, i) in recommendData.content.value"
-              classNames="width-2-3 mr-2"
-              titleColor="title-text"
-              fixSize
-              :key="i"
-              :title="item.title"
-              title1
-              :image="item.thumbnail || item.image"
-              :bottomLocate="item.district"
-              :bottomScore="'5.0'"
-              @click="goRecommendDetail(item.id)"
-            />
-          </view>
-        </scroll-view>
-      </SimplePageContentLoader>
-
-      <!-- 文创好物 -->
-      <HomeTitle title="文创好物" showMore inWing @clickMore="goCreativeList" />
-      <SimplePageContentLoader :loader="creativeData">
-        <scroll-view scroll-x>
-          <view class="padding-wing-l pb-3 pt-3 d-flex flex-row overflow-visible align-stretch">
-            <Box2LineLargeImageUserShadow
-              v-for="(item, i) in creativeData.content.value"
-              classNames="width-2-3 mr-2"
-              titleColor="title-text"
-              fixSize
-              :key="i"
-              :title="item.title"
-              :image="item.thumbnail || item.image"
-              @click="goCreativeDetail(item.id)"
-            />
-          </view>
-        </scroll-view>
-      </SimplePageContentLoader>
-
-      <!-- 近期活动 -->
-      <!-- <view class="d-flex flex-col wing-l">
-        <HomeTitle title="近期活动" showMore />
-        <SimplePageContentLoader :loader="activityData">
-          <Box2LineRightShadow
-            v-for="(item, i) in activityData.content.value" 
-            :key="i" 
-            :title="item.title"
-            :desc="item.desc"
-            :right="item.right"
-          >
-            <template #left>
-              <view class="d-flex flex-col justify-center align-center radius-base bg-light-light-primary p-25 pt-2 pb-2">
-                <text class="color-primary size-s">12月</text>
-                <text class="color-primary size-base text-bold">28</text>
-              </view>
-            </template>
-          </Box2LineRightShadow>
-        </SimplePageContentLoader>
-      </view> -->
-    </view>
-
-
-  </view>
-  <Tabbar :current="3" />
+      </template>
+    </NavBar>
+    <Travel />
+    <Height :height="180" />
+    <Tabbar :current="3" />
+  </FlexCol>
 </template>
 
 <script setup lang="ts">
-import { useHomePageMiniCommonListGoMoreAndGoDetail } from './article/common/CommonContent';
-import { navTo } from '@/components/utils/PageAction';
-import { onShareTimeline, onShareAppMessage } from '@dcloudio/uni-app';
 import Tabbar from '@/common/components/tabs/Tabbar.vue';
-import Box2LineLargeImageUserShadow from './parts/Box2LineLargeImageUserShadow.vue';
-import HomeTitle from './parts/HomeTitle.vue';
-import SimplePageContentLoader from '@/common/components/SimplePageContentLoader.vue';
-
-const CategoryIcon1 = 'https://mncdn.wenlvti.net/app_static/minnan/images/travel/CategoryIcon1.png';
-const CategoryIcon2 = 'https://mncdn.wenlvti.net/app_static/minnan/images/travel/CategoryIcon2.png';
-const CategoryIcon3 = 'https://mncdn.wenlvti.net/app_static/minnan/images/travel/CategoryIcon3.png';
-const CategoryIcon4 = 'https://mncdn.wenlvti.net/app_static/minnan/images/travel/CategoryIcon4.png';
-const CategoryIcon5 = 'https://mncdn.wenlvti.net/app_static/minnan/images/travel/CategoryIcon5.png';
-const CategoryIcon6 = 'https://mncdn.wenlvti.net/app_static/minnan/images/travel/CategoryIcon6.png';
-
-const subTabs = [
-  { 
-    name: '节庆日历', 
-    icon: CategoryIcon1,
-    onClick: () => navTo('/pages/travel/calendar/index'),
-  },
-  { 
-    name: '文化景区', 
-    icon: CategoryIcon2 , 
-    onClick: () => navTo('/pages/travel/scenic-spot/list') 
-  },
-  { 
-    name: '旅游路线', 
-    icon: CategoryIcon3 , 
-    onClick: () => navTo('/pages/article/common/list', {
-      title: '旅游路线',
-      mainBodyColumnId: '274,275,276,277',
-      modelId: 17,
-      itemType: 'article-common',
-      detailsPage: '/pages/article/details',
-    }) 
-  },
-  { 
-    name: '文化产品', 
-    icon: CategoryIcon4 , 
-    onClick: () => navTo('/pages/article/common/list', {
-      title: '文化产品',
-      mainBodyColumnId: 48,
-      modelId: 9,
-      itemType: 'article-common',
-      detailsPage: '/pages/article/details',
-    }) 
-  },
-  { 
-    name: '融合发展', 
-    icon: CategoryIcon5 , 
-    onClick: () => navTo('/pages/article/common/list', {
-      title: '融合发展',
-      mainBodyColumnId: 278,
-      modelId: 17,
-      itemType: 'article-common',
-      detailsPage: '/pages/article/details',
-    }) 
-  },
-  { 
-    name: '闽南歌曲', 
-    icon: CategoryIcon6 , 
-    onClick: () => navTo('/pages/travel/fashion/list')
-  },
-]
-
-const {
-  loader: routeData,
-  goList: goRouteList,
-  goDetail: goRouteDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '旅游路线',
-  mainBodyColumnId: [274,275,276,277],
-  modelId: 17,
-  itemType: 'article-common',
-  detailsPage: '/pages/article/details',
-});
-
-const {
-  loader: recommendData,
-  goList: goRecommendList,
-  goDetail: goRecommendDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '文化景区',
-  mainBodyColumnId: 273,
-  modelId: 17,
-  itemType: 'article-common',
-  detailsPage: '/pages/article/details',
-});
-
-const {
-  loader: creativeData,
-  goList: goCreativeList,
-  goDetail: goCreativeDetail,
-} = useHomePageMiniCommonListGoMoreAndGoDetail({
-  title: '文化产品',
-  mainBodyColumnId: 48,
-  modelId: 9,
-  itemType: 'article-common',
-  detailsPage: '/pages/article/details',
-});
+import { onShareTimeline, onShareAppMessage } from '@dcloudio/uni-app';
+import FlexCol from '@/components/layout/FlexCol.vue';
+import StatusBarSpace from '@/components/layout/space/StatusBarSpace.vue';
+import NavBar from '@/components/nav/NavBar.vue';
+import Image from '@/components/basic/Image.vue';
+import Travel from './introduction/travel.vue';
+import Height from '@/components/layout/space/Height.vue';
 
 onShareTimeline(() => {
   return {}; 
@@ -232,13 +36,4 @@ onShareAppMessage(() => {
 </script>
 
 <style lang="scss">
-.page-travel {
-     
-  > .content {
-    margin-top: 10vh;
-  }
-  > .title {
-    width: 100rpx;
-  } 
-}
 </style>

+ 4 - 4
src/pages/travel/fashion/list.vue

@@ -8,7 +8,7 @@
     :detailsParams="detailsParams"
     :tabsScrollable="true"
     :tabs="[
-      {
+      /*{
         id: 191,
         text: '闽南语经典歌曲',
         width: 200,
@@ -21,16 +21,16 @@
       {
         id: 189,
         text: '闽南童谣',
-      },
+      },*/
       {
         id: 315,
         text: '闽南语原创歌曲',
         width: 200,
       },
-      {
+      /*{
         id: -100,
         text: '常用闽南语',
-      },
+      },*/
       {
         id: -101,
         text: '闽南语原声',