3 Commits 73e1bb0ec9 ... 88fe9ce2be

Author SHA1 Message Date
  快乐的梦鱼 88fe9ce2be 🎨 优化采集列表,列表样式,重复图标移除 1 day ago
  快乐的梦鱼 f7a41680c6 🎨 任务列表增加图标显示 1 day ago
  快乐的梦鱼 5f26ab7a35 🎨 增加区域已创建村落接口对接 1 day ago

+ 24 - 0
src/api/light/LightVillageApi.ts

@@ -420,6 +420,30 @@ export class LightVillageApi extends AppServerRequestModule<DataModel> {
     return await this.post<KeyValue>('/village/village/addVillage', '创建村社', data);
   }
 
+  /**
+   * 村社地图
+   * POST /village/village/mapVillage
+   */
+  async getMapVillage(params: {
+    /** 地区code */
+    areaCode: number;
+  }) {
+    const res = await this.post<{
+      village_id: number | null;
+      is_light: number | null;
+      village_name: string | null;
+      area_id: number;
+      area_code: number;
+      merger_name: string;
+      longitude: string;
+      latitude: string;
+      name: string;
+    }[]>('/village/village/mapVillage', '村社地图', {
+      area_code: params.areaCode,
+    });
+    return res.requireData();
+  }
+
   async updateStorage(params: {
     /** 村社ID */
     villageId: number;

+ 1 - 0
src/api/light/TreeApi.ts

@@ -274,6 +274,7 @@ export class GrowthTaskItem extends DataModel<GrowthTaskItem> {
   id!: number;
   taskKey = '';
   villageId = 0;
+  image = '';
   name = '';
   desc = '';
   points = 0;

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

@@ -131,21 +131,6 @@ export const vilElementForm : SingleForm = [CommonInfoModel, (r) => ({
           } as FieldProps,
           rules:  [] 
         },
-        {
-          label: '图片', 
-          name: 'images', 
-          type: 'uploader', 
-          defaultValue: '',
-          additionalProps: {
-            upload: useAliOssUploadCo('xiangyuan/element', {
-              getVillageId: () => r.value.getGlobalParams().villageId,
-              overflow: () => r.value.emitMessage('storageOverflow'),
-            }),
-            maxFileSize: 1024 * 1024 * 20,
-            maxUploadCount: 20,
-          } as UploaderFieldProps,
-          rules:  [] 
-        },
         ...villageCommonContent(r, {
           title: '环境要素',
           showContent: false,

+ 1 - 0
src/pages/dig/forms/list-ordinary.vue

@@ -69,6 +69,7 @@
               <FlexCol>
                 <FlexRow>
                   <FrameButton :text="item.statusText" size="midium" @click="navTo('/pages/dig/about/goving')" />
+                  <FrameButton v-if="item.villageVolunteerId === volunteerInfo?.id" text="编辑" size="midium" @click="goEdit(item)" />
                   <FrameButton v-if="isManagement" text="管理" size="midium" @click="goEdit(item)" />
                 </FlexRow>
                 <FlexRow gap="gap.md">

+ 2 - 3
src/pages/dig/forms/submits.vue

@@ -55,7 +55,6 @@
               :height="150"
               radius="radius.sm"
               mode="aspectFill"
-              round
             />
             <FlexCol>
               <H4 :size="36">{{ item.title }}</H4>
@@ -159,8 +158,8 @@ const listLoader = useSimplePageListLoader<CommonInfoModel>(8, async (page, page
 function goDetail(item: CommonInfoModel) {
   navTo('common', { 
     id: item.id,
-    villageId: querys.value.villageId,
-    villageVolunteerId: querys.value.villageVolunteerId,
+    villageId: item.villageId,
+    villageVolunteerId: item.villageVolunteerId,
     catalogId: item.catalogId,
     collectModuleId: item.collectModuleId,
     subKey: '',

+ 20 - 1
src/pages/home/light/create-village.vue

@@ -155,7 +155,7 @@ async function asyncLoadData(item: CascaderItem) {
     data: region,
   }));
 }
-function handlePickEnd(values: CascaderItem[]) {
+async function handlePickEnd(values: CascaderItem[]) {
   if (values.length > 0) {
     selectedRegion.value = values[values.length - 1].data;
     let i = values.length - 1;
@@ -169,6 +169,25 @@ function handlePickEnd(values: CascaderItem[]) {
         break;
       }
     }
+
+    const areaCode = Number(selectedValue.value[selectedValue.value.length - 1]);
+    try {
+      const mapVillages = await LightVillageApi.getMapVillage({ areaCode });
+      const existingVillages = mapVillages.filter(v => v.village_id !== null);
+      if (existingVillages.length > 0) {
+        searchedList.value = existingVillages.map(v => ({
+          id: v.village_id!,
+          name: v.village_name || v.name,
+          image: '',
+          address: v.merger_name?.replace(/,/g, '') || '',
+        }) as unknown as VillageListItem);
+        showSearchedList.value = true;
+        return;
+      }
+    } catch (_) {
+      // 查询失败不阻塞流程,继续进入输入信息步骤
+    }
+
     if (i !== values.length - 1) {
       alert({
         title: '提示',

+ 14 - 10
src/pages/home/village/task/index.vue

@@ -18,16 +18,19 @@
               justify="space-between"
               align="center"
             >
-              <FlexCol gap="gap.md">
-                <Text fontConfig="lightImportantTitle" fontFamily="SongtiSCBlack">{{ item.name }}</Text>
-                <Text :fontSize="23" :text="item.desc" />
-                <Text v-if="item.points > 0" fontConfig="secondText">+{{ item.points }}文化积分</Text>
-                <FlexRow align="center" gap="gap.md">
-                  <Button v-if="item.rewardFruit > 0" icon="https://xy.wenlvti.net/app_static/images/village/IconFruit.png" size="mini" :text="`+${item.rewardFruit}乡源果`" />
-                  <Button v-if="item.rewardLight > 0" icon="https://xy.wenlvti.net/app_static/images/village/IconLight.png" size="mini" :text="`+${item.rewardLight}乡源光`" />
-                  <Button v-if="item.rewardWater > 0" icon="https://xy.wenlvti.net/app_static/images/village/IconWatering.png" size="mini" :text="`+${item.rewardWater}浇水次数`" />
-                </FlexRow>
-              </FlexCol>
+              <FlexRow gap="gap.md" align="center">
+                <Icon :icon="item.image" :size="60" />
+                <FlexCol gap="gap.md">
+                  <Text fontConfig="lightImportantTitle" fontFamily="SongtiSCBlack">{{ item.name }}</Text>
+                  <Text :fontSize="23" :text="item.desc" />
+                  <Text v-if="item.points > 0" fontConfig="secondText">+{{ item.points }}文化积分</Text>
+                  <FlexRow align="center" gap="gap.md">
+                    <Button v-if="item.rewardFruit > 0" icon="https://xy.wenlvti.net/app_static/images/village/IconFruit.png" size="mini" :text="`+${item.rewardFruit}乡源果`" />
+                    <Button v-if="item.rewardLight > 0" icon="https://xy.wenlvti.net/app_static/images/village/IconLight.png" size="mini" :text="`+${item.rewardLight}乡源光`" />
+                    <Button v-if="item.rewardWater > 0" icon="https://xy.wenlvti.net/app_static/images/village/IconWatering.png" size="mini" :text="`+${item.rewardWater}浇水次数`" />
+                  </FlexRow>
+                </FlexCol>
+              </FlexRow>
               <FlexRow gap="gap.xl" align="center">
                 <FlexCol align="flex-end">
                   <FrameButton
@@ -72,6 +75,7 @@ import FlexRow from '@/components/layout/FlexRow.vue';
 import FrameButton from '@/common/components/FrameButton.vue';
 import Button from '@/components/basic/Button.vue';
 import { backAndCallOnPageBack } from '@/components/utils/PageAction';
+import Icon from '@/components/basic/Icon.vue';
 
 const { querys } = useLoadQuerys({
   villageId: 0,