Explorar el Código

🎨 按要求调整栏目

快乐的梦鱼 hace 1 semana
padre
commit
e6830586c2

+ 0 - 7
src/pages.json

@@ -34,13 +34,6 @@
       }
     },
     {
-      "path": "pages/introduction/character/list",
-      "style": {
-        "navigationBarTitleText": "历史人物列表",
-        "enablePullDownRefresh": true
-      }
-    },
-    {
       "path": "pages/introduction/custom/list",
       "style": {
         "navigationBarTitleText": "闽南民俗",

+ 40 - 46
src/pages/article/common/CommonContent.ts

@@ -53,36 +53,6 @@ export function resolveCommonContentFormData(item: GetContentListItem[]) {
   })
   return item;
 }
-export function resolveCommonContentDateData(item: GetContentListItem[]) {
-  item.forEach(p => {
-    if (!p.desc)
-      p.desc = DateUtils.formatDate(p.publishAt, 'YYYY-MM-dd');
-  })
-  return item;
-}
-export function resolveCommonContentIchData(item: GetContentListItem[]) {
-  item.forEach(it => {
-    it.bottomTags = [
-      it.levelText, 
-      it.ichTypeText, 
-      it.batchText,
-      it.regionText,
-      it.age, 
-    ]
-  })
-  return item;
-}
-export function resolveCommonContentMakeDoubleSpace(item: GetContentListItem[]) {
-  const result: GetContentListItem[] = [];
-  item.forEach((it) => {
-    const cloned = it.clone();
-    cloned.title = '\u00A0';
-    cloned.desc = '\u00A0';
-    result.push(it, cloned);
-  });
-  return result;
-}
-
 export function resolveCommonContentGetPageDetailUrlAuto(item: GetContentListItem) {
   if (item.type === GetContentListParams.TYPE_VIDEO || item.video)
     return '/pages/video/details';
@@ -91,24 +61,48 @@ export function resolveCommonContentGetPageDetailUrlAuto(item: GetContentListIte
   return '/pages/article/details';
 }
 
+const resolveCommonContentData = {
+  'none': (item: GetContentListItem[]) => item,
+  'common': (item: GetContentListItem[]) => {
+    item.forEach(it => {
+      it.desc = `来源:${it.from || '暂无'}\n` 
+        + (it.desc || '');
+      it.bottomTags = it.bottomTags || [];
+      it.bottomTags = (it.bottomTags as string[]).concat(it.keywords?.length ? it.keywords as string[] : [ it.mainBodyColumnName ]);
+    })
+    return item;
+  },
+  'date': (item: GetContentListItem[]) => {
+    item.forEach(p => {
+      if (!p.desc)
+        p.desc = DateUtils.formatDate(p.publishAt, 'YYYY-MM-dd');
+    })
+    return item;
+  },
+  'ich': (item: GetContentListItem[]) => {
+    item.forEach(it => {
+      it.bottomTags = (it.bottomTags as string[] || []).concat([
+        it.levelText as string, 
+        it.ichTypeText as string, 
+        it.batchText as string,
+        it.regionText as string,
+      ]);
+    });
+    return item;
+  },
+  'inheritor': (item: GetContentListItem[]) => {
+    item.forEach(it => {
+      it.bottomTags = (it.bottomTags as string[] || []).concat([
+        it.age as string, 
+      ]);
+    });
+    return item;
+  },
+} as Record<string, (item: GetContentListItem[]) => GetContentListItem[]>
+
 export function resolveCommonContentSolveProps(res: GetContentListItem[], dataSolve: IHomeCommonCategoryListTabListDataSolve[]) {
-  function resolveData(solve: IHomeCommonCategoryListTabListDataSolve) {
-    switch (solve) {
-      case 'none':
-        break;
-      case 'ich':
-        res = resolveCommonContentIchData(res);
-        break;
-      case 'date':
-        res = resolveCommonContentDateData(res);
-        break;
-      case 'common':
-        res = resolveCommonContentFormData(res);
-        break;
-    }
-  }
   for (const solve of dataSolve)
-    resolveData(solve);
+    res = resolveCommonContentData[solve]?.(res) || res;
   return res;
 }
 

+ 10 - 4
src/pages/article/data/CommonCategoryList.vue

@@ -93,15 +93,21 @@ async function loadPageConfig() {
     title: currentCommonCategoryDefine.value?.title || '',
   })
 
-  await waitTimeOut(200);
+  await waitTimeOut(100);
   
   try {
     //特殊处理
-    for (const [_, tab] of Object.entries(tabRenderDefines.value)) {
-      if (tab.type === 'nestCategory')
-        await doLoadDynamicCategoryDataMergeTypeGetColumns(tab.categorys)
+    let hasNestCategory = false;
+    for (const [_, tab] of Object.entries(tabDefines.value)) {
+      if (tab.type === 'nestCategory') {
+        tab.categorys = await doLoadDynamicCategoryDataMergeTypeGetColumns(tab.categorys)
+        hasNestCategory = true;
+      }
     }
 
+    if (hasNestCategory)
+      await waitTimeOut(100);
+
     //加载下拉列表
     const result = [] as DropDownNames[];
     for (const [key, tab] of Object.entries(tabRenderDefines.value)) {

+ 6 - 17
src/pages/article/data/DefaultCategory.json

@@ -192,7 +192,7 @@
                     "type": "serializedApi",
                     "name": "CharacterContent"
                   },
-                  "dataSolve": [ "common", "ich" ],
+                  "dataSolve": [ "inheritor", "ich", "common" ],
                   "detailsPage": "/pages/introduction/character/details",
                   "morePage": ["/pages/article/data/list", { "pageConfigName": "character" }],
                   "type": ""
@@ -340,6 +340,7 @@
                       "modelId": 18
                     }
                   },
+                  "visible": false,
                   "dataSolve": [ "common" ],
                   "detailsPage": "byContent",
                   "type": ""
@@ -447,7 +448,6 @@
                     }
                   },
                   "visible": true,
-                  "dataSolve": [ "common" ],
                   "detailsPage": "/pages/video/details"
                 },
                 {
@@ -546,18 +546,6 @@
                   },
                   "detailsPage": "byContent",
                   "type": "horizontal-large"
-                },
-                {
-                  "text": "闽南语在线课程",
-                  "data": {
-                    "type": "commonContent",
-                    "params": {
-                      "mainBodyColumnId": 257,
-                      "modelId": 5
-                    }
-                  },
-                  "detailsPage": "/pages/video/details",
-                  "type": "horizontal-large"
                 }
               ]
             }
@@ -588,7 +576,7 @@
                 {
                   "key": "level",
                   "text": "级别",
-                  "addAll": "全部地区",
+                  "addAll": "全部级别",
                   "formQueryKey": "level",
                   "data": {
                     "type": "commonContent",
@@ -646,7 +634,7 @@
                 {
                   "key": "ichType",
                   "text": "分类",
-                  "addAll": "全部地区",
+                  "addAll": "全部分类",
                   "defaultValue": 0,
                   "data": {
                     "type": "commonContent",
@@ -656,7 +644,7 @@
                 {
                   "key": "level",
                   "text": "级别",
-                  "addAll": "全部地区",
+                  "addAll": "全部级别",
                   "formQueryKey": "level",
                   "data": {
                     "type": "commonContent",
@@ -832,6 +820,7 @@
                   },
                   "dataSolve": [ "ich" ],
                   "morePage": "/pages/inhert/inheritor/list",
+                  "detailsPage": "/pages/inhert/inheritor/details",
                   "type": "horizontal-large"
                 },
                 {

+ 9 - 7
src/pages/article/data/data-defines/Category.ts

@@ -27,8 +27,10 @@ export type IHomeCommonCategoryCategoryDynamicDataMerg =
 export async function doLoadDynamicCategoryDataMergeTypeGetColumns(
   categorys: IHomeCommonCategoryListTabNestCategoryItemDefine[],
 ) { 
+  const newCategorys = new Array<IHomeCommonCategoryListTabNestCategoryItemDefine>(categorys.length);
   for (let i = categorys.length - 1; i >= 0; i--) {
-    const category = categorys[i];
+    let category = categorys[i];
+    newCategorys[i] = category;
     if (category.type?.startsWith('speicalMergeItem:')) {
       const d = category.type.split(':');
       const op = d[1];
@@ -56,8 +58,8 @@ export async function doLoadDynamicCategoryDataMergeTypeGetColumns(
                 },
               } as IHomeCommonCategoryDynamicDataCommonContent,
             }
-          });
-          categorys.splice(i, 1, ...newArray);
+          });   
+          newCategorys.splice(i, 1, ...newArray);
           break;
         }
         case 'getColumn': {
@@ -65,7 +67,7 @@ export async function doLoadDynamicCategoryDataMergeTypeGetColumns(
           const result = await CommonContent.getModelColumList(
             data.params.modelId,
           )
-          categorys.splice(i, 1, ...result
+          newCategorys.splice(i, 1, ...result
             .filter((item) => item.id === data.params.mainBodyColumnId)
             .map((item) => ({
               ...category,
@@ -78,11 +80,11 @@ export async function doLoadDynamicCategoryDataMergeTypeGetColumns(
                   mainBodyColumnId: item.id,
                 },
               } as IHomeCommonCategoryDynamicDataCommonContent,
-            })));
-          break;
+          })));
+          continue;
         }
       }
     }
   }
-  return categorys;
+  return newCategorys;
 }

+ 0 - 159
src/pages/inhert/artifact/list.vue

@@ -1,159 +0,0 @@
-<template>
-  <view class="d-flex flex-column bg-base">
-
-   <!--  <view class="top-tab bg-base">
-      <Tabs
-        :tabs="tabs" 
-        :currentIndex="tab"
-        class="top-tab"
-        @click="(e: any) => tab = e.index"
-      />
-    </view> -->
-
-    <view class="d-flex flex-col p-2">
-      <SearchBar
-        v-model="searchValue"
-        placeholder="搜索文物" 
-        @search="doSearch"
-      />
-    </view>
-    <view class="d-flex flex-row justify-around p-2 pt-0">
-      <SimpleDropDownPicker v-model="selectedTag" :columns="categoryData.content.value" />
-      <SimpleDropDownPicker v-model="selectedLevel" :columns="levelData.content.value" />
-      <SimpleDropDownPicker v-model="selectedRegion" :columns="regionData.content.value" />
-    </view>
-    <view class="d-flex flex-row flex-wrap justify-between p-2">
-      <view
-        v-for="item in listLoader.list.value"
-        :key="item.id"
-        class="width-1-2"
-      >
-        <Box2LineLargeImageUserShadow 
-          classNames="ml-2 mb-3"
-          titleColor="title-text"
-          :image="item.image"
-          :title="item.name"
-          @click="goDetails(item.id)"
-        />
-      </view>
-    </view>
-    <SimplePageListLoader :loader="listLoader" />
-  </view>
-</template>
-
-<script setup lang="ts">
-import { ref, watch } from 'vue';
-import { useSimplePageListLoader } from '@/common/composeabe/SimplePageListLoader';
-import { useSimpleDataLoader } from '@/common/composeabe/SimpleDataLoader';
-import { navTo } from '@/components/utils/PageAction';
-import CommonContent, { GetContentListParams } from '@/api/CommonContent';
-import MoveableContent from '@/api/inheritor/MoveableContent';
-import UnmoveableContent from '@/api/inheritor/UnmoveableContent';
-import SimplePageListLoader from '@/common/components/SimplePageListLoader.vue';
-import Box2LineLargeImageUserShadow from '@/pages/parts/Box2LineLargeImageUserShadow.vue';
-import SimpleDropDownPicker from '@/common/components/SimpleDropDownPicker.vue';
-import AppCofig from '@/common/config/AppCofig';
-import Tabs from '@/components/nav/Tabs.vue';
-import SearchBar from '@/components/form/SearchBar.vue';
-import { useLoadQuerys } from '@/common/composeabe/LoadQuerys';
-
-const categoryData = useSimpleDataLoader(async () => 
-  [{
-    id: 0, 
-    name: '全部分类'
-  }].concat((await CommonContent.getCategoryList(3)).map((item) => ({
-    id: item.id,
-    name: item.title,
-  })))
-, true);
-const levelData = useSimpleDataLoader(async () => 
-  [{
-    id: 0, 
-    name: '全部级别'
-  }].concat(
-    (await CommonContent.getCategoryList(2)).map((item) => ({
-      id: item.id,
-      name: item.title,
-    })).filter((item) => !item.name.includes('非'))
-  )
-, true);
-const regionData = useSimpleDataLoader(async () => 
-  [{
-    id: 0, 
-    name: '全部区域'
-  }].concat((await CommonContent.getCategoryList(1)).map((item) => ({
-    id: item.id,
-    name: item.title,
-  })))
-, true);
-const selectedTag = ref(0);
-const selectedLevel = ref(0);
-const selectedRegion = ref(0);
-const searchValue = ref('');
-const tab = ref(0)
-const tabs = [
-  {
-    text: '不可移动文物'
-  },
-  {
-    text: '可移动文物'
-  },
-];
-const listLoader = useSimplePageListLoader<{
-  id: number,
-  image: string,
-  name: string
-}>(8, async (page, pageSize) => {
-  let api;
-  switch (tab.value) {
-    default:
-    case 0: api = UnmoveableContent; break; 
-    case 1: api = MoveableContent; break; 
-  }
-  const res = await api.getContentList(new GetContentListParams().setSelfValues({
-    crType: selectedTag.value == 0 ? undefined: selectedTag.value,
-    level: selectedLevel.value == 0 ? undefined: selectedLevel.value,
-    region: selectedRegion.value == 0 ? undefined: selectedRegion.value,
-    keywords: searchValue.value,
-  }), page, pageSize);
-  return { list: res.list.map((item) => {
-    return {
-      id: item.id,
-      image: item.thumbnail || item.image || AppCofig.defaultImage,
-      name: item.title,
-    }
-  }), total: res.total }
-});
-
-useLoadQuerys({
-  region: 0,
-  level: 0,
-}, (querys) => {
-  if (querys.level)
-    selectedLevel.value = querys.level;
-  if (querys.region)
-    selectedRegion.value = querys.region;
-  setTimeout(doSearch, 1000);
-});
-
-watch(selectedLevel, () => {
-    console.log('watchselectedLevel.value', selectedLevel.value);
-  listLoader.loadData(undefined, true);
-});
-watch(selectedRegion, () => {
-  listLoader.loadData(undefined, true);
-});
-watch(selectedTag, () => {
-  listLoader.loadData(undefined, true);
-});
-watch(tab, () => {
-  listLoader.loadData(undefined, true);
-}, { immediate: true });
-
-function doSearch() {
-  listLoader.loadData(undefined, true);
-}
-function goDetails(id: number) {
-  navTo('details', { id })
-}
-</script>

+ 5 - 3
src/pages/inhert/inheritor/details.vue

@@ -63,8 +63,10 @@
     <template #title="{ content }">
       <view class="d-flex flex-col">
         <view class="d-flex flex-row justify-between">
-          <view class="d-flex flex-col">
-            <text :class="'size-lll font-bold color-text-content'+(content.titleBox?' border-all-text':'')">{{ content.title }}</text>
+          <view class="d-flex flex-col align-start">
+            <view>
+              <text :class="'d-inline size-lll font-bold color-text-content'+(content.titleBox?' border-all-text':'')">{{ content.title }}</text>
+            </view>
             <text class="size-base color-text-content-second mt-2">{{ content.birthplace || content.desc }}</text>
             <RoundTags
               :tags="content.tags"
@@ -153,7 +155,7 @@ async function load(id: number, tabsArray: DetailTabPageTabsArray) {
   tabsArray.getTabById(TAB_ID_PRIZE)!.visible = Boolean(d.prize);
   tabsArray.getTabById(TAB_ID_ASSOCIATION_ME)!.visible = Boolean(d.associationMeList && d.associationMeList.length > 0);
   tabsArray.getTabById(TAB_ID_ICH_SITES)!.visible = Boolean(d.ichSitesList && (d.ichSitesList as any[]).length > 0);
-  d.titleBox = Boolean(d.deathBirth);
+  d.titleBox = Boolean(d.modelId === InheritorContent.modelId && d.deathBirth);
   return d;
 }
 async function loadSubList(page: number, pageSize: number, content: any, subList: string) {

+ 0 - 7
src/pages/inhert/intangible/list.vue

@@ -1,7 +0,0 @@
-<template>
-  <CommonCategoryList pageConfigName="intangible" />
-</template>
-
-<script setup lang="ts">
-import CommonCategoryList from '@/pages/article/data/CommonCategoryList.vue';
-</script>

+ 0 - 77
src/pages/inhert/seminar/list.vue

@@ -1,77 +0,0 @@
-<template>
-  <CommonListPage 
-    title="非遗传习所"
-    itemType="article-character"
-    detailsPage="/pages/inhert/seminar/details"
-    showTotal
-    :dropDownNames="dropdownNames"
-    :load="loadData" 
-  />
-</template>
-
-<script setup lang="ts">
-import CommonContent, { GetContentListParams } from '@/api/CommonContent';
-import SeminarContent from '@/api/inheritor/SeminarContent';
-import CommonListPage, { type DropDownNames } from '@/pages/article/common/CommonListPage.vue';
-import { onLoad } from '@dcloudio/uni-app';
-import { onMounted, ref } from 'vue';
-
-const dropdownNames = ref<DropDownNames[]>([]);
-
-async function loadData(
-  page: number, 
-  pageSize: number,
-  searchText: string,
-  dropDownValues: number[]
-) {
-  const res = (await SeminarContent.getContentList(new GetContentListParams().setSelfValues({
-    ichType: dropDownValues[0] == 0 ? undefined: dropDownValues[0],
-    level: dropDownValues[1] == 0 ? undefined: dropDownValues[1],
-    region: dropDownValues[2] == 0 ? undefined: dropDownValues[2],
-    keywords: searchText,
-  }), page, pageSize));
-  res.list.forEach((p) => {
-    p.titleBox = Boolean(p.deathBirth);
-    p.desc = p.ichName as string;
-    p.bottomTags = [
-      p.levelText, 
-      p.nation,
-    ];
-  })
-  return res;
-}
-
-onLoad(async (querys) => {
-  dropdownNames.value.push({ 
-    options: [{
-      id: 0, 
-      name: '全部类别'
-    }].concat((await CommonContent.getCategoryList(4)).map((item) => ({
-      id: item.id,
-      name: item.title,
-    }))),
-    defaultSelectedValue: 0,
-  });
-  const levels = await CommonContent.getCategoryList(2);
-  dropdownNames.value.push({ 
-    options: [{
-      id: 0, 
-      name: '全部级别'
-    }].concat(levels.map((item) => ({
-      id: item.id,
-      name: item.title,
-    }))),
-    defaultSelectedValue: querys?.level ?? 0,
-  });
-  dropdownNames.value.push({  
-    options: [{
-      id: 0, 
-      name: '全部区域'
-    }].concat((await CommonContent.getCategoryList(1)).map((item) => ({
-      id: item.id,
-      name: item.title,
-    }))),
-    defaultSelectedValue: querys?.region ?? 0,
-  });
-})
-</script>

+ 5 - 3
src/pages/introduction/character/details.vue

@@ -33,6 +33,10 @@
         small
         :descItems="[
           {
+            label: '年代',
+            value: content.age,
+          },
+          {
             label: '民族',
             value: content.nation,
           },
@@ -66,15 +70,13 @@
   </DetailTabPage>
 </template>
 <script setup lang="ts">
-import type { TabControlItem } from "@/common/composeabe/TabControl";
-import type { Ref } from "vue";
 import RoundTags from "@/pages/parts/RoundTags.vue";
 import InheritorContent from "@/api/inheritor/InheritorContent";
 import IntroBlock from "@/pages/article/common/IntroBlock.vue";
 import DetailTabPage from "@/pages/article/common/DetailTabPage.vue";
 import Image from "@/components/basic/Image.vue";
 
-async function load(id: number, tabsArray: Ref<TabControlItem[]>) {
+async function load(id: number) {
   const d = await InheritorContent.getContentDetail(id);
   return d;
 }

+ 0 - 34
src/pages/introduction/character/list.vue

@@ -1,34 +0,0 @@
-<template>
-  <!-- 文化概况 - 历史人物 -->
-   <CommonListPage
-    :title="'历史人物'"
-    :dropDownNames="[]"
-    itemType="article-character"
-    showTotal
-    detailsPage="/pages/introduction/character/details"
-    :load="loadData"
-  />
-</template>
-
-<script setup lang="ts">
-import { GetContentListParams } from '@/api/CommonContent';
-import CharacterContentApi from '@/api/introduction/CharacterContent';
-import CommonListPage from '@/pages/article/common/CommonListPage.vue';
-
-async function loadData(
-  page: number, 
-  pageSize: number,
-  searchText: string,
-  dropDownValues: number[]
-) {
-  return (await CharacterContentApi
-    .getContentList(new GetContentListParams().setSelfValues({
-      keywords: searchText,
-    }), page, pageSize)
-  );
-}
-</script>
-
-<style>
-</style>
-