Selaa lähdekoodia

🎨 修改细节问题

快乐的梦鱼 4 viikkoa sitten
vanhempi
commit
40019d9699

+ 2 - 2
src/api/CommonContent.ts

@@ -286,14 +286,14 @@ export class CategoryListItem extends DataModel<CategoryListItem> {
 
 export class CommonContentApi extends AppServerRequestModule<DataModel> {
 
-  constructor(modelId: number, debugName: string, mainBodyColumnId?: number) {
+  constructor(modelId: number, debugName: string, mainBodyColumnId?: number|number[]) {
     super();
     this.modelId = modelId;
     this.mainBodyColumnId = mainBodyColumnId;
     this.debugName = debugName;
   }
 
-  public mainBodyColumnId?: number;
+  public mainBodyColumnId?: number|number[];
   public modelId: number;
   protected debugName: string;
 

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

@@ -3,7 +3,7 @@ import { CommonContentApi } from '../CommonContent';
 export class ProjectsContentApi extends CommonContentApi {
 
   constructor() {
-    super(2, "非遗保护名录-非遗代表性项目",);
+    super(2, "非遗保护名录-非遗代表性项目"/* , [295,317] */);
   }
 }
 

+ 2 - 0
src/api/introduction/IndexContent.ts

@@ -12,6 +12,7 @@ export class IndexStats extends DataModel<IndexStats> {
       inheritorData: { clientSide: 'forceArray' },
       ichData: { clientSide: 'forceArray' },
       ichCenter: { clientSide: 'forceArray' },
+      villageData: { clientSide: 'forceArray' }
     }
   }
 
@@ -21,6 +22,7 @@ export class IndexStats extends DataModel<IndexStats> {
   inheritorData: any;
   ichData: any;
   ichCenter: any;
+  villageData: any;
 }
 export class IndexBanner extends DataModel<IndexBanner> {
   constructor() {

+ 2 - 1
src/assets/scss/colors.scss

@@ -18,8 +18,9 @@ $border-default-color: $primary-dark-color;
 $border-active-color: $primary-color;
 $border-dark-color: #fff;
 
-$box-dark-trans-color2: rgba(#000, 0.22);
 $box-dark-trans-color: rgba(#000, 0.55);
+$box-dark-trans-color2: rgba(#000, 0.22);
+$box-dark-trans-color3: rgba(#000, 0.65);
 $box-color: #fff;
 $box-inset-color: rgba(#FFFDF9, 0.33);
 $box-hover-color: rgba(#FFFDF9, 0.88);

+ 1 - 1
src/assets/scss/main.scss

@@ -77,7 +77,7 @@ $small-banner-height: 445px;
   .list {
     margin: 0 auto;
     max-width: $selection-max-width;
-    background-color: $box-dark-trans-color2;
+    background-color: $box-dark-trans-color3;
     backdrop-filter: blur(5px);
     display: flex;
     flex-direction: row;

+ 5 - 0
src/router/index.ts

@@ -34,6 +34,11 @@ const router = createRouter({
       component: () => import('../views/IntrodView.vue'),
     },
     {
+      path: '/introduction/about',
+      name: 'IntroductionAbout',
+      component: () => import('../views/introduction/about.vue'),
+    },
+    {
       path: '/introduction/history',
       name: 'IntroductionHistory',
       component: () => import('../views/introduction/history.vue'),

+ 58 - 10
src/views/AboutView.vue

@@ -30,7 +30,7 @@
             v-for="(tab, k) in mainTabs"
             :key="k"
             :class="[ mainTabActive === tab.value ? 'active' : '' ]"
-            @click="mainTabActive = tab.value"
+            @click="handleTabClick(tab.value)"
           >
             {{ tab.title }}
           </div>
@@ -38,8 +38,39 @@
       </div>
     </section>
 
+    <!-- 闽南文化生态保护区概况 -->
+    <section v-if="mainTabActive == 0" class="main-section main-background main-background-type0">
+      <div class="content">   
+        <SimplePageContentLoader :loader="introdLoader">
+          <div class="d-flex justify-content-center ">
+            <h2>全国文化生态保护区基本情况</h2>
+          </div>
+          <LeftRightBox 
+            class="mt-4"
+            :title="introdLoader.content.value?.introd1?.title"
+            :desc="introdLoader.content.value?.introd1?.content"
+            :image="introdLoader.content.value?.introd1?.image"
+            :showMore="false"
+            left
+          />
+          <div class="d-flex justify-content-center mt-5">
+            <h2>闽南文化生态保护区(厦门市)基本情况</h2>
+          </div>
+          <LeftRightBox 
+            class="mt-4"
+            :title="introdLoader.content.value?.introd2?.title"
+            :desc="introdLoader.content.value?.introd2?.content"
+            :image="introdLoader.content.value?.introd2?.image"
+            :rightItems="introdLoader.content.value?.list"
+            @rightItemDefaultClick="(item) => navTo('/news/detail', { id: item.id })"
+            @moreClick="navTo('/introduction/about')"
+          />
+        </SimplePageContentLoader>
+      </div> 
+    </section>
+
     <!-- 新闻 -->
-    <section v-if="mainTabActive <= 1" class="main-section main-background main-background-type0">
+    <section v-if="mainTabActive == 1" class="main-section main-background main-background-type0">
       <div class="content news-list">
         <!-- 新闻列表 -->
         <SimplePageContentLoader :loader="newsLoader">
@@ -80,7 +111,7 @@
             :key="index"
             :title="item.title"
             :image="item.image"
-            :data="item.date"
+            :date="item.date"
             @click="navTo('/news/detail', { id: item.id })"
           />
         </SimplePageContentLoader>
@@ -104,6 +135,8 @@ import LawsTest from '@/assets/images/inheritor/LawsTest.jpg'
 import { useRouter } from 'vue-router';
 import { useSimpleDataLoader } from '@/composeable/SimpleDataLoader';
 import { usePageAction } from '@/composeable/PageAction';
+import LeftRightBox from '@/components/parts/LeftRightBox.vue';
+import NewsIndexContent from '@/api/news/NewsIndexContent';
 
 const { navTo } = usePageAction();
 
@@ -117,21 +150,37 @@ const mainTabs = [
   { title: '闽南文化生态保护区概况', value: 0 },
   { title: '世界闽南文化交流中心', value: 1 },
   { title: '政策法规', value: 2 },
+  { title: '申报入口', value: 3 },
 ]
 const mainTabActive = ref(0);
 
 const router = useRouter();
 
+function handleTabClick(value: number) {
+  if (value == 3) {
+    navTo('/inheritor/submit');
+    return;
+  }
+  mainTabActive.value = value; 
+}
+
+const introdLoader = useSimpleDataLoader(async () => {
+  const res = await CommonContent.getContentList(new GetContentListParams()
+        .setModelId(17)
+        .setMainBodyColumnId([ 256, 283, 284, ])
+      , 1, 10);
+  const introd1 = await NewsIndexContent.getContentDetail(5922);
+  const introd2 = await NewsIndexContent.getContentDetail(5921);
+  return {
+    introd1,
+    introd2,
+    list: res.list,
+  };
+})
 const newsLoader = useSimplePagerDataLoader(10, async (page, pageSize) => {
   let res;
   switch (mainTabActive.value) {
     default:
-    case 0:
-      res = await CommonContent.getContentList(new GetContentListParams()
-        .setModelId(17)
-        .setMainBodyColumnId([ 255, 256, 283, 284, ])
-      , page, pageSize);
-      break;
     case 1:
       res = await CommonContent.getContentList(new GetContentListParams()
         .setModelId(17)
@@ -144,7 +193,6 @@ const newsLoader = useSimplePagerDataLoader(10, async (page, pageSize) => {
     total: res.total,
   };
 });
-
 const lawsData = useSimpleDataLoader(async () => 
   (await PolicyContent.getContentList(new GetContentListParams(), 1, 8))
     .list?.map(item => ({

+ 109 - 109
src/views/HomeView.vue

@@ -24,19 +24,33 @@
     </Carousel>
 
     <!-- 数据统计 -->
-    <section class="main-section">
+    <section class="main-section main-background main-background-type2">
       <div class="content">
         <div class="title">
           <h2>数据统计</h2>
         </div>
 
         <SimplePageContentLoader :loader="statsData">
-          <div v-for="(stat,key) in statsData.content.value" :key="key" class="main-stats">
-            <h4>{{ stat.title }}</h4>
-            <div class="descs">
-              <div v-for="(data, key2) in stat.datas" :key="key2" @click="data.onClick">
-                <h5>{{ data.value }}</h5>
-                <p>{{ data.title }}</p>
+          <div class="d-flex row">
+            <div 
+              class="col-12 col-md-6 col-lg-4 col-xl-4" 
+              v-for="(stat,key) in statsData.content.value" 
+              :key="key"
+            >
+              <div :class="`main-card-box type${stat.type}`">
+                <div class="content">
+                  <h4>{{ stat.title }}</h4>
+                  <div class="descs">
+                    <div 
+                      v-for="(data, key2) in stat.datas"
+                      :key="key2"
+                      @click="data.onClick"
+                    >
+                      <h5>{{ data.title }}</h5>
+                      <p>{{ data.value }}</p>
+                    </div>
+                  </div>
+                </div>
               </div>
             </div>
           </div>
@@ -44,6 +58,36 @@
       </div>
     </section>
 
+    <!-- 保护区大事记 -->
+    <section class="main-section main-background main-background-type2">
+      <div class="content">
+        <div class="title">
+          <h2>保护区大事记</h2>
+        </div>
+
+        <SimplePageContentLoader :loader="recordData">
+          <div class="main-time-line">
+            <ScrollRect scroll="horizontal" containerClass="time-line-scroll">
+              <div 
+                v-for="(item, index) in recordData.content.value"
+                :key="index"
+                class="item"
+                :class="index % 2 === 0 ? 'top' : 'bottom'"
+              >
+                <div class="time">
+                  {{ DataDateUtils.formatDate(item.publishAt, 'YYYY-MM') }}
+                </div>
+                <div class="box">
+                  <div class="title">{{ item.title }}</div>
+                  <div class="content">{{ item.desc }}</div>
+                </div>
+              </div>
+            </ScrollRect>
+          </div>
+        </SimplePageContentLoader>
+      </div>
+    </section>
+
     <!-- 精选推荐非遗 -->
     <section class="main-section main-background main-background-type1">
       <div class="content">
@@ -144,64 +188,6 @@
       </div>
     </section>
 
-    <!-- 数据统计 -->
-    <section class="main-section main-background main-background-type2">
-      <div class="content">
-        <div class="title">
-          <h2>数据统计</h2>
-        </div>
-
-        <SimplePageContentLoader :loader="statsData">
-          <Carousel ref="carousel3Ref" v-bind="carousel3Config">
-            <Slide v-for="(stat,key) in statsData.content.value" :key="key">
-              <div :class="`main-card-box type${stat.type}`">
-                <h4>{{ stat.title }}</h4>
-                <div class="descs">
-                  <div v-for="(data, key2) in stat.datas" :key="key2">
-                    <h5>{{ data.title }}</h5>
-                    <p>{{ data.value }}</p>
-                  </div>
-                </div>
-              </div>
-            </Slide>
-            <template #addons>
-              <Navigation />
-            </template>
-          </Carousel>
-        </SimplePageContentLoader>
-      </div>
-    </section>
-
-    <!-- 保护区大事记 -->
-    <section class="main-section main-background main-background-type2">
-      <div class="content">
-        <div class="title">
-          <h2>保护区大事记</h2>
-        </div>
-
-        <SimplePageContentLoader :loader="recordData">
-          <div class="main-time-line">
-            <ScrollRect scroll="horizontal" containerClass="time-line-scroll">
-              <div 
-                v-for="(item, index) in recordData.content.value"
-                :key="index"
-                class="item"
-                :class="index % 2 === 0 ? 'top' : 'bottom'"
-              >
-                <div class="time">
-                  {{ DataDateUtils.formatDate(item.publishAt, 'YYYY-MM') }}
-                </div>
-                <div class="box">
-                  <div class="title">{{ item.title }}</div>
-                  <div class="content">{{ item.desc }}</div>
-                </div>
-              </div>
-            </ScrollRect>
-          </div>
-        </SimplePageContentLoader>
-      </div>
-    </section>
-
     <!-- 介绍 -->
     <section class="main-introd main-section">
       <div class="main-introd-bg">
@@ -243,6 +229,7 @@ import ProductsContent from '@/api/inheritor/ProductsContent';
 import ProjectsContent from '@/api/inheritor/ProjectsContent';
 import { DataDateUtils } from '@imengyu/js-request-transform';
 import { ScrollRect } from '@imengyu/vue-scroll-rect';
+import SeminarContent from '@/api/inheritor/SeminarContent';
 
 const router = useRouter();
 
@@ -256,22 +243,8 @@ const carousel2Config = {
   mouseWheel: true,
   wrapAround: true
 }
-const carousel3Config = ref({
-  itemsToShow: 4,
-  mouseWheel: true,
-  wrapAround: true,
-  autoplay: 3000,
-});
-const carousel3Ref = ref<any>(null);
 const carousel6Ref = ref<any>(null);
 
-onMounted(() => {
-  if (window.innerWidth <= 435) {
-    carousel3Config.value.itemsToShow = 1;
-  } else if (window.innerWidth <= 768) {
-    carousel3Config.value.itemsToShow = 2;
-  } 
-})
 
 
 const bannerData = useSimpleDataLoader(async () => {
@@ -287,7 +260,7 @@ const recommend1Data = useSimpleDataLoader<GetContentListItem[]>(async () => {
   return (await UnmoveableContent.getContentList(new GetContentListParams(), 1, 9)).list;
 });
 const recommend2Data = useSimpleDataLoader<GetContentListItem[]>(async () => {
-  return (await ProjectsContent.getContentList(new GetContentListParams(), 1, 9)).list
+  return (await ProjectsContent.getContentList(new GetContentListParams().setMainBodyColumnId([]), 1, 9)).list
 });
 const recommend3Data = useSimpleDataLoader<GetContentListItem[]>(async () => {
   return (await CommonContent.getContentList(new GetContentListParams()
@@ -301,7 +274,9 @@ const newsData = useSimpleDataLoader<GetContentListItem[]>(async () => {
 });
 const statsData = useSimpleDataLoader(async () => {
   const data = (await IndexContent.getStats());
-
+  const semiCount = (await SeminarContent.getContentList(new GetContentListParams(), 1, 6)).total;
+  const unmoveableCount = (await UnmoveableContent.getContentList(new GetContentListParams(), 1, 6)).total;
+  
   return [
     {
       title: '非遗项目',
@@ -329,6 +304,26 @@ const statsData = useSimpleDataLoader(async () => {
         }
       })
     },
+    {
+      type: '1',
+      datas: [
+        {
+          title: '传习所',
+          value: semiCount,
+          onClick: () => router.push({ path: '/inheritor/seminar' }),
+        },
+        {
+          title: '传统村落',
+          value: data.villageData[0].total,
+          onClick: () => router.push({ path: '/village/index' }),
+        },
+        {
+          title: '文物古迹',
+          value: unmoveableCount,
+          onClick: () => router.push({ path: '/inheritor/unmoveable' }),
+        },
+      ],
+    },
     /*{
       title: '不可移动文物',
       type: '3',
@@ -389,41 +384,46 @@ const recordData = useSimpleDataLoader<GetContentListItem[]>(async () => {
 
 .main-card-box {
   position: relative;
-  width: 340px;
   min-height: 330px;
   color: #fff;
-  padding: 24px;
   margin-right: 24px;
   overflow: hidden;
-  transform: translateX(-50%);
+  //transform: translateX(-50%);
 
-  h4 {
-    font-family: SourceHanSerifCNBold;
-    font-size: 1.5rem;
-    margin: 0;
-    margin-bottom: 32px;
+  .content {
+    position: absolute;
+    inset: 24px;
     z-index: 10;
-  }
-  .descs {
     display: flex;
-    flex-direction: row;
-    flex-wrap: wrap;
-    z-index: 10;
+    flex-direction: column;
 
-    div {
-      flex: 1 1 50%;
+    h4 {
+      font-family: SourceHanSerifCNBold;
+      font-size: 1.5rem;
+      margin: 0;
       margin-bottom: 32px;
-
-      h5 {
-        font-size: 1rem;
-        font-weight: normal;
-        margin: 0;
-      }
-      p {
-        font-family: Impact;
-        font-weight: normal;
-        font-size: 2.8rem;
-        margin: 0;
+    }
+    .descs {
+      display: flex;
+      flex-direction: row;
+      flex-wrap: wrap;
+
+      div {
+        flex: 1 1 50%;
+        margin-bottom: 32px;
+        cursor: pointer;
+
+        h5 {
+          font-size: 1rem;
+          font-weight: normal;
+          margin: 0;
+        }
+        p {
+          font-family: Impact;
+          font-weight: normal;
+          font-size: 2.8rem;
+          margin: 0;
+        }
       }
     }
   }
@@ -441,7 +441,7 @@ const recordData = useSimpleDataLoader<GetContentListItem[]>(async () => {
         position: absolute;
         inset: 0;
         background-image: list.nth($type, 2);
-        z-index: -2;
+        z-index: 0;
       }
       &::before {
         content: '';
@@ -452,7 +452,7 @@ const recordData = useSimpleDataLoader<GetContentListItem[]>(async () => {
         height: 180px;
         background-size: 180px;
         background-image: list.nth($type, 1);
-        z-index: -1;
+        z-index: 1;
       }
     }
   }

+ 2 - 10
src/views/NewsDetailView.vue

@@ -14,16 +14,8 @@
           </div>
 
           <h1>{{ newsLoader.content.value.title }}</h1>
-          <div class="row p-2 p-md-3 p-lg-4">
-            <div class="col-12 col-md-4 col-lg-4 col-xl-4 d-flex justify-content-center">
-              <span class="small-info">作者:{{ newsLoader.content.value.author || '管理员' }}</span>
-            </div>
-            <div class="col-12 col-md-4 col-lg-4 col-xl-4 d-flex justify-content-center">
-              <span class="small-info">时间:{{ DateUtils.formatDate(newsLoader.content.value.publishAt, DateUtils.FormatStrings.YearCommon) }}</span>
-            </div>
-            <div class="col-12 col-md-4 col-lg-4 col-xl-4 d-flex justify-content-center">
-              <span class="small-info">浏览量:{{ newsLoader.content.value.views }}</span>
-            </div>
+          <div class="d-flex flex-row justify-content-center">
+            <span class="small-info">时间:{{ DateUtils.formatDate(newsLoader.content.value.publishAt, DateUtils.FormatStrings.YearCommonShort) }}</span>
           </div>
    
           <video 

+ 3 - 3
src/views/NewsView.vue

@@ -41,7 +41,7 @@
         </div>
       </div>
       <!-- 头部TAB -->
-      <div class="main-header-tab">
+      <!-- <div class="main-header-tab">
         <div class="list">
           <div 
             v-for="(tab, k) in mainTabs"
@@ -52,7 +52,7 @@
             {{ tab.title }}
           </div>
         </div>
-      </div>
+      </div> -->
     </section>
 
     <!-- 新闻 -->
@@ -70,7 +70,7 @@
             <TitleDescBlock
               :title="item.title"
               :desc="item.desc || item.title"
-              :date="DateUtils.formatDate(item.publishAt, DateUtils.FormatStrings.YearCommon)"
+              :date="DateUtils.formatDate(item.publishAt, DateUtils.FormatStrings.YearCommonShort)"
             />
           </div>
         </SimplePageContentLoader>

+ 6 - 3
src/views/communicate/activity.vue

@@ -28,9 +28,12 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await CommunicateContent.getContentList(new GetContentListParams().setSelfValues({
-    mainBodyColumnId: 297
-  }), page, pageSize);
+  const res = await CommunicateContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+    .setSelfValues({
+      mainBodyColumnId: 297
+    })
+  , page, pageSize);
 
   return { 
     page: page,

+ 6 - 3
src/views/communicate/fujian-and-taiwan.vue

@@ -29,9 +29,12 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await CommunicateContent.getContentList(new GetContentListParams().setSelfValues({
-    mainBodyColumnId: 260
-  }), page, pageSize);
+  const res = await CommunicateContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+    .setSelfValues({
+      mainBodyColumnId: 260
+    })
+  , page, pageSize);
 
   return { 
     page: page,

+ 6 - 3
src/views/communicate/hk-macao-and-taiwan.vue

@@ -29,9 +29,12 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await CommunicateContent.getContentList(new GetContentListParams().setSelfValues({
-    mainBodyColumnId: 261
-  }), page, pageSize);
+  const res = await CommunicateContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+    .setSelfValues({
+      mainBodyColumnId: 261
+    })
+  , page, pageSize);
 
   return { 
     page: page,

+ 4 - 3
src/views/communicate/outside.vue

@@ -29,9 +29,10 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await CommunicateContent.getContentList(new GetContentListParams().setSelfValues({
-    mainBodyColumnId: 262
-  }), page, pageSize);
+  const res = await CommunicateContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+    .setMainBodyColumnId(262)
+  , page, pageSize);
 
   return { 
     page: page,

+ 0 - 1
src/views/details/IntangibleDetailView.vue

@@ -99,7 +99,6 @@ async function loadSubList(page: number, pageSize: number, content: any, subList
   } else if (subList == 'ichSitesList') {
     list.forEach((p) => {
       p.bottomTags = [
-        content.levelText,
         content.ichTypeText,
       ];
     })

+ 3 - 1
src/views/fusion/demo-site.vue

@@ -29,7 +29,9 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await DemoSiteContent.getContentList(new GetContentListParams(), page, pageSize);
+  const res = await DemoSiteContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+  , page, pageSize);
 
   return { 
     page: page,

+ 3 - 1
src/views/fusion/products.vue

@@ -29,7 +29,9 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await ProductContent.getContentList(new GetContentListParams(), page, pageSize);
+  const res = await ProductContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+  , page, pageSize);
 
   return { 
     page: page,

+ 4 - 3
src/views/fusion/scenic-spot.vue

@@ -22,9 +22,10 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await ScenicSpotContent.getContentList(new GetContentListParams().setSelfValues({
-    mainBodyColumnId: 260
-  }), page, pageSize);
+  const res = await ScenicSpotContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+    .setMainBodyColumnId(260)
+  , page, pageSize);
 
   return { 
     page: page,

+ 10 - 1
src/views/inheritor/inheritor.vue

@@ -7,12 +7,14 @@
     :pageSize="8"
     :load="loadData"
     :loadDetail="loadDetail"
+    :tagsData="tagsData"
+    :defaultSelectTag="tagsData[0].id"
     detailsPage="/inheritor/intangible-detail"
   />
 </template>
 
 <script setup lang="ts">
-import { GetContentListParams } from '@/api/CommonContent';
+import CommonContent, { GetContentListParams } from '@/api/CommonContent';
 import InheritorContent from '@/api/inheritor/InheritorContent';
 import IndexContent from '@/api/introduction/IndexContent';
 import type { DropDownNames } from '@/components/content/CommonListPage.vue';
@@ -64,9 +66,16 @@ async function loadData(
 }
 
 const dropdownNames = ref<DropDownNames[]>([]);
+const tagsData = ref([
+  { id: 0, name: '全部' },
+]);
 const route = useRoute();
 
 onMounted(async () => {
+  tagsData.value = tagsData.value.concat((await CommonContent.getCategoryList(4)).map((item) => ({
+    id: item.id,
+    name: item.title,
+  })));
   const levels = await IndexContent.getCategoryList(2);
   dropdownNames.value.push({ 
     options: [{

+ 1 - 1
src/views/inheritor/submit.vue

@@ -24,7 +24,7 @@ import CommonContent from '@/api/CommonContent';
 import { RecommendForm } from '@/api/inheritor/SubmitApi';
 import type { IdAsValueDropdownProps } from '@/components/dynamicf/Dropdown/IdAsValueDropdown';
 import type { DataModel } from '@imengyu/js-request-transform';
-import { DynamicForm, type IDynamicFormOptions, IDynamicFormRef } from '@imengyu/vue-dynamic-form';
+import { DynamicForm, type IDynamicFormOptions, type IDynamicFormRef } from '@imengyu/vue-dynamic-form';
 import { Modal, type FormInstance } from 'ant-design-vue';
 import { ref } from 'vue';
 

+ 49 - 0
src/views/introduction/about.vue

@@ -0,0 +1,49 @@
+<template>
+  <!-- 闽南文化生态保护区(厦门市)基本情况 -->
+   <CommonListPage
+    :title="'闽南文化生态保护区(厦门市)基本情况'"
+    :prevPage="{ title: '保护区概况' }"
+    :dropDownNames="[]"
+    :pageSize="8"
+    :rowCount="1"
+    :load="loadData"
+  />
+</template>
+
+<script setup lang="ts">
+import { GetContentListParams } from '@/api/CommonContent';
+import NewsIndexContent from '@/api/news/NewsIndexContent';
+
+async function loadData(
+  page: number, 
+  pageSize: number,
+  selectedTag: number,
+  searchText: string,
+  dropDownValues: number[]
+) {
+
+  const res = await NewsIndexContent.getContentList(
+    new GetContentListParams()
+      .setKeywords(searchText)
+      .setModelId(17)
+      .setMainBodyColumnId([ 256, 283, 284, ])
+    , page, pageSize);
+
+  return { 
+    page: page,
+    total: res.total,
+    data: res.list.map((item, index) => {
+      return {
+        id: item.id,
+        title: item.title,
+        desc: item.desc,
+        image: item.image,
+      };
+    }),
+  }
+}
+</script>
+
+<style>
+</style>
+

+ 3 - 1
src/views/introduction/building.vue

@@ -25,7 +25,9 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await BulidingContent.getContentList(new GetContentListParams(), page, pageSize);
+  const res = await BulidingContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+  , page, pageSize);
 
   return { 
     page: page,

+ 3 - 1
src/views/introduction/character.vue

@@ -26,7 +26,9 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await CharacterContentApi.getContentList(new GetContentListParams(), page, pageSize);
+  const res = await CharacterContentApi.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+  , page, pageSize);
 
   return { 
     page: page,

+ 3 - 1
src/views/introduction/policy.vue

@@ -28,7 +28,9 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await PolicyContent.getContentList(new GetContentListParams(), page, pageSize);
+  const res = await PolicyContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+  , page, pageSize);
 
   return { 
     page: page,

+ 3 - 1
src/views/introduction/sea.vue

@@ -25,7 +25,9 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await SeaContent.getContentList(new GetContentListParams(), page, pageSize);
+  const res = await SeaContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+  , page, pageSize);
 
   return { 
     page: page,

+ 3 - 1
src/views/introduction/victuals.vue

@@ -25,7 +25,9 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await VictualsContent.getContentList(new GetContentListParams(), page, pageSize);
+  const res = await VictualsContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+  , page, pageSize);
 
   return { 
     page: page,

+ 3 - 1
src/views/research/discuss.vue

@@ -29,7 +29,9 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await DiscussContent.getContentList(new GetContentListParams(), page, pageSize);
+  const res = await DiscussContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+  , page, pageSize);
 
   return { 
     page: page,

+ 3 - 1
src/views/research/expert.vue

@@ -29,7 +29,9 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await ExpertContent.getContentList(new GetContentListParams(), page, pageSize);
+  const res = await ExpertContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+  , page, pageSize);
 
   return { 
     page: page,

+ 3 - 1
src/views/research/projects.vue

@@ -29,7 +29,9 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await ProjectContent.getContentList(new GetContentListParams(), page, pageSize);
+  const res = await ProjectContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+  , page, pageSize);
 
   return { 
     page: page,

+ 3 - 1
src/views/research/teams.vue

@@ -29,7 +29,9 @@ async function loadData(
   dropDownValues: number[]
 ) {
 
-  const res = await TeamsContent.getContentList(new GetContentListParams(), page, pageSize);
+  const res = await TeamsContent.getContentList(new GetContentListParams()
+    .setKeywords(searchText)
+  , page, pageSize);
 
   return { 
     page: page,