Procházet zdrojové kódy

fix: 药物处方处理

刘秀芳 před 1 týdnem
rodič
revize
b6c6a8beb6

+ 4 - 0
src/api/modules/z_farm_work_record.js

@@ -6,6 +6,10 @@ module.exports = {
         url: url + "/getSimpleList",
         type: "get",
     },
+    generalPendingFarmWork: {
+        url: url + "/generalPendingFarmWork",
+        type: "get",
+    },
     getDetail: {
         url: url + "/detail-list",
         type: "get",

+ 4 - 1
src/components/album_compoents/albumCarouselItem.vue

@@ -169,6 +169,9 @@ watch(() => props.imgData, (newVal) => {
 
 const prescriptionText = ref("");
 function buildPrescriptionText(list) {
+    if (!list || !Array.isArray(list) || list.length === 0 || list[0]?.pesticideFertilizerList?.length === 0) {
+        return "无处方";
+    }
     try {
         return list
             .map((group) =>
@@ -180,7 +183,7 @@ function buildPrescriptionText(list) {
             .filter(Boolean)
             .join("+");
     } catch {
-        return "";
+        return "无处方";
     }
 }
 

+ 6 - 3
src/components/album_compoents/albumDrawBox.vue

@@ -348,7 +348,7 @@ function calculateTextOverlayTopY(ctx, w, h) {
     // 第三行(最底):药物处方(支持自动换行)
     ctx.font = "10px sans-serif";
     const prescriptionFull =
-        "药物处方:" + (buildPrescriptionText(props.imgData?.prescriptionList) || "");
+        "药物处方:" + (buildPrescriptionText(props.imgData?.prescriptionList) || "无处方");
     
     // 计算文本最大宽度
     const maxWidth = w - paddingX * 2;
@@ -404,7 +404,7 @@ function drawBottomTextOverlay(ctx, w, h) {
     // 第三行(最底):药物处方(支持自动换行)
     ctx.font = "10px sans-serif";
     const prescriptionFull =
-        "药物处方:" + (buildPrescriptionText(props.imgData?.prescriptionList) || "");
+        "药物处方:" + (buildPrescriptionText(props.imgData?.prescriptionList) || "无处方");
     
     // 计算文本最大宽度
     const maxWidth = w - paddingX * 2;
@@ -566,6 +566,9 @@ function drawBottomMask(ctx, w, h, topY) {
 }
 
 function buildPrescriptionText(list) {
+    if (!list || !Array.isArray(list) || list.length === 0 || list[0]?.pesticideFertilizerList?.length === 0) {
+        return "无处方";
+    }
     try {
         return list
             .map((group) =>
@@ -577,7 +580,7 @@ function buildPrescriptionText(list) {
             .filter(Boolean)
             .join("+");
     } catch {
-        return "";
+        return "无处方";
     }
 }
 

+ 1 - 1
src/components/popup/priceSheetPopup.vue

@@ -134,7 +134,7 @@
         <div class="bottom-actions" @click.stop="showImagePopup = false">
             <div class="action-buttons">
                 <div class="action-btn text-btn">
-                    &lt;&lt;长按图片保存或转发&gt;&gt;
+                    &lt;&lt;长按图片保存&gt;&gt;
                 </div>
             </div>
             <div class="cancel-btn" @click="handleCancelImage">取消</div>

+ 2 - 1
src/components/recordItem.vue

@@ -91,6 +91,7 @@
                             </span>
                         </span>
                     </span>
+                    <span v-if="!recordItemData.prescriptionList || !recordItemData.prescriptionList?.length || recordItemData.prescriptionList[0]?.pesticideFertilizerList?.length === 0">无处方</span>
                 </div>
             </div>
             <div
@@ -225,7 +226,7 @@ const getPrescriptionInfo = (section) => {
             return names.join("+");
         }
     }
-    return "";
+    return "无处方";
 };
 
 const farmWorkType = {

+ 4 - 1
src/components/taskItem.vue

@@ -310,6 +310,9 @@ defineExpose({
 });
 const prescriptionText = ref("");
 function buildPrescriptionText(list) {
+    if (!list || !Array.isArray(list) || list.length === 0 || list[0]?.pesticideFertilizerList?.length === 0) {
+        return "无处方";
+    }
     try {
         return list
             .map((group) =>
@@ -321,7 +324,7 @@ function buildPrescriptionText(list) {
             .filter(Boolean)
             .join("+");
     } catch {
-        return "";
+        return "无处方";
     }
 }
 async function getItemDetail(id) {

+ 1 - 1
src/views/old_mini/agri_work/components/priceTable.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="farm-table">
-        <div class="new-wrap" v-if="(isArrList && prescriptionData?.length) || prescriptionData?.pesticideFertilizerList?.length">
+        <div class="new-wrap" v-if="(isArrList && prescriptionData?.length && prescriptionData[0]?.pesticideFertilizerList?.length > 0) || prescriptionData?.pesticideFertilizerList?.length">
             <div class="new-title">
                 <div class="title-2"><div class="table-name">药肥名称</div></div>
                 <div class="title-3"><div class="table-name">药肥品牌</div></div>

+ 77 - 7
src/views/old_mini/home/components/AgriculturalDynamics.vue

@@ -5,16 +5,22 @@
             <div v-for="(task, index) in taskList" :key="index" class="task-item">
                 <div class="task-content" @click="handleTaskAction(task)">
                     <div class="task-header">
-                        <div class="task-status-tag">待完成</div>
+                        <div class="task-status-tag">{{ task.flowStatus === 4 ? '待完成' : '待复核' }}</div>
                         <div class="task-title">{{ task.farmWorkName }}</div>
                     </div>
-                    <div class="task-time" v-if="task.expectedExecuteDate">执行时间 {{ task.expectedExecuteDate }}</div>
-                    <div class="task-time deadline" v-else>截止时间 {{ task.executeDeadlineDate }}</div>
+                    <div class="task-time" v-if="task.flowStatus === 5">
+                        复核时间 
+                    {{ task.reviewDate }}</div>
+                    <div class="task-time" v-if="task.flowStatus === 4 && task.expectedExecuteDate">执行时间 {{ task.expectedExecuteDate }}</div>
+                    <div class="task-time deadline" v-if="task.flowStatus === 4 && !task.expectedExecuteDate">截止时间 {{ task.executeDeadlineDate }}</div>
                 </div>
-                <div v-if="task.expectedExecuteDate" class="task-action" :class="{ 'call-text': getButtonText(task) }" @click="showOfferPopup(task)">
+                <div v-if="task.flowStatus === 5" class="task-action" :class="{ 'call-text': getButtonText(task) }" @click="handleAction(task)">
+                    {{ getButtonText(task) ? '提醒复核' : '上传复核照片' }}
+                </div>
+                <div v-else-if="task.flowStatus === 4 && task.expectedExecuteDate" class="task-action" :class="{ 'call-text': getButtonText(task) }" @click="showOfferPopup(task)">
                     {{ getButtonText(task) ? "提醒执行" : "上传照片" }}
                 </div>
-                <div v-else class="task-action orange" :class="{ 'call-text': getButtonText(task) }" @click="selectExecuteTime(task)">
+                <div v-else-if="task.flowStatus === 4 && !task.expectedExecuteDate" class="task-action orange" :class="{ 'call-text': getButtonText(task) }" @click="selectExecuteTime(task)">
                     {{ getButtonText(task) ? "提醒确认执行时间" : "确认执行时间" }}
                 </div>
             </div>
@@ -60,6 +66,9 @@
         :min-date="minDate"
         :max-date="maxDate"
     />
+
+    <!-- 上传复核照片 -->
+    <upload-execute ref="uploadExecuteRef" :onlyShare="false" @uploadSuccess="handleUploadSuccess" />
 </template>
 
 <script setup>
@@ -71,6 +80,7 @@ import { ElMessage } from "element-plus";
 import offerPopup from "@/components/popup/offerPopup.vue";
 import AgriculturalInteractionCard from "@/components/pageComponents/AgriculturalInteractionCard.vue";
 import { formatDate } from "@/common/commonFun";
+import uploadExecute from "@/views/old_mini/task_condition/components/uploadExecute.vue";
 // 任务列表数据
 const taskList = ref([]);
 
@@ -81,6 +91,26 @@ const handleTaskAction = (item) => {
     });
 };
 
+// 计算复核时间:executeDate + reviewIntervalDays
+const calculateReviewDate = (task) => {
+    if (!task?.executeDate) {
+        return "--";
+    }
+
+    const executeDate = new Date(task.executeDate);
+    const reviewIntervalDays = Number(task?.reviewIntervalDays || 0);
+
+    // 将执行日期加上间隔天数
+    executeDate.setDate(executeDate.getDate() + reviewIntervalDays);
+
+    // 格式化为 YYYY-MM-DD
+    const year = executeDate.getFullYear();
+    const month = String(executeDate.getMonth() + 1).padStart(2, "0");
+    const day = String(executeDate.getDate()).padStart(2, "0");
+
+    return `${year}-${month}-${day}`;
+};
+
 onMounted(() => {
     const userInfo = JSON.parse(localStorage.getItem("localUserInfo"));
     agriculturalRole.value = userInfo.agriculturalRole;
@@ -108,6 +138,30 @@ const showOfferPopup = (item) => {
     }
 };
 
+const uploadExecuteRef = ref(null);
+function handleAction(item) {
+    if(getButtonText(item)) {
+        const query = {
+            askInfo: { title: "农事提醒", content: "是否分享该农事提醒给好友" },
+            shareText: '向您分享了一条农事复核提醒,请您尽快复核',
+            targetUrl: `review_work`,
+            paramsPage: JSON.stringify({id: item.id}),
+            imageUrl: 'https://birdseye-img.sysuimars.com/birdseye-look-mini/invite_bg.png',
+        };
+        wx.miniProgram.navigateTo({
+            url: `/pages/subPages/share_page/index?pageParams=${JSON.stringify(query)}&type=sharePage`,
+        });
+    }else{
+        setTimeout(() => {
+            uploadExecuteRef.value.showPopup(item, "share-sheet");
+        }, 10);
+    }
+}
+
+function handleUploadSuccess() {
+    getTaskList();
+}
+
 const selectExecuteTime = (item) => {
     if (getButtonText(item)) {
         const query = {
@@ -164,8 +218,24 @@ const updateAllData = () => {
 };
 //农情互动的农场列表接口(分页)
 const getTaskList = async () => {
-    const res = await VE_API.z_farm_work_record.getSimpleList({ role: 2, flowStatus: 4 });
-    taskList.value = (res.data || []).slice(0, 2);
+    // 同时获取待完成(4)和待复核(5)的任务
+    const [res4, res5] = await Promise.all([
+        VE_API.z_farm_work_record.generalPendingFarmWork({ role: 2, flowStatus: 4 }),
+        VE_API.z_farm_work_record.generalPendingFarmWork({ role: 2, flowStatus: 5 })
+    ]);
+    
+    const tasks4 = (res4.data || []).map(task => ({
+        ...task,
+        reviewDate: calculateReviewDate(task)
+    }));
+    
+    const tasks5 = (res5.data || []).map(task => ({
+        ...task,
+        reviewDate: calculateReviewDate(task)
+    }));
+    
+    // 合并两种状态的任务,总共取前2个
+    taskList.value = [...tasks4, ...tasks5].slice(0, 2);
 };
 
 const unansweredList = ref([]);

+ 3 - 3
src/views/old_mini/mine/pages/serviceRecords.vue

@@ -15,7 +15,7 @@
                         <span class="text van-ellipsis">{{ item.farmName }}</span>
                     </div>
                     <div class="line">
-                        <span class="label">药处方:</span>
+                        <span class="label">药处方:</span>
                         <span class="text van-ellipsis">{{ getPrescriptionText(item) }}</span>
                     </div>
                 </div>
@@ -57,7 +57,7 @@ const handleItemClick = (data) => {
 // 获取药肥处方文本(从prescriptionList中提取pesticideFertilizerList的defaultName,用+连接)
 const getPrescriptionText = (item) => {
     if (!item.prescriptionList || !Array.isArray(item.prescriptionList) || item.prescriptionList.length === 0) {
-        return item.prescription || "无";
+        return item.prescription || "无处方";
     }
 
     const nameList = [];
@@ -71,7 +71,7 @@ const getPrescriptionText = (item) => {
         }
     });
 
-    return nameList.length > 0 ? nameList.join(" + ") : item.prescription || "无";
+    return nameList.length > 0 ? nameList.join(" + ") : item.prescription || "无处方";
 };
 </script>
 <style lang="scss" scoped>

+ 1 - 1
src/views/old_mini/modify_work/addWork.vue

@@ -529,7 +529,7 @@ VE_API.z_farm_work_order.pesticideFertilizersList().then(({ data }) => {
     pesticideFertilizersOptions.value = data;
 });
 
-const allUsageModeList = ["树冠+内膛", "地面喷施", "树冠喷施", "根部施", "叶面施", "内膛喷施", "人工"];
+const allUsageModeList = ["树冠+内膛", "地面喷施", "树冠喷施", "根部施", "叶面施", "内膛喷施", "其他"];
 
 /**
  * 选择药肥的时候修改订单中药肥pesticideFertilizerId 以外其他数据

+ 3 - 3
src/views/old_mini/modify_work/completedWork.vue

@@ -70,7 +70,7 @@
                             </div>
                         </div>
                         <div class="farm-info">
-                            <div class="info-title-wrap">
+                            <div class="info-title-wrap" v-if="quotationData.prescriptionList?.length && quotationData.prescriptionList[0]?.pesticideFertilizerList?.length > 0">
                                 <div class="sub-title">药肥费用</div>
                                 <div class="info-more">
                                     {{ pesticideCostTotal ? formatArea(pesticideCostTotal) : "--"
@@ -167,7 +167,7 @@
                     <div class="table-item">
                         <div class="form-item">
                             <div class="item-name">施用方式</div>
-                            <div class="item-text">{{ detailData?.usageMode }}</div>
+                            <div class="item-text">{{ detailData?.usageMode || '其他' }}</div>
                         </div>
                         <div class="form-item">
                             <div class="item-name">执行方式</div>
@@ -176,7 +176,7 @@
                             </div>
                         </div>
                     </div>
-                    <div class="new-wrap">
+                    <div class="new-wrap" v-if="detailData?.prescriptionList?.length && detailData?.prescriptionList[0]?.pesticideFertilizerList?.length > 0">
                         <div class="new-title">
                             <div class="title-1"><div class="table-name">药肥类型</div></div>
                             <div class="title-2"><div class="table-name">药肥名称</div></div>

+ 2 - 2
src/views/old_mini/modify_work/detailWork.vue

@@ -173,11 +173,11 @@
                     <div class="table-item">
                         <div class="form-item">
                             <div class="item-name">施用方式</div>
-                            <div class="item-text">{{ detailData?.prescription?.usageMode }}</div>
+                            <div class="item-text">{{ detailData?.prescription?.usageMode || '其他' }}</div>
                         </div>
                         <div class="form-item">
                             <div class="item-name">执行方式</div>
-                            <div class="item-text">{{ detailData?.prescription?.pesticideFertilizerList[0]?.executeStyle === 1 ? '无人机' : detailData?.prescription?.pesticideFertilizerList[0]?.executeStyle === 2 ? '人工' : '无人机+人工' }}</div>
+                            <div class="item-text">{{ detailData?.prescription?.pesticideFertilizerList[0]?.executeStyle === 1 ? '无人机' : detailData?.prescription?.pesticideFertilizerList[0]?.executeStyle === 3 ? '无人机+人工' : '人工' }}</div>
                         </div>
                     </div>
                     <div class="new-wrap" v-if="detailData?.prescription?.pesticideFertilizerList?.length">

+ 2 - 2
src/views/old_mini/modify_work/modify.vue

@@ -375,7 +375,7 @@
                             <div class="form-item">
                                 <div class="item-name">执行方式</div>
                                 <div class="item-text">
-                                    {{ dynamicValidateForm?.prescription?.pesticideFertilizerList[0]?.executeStyle === 1 ? '无人机' : dynamicValidateForm?.prescription?.pesticideFertilizerList[0]?.executeStyle === 2 ? '人工' : '无人机+人工' }}
+                                    {{ dynamicValidateForm?.prescription?.pesticideFertilizerList[0]?.executeStyle === 1 ? '无人机' : dynamicValidateForm?.prescription?.pesticideFertilizerList[0]?.executeStyle === 3 ? '无人机+人工' : '人工' }}
                                 </div>
                             </div>
                         </div>
@@ -1042,7 +1042,7 @@ VE_API.z_farm_work_order.pesticideFertilizersList().then(({ data }) => {
     pesticideFertilizersOptions.value = data;
 });
 
-const allUsageModeList = ["树冠+内膛", "地面喷施", "树冠喷施", "根部施", "叶面施", "内膛喷施", "人工"];
+const allUsageModeList = ["树冠+内膛", "地面喷施", "树冠喷施", "根部施", "叶面施", "内膛喷施", "其他"];
 
 /**
  * 选择药肥的时候修改订单中药肥pesticideFertilizerId 以外其他数据

+ 2 - 1
src/views/old_mini/modify_work/reviewWork.vue

@@ -25,7 +25,7 @@
                             <div class="info-value">{{ workItem.executeDate || "--" }}</div>
                         </div>
                         <div class="info-item line-item">
-                            <div class="info-name">药处方:</div>
+                            <div class="info-name">药处方:</div>
                             <div class="info-value">
                                 <div class="rescription" v-if="workItem?.prescriptionList">
                                     <span
@@ -48,6 +48,7 @@
                                         </span>
                                     </span>
                                 </div>
+                                <div class="rescription" v-if="!workItem?.prescriptionList || !workItem?.prescriptionList?.length|| workItem?.prescriptionList[0]?.pesticideFertilizerList?.length === 0">无处方</div>
                             </div>
                         </div>
                     </div>

+ 1 - 0
src/views/old_mini/task_condition/components/reviewPopup.vue

@@ -57,6 +57,7 @@
                                         </span>
                                     </span>
                                 </div>
+                                <div class="rescription" v-else>无处方</div>
                             </div>
                         </div>
                     </div>