Просмотр исходного кода

feat:对接提醒客户接口和问题详情接口

wangsisi 4 дней назад
Родитель
Сommit
d51fa8e5f0

+ 5 - 0
src/api/modules/user.js

@@ -36,4 +36,9 @@ module.exports = {
         url: config.base_dev_url + "farm_broadcast/latestByServiceFarm",
         type: "post",
     },
+    //查询农场当前问卷问题接口
+    listWithAnswer: {
+        url: config.base_dev_url + "work_code/phenology/quest/listWithAnswer",
+        type: "get",
+    },
 }

+ 23 - 5
src/views/old_mini/create_farm/index.vue

@@ -185,6 +185,7 @@ import { useStore } from "vuex";
 import { convertPointToArray } from "@/utils/index";
 import { ElMessage } from "element-plus";
 import { Checkbox } from "vant";
+import wx from "weixin-js-sdk";
 import { transformFromGCJToWGS, transformFromWGSToGCJ } from "@/utils/WSCoordinate.js";
 
 const route = useRoute();
@@ -731,11 +732,28 @@ function backgToHome() {
 
     // 根据来源页面决定返回目标
     const fromPage = route.query.from;
-    if (fromPage && fromPage !== "details") {
-        router.replace(`/${fromPage}`);
-        return;
-    } else {
-        router.go(-1);
+    if (route.query.miniJson) {
+        const json = JSON.parse(route.query.miniJson);
+        if(json.isMini) {
+            const dropdownGardenItem = ref({
+                organId: json.farmId,
+                periodId: json.periodId,
+                name: json.name,
+                page: "create_farm",
+                showFarmSelect: true,
+                images: json.images,
+            });
+            wx.miniProgram.reLaunch({
+                url: `/pages/subPages/new_recognize/index?gardenData=${JSON.stringify(dropdownGardenItem.value)}`,
+            });
+        }
+    }else{
+        if (fromPage && fromPage !== "details") {
+            router.replace(`/${fromPage}`);
+            return;
+        } else {
+            router.go(-1);
+        }
     }
 }
 

+ 1 - 5
src/views/old_mini/dev_login.vue

@@ -64,11 +64,7 @@ onMounted(async () => {
     store.commit("home/SET_MINI_USER_LOCATION", route.query.point);
     store.commit("home/SET_MINI_USER_ID", userId);
     store.commit("home/SET_MINI_USER_LOCATION_POINT", `POINT(${pointXy[0]} ${pointXy[1]})`);
-    if(route.query.targetUrl === "/create_farm"){
-        router.push("/create_farm?isReload=true&from=home");
-    }else{
-        router.push(`${targetUrl}?miniJson=${JSON.stringify(route.query)}`);
-    }
+    router.push(`${targetUrl}?miniJson=${JSON.stringify(route.query)}`);
 })
 
 const getFarmList = async () => {

+ 12 - 20
src/views/old_mini/home/index.vue

@@ -111,31 +111,23 @@ const monitorCards = ref({
 
 // 卡片点击事件
 const handleCardClick = (card) => {
-    if (curRole == 0) {
-        if (!isGarden.value) {
-            showFarmPopup.value = true;
-            return;
-        }
-    }
-    if (card.route === "/pest") {
-        const dropdownGardenItem = ref({
-            organId: 766,
-            periodId: 1,
-            wktVal: "wktVal",
-            address: "address",
-            district: "district",
-            name: "荔博园",
+    const dropdownGardenItem = ref({
+        organId: 766,
+        periodId: 1,
+        name: "荔博园",
+    });
+    if (card.title === "农情采集") {
+        dropdownGardenItem.value.page = "create_farm";
+        wx.miniProgram.navigateTo({
+            url: `/pages/subPages/new_recognize/index?gardenData=${JSON.stringify(dropdownGardenItem.value)}`,
         });
+    } else if (card.title === "病虫识别") {
+        dropdownGardenItem.value.page = "album_recognize";
         wx.miniProgram.navigateTo({
             url: `/pages/subPages/new_recognize/index?gardenData=${JSON.stringify(dropdownGardenItem.value)}`,
         });
     } else {
-        if (card.route === "/chat_frame") {
-            router.push("/agri_services?active=1");
-            // router.push(`/chat_frame?userId=${expertInfo.value.appUserId}`);
-        } else {
-            router.push(card.route);
-        }
+        router.push(card.route);
     }
 };
 

+ 28 - 9
src/views/old_mini/home/subPages/warningDetail.vue

@@ -20,13 +20,19 @@
             <div class="article-box">
                 <div class="box-top">
                     <img class="icon" src="@/assets/img/home/ask-icon.png" alt="" />
-                    <div class="title">在白点期,您当前农场是否出现白点?</div>
+                    <div class="title">{{ questInfo.quest }}</div>
                 </div>
                 <div class="box-bottom" :style="{ justifyContent: !isLink ? 'center' : 'flex-end' }">
                     <div class="edit-btn" v-if="!isLink">编辑问题</div>
                     <template v-else>
-                        <div class="edit-btn">否,未出现</div>
-                        <div class="edit-btn primary-btn">是,已出现</div>
+                        <div
+                            class="edit-btn"
+                            :class="{ 'primary-btn': item.value != 0 }"
+                            v-for="item in questInfo.answer"
+                            :key="item.value"
+                        >
+                            {{ item.name }}
+                        </div>
                     </template>
                 </div>
             </div>
@@ -36,32 +42,45 @@
             </div>
 
             <div class="custom-bottom-fixed-btns" v-if="!isLink">
-                <div class="bottom-btn primary-btn" @click="handleForward">转发</div>
+                <div class="bottom-btn primary-btn" @click="showShareSheet = true">转发</div>
             </div>
         </div>
     </div>
+    <fn-share-sheet v-model:show="showShareSheet" :options="shareOptions" @select="handleShareSelect" />
 </template>
 
 <script setup>
 import customHeader from "@/components/customHeader.vue";
 import { ref, onActivated } from "vue";
+import FnShareSheet from "@/components/pageComponents/FnShareSheet.vue";
 import { useRoute } from "vue-router";
 
 const route = useRoute();
 
-const isLink = ref(true);
+const showShareSheet = ref(false);
+const shareOptions = ref([{ name: "微信", icon: "wechat", type: "wechat" }]);
+const handleShareSelect = (option) => {
+    console.log("option", option);
+};
 
+const isLink = ref(true);
+const questInfo = ref({});
 const warningDetail = ref({});
 const showImage = ref(false);
+
 onActivated(() => {
     showImage.value = route.query.showImage === "true" ? true : false;
+    isLink.value = localStorage.getItem("curRole") || 0;
+    if (route.query.questInfo) {
+        const infoObj = JSON.parse(route.query.questInfo);
+        questInfo.value = {
+            quest: infoObj.quest,
+            answer: JSON.parse(infoObj.answer),
+        };
+    }
     getWarningDetail();
 });
 
-const handleForward = () => {
-    console.log("转发");
-};
-
 const getWarningDetail = () => {
     const params = {
         id: route.query.id,

+ 26 - 39
src/views/old_mini/task_condition/components/remindCustomer.vue

@@ -2,37 +2,44 @@
     <div class="service-records-page">
         <custom-header name="提醒客户"></custom-header>
         <div class="record-list">
-            <div v-for="(item, index) in renderList" :key="index" class="record-card">
-                <img class="thumb" :src="item.thumb" alt="农场缩略图" @error="handleImgError" />
-                <div class="card-body" @click="handleItemClick(item.raw)">
+            <div v-for="(item, index) in recordList" :key="index" class="record-card">
+                <img class="thumb" :src="item.postInfo.media && item.postInfo.media[0]" alt="农场缩略图" />
+                <div class="card-body" @click="handleItemClick(item)">
                     <div class="card-body-left">
-                        <div class="title van-multi-ellipsis--l2">{{ item.title }}</div>
-                        <div class="date">{{ item.date }}</div>
+                        <div class="title van-multi-ellipsis--l2">{{ item.postInfo.title }}</div>
+                        <div class="date">{{ formatDate(item.postInfo.createTime) }}</div>
                     </div>
-                    <div class="forward-btn" @click.stop="handleForward(item.raw)">转发</div>
+                    <div class="forward-btn" @click.stop="showShareSheet = true">转发</div>
                 </div>
             </div>
         </div>
     </div>
+    <fn-share-sheet v-model:show="showShareSheet" :options="shareOptions" @select="handleShareSelect" />
 </template>
 <script setup>
-import { ref, onMounted, computed } from "vue";
+import { ref, onMounted } from "vue";
 import customHeader from "@/components/customHeader.vue";
 import { useRouter } from "vue-router";
-import defaultThumb from "@/assets/img/home/farm.png";
+import FnShareSheet from "@/components/pageComponents/FnShareSheet.vue";
 const router = useRouter();
-
 // 服务记录列表数据
 const recordList = ref([]);
+const showShareSheet = ref(false);
+const shareOptions = ref([
+    { name: "微信", icon: "wechat", type: "wechat" },
+]);
+const handleShareSelect = (option) => {
+    console.log("option", option);
+};
 
 onMounted(() => {
-    getUserList();
+    getListWithAnswer();
 });
 
-const getUserList = async () => {
-    const { data } = await VE_API.user.userList();
+const getListWithAnswer = async () => {
+    const { data } = await VE_API.user.listWithAnswer({farmId:'93684'});
     if (data.length) {
-        recordList.value = data.filter((item) => item.serviceCount != 0);
+        recordList.value = data
     }
 };
 const formatDate = (dateStr) => {
@@ -44,34 +51,14 @@ const formatDate = (dateStr) => {
     const d = `${date.getDate()}`.padStart(2, "0");
     return `${y}-${m}-${d}`;
 };
-const renderList = [
-    {
-        title: "湛江出现了高温灼烧气象预警,请注意某某防范!",
-        date: "2025-11-12",
-        thumb: defaultThumb,
-    },
-    {
-        title: "农情互动提醒:",
-        date: "2025-11-12",
-        thumb: defaultThumb,
-    },
-    {
-        title: "农事执行提醒",
-        date: "2025-11-12",
-        thumb: defaultThumb,
-    },
-];
+
 // 处理列表项点击
 const handleItemClick = (data) => {
-    router.push(`/warning_detail?id=782295538706944000&showImage=true`);
-};
-// 处理转发按钮点击
-const handleForward = (data) => {
-    // TODO: 实现转发功能
-    console.log("转发", data);
-};
-const handleImgError = (e) => {
-    e.target.src = defaultThumb;
+    const questInfo = {
+        quest: data.quest,
+        answer: data.answerOptions,
+    }
+    router.push(`/warning_detail?id=${data.postInfo.postId}&questInfo=${JSON.stringify(questInfo)}`);
 };
 </script>
 <style lang="scss" scoped>