瀏覽代碼

📦 官网细节问题修改

imengyu 1 月之前
父節點
當前提交
01e7384b9d

+ 1 - 1
index.html

@@ -4,7 +4,7 @@
     <meta charset="UTF-8">
     <link rel="icon" href="/favicon.ico">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>Vite App</title>
+    <title>闽南文化生态保护区(厦门市)</title>
   </head>
   <body>
     <div id="app"></div>

二進制
public/favicon.ico


+ 10 - 3
src/api/CommonContent.ts

@@ -55,7 +55,7 @@ export class GetContentListParams extends DataModel<GetContentListParams> {
   }
 
 
-  setMainBodyColumnId(val: number) {
+  setMainBodyColumnId(val: number|number[]) {
     this.mainBodyColumnId = val;
     return this;
   }
@@ -88,7 +88,7 @@ export class GetContentListParams extends DataModel<GetContentListParams> {
   /**
    * 主体栏目id
    */
-  mainBodyColumnId: number = 0;
+  mainBodyColumnId: number|number[] = 0;
   /**
    * 标志:hot=热门,recommend=推荐,top=置顶
    */
@@ -321,6 +321,13 @@ export class CommonContentApi extends AppServerRequestModule<DataModel> {
       ))
       .catch(e => { throw e });
   }
+
+  private toStringArray(arr: number|number[]|undefined) {
+    if (typeof arr === 'undefined') 
+      return '';
+    return typeof arr === 'object' ? arr.join(',') : arr.toString();
+  }
+
   /**
    * 主体栏目列表
    * @param params 参数 
@@ -352,7 +359,7 @@ export class CommonContentApi extends AppServerRequestModule<DataModel> {
       ...params.toServerSide(),
       ...querys,
       model_id: params.modelId || this.modelId,
-      main_body_column_id: params.mainBodyColumnId || this.mainBodyColumnId,
+      main_body_column_id: this.toStringArray(params.mainBodyColumnId || this.mainBodyColumnId),
       page,
       pageSize,
     })

+ 1 - 1
src/api/inheritor/ProductsContent.ts

@@ -3,7 +3,7 @@ import { CommonContentApi } from '../CommonContent';
 export class ProductsContentApi extends CommonContentApi {
 
   constructor() {
-    super(2, "非遗保护名录-非遗产品", 295);
+    super(16, "非遗保护名录-非遗产品");
   }
 }
 

二進制
src/assets/images/LogoIcon.png


二進制
src/assets/images/communicate/Banner.jpg


二進制
src/assets/images/communicate/Image1.jpg


二進制
src/assets/images/communicate/Image2.jpg


二進制
src/assets/images/favicon.ico


二進制
src/assets/images/favicon.png


二進制
src/assets/images/fusion/Banner.jpg


二進制
src/assets/images/inheritor/Banner.jpg


二進制
src/assets/images/inheritor/Image10.jpg


二進制
src/assets/images/inheritor/Image11.jpg


二進制
src/assets/images/introduction/Image1.jpg


二進制
src/assets/images/introduction/Image1.png


二進制
src/assets/images/introduction/Image2.jpg


二進制
src/assets/images/introduction/Image2.png


二進制
src/assets/images/research/Banner.jpg


+ 6 - 2
src/components/Footer.vue

@@ -5,11 +5,12 @@
         <div class="col-sm-12 col-md-6">
           <div class="logo">
             <img src="@/assets/images/LogoIcon.png" />
-            <h2>闽南(厦门)文化生态保护区</h2>
+            <h2>闽南文化生态保护区 (厦门市)</h2>
           </div>
         </div>
         <div class="col-sm-12 col-md-6">
           <div class="d-block links text-md-end">
+            <RouterLink :to="{ name: 'InheritorSubmit' }">申报入口</RouterLink>
             <span>友情链接:</span>
             <a href="#">厦门市文化馆</a>
             <a href="#">厦门市图书馆</a>
@@ -19,7 +20,10 @@
       </div>
       <div class="row mt-3 mt-md-0">
         <div class="links">
-          <a href="#"><img src="@/assets/images/footer/GonganLogo.png" />闽公网安备 44040202000131号</a>
+          <a href="#">
+            <img src="@/assets/images/footer/GonganLogo.png" />
+            闽公网安备 44040202000131号
+          </a>
           <a href="#">闽ICP备09020130号</a>
         </div>
       </div>

+ 1 - 1
src/components/dynamicf/Display/ShowImageList.vue

@@ -20,7 +20,7 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, PropType } from "vue";
+import { defineComponent, type PropType } from "vue";
 
 export default defineComponent({
   name: "ShowImageList",

+ 1 - 1
src/components/parts/ImageTitleBlock.vue

@@ -41,7 +41,7 @@ defineEmits([
   position: relative;
   padding: 24px;
   background-size: cover;
-  background-position: center;
+  background-position: top center;
   width: 400px;
   height: 270px;
   margin-right: 24px;

+ 1 - 1
src/components/parts/TitleDescBlock.vue

@@ -2,7 +2,7 @@
   <div class="TitleDescBlock">
     <h3>{{ title }}</h3>
     <span v-if="date" class="time">{{ date }}</span>
-    <p :class="expand?'expand':''">{{ desc }}</p>
+    <p :class="expand?'expand':''" v-html="desc"></p>
     <slot name="addon" />
 
     <div class="footer">

+ 1 - 1
src/router/index.ts

@@ -33,7 +33,7 @@ const router = createRouter({
       name: 'introduction',
       component: () => import('../views/IntrodView.vue'),
     },
-{
+    {
       path: '/introduction/history',
       name: 'IntroductionHistory',
       component: () => import('../views/introduction/history.vue'),

+ 102 - 0
src/views/AboutCompanyView.vue

@@ -0,0 +1,102 @@
+<template>
+  <!-- 关于页 -->
+  <div class="about main-background main-background-type0">
+    <!-- 轮播 -->
+    <Carousel v-bind="carouselConfig" class="main-header-box small carousel-light">
+      <Slide class="main-header-box small">
+        <img src="@/assets/images/about/Banner.jpg" />
+      </Slide>
+      <template #addons>
+        <Navigation />
+        <Pagination />
+      </template>
+    </Carousel>
+
+    <!-- 关于我们 -->
+    <section class="main-section ">
+      <div class="content">
+        <div class="title">
+          <h2>关于我们</h2>
+        </div>
+
+        <div class="row">
+          <div class="col-sm-12 col-md-6 col-lg-8">
+            <h3 class="font-SourceHanSerifCNBold">厦门博合文化科技有限公司</h3>
+            <p class="mt-4">文化遗产不仅属于我们,也属于后代子孙,宣传和传承文化遗产乃吾辈之责,五缘记忆旨在宣传和保护湖里区文化遗产功在当代利在干秋。 </p>
+            <p class="mt-4">厦门博合文化科技有限公司是一家专注于数字创意、文化科技与新媒体内容的创新型企业。我们致力于通过前沿技术(如AI、VR/AR、数字孪生等)与创意结合,为客户提供数字营销、互动体验、虚拟制作、IP孵化及文化科技解决方案,助力品牌与文化的数字化升级。</p>
+          </div>
+          <div class="col-sm-12 col-md-6 col-lg-4 d-flex flex-row justify-content-center">
+            <img src="@/assets/images/about/Logo.png" alt="公司Logo" />
+          </div>
+        </div>
+      </div>
+    </section>
+
+
+    <!-- 公司地址 -->
+    <section class="main-section ">
+      <div class="content">
+        <div class="title">
+          <h2>公司地址</h2>
+        </div>
+
+        <div class="row align-items-center">
+          <div class="col-sm-12 col-md-6 col-lg-6">
+            <div class="d-flex flex-column">
+              <div class="d-flex flex-row align-items-center p-2">
+                <img class="me-3" src="@/assets/images/about/IconMobile.png" />
+                <span>电话:1388888888</span>
+              </div>
+              <div class="d-flex flex-row align-items-center p-2">
+                <img class="me-3" src="@/assets/images/about/IconMail.png" />
+                <span>邮箱:1388888888&#64;163.com</span>
+              </div>
+              <div class="d-flex flex-row align-items-center p-2">
+                <img class="me-3" src="@/assets/images/about/IconLocation.png" />
+                <span>地址:厦门火炬高新区信息光电园林后西路1号金丰大厦703F室</span>
+              </div>
+            </div>
+          </div>
+          <div class="col-sm-12 col-md-6 col-lg-6" style="height: 200px">
+            <el-amap
+              :center="center"
+              :zoom="zoom"
+              @init="handleInit"
+            />
+          </div>
+        </div>
+      </div>
+    </section>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { Carousel, Slide, Pagination, Navigation } from 'vue3-carousel'
+import { ref } from 'vue';
+
+const carouselConfig = {
+  itemsToShow: 1,
+  wrapAround: true,
+  autoPlay: 5000,
+}
+const zoom = ref(13);
+const center = ref([118.161288, 24.528889]);
+let map: any = null;
+
+function handleInit(mapRef: any) {
+  map = mapRef;
+  map?.add(new AMap.Marker({
+    position: center.value as [number, number]
+  }));
+}
+
+</script>
+
+<style lang="scss">
+
+
+@media (max-width: 425px) {
+  
+}
+</style>
+

+ 45 - 60
src/views/AboutView.vue

@@ -12,59 +12,31 @@
       </template>
     </Carousel>
 
-    <!-- 关于我们 -->
-    <section class="main-section ">
-      <div class="content">
-        <div class="title">
-          <h2>关于我们</h2>
-        </div>
 
-        <div class="row">
-          <div class="col-sm-12 col-md-6 col-lg-8">
-            <h3 class="font-SourceHanSerifCNBold">厦门博合文化科技有限公司</h3>
-            <p class="mt-4">文化遗产不仅属于我们,也属于后代子孙,宣传和传承文化遗产乃吾辈之责,五缘记忆旨在宣传和保护湖里区文化遗产功在当代利在干秋。 </p>
-            <p class="mt-4">厦门博合文化科技有限公司是一家专注于数字创意、文化科技与新媒体内容的创新型企业。我们致力于通过前沿技术(如AI、VR/AR、数字孪生等)与创意结合,为客户提供数字营销、互动体验、虚拟制作、IP孵化及文化科技解决方案,助力品牌与文化的数字化升级。</p>
-          </div>
-          <div class="col-sm-12 col-md-6 col-lg-4 d-flex flex-row justify-content-center">
-            <img src="@/assets/images/about/Logo.png" alt="公司Logo" />
-          </div>
-        </div>
-      </div>
-    </section>
-
-
-    <!-- 公司地址 -->
-    <section class="main-section ">
-      <div class="content">
-        <div class="title">
-          <h2>公司地址</h2>
-        </div>
-
-        <div class="row align-items-center">
-          <div class="col-sm-12 col-md-6 col-lg-6">
-            <div class="d-flex flex-column">
-              <div class="d-flex flex-row align-items-center p-2">
-                <img class="me-3" src="@/assets/images/about/IconMobile.png" />
-                <span>电话:1388888888</span>
-              </div>
-              <div class="d-flex flex-row align-items-center p-2">
-                <img class="me-3" src="@/assets/images/about/IconMail.png" />
-                <span>邮箱:1388888888&#64;163.com</span>
-              </div>
-              <div class="d-flex flex-row align-items-center p-2">
-                <img class="me-3" src="@/assets/images/about/IconLocation.png" />
-                <span>地址:厦门火炬高新区信息光电园林后西路1号金丰大厦703F室</span>
-              </div>
-            </div>
-          </div>
-          <div class="col-sm-12 col-md-6 col-lg-6" style="height: 200px">
-            <el-amap
-              :center="center"
-              :zoom="zoom"
-              @init="handleInit"
+    <!-- 新闻 -->
+    <section class="main-section main-background main-background-type0">
+      <div class="content news-list">
+        <!-- 新闻列表 -->
+        <SimplePageContentLoader :loader="newsLoader">
+          <div 
+            v-for="(item, k) in newsLoader.list.value"
+            :key="item.id"
+            class="item"
+            @click="router.push({ name: 'news-detail', query: { id: item.id }})"
+          >
+            <img :src="item.image" alt="新闻图片" />
+            <TitleDescBlock
+              :title="item.title"
+              :desc="item.desc || item.title"
+              :date="DateUtils.formatDate(item.publish_at, DateUtils.FormatStrings.YearCommon)"
             />
           </div>
-        </div>
+        </SimplePageContentLoader>
+        <!-- 分页 -->
+        <Pagination2
+          v-model:currentPage="newsLoader.page.value"
+          :totalPages="newsLoader.totalPages.value"
+        />
       </div>
     </section>
   </div>
@@ -72,24 +44,37 @@
 
 <script setup lang="ts">
 import { Carousel, Slide, Pagination, Navigation } from 'vue3-carousel'
-import { ref } from 'vue';
+import { onMounted, ref } from 'vue';
+import { useSimplePagerDataLoader } from '@/composeable/SimplePagerDataLoader';
+import Pagination2 from '@/components/controls/Pagination.vue';
+import TitleDescBlock from '@/components/parts/TitleDescBlock.vue';
+import SimplePageContentLoader from '@/components/content/SimplePageContentLoader.vue';
+import CommonContent, { GetContentListParams } from '@/api/CommonContent';
+import DateUtils from '@/common/utils/DateUtils';
+import { useRouter } from 'vue-router';
 
 const carouselConfig = {
   itemsToShow: 1,
   wrapAround: true,
   autoPlay: 5000,
 }
-const zoom = ref(13);
-const center = ref([118.161288, 24.528889]);
-let map: any = null;
 
-function handleInit(mapRef: any) {
-  map = mapRef;
-  map?.add(new AMap.Marker({
-    position: center.value as [number, number]
-  }));
-}
+const router = useRouter();
+
+const newsLoader = useSimplePagerDataLoader(10, async (page, pageSize) => {
+  const res = await CommonContent.getContentList(new GetContentListParams()
+    .setModelId(17)
+    .setMainBodyColumnId([ 255, 256, 283, 284, ])
+  , page, pageSize);
+  return {
+    data: res.list,
+    total: res.total,
+  };
+});
 
+onMounted(async () => {
+  newsLoader.loadData(undefined, true);
+})
 </script>
 
 <style lang="scss">

+ 83 - 25
src/views/HomeView.vue

@@ -23,17 +23,77 @@
       </template>
     </Carousel>
 
-    <!-- 精选推荐 -->
+    <!-- 精选推荐文物 -->
+    <section class="main-section main-background main-background-type1">
+      <div class="content">
+        <div class="title">
+          <h2>精选文物</h2>
+        </div>
+
+        <SimplePageContentLoader :loader="recommend1Data">
+          <Carousel ref="carousel2Ref" v-bind="carousel2Config">
+            <Slide 
+              v-for="(item, index) in recommend1Data.content.value"
+              :key="index"
+              @click="router.push({ name: 'artifact-detail', query: { id: item.id } })"
+            >
+              <ImageTitleBlock 
+                :image="item.image"
+                :title="item.title"
+                :desc="item.desc"
+              />
+            </Slide>
+          </Carousel>
+        </SimplePageContentLoader>
+
+        <div class="simple-carousel2-left-right">
+          <div @click="carousel2Ref?.prev()">←</div>
+          <div @click="carousel2Ref?.next()">→</div>
+        </div>
+      </div>
+    </section>
+
+    <!-- 精选推荐非遗 -->
+    <section class="main-section main-background main-background-type1">
+      <div class="content">
+        <div class="title">
+          <h2>精选非遗</h2>
+        </div>
+
+        <SimplePageContentLoader :loader="recommend2Data">
+          <Carousel ref="carousel2Ref" v-bind="carousel2Config">
+            <Slide 
+              v-for="(item, index) in recommend2Data.content.value"
+              :key="index"
+              @click="router.push({ name: 'news-detail', query: { id: item.id } })"
+            >
+              <ImageTitleBlock 
+                :image="item.image"
+                :title="item.title"
+                :desc="item.desc"
+              />
+            </Slide>
+          </Carousel>
+        </SimplePageContentLoader>
+
+        <div class="simple-carousel2-left-right">
+          <div @click="carousel2Ref?.prev()">←</div>
+          <div @click="carousel2Ref?.next()">→</div>
+        </div>
+      </div>
+    </section>
+
+    <!-- 精选推荐项目 -->
     <section class="main-section main-background main-background-type1">
       <div class="content">
         <div class="title">
           <h2>精选推荐</h2>
         </div>
 
-        <SimplePageContentLoader :loader="recommendData">
+        <SimplePageContentLoader :loader="recommend3Data">
           <Carousel ref="carousel2Ref" v-bind="carousel2Config">
             <Slide 
-              v-for="(item, index) in recommendData.content.value"
+              v-for="(item, index) in recommend3Data.content.value"
               :key="index"
               @click="router.push({ name: 'news-detail', query: { id: item.id } })"
             >
@@ -141,12 +201,12 @@ import { Carousel, Slide, Pagination, Navigation } from 'vue3-carousel'
 import { onMounted, ref } from 'vue';
 import { useRouter } from 'vue-router';
 import { useSimpleDataLoader } from '@/composeable/SimpleDataLoader';
-import CommonContent, { GetContentListParams, type GetContentListItem } from '@/api/CommonContent';
+import CommonContent, { GetColumListParams, GetContentListParams, type GetContentListItem } from '@/api/CommonContent';
+import { NO_CONTENT_STRING } from '@/common/ConstStrings';
 import NewsIndexContent from '@/api/news/NewsIndexContent';
 import ImageTitleBlock from '@/components/parts/ImageTitleBlock.vue';
 import SimplePageContentLoader from '@/components/content/SimplePageContentLoader.vue';
 import IndexContent from '@/api/introduction/IndexContent';
-import { NO_CONTENT_STRING } from '@/common/ConstStrings';
 import SimpleRemoveRichHtml from '@/components/display/SimpleRemoveRichHtml.vue';
 import UnmoveableContent from '@/api/inheritor/UnmoveableContent';
 import ProjectContent from '@/api/research/ProjectContent';
@@ -187,32 +247,30 @@ const bannerData = useSimpleDataLoader(async () => {
   return await IndexContent.getBanner()
 });
 const overviewData = useSimpleDataLoader(async () => {
-  return (await IndexContent.getColumList(new GetContentListParams().setSelfValues({
-    modelId: 3,
+  return (await IndexContent.getColumList(new GetColumListParams().setSelfValues({
+    modelId: 17,
     mainBodyColumnId: 234,
   }))).list[0]?.overview || NO_CONTENT_STRING
 });
-const recommendData = useSimpleDataLoader<GetContentListItem[]>(async () => {
-  const list = [];
-
-  list.push(...(await UnmoveableContent.getContentList(new GetContentListParams().setSelfValues({
-    flag: 'recommend',
-  }), 1, 2)).list);
-  list.push(...(await ProductContent.getContentList(new GetContentListParams().setSelfValues({
-    flag: 'recommend',
-  }), 1, 2)).list);
-  list.push(...(await ProjectContent.getContentList(new GetContentListParams().setSelfValues({
-    flag: 'recommend',
-  }), 1, 2)).list);
-  list.push(...(await ActivityContent.getContentList(new GetContentListParams().setSelfValues({
-    flag: 'recommend',
-  }), 1, 2)).list);
-
-  return list;
+const recommend1Data = useSimpleDataLoader<GetContentListItem[]>(async () => {
+  return (await UnmoveableContent.getContentList(new GetContentListParams().setSelfValues({
+
+  }), 1, 6)).list;
+});
+const recommend2Data = useSimpleDataLoader<GetContentListItem[]>(async () => {
+  return (await CommonContent.getContentList(new GetContentListParams()
+    .setModelId(3)
+    .setMainBodyColumnId(238)
+  , 1, 6)).list
+});
+const recommend3Data = useSimpleDataLoader<GetContentListItem[]>(async () => {
+  return (await CommonContent.getContentList(new GetContentListParams()
+    .setModelId(17)
+    .setMainBodyColumnId(273)
+  , 1, 6)).list
 });
 const newsData = useSimpleDataLoader<GetContentListItem[]>(async () => {
   return (await NewsIndexContent.getContentList(new GetContentListParams().setSelfValues({
-    flag: 'recommend',
   }), 1, 6)).list
 });
 const statsData = useSimpleDataLoader(async () => {

+ 1 - 1
src/views/InheritorView.vue

@@ -4,7 +4,7 @@
     <!-- 轮播 -->
     <Carousel v-bind="carouselConfig" class="main-header-box small carousel-light">
       <Slide class="main-header-box small">
-        <img src="@/assets/images/communicate/Banner.jpg" />
+        <img src="@/assets/images/inheritor/Banner.jpg" />
       </Slide>
       <template #addons>
         <Navigation />

+ 2 - 2
src/views/IntrodView.vue

@@ -62,8 +62,8 @@
 <script setup lang="ts">
 import { Carousel, Slide, Pagination, Navigation } from 'vue3-carousel'
 import IndexContent from '@/api/introduction/IndexContent';
-import Image1 from '@/assets/images/introduction/Image1.png';
-import Image2 from '@/assets/images/introduction/Image2.png';
+import Image1 from '@/assets/images/introduction/Image1.jpg';
+import Image2 from '@/assets/images/introduction/Image2.jpg';
 import CategoryImage1 from '@/assets/images/introduction/CategoryImage1.png';
 import CategoryImage2 from '@/assets/images/introduction/CategoryImage2.png';
 import CategoryImage3 from '@/assets/images/introduction/CategoryImage3.png';

+ 2 - 2
src/views/NewsDetailView.vue

@@ -51,14 +51,14 @@
             </div>
           </div>
           
-          <div class="row pt-3 pt-md-4 pt-lg-5">
+          <!-- <div class="row pt-3 pt-md-4 pt-lg-5">
             <div class="col-12 col-md-6 col-lg-6 col-xl-6 d-flex justify-content-start">
               <span class="small-info">上一篇:????</span>
             </div>
             <div class="col-12 col-md-6 col-lg-6 col-xl-6 d-flex justify-content-end">
               <span class="small-info">下一篇:????</span>
             </div>
-          </div>
+          </div> -->
 
         </div>
       </SimplePageContentLoader>