فهرست منبع

fix: 报价信息

lxf 14 ساعت پیش
والد
کامیت
4b383c4d79

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

@@ -22,7 +22,7 @@
                         <div class="mask-line line-top">
                             <span class="date-text">{{ imgData?.executeDate }}</span>
                             <span class="line-separator">|</span>
-                            <span class="executor-text">执行人:{{  }}</span>
+                            <span class="executor-text">执行人:{{ imgData?.executeName }}</span>
                         </div>
                         <div class="mask-line line-middle">
                             <span class="work-name">{{ imgData?.farmWorkName }}</span>

+ 3 - 6
src/components/pageComponents/AgriculturalInteractionCard.vue

@@ -16,7 +16,7 @@
                 </div>
                 <div class="text">
                     预计报价<span class="price">{{ timelineItem.estimatedCost }}元</span>
-                    <span class="action-detail" @click="showPriceSheetPopup(timelineItem)">查看报价单</span>
+                    <span class="action-detail" @click="showPriceSheetPopup(timelineItem.farmWorkId, item)">查看报价单</span>
                 </div>
             </div>
             <div class="timeline-action" @click="handleTimelineAction(timelineItem, item.farmId)">转入农事任务</div>
@@ -98,11 +98,8 @@ const handleIgnore = (timelineItem, farmId) => {
 };
 
 const priceSheetPopupRef = ref(null);
-const showPriceSheetPopup = (item) => {
-    VE_API.z_farm_work_record.getDetail({ id: item.farmWorkId }).then(({ data }) => {
-        const res = data[0];
-        priceSheetPopupRef.value.handleShowPopup(res);
-    });
+const showPriceSheetPopup = (id, item) => {
+    priceSheetPopupRef.value.handleShowPopup({id, farmId: item.farmId, agriculturalId: item.agriculturalStoreId})
 };
 
 const emit = defineEmits(["handleUploadSuccess"]);

+ 55 - 25
src/components/popup/priceSheetPopup.vue

@@ -19,11 +19,11 @@
                     <div class="quotation-info">
                         <div class="info-item">
                             <span class="info-label">报价组织</span>
-                            <span class="info-value">{{ quotationData.serviceMain || '--' }}</span>
+                            <span class="info-value">{{ priceData.serviceMain || '--' }}</span>
                         </div>
                         <div class="info-item">
                             <span class="info-label">报价农事</span>
-                            <span class="info-value">{{ quotationData?.farmWorkName || '--' }}</span>
+                            <span class="info-value">{{ priceData?.name || '--' }}</span>
                         </div>
                         <div class="info-item">
                             <span class="info-label">执行时间</span>
@@ -100,24 +100,24 @@
             <!-- 底部操作按钮 -->
             <div class="bottom-actions" @click.stop="showPopup = false">
                 <div class="action-buttons">
-                    <div class="action-btn blue-btn" @click.stop="handleShare">
+                    <!-- <div class="action-btn blue-btn" @click.stop="handleShare">
                         <div class="icon-circle">
                             <img src="@/assets/img/home/bird.png" alt="" />
                         </div>
                         <span class="btn-label">飞鸟用户</span>
-                    </div>
+                    </div> -->
                     <div class="action-btn green-btn" @click.stop="handleWechat">
                         <div class="icon-circle">
                             <img src="@/assets/img/home/wechat.png" alt="" />
                         </div>
                         <span class="btn-label">微信</span>
                     </div>
-                    <!-- <div class="action-btn orange-btn">
+                    <div class="action-btn orange-btn" @click.stop="handleSaveImage">
                         <div class="icon-circle">
                             <el-icon :size="24"><Download /></el-icon>
                         </div>
                         <span class="btn-label">保存图片</span>
-                    </div> -->
+                    </div>
                 </div>
                 <div class="cancel-btn" @click="handleCancel">取消</div>
             </div>
@@ -148,7 +148,7 @@ onActivated(() => {
 
 // 处理后的处方列表(展平并匹配价格)
 const processedPrescriptionList = computed(() => {
-    if (!quotationData.value?.prescriptionList || !Array.isArray(quotationData.value.prescriptionList)) {
+    if (!priceData.value?.prescriptionList || !Array.isArray(priceData.value.prescriptionList)) {
         return [];
     }
 
@@ -161,7 +161,7 @@ const processedPrescriptionList = computed(() => {
     }
     // 展平 prescriptionList 中的所有 pesticideFertilizerList
     const result = [];
-    quotationData.value.prescriptionList.forEach(prescription => {
+    priceData.value.prescriptionList.forEach(prescription => {
         if (prescription.pesticideFertilizerList && Array.isArray(prescription.pesticideFertilizerList)) {
             prescription.pesticideFertilizerList.forEach(item => {
                 const pesticideFertilizerId = String(item.pesticideFertilizerId || '');
@@ -169,7 +169,7 @@ const processedPrescriptionList = computed(() => {
                 const price = mapped.price || 0;
                 const brand = mapped.brand || item.brand || '';
                 const total = mapped.totalPrice || item.total || '';
-                const muUsage = quotationData.value.usageMode === "叶面施" ? (item.muUsage2 || item.muUsage) : item.muUsage
+                const muUsage = priceData.value.usageMode === "叶面施" ? (item.muUsage2 || item.muUsage) : item.muUsage
                 const unit = item.unit || '';
 
                 result.push({
@@ -199,29 +199,48 @@ function getServiceCost(cost, area) {
     return (parseFloat(cost) * parseFloat(area)).toFixed(2);
 }
 
-const handleShowPopup = (data) => {
-    if (data) {
-        quotationData.value = data;
-        fetchPriceData();
+const handleShowPopup = ({id, farmId, agriculturalId}) => {
+    if (id) {
+        loading.value = true;
+        getDetail(id, farmId, agriculturalId);
     }
     showPopup.value = true;
 };
 
 const loading = ref(false);
-function fetchPriceData() {
-    if (!quotationData.value?.id) {
-        return;
-    }
-    loading.value = true;
-    VE_API.z_farm_work_record_cost.getByRecordId({ farmWorkRecordId: quotationData.value.id }).then(({ data }) => {
+function fetchPriceData(id) {
+    
+    // VE_API.z_farm_work_record_cost.getByRecordId({ farmWorkRecordId: quotationData.value.id }).then(({ data }) => {
+    //     priceData.value = data;
+    // }).catch(() => {
+    //     // 获取价格数据失败
+    // }).finally(() => {
+    //     loading.value = false;
+    // });
+}
+
+const getDetail = async (id, farmId, agriculturalId) => {
+    const { data, code } = await VE_API.farm.getFarmWorkLib({ id, farmId, agriculturalId });
+    if(code === 0) {
         priceData.value = data;
-    }).catch(() => {
-        // 获取价格数据失败
-    }).finally(() => {
+        const pesticideFertilizerCodes = data.prescription.pesticideFertilizerList.map(item => item.code);
+        getPriceList(data.schemeId, pesticideFertilizerCodes);
         loading.value = false;
-    });
+    }
 }
 
+const getPriceList = async (schemeId, pesticideFertilizerCodes) => {
+    const { data } = await VE_API.farm.getPriceList({ schemeId, pesticideFertilizerCodes });
+    if (!data || !Array.isArray(data)) return;
+
+    priceData.value.prescription.pesticideFertilizerList.forEach((item) => {
+        const priceInfo = data.find((p) => p.pesticideFertilizerCode === item.code);
+        if (!priceInfo) return;
+        item.price = priceInfo.price ?? item.price;
+        item.brand = priceInfo.brand ?? item.brand;
+    });
+};
+
 // 检查 itemsList 是否都有价格和品牌
 function checkItemsListHasPrice() {
     if (!priceData.value?.itemsList || !Array.isArray(priceData.value.itemsList) || priceData.value.itemsList.length === 0) {
@@ -393,9 +412,20 @@ const handleEdit = () => {
     // 编辑报价逻辑
     // 可以触发编辑事件或打开编辑页面
     router.push({
-        path: "/price_detail",
-        query: { data: JSON.stringify(quotationData.value), priceData: JSON.stringify(priceData.value) },
+        path: "/modify",
+        query: {
+            isEdit: true,
+            id: priceData.value.id,
+            farmId: priceData.value.farm.id,
+            farmWorkId: priceData.value.id,
+            containerSpaceTimeId: priceData.value.containerSpaceTimeId,
+            agriculturalStoreId: priceData.value.agriculturalStoreId,
+        },
     });
+    // router.push({
+    //     path: "/price_detail",
+    //     query: { data: JSON.stringify(quotationData.value), priceData: JSON.stringify(priceData.value) },
+    // });
 };
 
 // 清空数据

+ 2 - 2
src/components/taskItem.vue

@@ -59,13 +59,13 @@
                         <span class="value">{{ prescriptionText }}</span>
                     </div>
                 </div>
-                <div class="desc-info" v-if="itemIndex === 2 && daysDiff > 0">
+                <div class="desc-info" v-if="itemIndex === 2">
                     <div class="desc-info-item">
                         <span>复核时间:</span>
                         <span class="value">{{ itemData?.executeDate }}</span>
                     </div>
                 </div>
-                <div class="desc-info" v-if="itemIndex === 2">
+                <div class="desc-info" v-if="itemIndex === 2 && !itemData.reviewImage?.length && daysDiff > 0">
                     <div class="desc-info-item expired-text">
                         <span
                             >距离农事执行已 <span class="val-text">{{ daysDiff }}</span

+ 8 - 4
src/views/old_mini/modify_work/reviewWork.vue

@@ -19,13 +19,13 @@
                         <div class="farm-name">{{ workItem.farmName }}</div>
                         <div class="info-item">
                             <div class="info-name">农事名称:</div>
-                            <div class="info-value">{{ workItem.farmWorkName }} ({{ workItem.executeDate }})</div>
+                            <div class="info-value">{{ workItem.farmWorkName }}</div>
                         </div>
                         <div class="info-item">
-                            <div class="info-name">农事目的:</div>
-                            <div class="info-value">{{ workItem.purpose || "--" }}</div>
+                            <div class="info-name">执行时间:</div>
+                            <div class="info-value">{{ workItem.executeDate || "--" }}</div>
                         </div>
-                        <div class="info-item">
+                        <div class="info-item line-item">
                             <div class="info-name">肥药处方:</div>
                             <div class="info-value">
                                 <div class="rescription" v-if="workItem?.prescriptionList">
@@ -737,7 +737,11 @@ const handleUpload = ({ imgArr }) => {
                 }
                 .info-item {
                     display: flex;
+                    align-items: center;
                     font-size: 12px;
+                    &.line-item {
+                        align-items: flex-start;
+                    }
                     .info-name {
                         color: #bbbbbb;
                         flex: none;