Prechádzať zdrojové kódy

📦 按要求显示村社等级文字和等级说明页面

快乐的梦鱼 1 mesiac pred
rodič
commit
9fdbefa67b

+ 194 - 7
src/api/light/LightVillageApi.ts

@@ -9,16 +9,46 @@ export class VillageListItem extends DataModel<VillageListItem> {
     this._convertTable = {
       id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
       isLight: { clientSide: 'boolean' },
+      region: { clientSide: 'number', serverSide: 'number' },
       rank: { clientSide: 'number', serverSide: 'number' },
       volunteerCount: { clientSide: 'number', serverSide: 'number' },
       followCount: { clientSide: 'number', serverSide: 'number' },
       collectCount: { clientSide: 'number', serverSide: 'number' },
+      villageType: { clientSide: 'number', serverSide: 'number' },
+      altitude: { clientSide: 'number', serverSide: 'number' },
+      longitude: { clientSide: 'number', serverSide: 'number' },
+      latitude: { clientSide: 'number', serverSide: 'number' },
+      age: { clientSide: 'number', serverSide: 'number' },
+      area: { clientSide: 'number', serverSide: 'number' },
+      villageArea: { clientSide: 'number', serverSide: 'number' },
+      traditionalBuildings: { clientSide: 'number', serverSide: 'number' },
+      ichLevel: { clientSide: 'number', serverSide: 'number' },
+      historyLevel: { clientSide: 'number', serverSide: 'number' },
+      touristLevel: { clientSide: 'number', serverSide: 'number' },
+      isFeaturedVillage: { clientSide: 'number', serverSide: 'number' },
+      registeredPopulationYear: { clientSide: 'number', serverSide: 'number' },
+      registeredPopulation: { clientSide: 'number', serverSide: 'number' },
+      permanentPopulationYear: { clientSide: 'number', serverSide: 'number' },
+      permanentPopulation: { clientSide: 'number', serverSide: 'number' },
+      personalAnnualIncomeYear: { clientSide: 'number', serverSide: 'number' },
+      villageAnnualIncomeYear: { clientSide: 'number', serverSide: 'number' },
+      points: { clientSide: 'number', serverSide: 'number' },
       light: { clientSide: 'number', serverSide: 'number' },
       lightTotal: { clientSide: 'number', serverSide: 'number' },
       fruitOutput: { clientSide: 'number', serverSide: 'number' },
       fruitRemain: { clientSide: 'number', serverSide: 'number' },
       fruitToday: { clientSide: 'number', serverSide: 'number' },
       level: { clientSide: 'number', serverSide: 'number' },
+      weight: { clientSide: 'number', serverSide: 'number' },
+      vipLevel: { clientSide: 'number', serverSide: 'number' },
+      overviewId: { clientSide: 'number', serverSide: 'number' },
+      myOverviewId: { clientSide: 'number', serverSide: 'number' },
+      treeLight: { clientSide: 'number', serverSide: 'number' },
+      nextTreeLight: { clientSide: 'number', serverSide: 'number' },
+      nextTreeLevel: { clientSide: 'number', serverSide: 'number' },
+      imageLimit: { clientSide: 'number', serverSide: 'number' },
+      storageLimit: { clientSide: 'number', serverSide: 'number' },
+      managerLimit: { clientSide: 'number', serverSide: 'number' },
     }
     this._convertKeyType = (key, direction) => {
       if (key.endsWith('At'))
@@ -47,37 +77,186 @@ export class VillageListItem extends DataModel<VillageListItem> {
   }
 
   id !: number;
+  /** 地区 */
+  region = 0;
+  /** 省份/省级行政区 */
   province = '' as string|null;
+  /** 城市/地级行政区 */
   city = '' as string|null;
+  /** 区县/县级行政区 */
   district = '' as string|null;
+  /** 乡镇/乡级行政区 */
   township = '' as string|null;
+  /** 拼接地址(客户端计算) */
   address = '';
+  /** 村落编码 */
+  code = '' as string|null;
+  /** 是否点亮 */
   isLight = false;
   isLightText = '';
   lightValue = Math.random();
   villageVolunteerId = null as number|null;
   villageId !:number;
   claimReason = '';
+  /** 状态: 0=完善中, 1=已归档 */
   status = '';
   statusText = '';
   createdAt = null as Date|null;
   updatedAt = null as Date|null;
   deleteAt = null as Date|null;
+  /** 录入时间 */
+  enterAt = null as Date|null;
+  /** 封面图 */
   image = '';
   thumbnail = '';
+  /** 村落形象照片 */
   images = [] as string[];
+  /** 村落名称 */
   name = '';
-  title = '';rank = 0;
+  title = '';
+  /** 排名 */
+  rank = 0;
+  /** 乡源人数 */
   volunteerCount = 0;
+  /** 关注人数 */
   followCount = 0;
+  /** 采集投稿数 */
   collectCount = 0;
+  /** 积分 */
+  points = 0;
+  /** 可用乡源光 */
   light = 0;
+  /** 累计乡源光 */
   lightTotal = 0;
+  /** 可产果数 */
   fruitOutput = 0;
+  /** 可拾取果数 */
   fruitRemain = 0;
+  /** 今日产果数 */
   fruitToday = 0;
+  /** 等级 */
   level = 0;
+  /** 权重 */
+  weight = 0;
   volunteerName = '';
+  /** 经度 */
+  longitude = 0;
+  /** 纬度 */
+  latitude = 0;
+  /** 村落类型 */
+  villageType = 0;
+  /** 海拔(米) */
+  altitude = null as number|null;
+  /** 地形地貌特征(多选) */
+  landforms = '' as string|null;
+  /** 村落形成年代 */
+  age = null as number|null;
+  /** 村域面积(平方公里) */
+  area = null as number|null;
+  /** 村庄占地面积(亩) */
+  villageArea = null as number|null;
+  /** 传统建筑数量 */
+  traditionalBuildings = null as number|null;
+  /** 非遗最高级别 */
+  ichLevel = null as number|null;
+  /** 列入历史文化名村级别 */
+  historyLevel = null as number|null;
+  /** 列入特色景观旅游名村级别 */
+  touristLevel = null as number|null;
+  /** 列入少数民族特色村寨试点示范: 0=否, 1=是 */
+  isFeaturedVillage = 0;
+  /** 其他认定级别 */
+  other = '' as string|null;
+  /** 主要民族 */
+  nationlity = '' as string|null;
+  /** 户籍人口年份 */
+  registeredPopulationYear = null as number|null;
+  /** 户籍人口 */
+  registeredPopulation = null as number|null;
+  /** 常住人口年份 */
+  permanentPopulationYear = null as number|null;
+  /** 常住人口 */
+  permanentPopulation = null as number|null;
+  /** 人均年收入年份 */
+  personalAnnualIncomeYear = null as number|null;
+  /** 人均年收入(万元) */
+  personalAnnualIncome = '' as string|null;
+  /** 集体年收入年份 */
+  villageAnnualIncomeYear = null as number|null;
+  /** 集体年收入(万元) */
+  villageAnnualIncome = '' as string|null;
+  /** 突出价值 */
+  prominent = '' as string|null;
+  /** 主要产业_农业 */
+  agriculture = '' as string|null;
+  /** 主要产业_其他农业 */
+  otherAgriculture = '' as string|null;
+  /** 主要产业_林业 */
+  forestry = '' as string|null;
+  /** 主要产业_畜牧业 */
+  animal = '' as string|null;
+  /** 主要产业_渔业 */
+  fishing = '' as string|null;
+  /** 主要产业_制造业(含手工) */
+  manufacturing = '' as string|null;
+  /** 主要产业_建筑业 */
+  construction = '' as string|null;
+  /** 主要产业_批发和零售业 */
+  retail = '' as string|null;
+  /** 主要产业_服务业 */
+  service = '' as string|null;
+  /** 主要产业_其他服务业 */
+  otherService = '' as string|null;
+  /** 主要产业_其他 */
+  otherIndustries = '' as string|null;
+  /** 来源 */
+  source = '' as string|null;
+  /** 图片说明 */
+  imageDesc = '' as string|null;
+  /** 组图描述 */
+  imagesDesc = [] as string[];
+  /** 音频 */
+  audio = '' as string|null;
+  /** 视频 */
+  video = '' as string|null;
+  /** 数字档案 */
+  archives = '' as string|null;
+  /** 其他附件 */
+  annex = '' as string|null;
+  /** 标志 */
+  flag = '';
+  /** 关键字 */
+  keywords = '';
+  /** 联系人 */
+  contact = '' as string|null;
+  /** 联系电话 */
+  mobile = '' as string|null;
+  /** 跳转链接 */
+  url = '' as string|null;
+  /** VIP等级 */
+  vipLevel = 0;
+  /** 概况最新ID */
+  overviewId = null as number|null;
+  /** 当前志愿者概况ID */
+  myOverviewId = null as number|null;
+  /** 当前等级树名称 */
+  treeName = '';
+  /** 当前等级树图片 */
+  treeImage = '';
+  /** 当前等级所需乡源光 */
+  treeLight = 0;
+  /** 下一级等级树名称 */
+  nextTreeName = '';
+  /** 下一级所需乡源光 */
+  nextTreeLight = 0;
+  /** 下一级 */
+  nextTreeLevel = 0;
+  /** 图片上传最大数量限制 */
+  imageLimit = 0;
+  /** 存储内存限制(MB) */
+  storageLimit = 0;
+  /** 可设置管理人员数量 */
+  managerLimit = 0;
 }
 
 export class PostMessage extends DataModel<PostMessage> {
@@ -172,16 +351,24 @@ export class LightVillageApi extends AppServerRequestModule<DataModel> {
     return res.requireData();
   }
 
-  async getVillageList(level?: number, region?: number, status?: number, page?: number, pageSize?: number) {
+  async getVillageList(data: {
+    level?: number, 
+    region?: number, 
+    status?: number, 
+    page?: number, 
+    pageSize?: number,
+    keyword?: string,
+  }) {
     const res = await this.get<{
       data: any[],
       total: number,
     }>('/village/village/list', '乡源村落列表', {
-      history_level: level,
-      status,
-      region: region,
-      page: page,
-      pageSize: pageSize,
+      history_level: data.level,
+      status: data.status,
+      region: data.region,
+      page: data.page,
+      pageSize: data.pageSize,
+      keyword: data.keyword,
     });
     return {
       total: res.requireData().total,

+ 2 - 1
src/pages/article/details.vue

@@ -55,7 +55,7 @@
           </FlexCol>
           
           <!-- 推荐 -->
-          <FlexCol v-if="recommendListLoader.content.value?.length" :padding="20">
+          <FlexCol v-if="recommendListLoader.content.value?.length && querys.showRecommend" :padding="20">
             <H4>相关推荐</H4>
             <Box2LineImageRightShadow
               titleColor="black"
@@ -145,6 +145,7 @@ const { querys } = useLoadQuerys({
   mainBodyColumnId: 0,
   mainBodyId: 0,
   modelId: 0,
+  showRecommend: true,
 }, (t) => loader.load(false, t));
 
 function getPageShareData() {

+ 4 - 4
src/pages/home/village/dialogs/UpgradeDialog.vue

@@ -44,9 +44,9 @@
       </FlexCol>
 
       <BoxMid :padding="24" direction="column" center>
-        <WxButton openType="contact">
-          <Text text="不知道怎么选择?问问客服" fontConfig="lightImportantTitle" />
-        </WxButton>
+        <Touchable @click="navTo('/pages/article/details', { id: 7021, modelId: 18, showRecommend: false })">
+          <Text text="不知道怎么选择?" fontConfig="lightImportantTitle" />
+        </Touchable>
       </BoxMid>
     </FlexCol>
   </CommonDialog>
@@ -62,7 +62,7 @@ import FlexCol from '@/components/layout/FlexCol.vue';
 import FlexRow from '@/components/layout/FlexRow.vue';
 import TreeApi, { type UpgradePackageItem } from '@/api/light/TreeApi';
 import Image from '@/components/basic/Image.vue';
-import WxButton from '@/components/basic/WxButton.vue';
+import Touchable from '@/components/feedback/Touchable.vue';
 import Badge from '@/components/display/Badge.vue';
 import BoxMid from '@/common/components/box/BoxMid.vue';
 

+ 18 - 15
src/pages/home/village/introd/card.vue

@@ -17,7 +17,6 @@
       <FlexRow justify="space-between" width="100%">
         <FlexCol gap="gap.md">
           <Text :text="villageInfoLoader.content.value?.title" fontConfig="primaryTitle" />
-          <Text :text="villageInfoLoader.content.value?.address" fontConfig="contentText" />
         </FlexCol>
         <FlexRow center gap="gap.lg">
           <Button 
@@ -44,11 +43,14 @@
         padding="space.md" 
         justify="space-between" 
       >
-        <FlexCol gap="gap.md"> 
-          <Text :text="`${villageInfoLoader.content.value?.applyCount || 0} 个乡源果可申请`" fontConfig="secondText" />  
-          <Text :text="`存储空间内存:${villageInfoLoader.content.value?.sizeText || 0}`" fontConfig="secondText" />
-        </FlexCol>
-        <FlexCol gap="gap.md">
+        <FlexRow align="center">
+          <FlexCol gap="gap.md"> 
+            <Text :text="`${villageInfoLoader.content.value?.levelText || '默认级别'}`" fontConfig="secondText" />  
+            <Text :text="`存储空间内存:${villageInfoLoader.content.value?.sizeText || 0}`" fontConfig="secondText" />
+          </FlexCol>
+        </FlexRow>
+        <FlexRow align="center" gap="gap.md">
+          <IconButton icon="help-filling" @click="navTo('/pages/article/details', { id: 7021, modelId: 18, showRecommend: false })" />
           <Button 
             icon="https://xy.wenlvti.net/app_static/images/village/IconUser.png" 
             radius="radius.lgr" 
@@ -58,7 +60,7 @@
           >
             升级村社
           </Button>
-        </FlexCol>
+        </FlexRow>
       </FlexRow>
       
       <!-- 图片 -->
@@ -90,7 +92,7 @@
         </FlexRow>
         <FlexRow center gap="gap.lg" flexBasis="50%">
           <Text text="村社等级" fontConfig="contentText" />
-          <Text :text="villageInfoLoader.content.value?.levelText" fontConfig="primaryTitle" />
+          <Text :text="`${villageInfoLoader.content.value?.level}级`" fontConfig="primaryTitle" />
         </FlexRow>
       </FlexRow>
 
@@ -265,6 +267,7 @@ import JoinDialog from '../dialogs/JoinDialog.vue';
 import VillageGallery from '../components/VillageGallery.vue';
 import WxButton from '@/components/basic/WxButton.vue';
 import Height from '@/components/layout/space/Height.vue';
+import IconButton from '@/components/basic/IconButton.vue';
 
 const authStore = useAuthStore();
 const { getIsVolunteer } = useUserTools();
@@ -282,16 +285,16 @@ const villageInfoLoader = useSimpleDataLoader(async () => {
     title: village?.name || '',
     desc: village?.desc || '',
     address: village?.address,
-    applyCount: village?.applyCount || 0,
     sizeText: village?.sizeText || 0,
-    levelText: village?.level.toString() || '',
+    level: village?.level.toString() || '',
+    levelText: village?.levelText || '',
     rankText: village?.rank.toString() || '',
-    light: village?.light as number || 0,
-    memberCount: village?.volunteerCount as number || 0,
-    followerCount: village?.followCount as number || 0,
+    light: village?.light || 0,
+    memberCount: village?.volunteerCount || 0,
+    followerCount: village?.followCount || 0,
     images: village?.images || [],
-    longitude: village?.longitude as number || 0,
-    latitude: village?.latitude as number || 0,
+    longitude: village?.longitude || 0,
+    latitude: village?.latitude || 0,
   };
 });
 

+ 2 - 8
src/pages/home/village/upgrade/select.vue

@@ -29,7 +29,7 @@
         >
           <FlexCol width="74%">
             <Text text="在线支付" fontConfig="lightImportantTitle" :fontSize="42" />
-            <Text text="使用微信线支付方式,方便快捷,立即生效" fontConfig="lightGoldTitle" :fontSize="30" />
+            <Text text="推荐使用微信线支付方式,方便快捷,立即生效" fontConfig="lightGoldTitle" :fontSize="30" />
           </FlexCol>
           <FrameButton primary text="选择" @click="handleDirectPay" />
         </BoxMid>
@@ -46,12 +46,6 @@
           <FrameButton primary text="选择" @click="handlePublicPay" />
         </BoxMid>
       </FlexCol>
-
-      <BoxMid :padding="24" direction="column" center>
-        <WxButton openType="contact">
-          <Text text="不知道怎么选择?问问客服" fontConfig="lightImportantTitle" />
-        </WxButton>
-      </BoxMid>
     </FlexCol>
 
     <DirectPayDialog
@@ -71,13 +65,13 @@ import BoxMid from '@/common/components/box/BoxMid.vue';
 import CommonTopBanner from '@/common/components/CommonTopBanner.vue';
 import FrameButton from '@/common/components/FrameButton.vue';
 import Text from '@/components/basic/Text.vue';
-import WxButton from '@/components/basic/WxButton.vue';
 import FlexCol from '@/components/layout/FlexCol.vue';
 import FlexRow from '@/components/layout/FlexRow.vue';
 import Button from '@/components/basic/Button.vue';
 import Image from '@/components/basic/Image.vue';
 import DirectPayDialog from './dialogs/DirectPayDialog.vue';
 import TreeApi from '@/api/light/TreeApi';
+import Touchable from '@/components/feedback/Touchable.vue';
 
 const { requireLoginAsync } = useRequireLogin();