2 Комити 738c9468bb ... 73e1bb0ec9

Аутор SHA1 Порука Датум
  快乐的梦鱼 73e1bb0ec9 🎨 修改简化优化表单必填设置 пре 3 дана
  快乐的梦鱼 8b041c655a 📦 增加村落关注页面 пре 3 дана

+ 1 - 0
src/api/auth/UserApi.ts

@@ -70,6 +70,7 @@ export class UserInfo extends DataModel<UserInfo> {
   username = '';
   regionId = 0;
   openId = '';
+  fruit = 0;
   isReviewer = false;
 }
 

+ 9 - 1
src/pages.json

@@ -94,7 +94,15 @@
       }
     },
     {
-      "path": "pages/home/village/follows",
+      "path": "pages/home/village/follow/list",
+      "style": {
+        "navigationBarTitleText": "村社关注",
+        "navigationStyle": "custom",
+        "enablePullDownRefresh": true
+      }
+    },
+    {
+      "path": "pages/home/village/follow/my-follows",
       "style": {
         "navigationBarTitleText": "我的关注",
         "navigationStyle": "custom",

+ 1 - 1
src/pages/dig/admin/data/volunteer.ts

@@ -142,7 +142,7 @@ export function getVolunteerForm(options: {
             additionalProps: { 
               placeholder: '请输入个人介绍',
               showWordLimit: true,
-              maxLength: 5000,
+              maxLength: 500,
             } as FieldProps,
           },
           ...(options.canSetCatalog ? [{ 

+ 0 - 58
src/pages/dig/forms/data/building.ts

@@ -38,10 +38,6 @@ export function villageInfoBuildingForm(title: string) : SingleForm  {
             additionalProps: {
               placeholder: '请输入建筑编码',
             },
-            rules:  [{
-              required: true,
-              message: '请输入建筑编码',
-            }] 
           },
           {
             label: '产权归属', 
@@ -57,10 +53,6 @@ export function villageInfoBuildingForm(title: string) : SingleForm  {
               ,
             } as PickerIdFieldProps,
             formProps: { showRightArrow: true } as FieldProps,
-            rules: [{
-              required: true,
-              message: '请选择产权归属',
-            }],
           },
           {
             label: '位置', 
@@ -70,10 +62,6 @@ export function villageInfoBuildingForm(title: string) : SingleForm  {
             additionalProps: {
               placeholder: '请输入位置',
             },
-            rules:  [{
-              required: true,
-              message: '请输入位置',
-            }] 
           },
           {
             label: '建筑类型', 
@@ -124,10 +112,6 @@ export function villageInfoBuildingForm(title: string) : SingleForm  {
               maxLength: 5000,
               showWordLimit: true, 
             },
-            rules:  [{
-              required: true,
-              message: '请输入建筑中的故事',
-            }] 
           },
           {
             label: '功能特点', 
@@ -154,8 +138,6 @@ export function villageInfoBuildingForm(title: string) : SingleForm  {
         type: 'flat-group',
         childrenColProps: { span: 24 },
         children: [
-
-
           {
             label: '保护级别', 
             name: 'protectionLevel',
@@ -170,10 +152,6 @@ export function villageInfoBuildingForm(title: string) : SingleForm  {
               ,
             } as PickerIdFieldProps,
             formProps: { showRightArrow: true } as FieldProps,
-            rules: [{
-              required: true,
-              message: '请选择建筑类型',
-            }],
           },
           {
             label: '其他保护级别', 
@@ -195,10 +173,6 @@ export function villageInfoBuildingForm(title: string) : SingleForm  {
             additionalProps: {
               placeholder: '请输入总占地面积',
             },
-            rules:  [{
-              required: true,
-              message: '请输入总占地面积',
-            }] 
           },
           {
             label: '建筑面积', 
@@ -208,10 +182,6 @@ export function villageInfoBuildingForm(title: string) : SingleForm  {
             additionalProps: {
               placeholder: '请输入建筑面积',
             },
-            rules:  [{
-              required: true,
-              message: '请输入建筑面积',
-            }] 
           },
           {
             label: '建筑层数', 
@@ -222,10 +192,6 @@ export function villageInfoBuildingForm(title: string) : SingleForm  {
               min: 0,
               max: 1000,
             },
-            rules:  [{
-              required: true,
-              message: '请输入建筑层数',
-            }] 
           },
           {
             label: '所含建筑幢数', 
@@ -236,10 +202,6 @@ export function villageInfoBuildingForm(title: string) : SingleForm  {
               min: 0,
               max: 1000,
             },
-            rules:  [{
-              required: true,
-              message: '请输入所含建筑幢数',
-            }] 
           },
           {
             label: '始建时间(年)', 
@@ -250,10 +212,6 @@ export function villageInfoBuildingForm(title: string) : SingleForm  {
               min: -50000,
               max: 2000,
             },
-            rules:  [{
-              required: true,
-              message: '请输入始建时间',
-            }] 
           },
           {
             label: '承重结构(多选)', 
@@ -270,10 +228,6 @@ export function villageInfoBuildingForm(title: string) : SingleForm  {
               ,
             } as CheckBoxListProps,
             defaultValue: [],
-            rules: [{
-              required: true,
-              message: '请选择类型',
-            }],
           },
           {
             label: '其他承重结构类型', 
@@ -521,10 +475,6 @@ export const villageInfoDistributionForm : SingleForm = [CommonInfoModel, (r) =>
         min: 0,
         max: 100,
       },
-      rules:  [{
-        required: true,
-        message: '请输入建筑数量',
-      }] 
     }, 
     {
       label: '分布图', 
@@ -539,10 +489,6 @@ export const villageInfoDistributionForm : SingleForm = [CommonInfoModel, (r) =>
         maxFileSize: 1024 * 1024 * 20,
         single: true,
       } as UploaderFieldProps,
-      rules:  [{
-        required: true,
-        message: '请上传分布图',
-      }] 
     }, 
     {
       label: '营造智慧', 
@@ -554,10 +500,6 @@ export const villageInfoDistributionForm : SingleForm = [CommonInfoModel, (r) =>
         maxLength: 5000,
         showWordLimit: true, 
       },
-      rules:  [{
-        required: true,
-        message: '请输入营造智慧',
-      }] 
     }, 
     ...villageCommonContent(r, {
       title: '建筑分布',

+ 0 - 12
src/pages/dig/forms/data/element.ts

@@ -190,10 +190,6 @@ export const vilElementForm : SingleForm = [CommonInfoModel, (r) => ({
           type: 'select-address', 
           defaultValue: '',
           additionalProps: {},
-          rules:  [{
-            required: true,
-            message: '请输入地址',
-          }] 
         },
         {
           label: '方位', 
@@ -230,10 +226,6 @@ export const vilElementForm : SingleForm = [CommonInfoModel, (r) => ({
                 labelPosition: 'left',
                 showBottomBorder: false,
               },
-              rules:  [{
-                required: true,
-                message: '请输入X',
-              }] 
             },
             { 
               label: '', 
@@ -249,10 +241,6 @@ export const vilElementForm : SingleForm = [CommonInfoModel, (r) => ({
                 labelPosition: 'left',
                 showBottomBorder: false,
               },
-              rules:  [{
-                required: true,
-                message: '请输入Y',
-              }] 
             },
           ]
         },

+ 0 - 16
src/pages/dig/forms/data/environment.ts

@@ -42,10 +42,6 @@ export const villageInfoEnvironmentForm : SingleForm= [CommonInfoModel, (r) => (
         maxLength: 5000,
         showWordLimit: true, 
       },
-      rules:  [{
-        required: true,
-        message: '请输入选址',
-      }] 
     }, 
     { 
       label: '格局', 
@@ -57,10 +53,6 @@ export const villageInfoEnvironmentForm : SingleForm= [CommonInfoModel, (r) => (
         maxLength: 5000,
         showWordLimit: true, 
       },
-      rules:  [{
-        required: true,
-        message: '请输入格局',
-      }] 
     }, 
     { 
       label: '整体风貌', 
@@ -72,10 +64,6 @@ export const villageInfoEnvironmentForm : SingleForm= [CommonInfoModel, (r) => (
         maxLength: 5000,
         showWordLimit: true, 
       },
-      rules:  [{
-        required: true,
-        message: '请输入整体风貌',
-      }] 
     }, 
     { 
       label: '农业遗产', 
@@ -87,10 +75,6 @@ export const villageInfoEnvironmentForm : SingleForm= [CommonInfoModel, (r) => (
         maxLength: 5000,
         showWordLimit: true, 
       },
-      rules:  [{
-        required: true,
-        message: '请输入农业遗产',
-      }] 
     }, 
     ...villageCommonContent(r, {
       title: '环境格局',

+ 1 - 37
src/pages/dig/forms/data/ich.ts

@@ -16,7 +16,7 @@ export const ichFormItems : SingleForm = [CommonInfoModel, (m) => ({
       },
       children: [
         {
-          label: '名称及管理编号', 
+          label: '名称', 
           name: 'name', 
           type: 'text', 
           defaultValue: '',
@@ -36,10 +36,6 @@ export const ichFormItems : SingleForm = [CommonInfoModel, (m) => ({
           additionalProps: {
             placeholder: '请输入编号',
           },
-          rules:  [{
-            required: true,
-            message: '请输入编号',
-          }] 
         },
         {
           label: '级别', 
@@ -101,10 +97,6 @@ export const ichFormItems : SingleForm = [CommonInfoModel, (m) => ({
           additionalProps: {
             text: '是',
           } as CheckBoxToIntProps ,
-          rules:  [{
-            required: true,
-            message: '请选择是否确定传承人',
-          }] 
         },
         {
           label: '传承人情况',
@@ -117,10 +109,6 @@ export const ichFormItems : SingleForm = [CommonInfoModel, (m) => ({
             maxLength: 5000,
             showWordLimit: true, 
           },
-          rules:  [{
-            required: true,
-            message: '请输入输入传承人情况',
-          }]
         },
         {
           label: '加入时间', 
@@ -130,10 +118,6 @@ export const ichFormItems : SingleForm = [CommonInfoModel, (m) => ({
             type: 'datetime',
           },
           formProps: { showRightArrow: true } as FieldProps,
-          rules: [{
-            required: true,
-            message: '请选择加入时间',
-          }],
         },
       ]
     },
@@ -160,10 +144,6 @@ export const ichFormItems : SingleForm = [CommonInfoModel, (m) => ({
             ,
           } as PickerIdFieldProps,
           formProps: { showRightArrow: true } as FieldProps,
-          rules: [{
-            required: true,
-            message: '请选择项目续存情况',
-          }],
         },
         {
           label: '与村社依存程度', 
@@ -179,10 +159,6 @@ export const ichFormItems : SingleForm = [CommonInfoModel, (m) => ({
             ,
           } as PickerIdFieldProps,
           formProps: { showRightArrow: true } as FieldProps,
-          rules: [{
-            required: true,
-            message: '请选择与村社依存程度',
-          }],
         },
         {
           label: '活动规模', 
@@ -198,10 +174,6 @@ export const ichFormItems : SingleForm = [CommonInfoModel, (m) => ({
             ,
           } as PickerIdFieldProps,
           formProps: { showRightArrow: true } as FieldProps,
-          rules: [{
-            required: true,
-            message: '请选择活动规模',
-          }],
         },
         {
           label: '传承时间', 
@@ -217,10 +189,6 @@ export const ichFormItems : SingleForm = [CommonInfoModel, (m) => ({
             ,
           } as PickerIdFieldProps,
           formProps: { showRightArrow: true } as FieldProps,
-          rules: [{
-            required: true,
-            message: '请选择传承时间',
-          }],
         },
         {
           label: '具体传承时间', 
@@ -233,10 +201,6 @@ export const ichFormItems : SingleForm = [CommonInfoModel, (m) => ({
             type: 'datetime',
           },
           formProps: { showRightArrow: true } as FieldProps,
-          rules: [{
-            required: true,
-            message: '请选择具体传承时间',
-          }],
         },
       ]
     },

+ 0 - 12
src/pages/dig/forms/data/relic.ts

@@ -36,10 +36,6 @@ export const villageInfoRelicForm : SingleForm = [CommonInfoModel, (r) => ({
           additionalProps: {
             placeholder: '请输入文物编码',
           },
-          rules:  [{
-            required: true,
-            message: '请输入文物编码',
-          }] 
         },
         {
           label: '年代', 
@@ -219,10 +215,6 @@ export const villageInfoRelicForm : SingleForm = [CommonInfoModel, (r) => ({
                 labelPosition: 'left',
                 showBottomBorder: false,
               },
-              rules:  [{
-                required: true,
-                message: '请输入X',
-              }] 
             },
             { 
               label: '', 
@@ -238,10 +230,6 @@ export const villageInfoRelicForm : SingleForm = [CommonInfoModel, (r) => ({
                 labelPosition: 'left',
                 showBottomBorder: false,
               },
-              rules:  [{
-                required: true,
-                message: '请输入Y',
-              }] 
             },
           ]
         },

+ 0 - 81
src/pages/dig/forms/data/travel.ts

@@ -36,10 +36,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           type: 'number', 
           defaultValue: 0,
           additionalProps: { min: 0, addonAfter: 'KM' },
-          rules:  [{
-            required: true,
-            message: '请输入距离县城',
-          }] 
         },
         {
           label: '距离镇区中心', 
@@ -47,10 +43,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           type: 'number', 
           defaultValue: 0,
           additionalProps: { min: 0, addonAfter: 'KM' },
-          rules:  [{
-            required: true,
-            message: '请输入距离镇区中心',
-          }] 
         }, 
         {
           label: '距离市中心', 
@@ -58,10 +50,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           type: 'number', 
           defaultValue: 0,
           additionalProps: { min: 0, addonAfter: 'KM' },
-          rules:  [{
-            required: true,
-            message: '请输入距离市中心',
-          }] 
         }
       ]
     },
@@ -81,10 +69,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           additionalProps: {
             placeholder: '请输入最近高速收费站名称',
           },
-          rules:  [{
-            required: true,
-            message: '请输入最近高速收费站名称',
-          }] 
         },
         {
           label: '最近高速收费站名称', 
@@ -115,11 +99,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           additionalProps: {
             text: '有',
           },
-          rules:  [{
-            required: true,
-            message: '请选择有无公交车',
-            type: 'number',
-          }] 
         },
         {
           label: '公交车介绍', 
@@ -130,10 +109,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           additionalProps: {
             placeholder: '请输入公交车介绍',
           },
-          rules: [{
-            required: true,
-            message: '请输入公交车介绍',
-          }] 
         },
         {
           label: '其他交通方式', 
@@ -204,10 +179,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           additionalProps: {
             text: '有',
           },
-          rules:  [{
-            required: true,
-            message: '请选择有无解说牌',
-          }] 
         },
         {
           label: '其他解说牌', 
@@ -228,10 +199,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           additionalProps: {
             text: '有',
           },
-          rules:  [{
-            required: true,
-            message: '请选择有无指示牌',
-          }] 
         },
         {
           label: '其他指示牌', 
@@ -255,10 +222,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           additionalProps: {
             text: '有',
           },
-          rules:  [{
-            required: true,
-            message: '请选择有无安全告示牌',
-          }] 
         },
         {
           label: '其他安全告示牌', 
@@ -292,10 +255,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           additionalProps: {
             text: '有',
           },
-          rules:  [{
-            required: true,
-            message: '请选择有有无游客服务中心',
-          }] 
         },
         {
           label: '游客服务中心面积', 
@@ -306,10 +265,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           additionalProps: {
             placeholder: '请输入游客服务中心面积',
           },
-          rules: [{
-            required: true,
-            message: '请输入游客服务中心面积',
-          }] 
         },
         {
           label: '商业设施', 
@@ -325,10 +280,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
             ,
           } as PickerIdFieldProps,
           formProps: { showRightArrow: true } as FieldProps,
-          rules: [{
-            required: true,
-            message: '请选择商业设施',
-          }],
         },
         {
           label: '其他商业设施', 
@@ -339,10 +290,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           additionalProps: {
             placeholder: '请输入其他商业设施',
           },
-          rules: [{
-            required: true,
-            message: '请输入其他商业设施',
-          }] 
         }
       ]
     },
@@ -371,10 +318,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           formProps: {
             showRightArrow: true,
           },
-          rules:  [{
-            required: true,
-            message: '请选择有无医疗点',
-          }] 
         },
         {
           label: '其他医疗点', 
@@ -407,10 +350,6 @@ export const villageInfoTravelGuideForm : SingleForm = [CommonInfoModel, (r) =>
           formProps: {
             showRightArrow: true,
           },
-          rules:  [{
-            required: true,
-            message: '请选择有无游览车',
-          }] 
         },
         {
           label: '其他游览车', 
@@ -653,10 +592,6 @@ export const villageInfoRouteForm : SingleForm = [CommonInfoModel, (r) => ({
             maxLength: 1000,
             showWordLimit: true, 
           } as FieldProps,
-          rules:  [{
-            required: true,
-            message: '请输入特色',
-          }] 
         },
         {
           label: '文化背景', 
@@ -668,10 +603,6 @@ export const villageInfoRouteForm : SingleForm = [CommonInfoModel, (r) => ({
             maxLength: 1000,
             showWordLimit: true, 
           } as FieldProps,
-          rules:  [{
-            required: true,
-            message: '请输入文化背景',
-          }] 
         },
         {
           label: '精彩推荐', 
@@ -683,10 +614,6 @@ export const villageInfoRouteForm : SingleForm = [CommonInfoModel, (r) => ({
             maxLength: 1000,
             showWordLimit: true, 
           } as FieldProps,
-          rules:  [{
-            required: true,
-            message: '请输入精彩推荐',
-          }] 
         },
         {
           label: '推荐描述', 
@@ -698,10 +625,6 @@ export const villageInfoRouteForm : SingleForm = [CommonInfoModel, (r) => ({
             maxLength: 1000,
             showWordLimit: true, 
           } as FieldProps,
-          rules:  [{
-            required: true,
-            message: '请输入推荐描述',
-          }] 
         },
         {
           label: '活动亮点', 
@@ -713,10 +636,6 @@ export const villageInfoRouteForm : SingleForm = [CommonInfoModel, (r) => ({
             maxLength: 1000,
             showWordLimit: true, 
           } as FieldProps,
-          rules:  [{
-            required: true,
-            message: '请输入活动亮点',
-          }] 
         },
         ...villageCommonContent(r, {
           title: '路线特色',

+ 1 - 1
src/pages/dig/forms/forms.ts

@@ -123,7 +123,7 @@ const villageInfoForm : Record<number, GroupForm> = {
           defaultValue: '',
           additionalProps: {
             placeholder: '请输入描述',
-            maxLength: 5000,
+            maxLength: 500,
             showWordLimit: true,
           } as FieldProps,
           rules: []

+ 4 - 2
src/pages/home/chat/dependent/post/publish.vue

@@ -75,7 +75,7 @@
 <script setup lang="ts">
 import { onMounted, ref, watch } from 'vue';
 import { useLoadQuerys } from '@/components/composeabe/LoadQuerys';
-import { Debounce } from '@imengyu/imengyu-utils';
+import { Debounce, formatError } from '@imengyu/imengyu-utils';
 import { confirm, toast, alert } from '@/components/dialog/CommonRoot';
 import { useAuthStore } from '@/store/auth';
 import { useSimpleDataLoader } from '@/components/composeabe/loader/SimpleDataLoader';
@@ -238,7 +238,9 @@ function publish() {
     },
     fail: (error: any) => {
       console.error(error);
-      toast('发布失败');
+      const errmsg = formatError(error);
+      if (!errmsg.includes('cancel')) 
+        toast('发布失败: ' + errmsg);
     },
   });
 }

+ 77 - 0
src/pages/home/village/follow/list.vue

@@ -0,0 +1,77 @@
+<template>
+  <CommonTopBanner title="关注人数">
+    <SimplePageListLoader :loader="villageUserRankListLoader">
+      <FlexCol gap="gap.lg" padding="space.md">
+        <Touchable
+          v-for="(item, index) in villageUserRankListLoader.list.value"
+          :key="item.id"
+          direction="column"
+          @click="goDetails(item)"
+        >
+          <BackgroundBox
+            backgroundImage="https://xy.wenlvti.net/app_static/images/village/BoxDark.png"
+            :backgroundCutBorder="[6,6,6,6]"
+            :backgroundCutBorderSize="[10,10,10,10]"
+            :padding="[25,25]"
+            direction="row"
+            justify="space-between"
+            align="center"
+            gap="gap.md"
+            
+          >
+            <FlexRow align="center" gap="gap.lg">
+              <Avatar 
+                :url="item.avatar"
+                defaultAvatar="https://xy.wenlvti.net/app_static/images/village/PlaceholderVolunteerNew.png"
+                :size="70" 
+                mode="aspectFill" 
+                radius="radius.md" 
+              />
+              <Text :text="item.nickname" fontConfig="contentText" />
+            </FlexRow>
+            <FlexRow center gap="gap.md">
+              <Tag v-if="item.isAdmin" text="管理员" size="small" />
+            </FlexRow>
+          </BackgroundBox>
+        </Touchable>
+      </FlexCol>
+    </SimplePageListLoader>
+  </CommonTopBanner>
+</template>
+
+<script setup lang="ts">
+import { useSimplePageListLoader } from '@/components/composeabe/loader/SimplePageListLoader';
+import { useLoadQuerys } from '@/components/composeabe/LoadQuerys';
+import { navTo } from '@/components/utils/PageAction';
+import FlexCol from '@/components/layout/FlexCol.vue';
+import BackgroundBox from '@/components/display/block/BackgroundBox.vue';
+import Text from '@/components/basic/Text.vue';
+import Avatar from '@/components/display/Avatar.vue';
+import Tag from '@/components/display/Tag.vue';
+import Image from '@/components/basic/Image.vue';
+import FlexRow from '@/components/layout/FlexRow.vue';
+import Touchable from '@/components/feedback/Touchable.vue';
+import CommonTopBanner from '@/common/components/CommonTopBanner.vue';
+import SimplePageListLoader from '@/components/loader/SimplePageListLoader.vue';
+import FollowVillageApi from '@/api/light/FollowVillageApi';
+
+const { querys } = useLoadQuerys({
+  villageId: 0,
+}, () => {
+  villageUserRankListLoader.reload();
+}); 
+
+const villageUserRankListLoader = useSimplePageListLoader(20, async (page, pageSize) => {
+  return (await FollowVillageApi.getFollowedUsers({
+    page, pageSize, 
+    villageId: querys.value.villageId
+  }))
+});
+
+function goDetails(item: {
+  id: number;
+}) {
+  navTo('../volunteer/detail', { id: item.id });
+}
+
+</script>

+ 1 - 1
src/pages/home/village/follows.vue

@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import CommonTopBanner from '@/common/components/CommonTopBanner.vue';
-import VillageMyFollow from '../components/VillageMyFollow.vue';
+import VillageMyFollow from '../../components/VillageMyFollow.vue';
 import { backAndCallOnPageBack } from '@/components/utils/PageAction';
 
 function goDetails(item: { id: number }) {

+ 3 - 3
src/pages/home/village/introd/card.vue

@@ -134,11 +134,11 @@
       </FlexRow>
 
       <FlexRow backgroundColor="background.tertiary" radius="radius.md" :padding="[30, 20]">
-        <FlexCol center gap="gap.sm" flexBasis="25%">
+        <Touchable direction="column" center gap="gap.sm" flexBasis="25%" @click="navTo('/pages/home/village/task/index')">
           <Text text="乡源光" fontConfig="secondText" />
           <Text :text="villageInfoLoader.content.value?.light || '0'" fontConfig="importantTitle" />
           <Button type="text" size="mini" text="做任务" @click="navTo('/pages/home/village/task/index')" />
-        </FlexCol>
+        </Touchable>
         <Divider type="vertical" />
         <FlexCol center gap="gap.sm" flexBasis="25%">
           <Touchable direction="column" center @click="navTo('/pages/home/village/volunteer/list', { villageId: villageStore.currentVillage?.id ?? undefined })">
@@ -150,7 +150,7 @@
           </WxButton>
         </FlexCol>
         <Divider type="vertical" />
-        <Touchable direction="column" center gap="gap.sm" flexBasis="25%" @click="navTo('/pages/home/village/volunteer/list', {
+        <Touchable direction="column" center gap="gap.sm" flexBasis="25%" @click="navTo('/pages/home/village/follow/list', {
           villageId: villageStore.currentVillage?.id ?? undefined,
         })">
           <Text text="关注人数" fontConfig="contentText" />

+ 10 - 3
src/pages/home/village/upgrade/components/BuyFruitInfo.vue

@@ -7,13 +7,20 @@
           <Icon icon="https://xy.wenlvti.net/app_static/images/village/IconFruit.png" size="40" />
           <Text text="乡源果支付" fontConfig="lightImportantTitle" :fontSize="42" />
         </FlexRow>
-        <Text :text="`余额 ${authStore.userInfo?.fruit || '0'} 乡源果` + (price ? ` 需要 ${Math.ceil(price * 100)} 乡源果` : '')" fontConfig="lightGoldTitle" :fontSize="30" />
+        <Text :text="`余额 ${authStore.userInfo?.fruit || '0'} 乡源果`" fontConfig="lightGoldTitle" :fontSize="30" />
+        <Text v-if="price" :text="`需要 ${Math.ceil(price * 100)} 乡源果`" fontConfig="lightGoldTitle" :fontSize="30" />   
       </FlexCol>
-      <FrameButton primary text="选择" @click="emit('pay')" />
+      <FlexRow align="center" gap="gap.md">
+        <Text v-if="price && price > (authStore.userInfo?.fruit || 0)" text="乡源果不足" fontConfig="lightGoldTitle" :fontSize="30" color="danger" />
+        <FrameButton v-else primary text="选择" @click="emit('pay')" />
+      </FlexRow>
     </BoxMid>      
     <SimplePageContentLoader :loader="infoLoader">
       <FlexCol gap="gap.md" padding="padding.md">
-        <IconTextBlock icon="prompt" :title="infoLoader.content?.value?.title" />
+        <IconTextBlock icon="prompt" :iconProps="{ 
+          color: 'text.content',
+          size: 40,
+        }" :title="infoLoader.content?.value?.title" />
         <Parse :content="infoLoader.content?.value?.content || ''" />
       </FlexCol>
     </SimplePageContentLoader>

+ 1 - 1
src/pages/user/index.vue

@@ -33,7 +33,7 @@
       GridItemPaddingHorizontal: 0,
     }">
       <Grid :borderGrid="false" :mainAxisCount="4">
-        <GridItem title="我的关注" icon="https://xy.wenlvti.net/app_static/images/mine/IconLevel.png" touchable @click="requireLogin(() => navTo('/pages/home/village/follows'), '登录后查看我的关注哦')" />
+        <GridItem title="我的关注" icon="https://xy.wenlvti.net/app_static/images/mine/IconLevel.png" touchable @click="requireLogin(() => navTo('/pages/home/village/follow/my-follows'), '登录后查看我的关注哦')" />
         <GridItem title="我的订单" icon="https://xy.wenlvti.net/app_static/images/mine/IconArchive.png" touchable @click="requireLogin(() => navTo('/pages/home/village/orders'), '登录后查看我的订单哦')" />
         <GridItem title="任务中心" icon="https://xy.wenlvti.net/app_static/images/mine/IconTask.png" touchable @click="navTo('/pages/home/village/task/index')" />
         <GridItem title="兑换商城" icon="https://xy.wenlvti.net/app_static/images/mine/IconShop.png" touchable @click="goStore" />