فهرست منبع

Merge branch 'supplies' of http://www.sysuimars.cn:3000/feiniao/feiniao-farm-h5 into supplies

刘秀芳 9 ساعت پیش
والد
کامیت
af5459d556

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

@@ -17,6 +17,11 @@ module.exports = {
         url: config.base_dev_url + "v2/farm/selfCreateFarmByExpert",
         type: "post",
     },
+    // 自己创建农场基于专家
+    saveBasicFarmInfoByExpertV3: {
+        url: config.base_dev_url + "v3/farm/selfCreateFarmByExpert",
+        type: "post",
+    },
     // 保存草稿
     saveDraft: {
         url: url + "/saveDraft",

+ 0 - 446
src/components/detailDialog.vue

@@ -1,446 +0,0 @@
-<template>
-    <el-dialog
-        v-model="winDialogVisible"
-        lock-scroll
-        modal-class="album-detail-modal"
-        :showClose="false"
-        width="86%"
-        align-center
-        @close="closeDialog"
-    >
-        <div class="detail-log">
-            <div class="congratulation-wrap">
-                <div class="congratulation-box">
-                    <div class="win-des">
-                        <!-- <img src="@/assets/img/weather_index/box-top.png" class="win-icon" /> -->
-                    </div>
-                    <div class="album-detail-box">
-                        <div class="detail-title">{{ dialogData.name }}</div>
-                        <div class="detail-desc-box">
-                            <!-- <div class="desc-item van-ellipsis" v-if="dialogData?.conditionList && dialogData.conditionList.length">
-                                <span class="item-name">触发条件</span>
-                                {{
-                                    dialogData.condition ||
-                                    dialogData.conditionList[0].name + dialogData.conditionList[0].value
-                                }}
-                            </div> -->
-                            <div class="desc-item van-ellipsis">
-                                <span class="item-name">农事编号</span>
-                                {{ dialogData.code }}
-                            </div>
-                            <div class="desc-item">
-                                <span class="item-name">推荐时间</span>
-                                {{ dialogData.executeDate }}
-                            </div>
-                            <div class="desc-item">
-                                <div class="item-name">药物处方
-                                    <span class="no-prescription" v-if="!hasPrescription">暂无处方</span>
-                                </div>
-                                <div class="item-table" v-if="hasPrescription">
-                                    <div class="table">
-                                        <div class="th">
-                                            <div class="td">类型</div>
-                                            <div class="td width">名称</div>
-                                            <div class="td">配比</div>
-                                            <div class="td">方式</div>
-                                        </div>
-                                        <div
-                                            class="tr"
-                                            v-for="(subP, subI) in dialogData.prescription?.pesticideFertilizerList"
-                                            :key="subI"
-                                        >
-                                            <div class="td">{{ subP.typeName }}</div>
-                                            <div class="td width">{{ subP.name }}</div>
-                                            <div class="td">{{ subP.ratio }}</div>
-                                            <div class="td">人工</div>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="card-link">
-                                <img :src="dialogData.expertIcon || dialogData.expertUserIcon" />
-                                <div class="expert-name">
-                                    {{ dialogData.expertUserName || dialogData.expertName }}
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-
-            <div class="bottom-btn" v-if="showBtn">
-                <div class="btn-item secondary-btn" @click="toPage">{{ btnText }}</div>
-                <div class="btn-item primary-btn" @click="triggerClick">{{ curRole == 0 ? "触发农事" : "下发农事" }}</div>
-            </div>
-        </div>
-        <template #footer>
-            <div class="dialog-footer">
-                <div class="close-btn">
-                    <!-- <el-icon size="32" color="#fff"><CircleCloseFilled /></el-icon> -->
-                    <!-- <el-button type="primary" class="one-btn" @click="toShare"> 立即分享 </el-button> -->
-                </div>
-            </div>
-        </template>
-    </el-dialog>
-
-    <Popup v-model:show="noShow" class="no-popup">
-        <div class="right-icon">
-            <img class="right-img" src="@/assets/img/home/right.png" alt="" />
-        </div>
-        <div class="no-popup-title">
-            <span>{{ curRole == 0 ? "好的,感谢您的配合" : "农事下发成功" }}</span>
-            <div class="no-popup-title-sub" v-if="curRole == 0">请您耐心等待 农事确认</div>
-        </div>
-        <div class="no-popup-btn" @click="handleNoPopupBtn">{{ curRole == 0 ? "我知道了" : "我知道了" }}</div>
-    </Popup>
-</template>
-<script setup>
-import { ref, computed } from "vue";
-import eventBus from "@/api/eventBus";
-import { Popup } from "vant";
-import { useRoute, useRouter } from "vue-router";
-import { ElMessage } from "element-plus";
-
-const props = defineProps({
-    showSuccessOnly: {
-        type: Boolean,
-        default: false,
-    },
-});
-
-const curRole = localStorage.getItem("SET_USER_CUR_ROLE");
-
-const winDialogVisible = ref(false);
-const noShow = ref(false);
-const btnText = ref('');
-const route = useRoute();
-const router = useRouter();
-
-const triggerClick = () => {
-    winDialogVisible.value = false;
-    // 如果只显示成功弹窗(来自 album_recognize 页面)
-    if (props.showSuccessOnly) {
-        noShow.value = true;
-    }
-    emit("triggerFarmWork");
-};
-
-const emit = defineEmits(["triggerFarmWork", "noPopupBtn"]);
-
-const dialogData = ref({})
-const showBtn = ref(true);
-const showDialog = (id,btnTextVal = '转发', showBtnVal = true) => {
-    btnText.value = btnTextVal;
-    showBtn.value = showBtnVal;
-    if (id) {
-        VE_API.farm
-            .getFarmWorkLib({ id })
-            .then(({ code, data }) => {
-                if (code === 0 && data) {
-                    // 将接口返回的数据更新到 dialogData
-                    dialogData.value = data || {};
-                    settingData();
-                }
-            })
-            .catch((error) => {
-                console.error("获取农事详情失败:", error);
-            });
-    }
-    winDialogVisible.value = true;
-};
-
-defineExpose({ showDialog });
-
-//立即激活
-const handleAct = () => {
-    winDialogVisible.value = false;
-    eventBus.emit("uploadUopup:show", {
-        gardenIdVal: dialogData.value.farmId,
-        orderIdVal: dialogData.value.orderId,
-        textVal: dialogData.value.consequenceText,
-    });
-};
-
-const pesticideFertilizers = ref([]);
-
-// 判断是否有处方数据
-const hasPrescription = computed(() => {
-    const pesticideFertilizerList = dialogData.value.prescription?.pesticideFertilizerList;
-    return pesticideFertilizerList && Array.isArray(pesticideFertilizerList) && pesticideFertilizerList.length > 0;
-});
-
-const settingData = () => {
-    const pesticideFertilizerList = dialogData.value.prescription?.pesticideFertilizerList;
-    pesticideFertilizers.value = pesticideFertilizerList || [];
-};
-
-function closeDialog() {
-    winDialogVisible.value = false;
-}
-
-function toPage() {
-    if(btnText.value!='转发'){
-        router.push("/expert_list");
-    }
-    ElMessage.warning("该功能正在升级中,敬请期待");
-}
-
-const handleNoPopupBtn = () => {
-    noShow.value = false;
-    // if(curRole == 0){
-    //     noShow.value = false;
-    // }else{
-    //     noShow.value = false;
-    //     emit("noPopupBtn");
-    // }
-};
-</script>
-
-<style lang="scss" scoped>
-.congratulation-wrap {
-    border-radius: 12px;
-    background: #f4f5f4;
-    width: 100%;
-}
-.detail-log {
-    width: 100%;
-}
-.close-btn {
-    text-align: center;
-    margin-top: 20px;
-}
-.bottom-btn {
-    position: absolute;
-    width: 100%;
-    text-align: center;
-    margin-top: 20px;
-    display: flex;
-    .btn-item {
-        flex: 1;
-        text-align: center;
-        height: 38px;
-        line-height: 38px;
-        border-radius: 30px;
-        font-size: 14px;
-        &.secondary-btn {
-            background: #ffffff;
-            color: #000000;
-        }
-        &.primary-btn {
-            background: linear-gradient(180deg, #76c3ff, #2199f8);
-            color: #ffffff;
-        }
-    }
-    .btn-item + .btn-item {
-        margin-left: 12px;
-    }
-}
-.congratulation-box {
-    border-radius: 12px;
-    background: url("@/assets/img/home/sd-bg.png") no-repeat top center / contain;
-    // background: url("@/assets/img/home/box-top.png") no-repeat top center / contain;
-    .el-message-box__message {
-        padding: 12px 0 24px 0;
-    }
-    .win-title {
-        color: #1d1e1f;
-        font-family: "PangMenZhengDao", sans-serif; /* 使用自定义字体 */
-        text-align: center;
-        font-size: 24px;
-        line-height: 32px;
-    }
-    .win-detail {
-        text-align: center;
-        color: #252525;
-        padding-top: 6px;
-        font-size: 16px;
-        span {
-            font-size: 22px;
-            color: #2199f8;
-            padding: 0 6px;
-            font-weight: bold;
-        }
-    }
-    .win-des {
-        height: 180px;
-        text-align: center;
-    }
-    .win-icon {
-        width: 100%;
-        border-radius: 12px 12px 0 0;
-    }
-}
-.album-detail-box {
-    padding: 0 10px 16px 10px;
-    color: #000;
-    position: relative;
-    // top: -58px;
-    .detail-title {
-        font-size: 24px;
-        font-weight: bold;
-        padding-bottom: 8px;
-        letter-spacing: 1.6px;
-    }
-    .detail-desc-box {
-        position: relative;
-        .desc-item {
-            font-size: 14px;
-            &.van-ellipsis{
-                max-width: calc(100% - 86px);
-            }
-            .item-name {
-                color: #999999;
-                margin-right: 12px;
-            }
-            .no-prescription {
-                margin-left: 12px;
-                color: #000;
-            }
-            .item-table {
-                margin-top: 8px;
-                .table {
-                    border: 1px solid rgba(196, 196, 196, 0.8);
-                    border-radius: 4px;
-                    font-size: 13px;
-                    .th {
-                        background: #f5f5f5;
-                        color: #999999;
-                        display: flex;
-                        justify-content: space-between;
-                        border-radius: 4px 4px 0 0;
-                        padding: 4px 0;
-                    }
-                    .tr {
-                        display: flex;
-                        justify-content: space-between;
-                        align-items: center;
-                        color: #333333;
-                        padding: 6px 0;
-                    }
-
-                    .tr + .tr {
-                        border-top: 1px solid rgba(0, 0, 0, 0.08);
-                    }
-                    .td {
-                        width: 25%;
-                        padding: 0 2px;
-                        text-align: center;
-                    }
-                    .width {
-                        width: 55%;
-                    }
-                }
-            }
-        }
-        .desc-item + .desc-item {
-            padding-top: 4px;
-        }
-        .card-link {
-            display: flex;
-            flex-direction: column;
-            align-items: center;
-            justify-content: center;
-            color: #2199f8;
-            font-size: 12px;
-            position: absolute;
-            right: 6px;
-            top: 0px;
-            .expert-name {
-                background: #d3e8ff;
-                border-radius: 4px;
-                padding: 1px 12px;
-                margin-top: 4px;
-                display: flex;
-                align-items: center;
-            }
-            img {
-                width: 48px;
-                height: 48px;
-                border-radius: 50%;
-                object-fit: cover;
-            }
-            .icon {
-                padding-right: 2px;
-            }
-        }
-    }
-}
-.dialog-footer {
-    position: relative;
-    .close-btn {
-        position: absolute;
-        bottom: -58px;
-        left: 0;
-        right: 0;
-        margin: 0 auto;
-        text-align: center;
-    }
-}
-
-.no-popup {
-    width: 300px;
-    border-radius: 14px;
-    padding: 28px 15px 20px;
-    box-sizing: border-box;
-    .right-icon {
-        text-align: center;
-        padding-bottom: 12px;
-        .right-img {
-            width: 68px;
-        }
-    }
-    .no-popup-title {
-        font-size: 24px;
-        font-weight: 500;
-        text-align: center;
-        .no-popup-title-sub {
-            font-size: 14px;
-            margin-top: 8px;
-        }
-    }
-    .no-popup-btn {
-        background-color: #2199f8;
-        padding: 8px;
-        border-radius: 20px;
-        color: #fff;
-        font-size: 16px;
-        margin-top: 32px;
-        text-align: center;
-    }
-}
-</style>
-
-<style lang="scss">
-.album-detail-modal {
-    .el-overlay-dialog {
-        .el-dialog {
-            padding: 0;
-            border-radius: 12px;
-            background: none;
-            box-shadow: none;
-            margin-bottom: 70px;
-            margin-top: 10px;
-            overflow: auto;
-            scrollbar-width: none;
-            display: flex;
-            flex-direction: column;
-            align-items: center;
-            justify-content: center;
-            pointer-events: none;
-            .el-dialog__header {
-                padding: 0;
-            }
-            .el-dialog__body {
-                pointer-events: all;
-                width: 100%;
-            }
-        }
-
-        .one-btn {
-            width: 210px;
-            height: 40px;
-            line-height: 40px;
-        }
-    }
-}
-</style>

+ 0 - 115
src/components/farmSteps.vue

@@ -1,115 +0,0 @@
-<template>
-    <div class="steps-container">
-        <div
-            v-for="(step, index) in steps"
-            :key="index"
-            class="step-item"
-            :class="{ completed: index < currentStep, active: index === currentStep }"
-        >
-            <div class="step-circle">
-                <el-icon v-if="index < currentStep"><Select /></el-icon>
-                <span v-else class="step-number">{{ index + 1 }}</span>
-            </div>
-            <div class="step-label">{{ step.label }}</div>
-            <div v-if="index < steps.length - 1" class="step-line" :class="{ completed: index < currentStep }"></div>
-        </div>
-    </div>
-</template>
-
-<script setup>
-import { ref, defineProps } from "vue";
-
-const props = defineProps({
-    currentStep: {
-        type: Number,
-        default: 2,
-    },
-});
-
-const steps = ref([
-    { label: "触发农事" },
-    { label: "农事确认" },
-    { label: "农事执行" },
-    { label: "农事复核" },
-]);
-</script>
-
-<style lang="scss" scoped>
-.steps-container {
-    display: flex;
-    align-items: flex-start;
-    justify-content: space-between;
-    position: relative;
-    .step-item {
-        display: flex;
-        flex-direction: column;
-        align-items: center;
-        position: relative;
-        flex: 1;
-        z-index: 2;
-        .step-circle {
-            width: 25px;
-            height: 25px;
-            border-radius: 50%;
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            margin-bottom: 8px;
-            transition: all 0.3s ease;
-            .step-number {
-                font-size: 14px;
-            }
-        }
-        .step-label {
-            font-size: 12px;
-            text-align: center;
-            line-height: 1.2;
-            max-width: 60px;
-        }
-        .step-line {
-            position: absolute;
-            top: 13px;
-            left: 74%;
-            width: calc(100% - 38px);
-            height: 2px;
-            background-color: rgba(0, 0, 0, 0.22);
-            z-index: 1;
-        }
-        &.completed {
-            .step-circle {
-                background-color: #1890ff;
-                color: white;
-            }
-            .step-line {
-                background-color: #1890ff;
-            }
-        }
-        &.active {
-            .step-circle {
-                background-color: #1890ff;
-                color: white;
-            }
-        }
-    }
-}
-.step-item:not(.completed):not(.active) .step-circle {
-    background-color: #FFFFFF;
-    color: #999;
-}
-.step-item.completed .step-label,
-.step-item.active .step-label {
-    color: #333;
-    font-weight: 500;
-}
-
-.step-item:not(.completed):not(.active) .step-label {
-    color: rgba(0, 0, 0, 0.5);
-}
-
-.step-line.completed {
-    background-color: #1890ff;
-}
-.step-item:last-child .step-line {
-    display: none;
-}
-</style>

+ 7 - 2
src/components/popup/qrCodePopup.vue

@@ -1,5 +1,5 @@
 <template>
-    <popup v-model:show="showValue" round class="qr-code-popup" teleport="body">
+    <popup v-model:show="showValue" round :close-on-click-overlay="closeOnClickOverlay" class="qr-code-popup" teleport="body">
         <div class="qr-code-content">
             <div class="qr-code-title">
                 <slot name="success"></slot>
@@ -21,7 +21,12 @@ import { ref } from "vue";
 import { Popup } from "vant";
 
 const showValue = ref(false);
-
+const props = defineProps({
+    closeOnClickOverlay: {
+        type: Boolean,
+        default: true,
+    },
+});
 function showPopup() {
     showValue.value = true;
 }

+ 0 - 40
src/router/globalRoutes.js

@@ -68,27 +68,6 @@ export default [
         name: "Recognize",
         component: () => import("@/views/old_mini/home/subPages/recognize.vue"),
     },
-    // 编辑农事
-    {
-        path: "/modify_work",
-        name: "ModifyWork",
-        meta: { keepAlive: true },
-        component: () => import("@/views/old_mini/modify_work/index.vue"),
-    },
-    // 待执行completedWork.vue
-    {
-        path: "/completed_work",
-        name: "CompletedWork",
-        meta: { keepAlive: true },
-        component: () => import("@/views/old_mini/modify_work/completedWork.vue"),
-    },
-    // 农事详情
-    {
-        path: "/detail_work",
-        name: "DetailWork",
-        meta: { keepAlive: true },
-        component: () => import("@/views/old_mini/modify_work/detailWork.vue"),
-    },
     // 农事详情--农户
     {
         path: "/farmer_agri",
@@ -107,25 +86,6 @@ export default [
         name: "ServicesIndex",
         component: () => import("@/views/old_mini/agri_work/servicesIndex.vue"),
     },
-    // 农事成效
-    {
-        path: "/review_work",
-        name: "ReviewWork",
-        meta: { keepAlive: true },
-        component: () => import("@/views/old_mini/modify_work/reviewWork.vue"),
-    },
-    // 新增农事
-    {
-        path: "/add_work",
-        name: "AddWork",
-        component: () => import("@/views/old_mini/modify_work/addWork.vue"),
-    },
-    // 分享好友页面
-    {
-        path: "/share_page",
-        name: "SharePage",
-        component: () => import("@/views/old_mini/modify_work/sharePage.vue"),
-    },
     // 气象预警详情/农事预警详情
     {
         path: "/warning_detail",

+ 0 - 2
src/views/old_mini/agri_record/subPages/statusDetail.vue

@@ -252,7 +252,6 @@
         </popup> -->
 
         <!-- 处方卡片 -->
-        <detail-dialog ref="detailDialogRef" />
     </div>
 
     <!-- 确认执行时间 -->
@@ -267,7 +266,6 @@ import { ref, onActivated, onDeactivated, computed } from "vue";
 import customHeader from "@/components/customHeader.vue";
 import { Warning } from "@element-plus/icons-vue";
 import upload from "@/components/upload";
-import detailDialog from "@/components/detailDialog.vue";
 import MapInfo from "@/views/old_mini/agri_record/components/mapInfo.vue";
 import { Popup, Calendar } from "vant";
 import { formatDate } from "@/common/commonFun";

+ 1 - 2
src/views/old_mini/agri_work/servicesIndex.vue

@@ -3,7 +3,7 @@
         <custom-header name="农事详情"></custom-header>
         <div class="work-content" :class="{ hasBottom: curRole == 0 }">
             <div class="step-wrap">
-                <farm-steps :currentStep="0" />
+                <!-- <farm-steps :currentStep="0" /> -->
             </div>
             <div class="content-status">
                 <div class="status-l" v-if="status === 0">
@@ -100,7 +100,6 @@ import { useStore } from "vuex";
 import infoText from "./components/infoText.vue";
 import prescriptionTable from "./components/prescriptionTable.vue";
 import priceTable from "./components/priceTable.vue";
-import farmSteps from "@/components/farmSteps.vue";
 import { useRouter } from "vue-router";
 
 const router = useRouter();

+ 15 - 1
src/views/old_mini/agriculturalDetails/index.vue

@@ -7,7 +7,7 @@
                     <div class="name">妃子笑</div>
                     <div class="desc">长势采集:物候进程</div>
                 </div>
-                <div class="header-btn">邀请互动</div>
+                <div class="header-btn" @click="handleInviteClick">邀请互动</div>
             </div>
             <div class="agri-body">
                 <div class="agri-content-wrapper">
@@ -50,6 +50,7 @@
 import { ref } from "vue";
 import customHeader from "@/components/customHeader.vue";
 import { useRouter } from "vue-router";
+import wx from "weixin-js-sdk";
 
 const router = useRouter();
 const whiteRate = ref("50");
@@ -59,6 +60,19 @@ const handleStatusClick = () => {
         path: "/farm_details",
     });
 };
+
+const handleInviteClick = () => {
+    const query = {
+        askInfo: { title: "邀请互动", content: "是否邀请好友进行农情互动" },
+        shareText: '某某农资邀请您进行农情互动,实时获取农情与农事提醒',
+        targetUrl: `/interaction_list`,
+        paramsPage: JSON.stringify({id: 1}),
+        imageUrl: 'https://birdseye-img.sysuimars.com/birdseye-look-mini/share-lz-bg.png',
+    };
+    wx.miniProgram.navigateTo({
+        url: `/pages/subPages/share_page/index?pageParams=${JSON.stringify(query)}&type=sharePage`,
+    });
+};
 </script>
 
 <style lang="scss" scoped>

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

@@ -481,14 +481,16 @@ const submitForm = (formEl) => {
     if (!formEl) return;
     formEl.validate((valid) => {
         if (valid) {
-            const mainSpecies = Array.isArray(ruleForm.speciesItem)
-                ? ruleForm.speciesItem[0]
-                : ruleForm.speciesItem;
+            const speciesList = Array.isArray(ruleForm.speciesItem) ? ruleForm.speciesItem : (ruleForm.speciesItem ? [ruleForm.speciesItem] : []);
+            const mainSpecies = speciesList[0];
+            const speciesContainer = speciesList.map((item) => ({
+                speciesId: item?.id ?? null,
+                containerId: item?.defaultContainerId ?? null,
+            }));
             const params = {
                 ...ruleForm,
                 wkt: centerPoint.value,
-                speciesId: mainSpecies?.id,
-                containerId: mainSpecies?.defaultContainerId,
+                speciesContainer,
                 agriculturalCreate: route.query.type === "client" ? 1 : 0,
                 // 编辑时geom不是数组,新增时是数组
                 geom:
@@ -504,43 +506,32 @@ const submitForm = (formEl) => {
                 params.farmId = route.query.farmId;
             }
 
+            let pageData = null;
             if (route.query.miniJson) {
                 const json = JSON.parse(route.query.miniJson);
-                const pageData = JSON.parse(json.paramsPage);
-                if (pageData.type === 'add') {
-                    // 处理 geom 参数,如果是数组需要序列化
-                    const queryParams = {
-                        ...params,
-                        ...route.query,
-                    };
-
-                    // 如果 geom 是数组,需要序列化为 JSON 字符串
-                    if (Array.isArray(queryParams.geom)) {
-                        queryParams.geom = JSON.stringify(queryParams.geom);
-                    }
-                    delete queryParams.speciesItem;
-                    queryParams.speciesName = mainSpecies?.name;
-                    router.push({
-                        path: "/prescription",
-                        query: queryParams,
-                    });
-                    return;
-                }
+                pageData = JSON.parse(json.paramsPage);
             }
 
-            if (route.query.type === "add" || route.query.type === "farmer") {
+            if (route.query.type === "add" || pageData?.type === 'add') {
                 // 处理 geom 参数,如果是数组需要序列化
                 const queryParams = {
                     ...params,
                     ...route.query,
                 };
-
                 // 如果 geom 是数组,需要序列化为 JSON 字符串
                 if (Array.isArray(queryParams.geom)) {
                     queryParams.geom = JSON.stringify(queryParams.geom);
                 }
+                // speciesContainer 为对象时需序列化,否则 query 传递后无法正确解析
+                if (queryParams.speciesContainer && typeof queryParams.speciesContainer === 'object') {
+                    queryParams.speciesContainer = JSON.stringify(queryParams.speciesContainer);
+                }
                 delete queryParams.speciesItem;
                 queryParams.speciesName = mainSpecies?.name;
+                
+                if (pageData?.type === 'add') {
+                    queryParams.invite = true;
+                }
                 router.push({
                     path: "/prescription",
                     query: queryParams,
@@ -696,18 +687,17 @@ function getSpecieList() {
     return VE_API.farm.fetchSpecieList({ point: centerPoint.value }).then(({ data }) => {
         const list = Array.isArray(data) ? data : [];
         // 只保留名称包含“荔枝”的品类
-        const litchiList = list.filter((item) => item?.name && item.name.includes("荔枝"));
-        specieList.value = litchiList;
+        specieList.value = list;
         // 非编辑模式且当前未选择品类时,默认选中第一项
         const noSpeciesSelected =
             !Array.isArray(ruleForm.speciesItem) || ruleForm.speciesItem.length === 0;
-        if (route.query.type !== "edit" && noSpeciesSelected && litchiList.length > 0) {
-            const first = { value: litchiList[0].id, ...litchiList[0] };
+        if (route.query.type !== "edit" && noSpeciesSelected && list.length > 0) {
+            const first = { value: list[0].id, ...list[0] };
             ruleForm.speciesItem = [first];
             // 同步触发品类变更逻辑(加载品种、自动生成农场名等)
             changeSpecie(first);
         }
-        return litchiList;
+        return list;
     });
 }
 
@@ -1164,7 +1154,7 @@ function handleMianjiInput(value) {
                     }
 
                     .select-item {
-                        min-width: 76px;
+                        min-width: 100px;
                     }
                 }
 

+ 41 - 9
src/views/old_mini/farmDetails/index.vue

@@ -12,12 +12,21 @@
             <div class="archives-time-line-header" @click="handleJump">
                 <div class="line-title">作物档案</div>
                 <div class="filter-wrapper">
-                    <el-select style="width: 110px" v-model="pz">
-                        <el-option v-for="item in pzList" :key="item.value" :label="item.label" :value="item.value" />
-                    </el-select>
                     <el-date-picker style="width: 110px" v-model="date" type="year" placeholder="全部日期" />
                 </div>
             </div>
+            <!-- 品种选择 -->
+            <div class="variety-tabs">
+                <div
+                    v-for="v in varietyTabs"
+                    :key="v.key"
+                    class="variety-tab"
+                    :class="{ 'variety-tab--active': activeVariety === v.key }"
+                    @click="activeVariety = v.key"
+                >
+                    {{ v.label }}
+                </div>
+            </div>
             <div class="archives-time-line-content">
                 <div class="report-box" v-if="hasReport">
                     <div class="box-content">
@@ -135,6 +144,15 @@ const handleReportClick = () => {
 
 const activeTab = ref("crop");
 
+// 品种选择(作物档案内)
+const varietyTabs = [
+    { key: "feizixiao", label: "妃子笑" },
+    { key: "guiwei", label: "桂味" },
+    { key: "nuomici", label: "糯米糍" },
+    { key: "xiantaofang", label: "仙桃芳" },
+];
+const activeVariety = ref("feizixiao");
+
 const farmInfo = {
     name: "从化荔博园",
     contact: "张扬",
@@ -158,11 +176,6 @@ const improveProblems = ["土壤改良", "树势增强", "品质提升"];
 //     getReport();
 // });
 
-const pz = ref(0);
-const pzList = ref([
-    { label: "荔枝-早熟", value: 0 },
-]);
-
 const date = ref(new Date());
 const farmId = ref(766);
 const hasReport = ref(true);
@@ -236,8 +249,27 @@ const getReport = () => {
             }
         }
 
+        .variety-tabs {
+            display: flex;
+            align-items: center;
+            gap: 8px;
+            margin-bottom: 12px;
+
+            .variety-tab {
+                padding: 4px 12px;
+                border-radius: 2px;
+                color: #767676;
+                background: #fff;
+            }
+
+            .variety-tab--active {
+                background: #2199F8;
+                color: #ffffff;
+            }
+        }
+
         .archives-time-line-content {
-            height: calc(100% - 44px);
+            height: calc(100% - 84px);
             background: #fff;
             border-radius: 8px;
             padding: 10px;

+ 0 - 383
src/views/old_mini/home/components/problemReminder.vue

@@ -1,383 +0,0 @@
-<template>
-    <Popup v-model:show="show" class="problem-reminder-popup">
-        <div class="problem-reminder">
-            <!-- 标题区域 -->
-            <div class="problem-reminder-header">
-                <div class="title-section">
-                    <div class="main-title">填写以下问题</div>
-                    <div class="sub-title">为您定制农事提醒</div>
-                </div>
-                <img class="header-icon" src="@/assets/img/home/file-icon.png" alt="" />
-            </div>
-            <div class="question-section-wrapper">
-                <div class="question-text">请问 <span style="color: #2199f8;">{{ farmName }}</span> {{ questPopupData.quest }}</div>
-                <div class="img">
-                    <img :src="questPopupData.backgroundImage" alt="" />
-                </div>
-                <div class="options-section">
-                    <span class="options-label">您可以选择</span>
-                    <div class="options-buttons">
-                        <div class="option-btn" @click="toUpload">拍照识别</div>
-                        <div class="option-btn" @click="toPage" v-if="curRole == 0">咨询专家</div>
-                    </div>
-                </div>
-            </div>
-            <!-- 底部按钮区域 -->
-            <div class="bottom-buttons">
-                <div
-                    v-for="(opt, idx) in bottomAnswerOptions"
-                    :key="idx"
-                    class="bottom-btn"
-                    :class="{ 'yes-btn': isYesOption(opt), 'no-btn': !isYesOption(opt) }"
-                    @click="onBottomOptionClick(opt)"
-                >
-                    {{ getOptionLabel(opt) }}
-                </div>
-            </div>
-            <!-- <div class="forward-btn bottom-btn" v-if="curRole == 2" @click="handleForward">转发给客户</div> -->
-        </div>
-    </Popup>
-    <Popup v-model:show="noShow" class="no-popup">
-        <div class="no-popup-title">
-            <span>感谢您的配合</span>
-            <div class="no-popup-title-sub">飞鸟将会记录下您当前的农场情况</div>
-        </div>
-        <div class="no-popup-btn" @click="noShow = false">我知道了</div>
-    </Popup>
-    <!-- 农事信息弹窗 -->
-    <detail-dialog ref="detailDialogRef" showSuccessOnly @triggerFarmWork="triggerFarmWork" @noPopupBtn="noPopupBtn"></detail-dialog>
-    <!-- 新增:激活上传弹窗 -->
-    <active-upload-popup ref="activeUploadPopupRef" @handleUploadSuccess="handleUploadSuccess"></active-upload-popup>
-</template>
-<script setup>
-import { Popup } from "vant";
-import { ref,onActivated } from "vue";
-import wx from "weixin-js-sdk";
-import { base_img_url2 } from "@/api/config";
-import activeUploadPopup from "@/components/popup/activeUploadPopup.vue";
-import detailDialog from "@/components/detailDialog.vue";
-import eventBus from "@/api/eventBus";
-import { useRouter } from "vue-router";
-import { ElMessage } from "element-plus";
-const router = useRouter();
-
-const show = ref(false);
-const noShow = ref(false);
-const dropdownGardenItem = ref({
-    organId: 93490,
-    periodId: 1,
-    wktVal: "wktVal",
-    address: "address",
-    district: "district",
-    name: "荔博园",
-});
-const toUpload = () => {
-    if(curRole == 0){
-        wx.miniProgram.navigateTo({
-            url: `/pages/subPages/carmera/index?gardenData=${JSON.stringify(dropdownGardenItem.value)}`,
-        });
-    }else{
-        ElMessage.warning("该功能正在升级中,敬请期待");
-    }
-};
-
-function toPage() {
-    const expertId = sessionStorage.getItem('expertId');
-    if(expertId){
-        router.push(`/chat_frame?userId=${expertId}`);
-    }else{
-        ElMessage.warning("专家信息不存在,请联系管理员");
-    }
-}
-const detailDialogRef = ref(null);
-
-const curRole = localStorage.getItem("SET_USER_CUR_ROLE");
-
-const farmName = ref('');
-const farmIdVal = ref(null);
-
-onActivated(() => {
-    if(curRole == 0){
-        if(localStorage.getItem('selectedFarmId')){
-            farmIdVal.value = localStorage.getItem('selectedFarmId');
-            fetchQuestPopup();
-        }
-    }else{
-        fetchQuestPopup();
-    }
-});
-
-
-const questPopupData = ref({});
-const bottomAnswerOptions = ref([]);
-//弹出问卷接口
-const fetchQuestPopup = () => {
-    const api = curRole == 0 ? VE_API.home.fetchQuestPopup({ farmId: farmIdVal.value }) : VE_API.home.popupByAgriculturalUserFarms();
-    api.then(({ data }) => {
-        if (Array.isArray(data) && data.length > 0) {
-            show.value = true;
-            farmName.value = data[0].farm?.name;
-            farmIdVal.value = data[0].farm?.id;
-            questPopupData.value = data[0];
-            bottomAnswerOptions.value = transformAnswerOptions(questPopupData.value?.answerOptions);
-        }
-    })
-    .catch(() => {});
-};
-
-function transformAnswerOptions(raw) {
-    let parsed = raw;
-    if (typeof raw === "string") {
-        try {
-            parsed = JSON.parse(raw);
-        } catch (e) {
-            parsed = [raw];
-        }
-    }
-    if (Array.isArray(parsed)) {
-        return parsed.map((item) => {
-            if (item && typeof item === "object") {
-                const label = item.name;
-                const value = item.value;
-                return { label, value };
-            }
-            return { label: String(item), value: item };
-        });
-    }
-    return [];
-}
-
-function getOptionLabel(opt) {
-    return opt?.label ?? String(opt ?? "");
-}
-
-function isYesOption(opt) {
-    const label = (opt?.label ?? "").toString();
-    const value = opt?.value;
-    if (typeof value === "boolean") return value === true;
-    if (typeof value === "number") return value === 1;
-    if (typeof value === "string") {
-        const v = value.trim().toLowerCase();
-        if (v === "1" || v === "true" || v === "yes") return true;
-    }
-    const yesKeywords = ["是", "yes", "确认", "同意", "有", "发生"];
-    return yesKeywords.some((k) => label.toLowerCase().includes(k.toLowerCase()));
-}
-
-const optValue = ref(null);
-function onBottomOptionClick(opt) {
-    show.value = false;
-    optValue.value = opt.value;
-    if (opt.value == 1) {
-        eventBus.emit("activeUpload:show", {
-            gardenIdVal: farmIdVal.value,
-            arrangeIdVal: questPopupData.value.arrangeId,
-            problemTitleVal: `请选择您出现${questPopupData.value.phenologyName}的时间`,
-            typeVal: "question",
-        });
-    } else {
-        saveQuestPopup(opt.label);
-    }
-}
-
-function saveQuestPopup(label) {
-    const agriDate = getTodayStr();
-    const params = {
-        farmId: farmIdVal.value,
-        phenologyId: questPopupData.value.phenologyId,
-        indicatorId: questPopupData.value.indicatorId,
-        answerValue: optValue.value,
-        agriDate: agriDate,
-    };
-    params.imagePaths = images.value;
-    VE_API.home.saveQuestPopup(params).then((res) => {
-        if (res.code === 0) {
-            show.value = false;
-            if (optValue.value != 1 && label != '未知') {
-                noShow.value = true;
-            }
-        }
-    });
-}
-
-function getTodayStr() {
-    const d = new Date();
-    const y = d.getFullYear();
-    const m = String(d.getMonth() + 1).padStart(2, "0");
-    const day = String(d.getDate()).padStart(2, "0");
-    return `${y}-${m}-${day}`;
-}
-const images = ref([]);
-const currentParams = ref({});
-function handleUploadSuccess(params) {
-    currentParams.value = params;
-    images.value = params.imagePaths;
-    detailDialogRef.value.showDialog(questPopupData.value.farmWorkLibId, "转发");
-}
-
-const activeUploadPopupRef = ref(null);
-function triggerFarmWork() {
-    activeUploadPopupRef.value.triggerFarmWork(currentParams.value);
-    saveQuestPopup();
-}
-
-// 获取触发图片
-const triggerImg = ref([]);
-const getTriggerImg = async () => {
-    const { data } = await VE_API.z_farm_work_record.getTriggerImg({ farmWorkRecordId: questPopupData.value.id });
-    triggerImg.value = data || [];
-}
-const noPopupBtn = async () => {
-    // await getTriggerImg();
-    // const query = {
-    //     askInfo: { title: "分享农事", content: "是否分享该农事给好友" },
-    //     shareText: `您的农事要做${questPopupData.value.farm}了 请查看!`,
-    //     id: questPopupData.value?.farmWorkLibId,
-    //     farmWorkOrderId: questPopupData.value?.farm?.orderId,
-    //     postImg: triggerImg.value.length ? base_img_url2 + triggerImg.value[triggerImg.value.length - 1].cloudFilename : ''
-    // };
-    // wx.miniProgram.navigateTo({
-    //     url: `/pages/subPages/share_page/index?pageParams=${JSON.stringify(query)}&type=priceSheet`,
-    // });
-};
-
-const handleForward = () => {
-    // noPopupBtn();
-};
-
-</script>
-<style lang="scss" scoped>
-.problem-reminder-popup {
-    width: 100%;
-    border-radius: 14px;
-    padding: 20px 15px;
-    box-sizing: border-box;
-    background-image: linear-gradient(180deg, #d1e7fd 0%, #ffffff 25%);
-    .problem-reminder {
-        display: flex;
-        flex-direction: column;
-        // 标题区域样式
-        .problem-reminder-header {
-            display: flex;
-            justify-content: space-between;
-            align-items: flex-start;
-            gap: 15px;
-
-            .title-section {
-                flex: 1;
-                font-size: 22px;
-                color: #1d1e1f;
-                line-height: 1.2;
-                div {
-                    font-family: "PangMenZhengDao";
-                }
-            }
-
-            .header-icon {
-                width: 88px;
-                height: 88px;
-                margin-top: -10px;
-                margin-right: -5px;
-            }
-        }
-        .question-section-wrapper {
-            border: 1px solid #ececec;
-            border-radius: 8px;
-            padding: 10px 8px;
-            margin-top: -10px;
-            background-color: #fff;
-            .question-text {
-                font-size: 16px;
-                color: #252525;
-                font-weight: 500;
-            }
-            .img {
-                margin: 12px 0;
-                width: 100%;
-                height: 140px;
-                img {
-                    width: 100%;
-                    height: 100%;
-                    border-radius: 6px;
-                    object-fit: cover;
-                }
-            }
-            .options-section {
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                background-color: rgba(33, 153, 248, 0.1);
-                border-radius: 8px;
-                padding: 7px 8px;
-                font-weight: 500;
-                .options-label {
-                    font-size: 14px;
-                    color: #2199f8;
-                }
-
-                .options-buttons {
-                    display: flex;
-                    flex-wrap: wrap;
-                    gap: 10px;
-                    .option-btn {
-                        padding: 5px 14px;
-                        border-radius: 20px;
-                        background: #fff;
-                        color: #252525;
-                        flex: 1;
-                    }
-                }
-            }
-        }
-        // 底部按钮区域样式
-        .bottom-buttons {
-            display: flex;
-            gap: 12px;
-            margin-top: 10px;
-        }
-        .forward-btn{
-            margin-top: 10px;
-        }
-        .bottom-btn {
-            flex: 1;
-            padding: 8px 0;
-            border-radius: 25px;
-            font-size: 16px;
-            text-align: center;
-            background: #fff;
-            border: 1px solid #e5e5e5;
-
-            &.yes-btn {
-                background-image: linear-gradient(180deg, #76c3ff 0%, #2199f8 100%);
-                color: #fff;
-                border: none;
-            }
-        }
-    }
-}
-
-.no-popup {
-    width: 76%;
-    border-radius: 14px;
-    padding: 28px 15px 20px;
-    box-sizing: border-box;
-    .no-popup-title {
-        font-size: 24px;
-        font-weight: 500;
-        text-align: center;
-        .no-popup-title-sub {
-            font-size: 16px;
-            margin-top: 8px;
-        }
-    }
-    .no-popup-btn {
-        background-color: #2199f8;
-        padding: 8px;
-        border-radius: 20px;
-        color: #fff;
-        font-size: 16px;
-        margin-top: 32px;
-        text-align: center;
-    }
-}
-</style>

+ 9 - 5
src/views/old_mini/home/index.vue

@@ -61,7 +61,7 @@
                     <div class="main-grid">
                         <div class="row" v-for="row in rows" :key="row.label">
                             <div v-for="card in row.cards" :key="card.id" class="status-card" :class="card.type"
-                                @click="handleBlockClick(card)">
+                                @click="handleBlockClick(card,row.label)">
                                 <badge class="status-badge" dot v-if="card.title === '冲楸异常'" :offset="[80, -10]">
                                 </badge>
                                 <div class="status-title">
@@ -103,7 +103,7 @@ const router = useRouter();
 const showAddClient = ref(false);
 const handleAddClientSelf = () => {
     showAddClient.value = false;
-    router.push("/create_farm?type=add");
+    router.push("/create_farm?from=home&type=add");
 };
 const handleAddClientInvite = () => {
     showAddClient.value = false;
@@ -207,14 +207,18 @@ const rows = ref([
 ]);
 
 
-const handleBlockClick = (block) => {
+const handleBlockClick = (block,label) => {
     // 预留点击跳转/弹窗逻辑
     console.log("点击卡片:", block);
-    router.push(`/work_detail?id=${block.id}`);
+    if(label === '农事'){
+        router.push(`/work_detail?id=${block.id}`);
+    }else{
+        router.push(`/agricultural_details`);
+    }
 };
 
 const handleMoreClick = () => {
-    router.push("/agricultural_details");
+    router.push("/farm_details");
 };
 
 const handleTitleTagClick = (farmId) => {

+ 40 - 6
src/views/old_mini/home/subPages/prescriptionPage.vue

@@ -203,7 +203,7 @@
         </div>
     </popup>
 
-    <qr-code-popup ref="qrCodePopupRef">
+    <qr-code-popup ref="qrCodePopupRef" :close-on-click-overlay="false">
         <template #success>
             <div class="success-text">
                 <img class="success-icon" src="@/assets/img/home/right.png" alt="">
@@ -243,8 +243,6 @@ const route = useRoute();
 const store = useStore();
 const qrCodePopupRef = ref(null);
 
-// qrCodePopupRef.value.showPopup();
-
 // 农场规模
 const farmScale = ref({
     regularWorkerCount: "",
@@ -580,15 +578,24 @@ async function submit() {
         //     expertMiniUserId: '81881',
         // }
         // const res = await VE_API.basic_farm.saveBasicFarmInfoByExpert(params);
-        const res = await VE_API.farm.saveFarm(route.query);
+        const param = {
+            ...route.query,
+            expertMiniUserId: '81881',
+            speciesContainer: JSON.parse(route.query.speciesContainer),
+        }
+        const res = await VE_API.basic_farm.saveBasicFarmInfoByExpertV3(param);
         if (res.code === 0) {
             // showSuccessPopup.value = true;
 
             // 设置选中当前新增的农场
             localStorage.setItem("selectedFarmId", res.data.id);
             localStorage.setItem("selectedFarmName", res.data.name);
+            if(route.query.invite){
+                qrCodePopupRef.value.showPopup();
+                return;
+            }
             router.replace('/home');
-            return true;
+            // return true;
         } else {
             ElMessage.error(res.msg || '提交失败,请重试');
             return false;
@@ -682,12 +689,26 @@ const getTodayDate = () => {
 
 const firstPhenology = ref({});
 const phenologyData = ref({});
+// 从 query 中解析 containerId(支持 speciesContainer 数组/对象或 JSON 字符串)
+const getContainerIdFromQuery = () => {
+    const sc = route.query.speciesContainer;
+    if (sc != null) {
+        const parsed = typeof sc === 'string' ? (tryParse(sc) || []) : sc;
+        const first = Array.isArray(parsed) ? parsed[0] : parsed;
+        return first?.containerId ?? route.query.containerId;
+    }
+    return route.query.containerId;
+};
+const tryParse = (str) => {
+    try { return JSON.parse(str); } catch { return null; }
+};
+
 // 获取当前和下一个物候期
 const getCurrentAndNextPhenology = async () => {
     try {
         const { data } = await VE_API.home.getCurrentAndNextPhenology({ 
             expertMiniUserId: '81881',
-            containerId: route.query.containerId,
+            containerId: getContainerIdFromQuery(),
         });
         if (data && Array.isArray(data)) {
             // 初始化物候期表单数据,日期使用第一个物候期的 startDate
@@ -1303,6 +1324,19 @@ const handlePeriodConfirm = async () => {
         }
     }
 }
+
+.success-text {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-size: 24px;
+    color: #000;
+    .success-icon {
+        width: 28px;
+        height: 28px;
+        margin-right: 5px;
+    }
+}
 </style>
 
 <style lang="scss">

+ 1 - 1
src/views/old_mini/interactionList/index.vue

@@ -1,5 +1,5 @@
 <template>
-    <custom-header name="农情互动" bgColor="#f2f4f5"></custom-header>
+    <custom-header :isClose="true" name="农情互动" bgColor="#f2f4f5"></custom-header>
     <div class="interaction-list-wrapper">
         <div class="interaction-card">
             <img src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg" alt="">

+ 0 - 1891
src/views/old_mini/modify_work/addWork.vue

@@ -1,1891 +0,0 @@
-<template>
-    <div class="new-farming-page" ref="pageRef">
-        <custom-header name="新增农事"></custom-header>
-        <div class="new-farming-content">
-            <el-form
-                ref="formRef"
-                style="max-width: 600px"
-                label-position="left"
-                :rules="rules"
-                :model="dynamicValidateForm"
-                class="demo-dynamic"
-            >
-                <div class="farm-card">
-                    <div class="card-title between">
-                        基本信息
-                        <div>
-                            <el-select size="small" v-model="tagName" placeholder="标记为" style="width: 94px">
-                                <el-option
-                                v-for="item in tagList"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                                />
-                            </el-select>
-                        </div>
-                    </div>
-                    <div class="info-content">
-                        <el-form-item label-width="82px" class="form-item name-item" prop="name" label="农事名称"> 
-                            <el-input
-                                v-model="dynamicValidateForm.name"
-                                style="width: 100%"
-                                placeholder="请输入农事名称"
-                            />
-                        </el-form-item>
-                        <el-form-item label-width="82px" class="form-item" prop="executeDate" label="执行时间">
-                            <el-date-picker
-                                v-model="dynamicValidateForm.executeDate"
-                                value-format="YYYY-MM-DD"
-                                type="date"
-                                placeholder="请选择执行时间"
-                                style="width: 100%"
-                                :editable="false"
-                            />
-                        </el-form-item>
-                    </div>
-                </div>
-
-                <div class="farm-card">
-                    <!-- 农情互动 -->
-                    <div class="card-title border-bottom between">
-                        <div>农情互动</div>
-                        <!-- <span class="del-tag">删除互动</span> -->
-                    </div>
-                    <div class="interact-form">
-                        <div class="interact-form-item" data-interact-field="phenologyId">
-                            <div class="form-label">互动阶段</div>
-                            <div class="form-input-wrapper two-select">
-                                <div class="select-item">
-                                    <el-select
-                                        style="width: 100%"
-                                        v-model="interactFormData.phenologyId"
-                                        placeholder="请选择物候期"
-                                        @change="handlePhenologyChange"
-                                        :editable="false">
-                                        <el-option
-                                            v-for="item in phenologyList"
-                                            :key="item.id"
-                                            :label="item.name"
-                                            :value="item.id"
-                                        ></el-option>
-                                    </el-select>
-                                </div>
-                                <div class="select-item">
-                                    <el-select style="width: 100%" v-model="interactFormData.reproductiveId" placeholder="请选择物候期" :editable="false">
-                                        <el-option
-                                            v-for="item in reproductiveList"
-                                            :key="item.id"
-                                            :label="item.name"
-                                            :value="item.id"
-                                        ></el-option>
-                                    </el-select>
-                                </div>
-                            </div>
-                        </div>
-                        <!-- <div class="interact-form-item" data-interact-field="interactionTime">
-                            <div class="form-label">互动日期</div>
-                            <div class="form-input-wrapper">
-                                <el-date-picker
-                                    v-model="interactFormData.interactionTime"
-                                    style="width: 100%"
-                                    type="date"
-                                    placeholder="请选择日期"
-                                    :editable="false"
-                                />
-                            </div>
-                        </div> -->
-                        <div class="interact-form-item" data-interact-field="interactionQuestion">
-                            <div class="form-label">互动问题</div>
-                            <el-input
-                                v-model="interactFormData.interactionQuestion"
-                                type="textarea"
-                                :rows="4"
-                                placeholder="请设置互动问题"
-                                class="question-textarea"
-                            />
-                        </div>
-                    </div>
-                </div>
-
-                <div class="farm-card prescription-content common-inputs">
-                    <div class="card-title pb-12 between">
-                        药物处方
-                        <div class="add-tag" @click="addDomain()">
-                            <el-icon color="#2199F8"><Plus /></el-icon>新增药物
-                        </div>
-                    </div>
-                    <el-form-item label-width="82px" class="form-item" prop="usageMode" label="施用方式">
-                        <el-select
-                            v-model="dynamicValidateForm.usageMode"
-                            placeholder="请选择施用方式"
-                            style="width: 100%"
-                        >
-                            <el-option
-                                v-for="(usage, uId) in allUsageModeList"
-                                :key="uId"
-                                :label="usage"
-                                :value="usage"
-                            />
-                        </el-select>
-                    </el-form-item>
-                    <el-form-item
-                        label-width="82px"
-                        class="form-item"
-                        prop="executeStyle"
-                        label="执行方式"
-                    >
-                        <el-select
-                            class="select-item"
-                            v-model="dynamicValidateForm.executeStyle"
-                            placeholder="执行方式"
-                            @change="handleExecutionMethodChange"
-                        >
-                            <el-option
-                                v-for="(item, index) in modeList"
-                                :key="index"
-                                :label="item.name"
-                                :value="item.value"
-                            />
-                        </el-select>
-                    </el-form-item>
-
-                    <div v-if="dynamicValidateForm.usageMode !== '人工'">
-                        <el-form-item
-                            v-for="(domain, index) in dynamicValidateForm.prescription.pesticideFertilizerList"
-                            :key="index"
-                            :prop="'prescription.pesticideFertilizerList.' + index + '.value'"
-                            class="prescription-item"
-                        >
-                            <div class="recipe-item">
-                                <div class="recipe-form">
-                                    <div class="form-box">
-                                        <div class="form-index">药肥{{ index + 1 }}</div>
-                                        <div class="box-item" v-if="domain.typeName">
-                                            <div class="form-l">药肥类型</div>
-                                            <div class="form-r r-text">
-                                                {{ domain.typeName }}
-                                            </div>
-                                        </div>
-                                        <div class="box-item">
-                                            <div class="form-l">药肥名称</div>
-                                            <div class="form-r">
-                                                <el-select
-                                                    filterable
-                                                    @change="handlePesticideFertilizerChange(index)"
-                                                    v-model="domain.code"
-                                                    placeholder="请选择"
-                                                    style="width: 150px"
-                                                >
-                                                    <el-option
-                                                        v-for="item in pesticideFertilizersOptions"
-                                                        :key="item.pesticideFertilizerCode"
-                                                        :label="item.defaultName || item.name"
-                                                        :value="item.pesticideFertilizerCode"
-                                                    />
-                                                </el-select>
-                                            </div>
-                                        </div>
-
-                                        <div class="mt-8">
-                                            <div class="box-item sub-item" :data-ratio-index="index">
-                                                <div class="form-l has-sub">
-                                                    <div class="main-name">药肥配比</div>
-                                                </div>
-                                                <div class="form-r input-box text-center input-unit">
-                                                    <el-input
-                                                        v-model="domain.ratio"
-                                                        type="number"
-                                                        step="0.01"
-                                                        style="width: 150px"
-                                                        placeholder="请输入"
-                                                    >
-                                                        <template #append>倍</template>
-                                                    </el-input>
-                                                </div>
-                                            </div>
-                                            <div class="box-item sub-item" :data-dosage-index="index">
-                                                <div class="form-l has-sub">
-                                                    <div class="main-name">单亩用量</div>
-                                                </div>
-                                                <div class="form-r input-box text-center">
-                                                    <el-input
-                                                        v-model="domain.dosage"
-                                                        type="number"
-                                                        step="0.01"
-                                                        style="width: 150px"
-                                                        placeholder="请输入"
-                                                    >
-                                                        <template #append>{{ domain.unit }}</template>
-                                                    </el-input>
-                                                </div>
-                                            </div>
-
-                                            
-                                            <div class="box-item">
-                                                        <div class="form-l">药肥品牌</div>
-                                                        <div class="form-r">
-                                                            <el-input
-                                                                v-model="domain.brand"
-                                                                placeholder="药肥品牌"
-                                                                style="width: 150px"
-                                                            />
-                                                        </div>
-                                                    </div>
-                                                    <div class="box-item">
-                                                        <div class="form-l">药肥单价</div>
-                                                        <div class="form-r">
-                                                            <el-input
-                                                                style="width: 150px"
-                                                                v-model="domain.price"
-                                                                type="number"
-                                                                step="0.01"
-                                                                placeholder="单价"
-                                                            >
-                                                                <template #append>元/{{ domain.unit }}</template>
-                                                            </el-input>
-                                                        </div>
-                                                    </div>
-                                        </div>
-                                        <!-- <div class="input-box mark-box">
-                                            <el-input
-                                                v-model="domain.remark"
-                                                style="width: 100%"
-                                                placeholder="备注:用药注意事项"
-                                            />
-                                        </div> -->
-                                        <div class="action-btn">
-                                            <el-button
-                                                class="btn delete-btn"
-                                                @click.prevent="removeDomain(prescriptionI, domain)"
-                                            >
-                                                删除
-                                            </el-button>
-                                            <el-button
-                                                type="default"
-                                                class="btn"
-                                                @click.prevent="resetItemForm(prescriptionI, index)"
-                                            >
-                                                重置
-                                            </el-button>
-                                        </div>
-                                    </div>
-                                    <!-- </el-form-item> -->
-                                </div>
-                            </div>
-                        </el-form-item>
-                    </div>
-                </div>
-
-                <div
-                    class="farm-card prescription-content common-inputs"
-                >
-                    <div class="medicine-wrap">
-                        <div class="medicine-box">
-                            <div class="form-index">服务报价</div>
-                            <div class="box-wrap">
-                                <div class="medicine-item mt-8">
-                                    <div class="item-name">单亩价格</div>
-                                    <div class="item-val">
-                                        <el-input
-                                            style="width: 150px"
-                                            v-model="servicePricePerMu"
-                                            type="number"
-                                            step="0.01"
-                                            placeholder="服务单价"
-                                        >
-                                            <template #append>元/亩</template>
-                                        </el-input>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-
-                <div class="submit-btn">
-                    <div class="btn second" @click.prevent="cancelEdit">取消</div>
-                    <div class="btn" @click.prevent="submitForm(formRef)">保存</div>
-                </div>
-            </el-form>
-        </div>
-    </div>
-</template>
-
-<script setup>
-import { onActivated, ref, reactive, onDeactivated, onBeforeUnmount, computed, onMounted, nextTick } from "vue";
-import { useRouter, useRoute } from "vue-router";
-import { ElMessage, ElMessageBox } from "element-plus";
-import customHeader from "@/components/customHeader.vue";
-import { useStore } from "vuex";
-import { formatArea } from "@/common/commonFun";
-import interactPopup from "@/components/popup/interactPopup.vue";
-
-import dayjs from "dayjs";
-const store = useStore();
-const pageRef = ref(null);
-const router = useRouter();
-const route = useRoute();
-
-const tagList = ref([
-    { label: "托管农事", value: 2 },
-    { label: "特别关注", value: 1 },
-]);
-
-const tagName = ref("");
-
-// 互动表单数据
-const interactFormData = ref({
-    phenologyId: "",
-    reproductiveId: "",
-    // interactionTime: "",
-    interactionQuestion: "",
-});
-const phenologyList = ref([]);
-const reproductiveList = ref([]);
-const handlePhenologyChange = async (val) => {
-    interactFormData.value.reproductiveId = "";
-    const { data } = await VE_API.farm.listByPhenologyId({ phenologyId: val });
-    if (!data || !Array.isArray(data)) return;
-    reproductiveList.value = data;
-};
-
-onMounted(() => {
-    getPhenologyList()
-});
-
-const statusMap = ref({
-    0: "取消关注",
-    1: "特别关注",
-    2: "托管农事",
-});
-const detailData = ref({});
-
-const getPriceList = async (schemeId, pesticideFertilizerCodes) => {
-    const { data } = await VE_API.farm.getPriceList({ schemeId, pesticideFertilizerCodes });
-    if (!data || !Array.isArray(data)) return;
-
-    dynamicValidateForm.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;
-    });
-
-    quotationData.value = { ...detailData.value, ...dynamicValidateForm };
-};
-
-const quotationData = ref({});
-
-// 计算单个药肥的总计:单价 * 单亩用量 * 亩数
-const getPesticideTotal = (pesticide) => {
-    const price = Number(pesticide.price || 0);
-    const dosage = Number(pesticide.dosage || 0); // 单亩用量
-    const area = Number(detailData.value.farm?.mianji || 0); // 农场面积
-    if (!price || !dosage || !area) return "--";
-    const total = (price * dosage * area).toFixed(2);
-    return total;
-};
-
-function getServiceCost(cost, area) {
-    if (!cost || !area) return "--";
-    return (parseFloat(cost) * parseFloat(area)).toFixed(2);
-}
-
-const resetForm = (formEl) => {
-    if (!formEl) return;
-    formEl.resetFields();
-};
-
-// 清空所有数据
-const clearData = () => {
-    // 清空表单
-    resetForm(formRef.value);
-
-    // 清空详情数据
-    detailData.value = {};
-
-    // 清空表单数据
-    dynamicValidateForm.name = "";
-    dynamicValidateForm.purpose = "";
-    dynamicValidateForm.executeDate = dayjs().format("YYYY-MM-DD");
-    dynamicValidateForm.usageMode = "";
-    dynamicValidateForm.prescription = {
-        id: "",
-        usageMode: "",
-        farmWorkLibCode: "",
-        expertId: "",
-        phenology: "",
-        soil: "",
-        speed: null,
-        pesticideFertilizerList: [
-            {
-                code: "",
-                name: "",
-                dosage: "",
-                ratio: "",
-                typeName: "",
-                muPrice: 0,
-                executeStyle: 1,
-                unit: "",
-            },
-        ],
-    };
-};
-
-onDeactivated(() => {
-    clearData();
-});
-
-onBeforeUnmount(() => {
-    clearData();
-});
-
-const cancelEdit = () => {
-    router.back();
-};
-
-const modeList = ref([
-    { name: "无人机", value: 1 },
-    { name: "人工", value: 2 },
-    { name: "无人机+人工", value: 3 },
-]);
-
-const handleExecutionMethodChange = (index, val) => {
-    // if (val == 1) {
-    //     servicePricePerMu.value = detailData.value.uavServicePrice;
-    // } else {
-    //     servicePricePerMu.value = detailData.value.manualServicePrice;
-    // }
-};
-
-// 表单
-const formRef = ref();
-const dynamicValidateForm = reactive({
-    name: "",
-    executeDate: dayjs().format("YYYY-MM-DD"),
-    usageMode: "",
-    executeStyle: 2,
-    executionMethod: 2,
-    prescription: {
-        id: "",
-        usageMode: "",
-        farmWorkLibCode: "",
-        expertId: "",
-        phenology: "",
-        soil: "",
-        speed: null,
-        pesticideFertilizerList: [
-            {
-                code: "",
-                id: "",
-                name: "",
-                dosage: "",
-                ratio: "",
-                typeName: "",
-                muPrice: 0,
-                executeStyle: 1,
-                unit: "",
-            },
-        ],
-    },
-});
-
-const rules = {
-    name: [
-        {
-            required: true,
-            message: "请输入农事名称",
-            trigger: "blur",
-        },
-    ],
-    executeDate: [
-        {
-            required: false,
-            message: "请选择执行时间",
-            trigger: "blur",
-        },
-    ],
-};
-
-const addDomain = () => {
-    if (!dynamicValidateForm.prescription.pesticideFertilizerList) {
-        dynamicValidateForm.prescription.pesticideFertilizerList = [];
-    }
-    dynamicValidateForm.prescription.pesticideFertilizerList.unshift({
-        code: "",
-        name: "",
-        dosage: "",
-        ratio: "",
-        typeName: "",
-        muPrice: 0,
-        id: "",
-        executeStyle: 1,
-        unit: "",
-    });
-};
-
-let pesticideFertilizersOptions = ref([]);
-VE_API.z_farm_work_order.pesticideFertilizersList().then(({ data }) => {
-    pesticideFertilizersOptions.value = data;
-});
-
-const allUsageModeList = ["树冠+内膛", "地面喷施", "树冠喷施", "根部施", "叶面施", "内膛喷施", "其他"];
-
-/**
- * 选择药肥的时候修改订单中药肥pesticideFertilizerId 以外其他数据
- * @param index
- */
-const handlePesticideFertilizerChange = (index) => {
-    const currentItem = dynamicValidateForm.prescription.pesticideFertilizerList[index];
-    let obj = pesticideFertilizersOptions.value.filter((item) => currentItem.code === item.pesticideFertilizerCode)[0];
-    if (obj) {
-        dynamicValidateForm.prescription.pesticideFertilizerList[index] = {
-            ...currentItem,
-            code: obj.pesticideFertilizerCode,
-            id: obj.id,
-            name: obj.name || obj.defaultName,
-            typeName: obj.typeName,
-            unit: obj.unit,
-            ratio: "", // 清空亩兑水量
-            dosage: "", // 清空单亩用量
-            executeStyle: obj.executionMethod || 1,
-        };
-    }
-};
-
-const removeDomain = (index) => {
-    if (index !== -1 && dynamicValidateForm.prescription.pesticideFertilizerList) {
-        dynamicValidateForm.prescription.pesticideFertilizerList.splice(index, 1);
-    }
-};
-
-const resetItemForm = (index) => {
-    if (dynamicValidateForm.prescription.pesticideFertilizerList) {
-        dynamicValidateForm.prescription.pesticideFertilizerList[index] = {
-            code: "",
-            id: "",
-            name: "",
-            dosage: "",
-            ratio: "",
-            typeName: "",
-            muPrice: 0,
-            executeStyle: 1,
-            unit: "",
-        };
-    }
-};
-
-const servicePricePerMu = ref(null);
-
-// 服务费用总计(数值):亩单价 * 亩数
-const serviceCostTotal = computed(() => {
-    const price = Number(servicePricePerMu.value || 0);
-    const area = Number(detailData.value?.farm?.mianji || detailData.value?.area || 0);
-    if (!price || !area) return 0;
-    return Number((price * area).toFixed(2));
-});
-
-// 显示用的服务费用(字符串或 "--")
-const getServiceTotal = () => {
-    const total = serviceCostTotal.value;
-    return total ? total.toFixed(2) : "--";
-};
-
-// 药肥费用总计:∑(单价 * 单亩用量 * 亩数)
-const pesticideCostTotal = computed(() => {
-    const list = dynamicValidateForm.prescription?.pesticideFertilizerList || [];
-    const area = Number(detailData.value?.farm?.mianji || detailData.value?.area || 0);
-    if (!list.length || !area) return 0;
-
-    const sum = list.reduce((acc, item) => {
-        const price = Number(item?.price || 0);
-        const dosage = Number(item?.dosage || 0);
-        if (!price || !dosage) return acc;
-        return acc + price * dosage * area;
-    }, 0);
-
-    return Number(sum.toFixed(2));
-});
-
-// 报价合计 = 药肥费用 + 服务费用
-const totalCost = computed(() => {
-    const pesticide = Number(pesticideCostTotal.value || 0);
-    const service = Number(serviceCostTotal.value || 0);
-    if (!pesticide && !service) return '--';
-    return Number((pesticide + service).toFixed(2));
-});
-
-const submitForm = (formEl) => {
-    if (!formEl) return;
-    formEl.validate(async (valid) => {
-        if (valid) {
-            // 校验标记是否已选择
-            if (!validateTagName()) return;
-            // 校验农情互动,不通过,直接返回失败
-            if (!validateInteractForm()) return false;
-
-            // 校验药肥的亩兑水量和单亩用量是否填写
-            if (!validatePesticideDosage()) return;
-
-            // 保存报价信息前先校验是否填写完整
-            if (!validatePriceInfos()) return;
-
-            // 检验服务报价是否填写
-            if (!validateServicePrice()) return;
-            submit();
-        } else {
-            console.log("error submit!");
-        }
-    });
-};
-
-// 检验服务报价是否填写
-const validateServicePrice = () => {
-    if (!servicePricePerMu.value) {
-        ElMessage.warning("请完善服务报价信息");
-        return false;
-    }
-    return true;
-};
-
-// 校验药肥的亩兑水量和单亩用量是否填写
-const validatePesticideDosage = () => {
-    const list = dynamicValidateForm.prescription?.pesticideFertilizerList || [];
-    if (!list.length) return true; // 没有药肥就不校验
-
-    // 找到第一个未填写完整的药肥
-    for (let i = 0; i < list.length; i++) {
-        const item = list[i];
-        // 如果选择了药肥(有 code),就必须填写亩兑水量和单亩用量
-        if (item.code) {
-            const hasRatio = item.ratio !== undefined && item.ratio !== null && item.ratio !== "";
-            const hasDosage = item.dosage !== undefined && item.dosage !== null && item.dosage !== "";
-
-            if (!hasRatio || !hasDosage) {
-                ElMessage.warning("请完善药物处方信息");
-                return false;
-            }
-        }
-    }
-    return true;
-};
-
-// 校验报价信息是否填写完整
-const validatePriceInfos = () => {
-    const list = dynamicValidateForm.prescription?.pesticideFertilizerList || [];
-    if (!list.length) return true; // 没有药肥就不校验
-
-    // 找到第一个未填写完整的药肥
-    const invalidIndex = list.findIndex((item) => {
-        // 只要选择了药肥(有 id),就必须填写单价和品牌
-        if (!item.id) return false; // 没选择药肥不校验
-        const hasPrice = item.price !== undefined && item.price !== null && item.price !== "";
-        const hasBrand = !!item.brand;
-        return !hasPrice || !hasBrand;
-    });
-
-    if (invalidIndex !== -1) {
-        ElMessage.warning("请先完善报价信息");
-        return false;
-    }
-    return true;
-};
-
-const submit = async () => {
-    const params = {
-        ...dynamicValidateForm,
-        serviceMuPrice: servicePricePerMu.value,
-        prescription: dynamicValidateForm.prescription,
-    };
-    const { data, code } = await VE_API.monitor.saveFarmWorkLib(params);
-
-    if (code === 0) {
-        handleSaveInteract(data.id);
-    } else {
-        ElMessage.error(data.message || "保存失败");
-    }
-
-    // 保存报价信息
-    const priceList = {
-        schemeId: route.query.schemeId,
-        pesticideFertilizerInfos: dynamicValidateForm.prescription.pesticideFertilizerList.map((item) => {
-            return {
-                pesticideFertilizerId: item.id,
-                price: item.price,
-                brand: item.brand,
-            };
-        }),
-    };
-    VE_API.farm.updateBatchByScheme(priceList).then(async (res) => {
-        if (res.code === 0) {
-            ElMessage.success("保存成功");
-            router.back();
-        }
-    });
-
-    // 切换标记
-    // VE_API.container_farm_work_arrange.toggleFollow({ id: data.id, isFollow: tagName.value });
-};
-
-// 获取物候期列表
-const getPhenologyList = async () => {
-    const containerSpaceTimeId = route.query.containerSpaceTimeId;
-    if (!containerSpaceTimeId) {
-        phenologyList.value = [];
-        return;
-    }
-    const res = await VE_API.monitor.listPhenology({ containerSpaceTimeId });
-    if (res.code === 0) {
-        phenologyList.value = res.data || [];
-    }
-};
-
-// 获取互动设置详情
-const getFarmWorkArrangeDetail = async (id) => {
-    if (!id) return;
-    const { data, code } = await VE_API.farm.getFarmWorkArrangeDetail({ id });
-    if (code === 0) {
-        tagName.value = data.isFollow;
-        interactFormData.value = {
-            phenologyId: data.phenologyId || "",
-            reproductiveId: data.reproductiveId || "",
-            // interactionTime: data.interactionTime || "",
-            interactionQuestion: data.interactionQuestion || "",
-        };
-    }
-};
-
-// 格式化日期
-const formatInteractDate = (date) => {
-    // 如果已经是字符串格式 YYYY-MM-DD,直接返回
-    if (typeof date === "string" && /^\d{4}-\d{2}-\d{2}$/.test(date)) {
-        return date;
-    }
-    // 如果是 Date 对象,进行转换
-    if (date instanceof Date) {
-        let year = date.getFullYear();
-        let month = String(date.getMonth() + 1).padStart(2, "0");
-        let day = String(date.getDate()).padStart(2, "0");
-        return `${year}-${month}-${day}`;
-    }
-    // 其他情况返回原值
-    return date;
-};
-
-// 校验标记是否已选择
-const validateTagName = () => {
-    if (tagName.value !== 1 && tagName.value !== 2) {
-        ElMessage.warning("请选择标记类型");
-        return false;
-    }
-    return true;
-};
-
-// 验证互动表单
-const validateInteractForm = () => {
-    if (!interactFormData.value.phenologyId) {
-        ElMessage.warning("请选择互动阶段");
-        return false;
-    }
-    if (!interactFormData.value.reproductiveId) {
-        ElMessage.warning("请选择互动阶段");
-        return false;
-    }
-    // if (!interactFormData.value.interactionTime) {
-    //     ElMessage.warning("请选择互动时间");
-    //     return false;
-    // }
-    if (!interactFormData.value.interactionQuestion?.trim()) {
-        ElMessage.warning("请设置互动问题");
-        return false;
-    }
-    return true;
-};
-
-// 保存互动设置
-const handleSaveInteract = async (id) => {
-    const paramsObj = {
-        farmWorkId: id,
-        schemeId: route.query.schemeId,
-        ...interactFormData.value,
-        // interactionTime: formatInteractDate(interactFormData.value.interactionTime),
-    };
-
-    try {
-        const res = await VE_API.monitor.updateFarmWorkArrange(paramsObj);
-        if (res.code !== 0) {
-            ElMessage.error(res.message || "保存农情互动信息失败");
-            return false;
-        }
-        return true;
-    } catch (error) {
-        console.error("保存互动设置失败:", error);
-        ElMessage.error("保存失败,请重试");
-        return false;
-    }
-};
-
-// 删除互动设置
-const handleDeleteInteract = () => {
-    ElMessageBox.confirm("确定要删除该互动设置吗?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-    })
-        .then(async () => {
-            if (!detailData.value.id) return;
-            const res = await VE_API.monitor.deleteFarmWorkArrange({ id: detailData.value.id });
-            if (res.code === 0) {
-                ElMessage.success("删除成功");
-                // 清空表单数据
-                interactFormData.value = {
-                    phenologyId: "",
-                    reproductiveId: "",
-                    // interactionTime: "",
-                    interactionQuestion: "",
-                };
-            } else {
-                ElMessage.error(res.message || "删除失败");
-            }
-        })
-        .catch(() => {
-            // 用户取消,不做任何操作
-        });
-};
-</script>
-
-<style lang="scss" scoped>
-.new-farming-page {
-    height: 100vh;
-    position: relative;
-    overflow: auto;
-    font-size: 14px;
-    background: #f2f3f5;
-    ::v-deep {
-        .custom-header {
-            position: fixed;
-            top: 0;
-            padding-bottom: 1px;
-        }
-    }
-    .step-wrap {
-        padding: 12px 0;
-    }
-    .box-wrap {
-        background: #fff;
-        padding: 20px 10px 10px;
-        border-radius: 6px;
-    }
-    .new-farming-content {
-        margin: 41px 0 62px 0;
-        padding: 4px 12px 8px 12px;
-        width: 100%;
-        box-sizing: border-box;
-        &.no-permission {
-            margin-bottom: 12px;
-        }
-
-        // ::v-deep {
-        //     .el-select__input {
-        //         color: #2199F8;
-        //     }
-        //     .el-select__wrapper {
-        //         color: #2199F8;
-        //         min-height: 30px;
-        //         line-height: 28px;
-        //         box-shadow: 0 0 0 1px rgba(33, 153, 248, 0.3) inset;
-        //     }
-        //     .el-select__caret {
-        //         color: #2199F8;
-        //     }
-        //     .el-select__placeholder {
-        //         color: #2199F8;
-        //     }
-        //     .el-radio {
-        //         margin-right: 16px;
-        //     }
-        //     .el-input__wrapper {
-        //         box-shadow: 0 0 0 1px rgba(33, 153, 248, 0.3) inset;
-        //     }
-        //     .el-input__prefix {
-        //         color: #2199F8;
-        //     }
-        //     .el-input__inner {
-        //         color: #2199F8;
-        //         --el-input-placeholder-color: rgba(33, 153, 248, 0.43);
-        //     }
-        //     .el-tag.el-tag--info {
-        //         --el-tag-text-color: #2199F8;
-        //         --el-tag-bg-color: rgba(33, 153, 248, 0.1);
-        //     }
-        // }
-        .farm-info {
-            color: rgba(0, 0, 0, 0.6);
-            font-size: 14px;
-            margin-top: 14px;
-            .info-title {
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                color: rgba(41, 41, 41, 0.3);
-                .info-more {
-                    display: flex;
-                    align-items: center;
-                }
-            }
-        }
-        .farm-photo {
-            margin-top: 10px;
-            .photo-list {
-                display: flex;
-                align-items: center;
-                width: 100%;
-                overflow: auto;
-                padding-bottom: 10px;
-                .photo-item {
-                    width: 92px;
-                    height: 92px;
-                    border-radius: 8px;
-                    object-fit: cover;
-                }
-                .img-item {
-                    img {
-                        width: 92px;
-                        height: 92px;
-                        border-radius: 8px;
-                        object-fit: cover;
-                        margin-right: 12px;
-                    }
-                }
-            }
-            .list-text {
-                text-align: center;
-                color: rgba(0, 0, 0, 0.5);
-                padding-top: 2px;
-            }
-        }
-        .submit-btn {
-            z-index: 10;
-            position: fixed;
-            bottom: 0px;
-            left: 0;
-            width: 100%;
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            padding: 12px;
-            background: #fff;
-            box-sizing: border-box;
-            box-shadow: 0 4px 4px rgba(0, 0, 0, 0.4);
-            border-top: 1px solid rgba(0, 0, 0, 0.1);
-            &.center-btn {
-                justify-content: center;
-            }
-            .btn {
-                height: 40px;
-                border-radius: 25px;
-                line-height: 40px;
-                width: 110px;
-                text-align: center;
-                background: linear-gradient(180deg, #70bffe, #2199f8);
-                color: #ffffff;
-                font-size: 14px;
-                &.second {
-                    background: #ffffff;
-                    border: 1px solid rgba(153, 153, 153, 0.5);
-                    color: #666666;
-                }
-            }
-            .btn + .btn {
-                margin-left: 12px;
-            }
-        }
-    }
-    .card-title {
-        font-size: 16px;
-        font-weight: bold;
-        color: #000;
-        display: flex;
-        align-items: center;
-        &.between {
-            justify-content: space-between;
-            .del-tag {
-                color: #e04c4c;
-                border: 1px solid #e04c4c;
-                border-radius: 5px;
-                padding: 4px 14px;
-                font-size: 12px;
-                font-weight: normal;
-            }
-            .title-tag {
-                padding: 2px 10px;
-                height: 26px;
-                line-height: 26px;
-            }
-        }
-        // justify-content: space-between;
-        .add-tag {
-            font-size: 12px;
-            color: #2199f8;
-            padding: 0px 11px;
-            border: 1px solid #2199f8;
-            border-radius: 5px;
-            font-weight: normal;
-            height: 28px;
-            line-height: 28px;
-        }
-        .type-tag {
-            margin-left: 5px;
-            font-size: 12px;
-            color: #000000;
-            padding: 0 10px;
-            background: rgba(119, 119, 119, 0.1);
-            border-radius: 20px;
-            font-weight: normal;
-            height: 26px;
-            line-height: 26px;
-            display: inline-block;
-        }
-    }
-    .pb-12 {
-        padding-bottom: 12px;
-    }
-    .farm-card {
-        background: #ffffff;
-        border-radius: 8px;
-        padding: 12px 12px 0 12px;
-        width: 100%;
-        box-sizing: border-box;
-        margin-top: 10px;
-        color: rgba(0, 0, 0, 0.4);
-        &.progress {
-            display: flex;
-            align-items: center;
-            padding: 12px;
-            .progress-title {
-                margin-right: 12px;
-            }
-            ::v-deep {
-                .el-radio {
-                    margin-right: 10px;
-                }
-            }
-        }
-        &.map-content {
-            margin-top: 12px;
-        }
-        &.prescription-content {
-            padding: 12px;
-        }
-        .border-bottom {
-            padding-bottom: 7px;
-            border-bottom: 1px solid rgba(245, 245, 245, 0.99);
-        }
-    }
-
-    .table-item {
-        padding: 6px 0 10px 0;
-        .form-item {
-            display: flex;
-            align-items: center;
-            font-size: 14px;
-            color: #767676;
-            height: 24px;
-            .item-name {
-                width: 80px;
-                color: rgba(0, 0, 0, 0.2);
-            }
-        }
-    }
-
-    .new-wrap {
-        border-radius: 5px;
-        text-align: center;
-        border: 1px solid rgba(225, 225, 225, 0.5);
-        .new-title {
-            background: rgba(241, 241, 241, 0.4);
-            border-radius: 5px 5px 0 0;
-            border-bottom: 1px solid rgba(225, 225, 225, 0.5);
-            display: flex;
-            color: #767676;
-            // justify-content: space-around;
-            padding: 5px 6px;
-            font-size: 12px;
-            .table-name {
-                width: 24px;
-                font-size: 12px;
-                margin: 0 auto;
-            }
-        }
-
-        .title-1 {
-            width: 46px;
-        }
-        .title-2 {
-            flex: 1;
-        }
-        .title-3 {
-            width: 52px;
-        }
-        .title-4 {
-            width: 56px;
-        }
-        .title-5 {
-            width: 52px;
-        }
-        .new-table-wrap {
-            padding: 5px 0;
-            .new-prescription + .new-prescription {
-                border-top: 1px solid rgba(225, 225, 225, 0.8);
-            }
-            // .new-prescription {
-            .new-table {
-                display: flex;
-                align-items: center;
-                // border: 1px solid rgba(225, 225, 225, 0.8);
-                background: #fff;
-                border-radius: 5px;
-                color: rgba(0, 0, 0, 0.6);
-                font-size: 11px;
-                .line-l {
-                    display: flex;
-                    flex: 1;
-                    .line-2 {
-                        flex: 1;
-                        padding: 0 2px;
-                    }
-                }
-                .line-r {
-                    &.has-border {
-                        border-left: 1px solid rgba(225, 225, 225, 0.8);
-                    }
-                    .line-3 {
-                        display: flex;
-                        align-items: center;
-                    }
-                    .sub-line {
-                        padding: 10px 0;
-                    }
-                    .line-4 {
-                        display: flex;
-                        align-items: center;
-                        border-top: 1px solid rgba(225, 225, 225, 0.8);
-                    }
-                    .execute-line {
-                        border-right: 1px solid rgba(225, 225, 225, 0.8);
-                    }
-                }
-            }
-            .note-text {
-                margin: 8px 0 4px 0;
-                color: rgba(0, 0, 0, 0.4);
-                background: #fff;
-                padding: 6px 8px;
-                border-radius: 5px;
-                text-align: left;
-                font-size: 11px;
-            }
-            // }
-            // .new-prescription + .new-prescription {
-            //     padding-top: 8px;
-            // }
-        }
-    }
-
-    .info-content-wrap {
-        ::v-deep {
-            .new-table-wrap {
-                padding: 5px 0;
-                .new-prescription + .new-prescription {
-                    border-top: 1px solid rgba(225, 225, 225, 0.8);
-                }
-            }
-        }
-    }
-    .price-bottom {
-        padding-top: 8px;
-
-        .info-title-wrap {
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            color: #000;
-            .info-more {
-                font-size: 18px;
-            }
-            .unit-text {
-                font-size: 12px;
-            }
-        }
-        .price-info {
-            padding: 8px 0;
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            color: rgba(0, 0, 0, 0.2);
-            .main-text {
-                padding-left: 6px;
-                color: rgba(0, 0, 0, 0.8);
-            }
-            .info-c {
-                flex: 1;
-                text-align: center;
-            }
-        }
-        .price-total {
-            height: 38px;
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            border: 1px solid rgba(33, 153, 248, 0.5);
-            background: rgba(33, 153, 248, 0.1);
-            color: #000000;
-            border-radius: 4px;
-            .main-val {
-                font-size: 20px;
-                font-weight: bold;
-                color: #2199f8;
-                padding-right: 2px;
-            }
-        }
-    }
-    .pb-8 {
-        padding-bottom: 8px;
-    }
-
-    .common-inputs {
-        ::v-deep {
-            .el-input__wrapper {
-                box-shadow: none;
-            }
-            .el-input-group__append {
-                padding: 0 10px;
-                background: none;
-                box-shadow: none;
-            }
-            .el-input-group__append {
-                color: rgba(33, 153, 248, 0.5);
-            }
-            .el-input {
-                border: 1px solid rgba(33, 153, 248, 0.3);
-                border-radius: 5px;
-                height: 30px;
-                box-sizing: border-box;
-            }
-            .el-input__wrapper {
-                padding: 0 2px 0 10px;
-                height: 28px;
-                line-height: 28px;
-                min-height: 28px;
-            }
-            .el-input__inner {
-                --el-input-inner-height: 28px;
-                height: 28px;
-                line-height: 28px;
-                min-height: 28px;
-                color: #2199f8;
-                --el-input-placeholder-color: rgba(33, 153, 248, 0.43);
-            }
-
-            .el-select__wrapper {
-                box-shadow: 0 0 0 1px rgba(33, 153, 248, 0.3) inset;
-            }
-            .el-select__placeholder,
-            .el-select__caret {
-                color: #2199f8;
-            }
-        }
-    }
-
-    .medicine-box {
-        // padding-top: 10px;
-        border: 1px solid rgba(33, 153, 248, 0.8);
-        position: relative;
-        border-radius: 6px;
-        .item-title {
-            padding-left: 5px;
-            font-size: 16px;
-            color: #000000;
-            font-weight: 500;
-            padding-bottom: 10px;
-        }
-        .medicine-item {
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            height: 32px;
-            .item-name {
-                color: rgba(0, 0, 0, 0.4);
-            }
-            .item-val {
-                min-width: 142px;
-                text-align: center;
-                color: #302f2f;
-                display: flex;
-                align-items: center;
-                justify-content: center;
-                gap: 4px;
-                .price-unit {
-                    font-size: 12px;
-                    color: rgba(0, 0, 0, 0.4);
-                    white-space: nowrap;
-                }
-            }
-            .item-total {
-                font-size: 16px;
-                color: #000;
-            }
-            .item-price {
-                color: #2199f8;
-                font-size: 20px;
-                font-weight: bold;
-                .item-unit {
-                    font-size: 14px;
-                    font-weight: normal;
-                    padding-left: 2px;
-                    color: #474747;
-                }
-            }
-        }
-        .medicine-item + .medicine-item {
-            padding-top: 2px;
-        }
-        .mt-8 {
-            margin-top: 8px;
-        }
-    }
-
-    .usage-mode-wrap {
-        padding: 0 12px;
-        margin-top: 12px;
-        .info-content {
-            padding-top: 14px;
-            padding-bottom: 1px;
-        }
-
-        .el-form-item--default {
-            margin-bottom: 0;
-        }
-    }
-
-    ::v-deep {
-        .el-form-item__label {
-            height: 30px;
-            line-height: 30px;
-            color: rgba(0, 0, 0, 0.4);
-        }
-        .el-form-item.is-required:not(.is-no-asterisk).asterisk-left > .el-form-item__label:before {
-            display: none;
-        }
-    }
-    .interact-content {
-        padding: 10px 0;
-        line-height: 20px;
-        color: #919191;
-        font-size: 14px;
-    }
-    .interact-form {
-        padding: 8px 0 20px 0px;
-
-        .interact-form-item {
-            display: flex;
-            align-items: baseline;
-            margin-bottom: 12px;
-
-            &:last-child {
-                margin-bottom: 0;
-            }
-
-            .form-label {
-                width: 70px;
-                color: rgba(0, 0, 0, 0.4);
-                font-weight: normal;
-                margin-right: 10px;
-                font-size: 14px;
-                flex: none;
-            }
-
-            .form-input-wrapper {
-                position: relative;
-                width: calc(100% - 70px);
-                &.two-select {
-                    display: flex;
-                    gap: 10px;
-                    .select-item {
-                        flex: 1;
-                    }
-                }
-                ::v-deep {
-                    .el-input__inner {
-                        caret-color: transparent;
-                        padding-right: 40px;
-                    }
-
-                    .el-input__suffix {
-                        display: none;
-                    }
-                }
-            }
-
-            .question-textarea {
-                ::v-deep {
-                    .el-textarea__inner {
-                        resize: none;
-                        line-height: 1.5;
-                        min-height: 80px;
-                    }
-                }
-            }
-        }
-
-        .interact-buttons {
-            display: flex;
-            gap: 12px;
-            padding-top: 16px;
-
-            .btn-delete,
-            .btn-save {
-                flex: 1;
-                padding: 8px;
-                border-radius: 25px;
-                font-size: 16px;
-                text-align: center;
-                cursor: pointer;
-                transition: all 0.3s;
-                user-select: none;
-            }
-
-            .btn-delete {
-                background: #ffffff;
-                border: 1px solid #ff4d4f;
-                color: #ff4d4f;
-
-                &:hover {
-                    background: #fff5f5;
-                }
-
-                &:active {
-                    opacity: 0.8;
-                    transform: scale(0.98);
-                }
-            }
-
-            .btn-save {
-                background: #2199f8;
-                color: #fff;
-                border: none;
-
-                &:hover:not(.disabled) {
-                    background: #1a8ae6;
-                }
-
-                &:active:not(.disabled) {
-                    opacity: 0.9;
-                    transform: scale(0.98);
-                }
-
-                &.disabled {
-                    opacity: 0.6;
-                    cursor: not-allowed;
-                    pointer-events: none;
-                }
-            }
-        }
-    }
-    .edit-tag {
-        padding-left: 4px;
-        color: #2199f8;
-    }
-    .tag-text {
-        font-size: 12px;
-        font-weight: normal;
-    }
-    .info-content {
-        padding: 10px 0;
-        position: relative;
-
-        .condition-wrap {
-            display: flex;
-            align-items: center;
-            width: 100%;
-            .symbol {
-                width: 10px;
-                // text-align: center;
-                // padding: 0 4px;
-            }
-        }
-        .item-input {
-            // width: 60%;
-            min-width: 140px;
-            max-width: 240px;
-        }
-        .recheck-text {
-            padding-left: 6px;
-        }
-        .info-item {
-            display: flex;
-            justify-content: space-between;
-            align-items: center;
-            width: 100%;
-        }
-        .info-item + .info-item {
-            margin-top: 12px;
-        }
-
-        .bottom-map {
-            width: 100%;
-            height: 250px;
-            clip-path: inset(0px round 8px);
-        }
-        .check-btn {
-            position: absolute;
-            bottom: 16px;
-            right: 6px;
-            background: rgba(0, 0, 0, 0.6);
-            padding: 0 8px;
-            border-radius: 8px;
-
-            ::v-deep {
-                .el-checkbox {
-                    color: #fff;
-                }
-            }
-        }
-        .area-select {
-            padding-bottom: 12px;
-            .block {
-                width: 12px;
-                display: inline-block;
-            }
-        }
-    }
-
-    ::v-deep {
-        .el-form-item--default {
-            margin-bottom: 8px;
-            
-            &.name-item {
-                margin-bottom: 14px;
-            }
-            &.text-item {
-                margin-bottom: 2px;
-                .el-form-item__content {
-                    line-height: 24px;
-                }
-                .el-form-item__label {
-                    height: 24px;
-                    line-height: 24px;
-                }
-            }
-        }
-    }
-    .sub-title {
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        color: rgba(0, 0, 0, 0.6);
-        font-size: 14px;
-        .add-tag {
-            font-size: 12px;
-            color: #2199f8;
-            padding: 0 8px;
-            border: 1px solid #2199f8;
-            border-radius: 5px;
-            font-weight: normal;
-            height: 28px;
-            line-height: 28px;
-        }
-    }
-    .font-bold {
-        font-weight: 500;
-        color: #000000;
-    }
-    .form-index {
-        position: absolute;
-        left: 0;
-        top: 0;
-        padding: 0 6px;
-        background: #2199f8;
-        border-radius: 5px 0 4px 0;
-        height: 18px;
-        line-height: 18px;
-        font-size: 12px;
-        color: #fff;
-    }
-    .recipe-item {
-        width: 100%;
-        .recipe-form {
-            padding-top: 8px;
-            ::v-deep {
-                .el-form-item {
-                    &:last-child {
-                        margin-bottom: 0;
-                    }
-                }
-            }
-        }
-
-        .mt-8 {
-            margin-top: 8px;
-        }
-
-        .box-item {
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            color: rgba(0, 0, 0, 0.4);
-            .r-text {
-                color: #302f2f;
-                width: 150px;
-                text-align: center;
-            }
-            .form-r {
-                width: 150px;
-                min-width: 140px;
-                max-width: 240px;
-            }
-        }
-        .form-box {
-            border: 1px solid rgba(33, 153, 248, 0.8);
-            border-radius: 6px;
-            padding: 20px 10px;
-            width: 100%;
-            box-sizing: border-box;
-            position: relative;
-            // background: rgb(209, 235, 255, 0.3);
-            // margin-bottom: 12px;
-            .input-box {
-                &.mark-box {
-                    padding: 8px 0 12px 0;
-                }
-            }
-
-            // .input-unit {
-            //     ::v-deep {
-            //         .el-input {
-            //             border: 1px solid #dcdfe6;
-            //             border-radius: 5px;
-            //             height: 32px;
-            //             box-sizing: border-box;
-            //         }
-            //         .el-input__wrapper {
-            //             padding: 0 2px 0 10px;
-            //             height: 30px;
-            //             line-height: 30px;
-            //             min-height: 30px;
-            //             box-shadow: none;
-            //         }
-            //         .el-input__inner {
-            //             --el-input-inner-height: 30px;
-            //             height: 30px;
-            //             line-height: 30px;
-            //             min-height: 30px;
-            //             color: #606266;
-            //             --el-input-placeholder-color: #a8abb2;
-            //         }
-            //         .el-input-group__append {
-            //             box-shadow: none;
-            //             border: none;
-            //             background: none;
-            //         }
-            //     }
-            // }
-            // .text-center {
-            //     ::v-deep {
-            //         .el-input__inner {
-            //             text-align: center;
-            //         }
-            //     }
-            // }
-            .action-btn {
-                margin-top: 12px;
-                display: flex;
-                justify-content: flex-end;
-                .btn {
-                    color: #8f8f8f;
-                    border-radius: 25px;
-                    padding: 5px 30px;
-                }
-                .delete-btn {
-                    color: rgba(255, 89, 89, 0.9);
-                    background: #fff;
-                    border: 1px solid rgba(255, 89, 89, 0.9);
-                }
-            }
-            .btn-group {
-                padding-top: 12px;
-            }
-            .sub-item {
-                // padding-left: 10px;
-                .has-sub {
-                    display: flex;
-                    flex-direction: column;
-                    align-items: center;
-                    .main-name {
-                        line-height: 20px;
-                    }
-                    .sub-name {
-                        font-size: 10px;
-                        color: rgba(129, 129, 129, 0.5);
-                        line-height: 14px;
-                    }
-                }
-                .colunm-sub {
-                    display: flex;
-                    align-items: center;
-                    .sub-name {
-                        font-size: 10px;
-                        color: rgba(129, 129, 129, 0.5);
-                    }
-                }
-                .r-text {
-                    width: 132px;
-                    text-align: center;
-                    font-size: 14px;
-                    color: #474747;
-                }
-                .price {
-                    ::v-deep {
-                        .el-input__wrapper {
-                            box-shadow: 0 0 0 1px rgba(33, 153, 248, 0.3) inset;
-                        }
-                        .el-input__inner {
-                            color: #2199f8;
-                        }
-                    }
-                }
-            }
-            .form-title {
-                font-size: 14px;
-                padding-top: 6px;
-                color: #000;
-                font-weight: 600;
-            }
-            .box-item + .box-item {
-                margin-top: 8px;
-            }
-        }
-        .form-box + .form-box {
-            margin-top: 8px;
-        }
-        .usageMode-wrap {
-            padding-top: 8px;
-        }
-    }
-
-    // 状况描述样式
-    .situation-description {
-        width: 100%;
-        .description-title {
-            font-size: 16px;
-            font-weight: bold;
-            color: #000;
-            margin-bottom: 12px;
-        }
-
-        .description-content {
-            .description-textarea {
-                margin-bottom: 10px;
-                width: 100%;
-            }
-
-            .upload-section {
-                .upload-btn {
-                    width: 112px;
-                    height: 32px;
-                    border-radius: 3px;
-                    border: 1px solid #e0e0e0;
-                    background: #fff;
-                    color: #000;
-                    font-size: 14px;
-                    display: flex;
-                    align-items: center;
-                    justify-content: center;
-                    margin-bottom: 8px;
-
-                    .el-icon {
-                        margin-right: 6px;
-                    }
-                }
-
-                .upload-tip {
-                    font-size: 12px;
-                    color: #999;
-                    line-height: 1.4;
-                }
-            }
-        }
-    }
-
-    // 专家诊断按钮样式
-    .expert-diagnosis-btn {
-        width: 180px;
-        height: 40px;
-        border-radius: 24px;
-        background: linear-gradient(180deg, #70bffe 0%, #2199f8 100%);
-        color: #ffffff;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        margin: 30px auto 0;
-    }
-}
-
-.tag-list {
-    font-size: 14px;
-    .tag-item + .tag-item {
-        margin-top: 6px;
-    }
-    .tag-item {
-        padding: 2px 8px;
-        text-align: center;
-        &.active {
-            color: #2199f8;
-            background: rgba(33, 153, 248, 0.16);
-            border-radius: 4px;
-        }
-    }
-}
-.task-tips-popup {
-    width: 75%;
-    padding: 28px 28px 20px;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    .create-farm-icon {
-        width: 40px;
-        height: 40px;
-        margin-bottom: 12px;
-    }
-    .farm-check-icon {
-        width: 68px;
-        height: 68px;
-        margin-bottom: 12px;
-    }
-    .create-farm-text {
-        font-size: 20px;
-        font-weight: 500;
-        line-height: 40px;
-        margin-bottom: 32px;
-        text-align: center;
-        &.success-text {
-            font-size: 24px;
-            font-weight: 500;
-        }
-    }
-    .main-text {
-        color: #2199f8;
-    }
-    .create-farm-btn {
-        width: 100%;
-        box-sizing: border-box;
-        padding: 8px;
-        border-radius: 25px;
-        font-size: 16px;
-        background: #2199f8;
-        color: #fff;
-        text-align: center;
-    }
-}
-</style>

+ 0 - 1192
src/views/old_mini/modify_work/completedWork.vue

@@ -1,1192 +0,0 @@
-<template>
-    <div class="completed-work">
-        <custom-header name="农事详情" isGoBack @goback="handleClose"></custom-header>
-        <div class="work-content">
-            <!-- <div class="step-wrap" v-show="query.status !== 'warning'">
-                <farm-steps :currentStep="currentStep" />
-            </div> -->
-            <div class="content-status">
-                <div class="status-l">
-                    <div class="stauts-text">待完成</div>
-                    <div class="stauts-sub-text" v-if="detailData?.executeDeadlineDate && !detailData?.expectedExecuteDate">
-                        截止到 <span class="time-text">{{ detailData?.executeDeadlineDate }}</span>
-                    </div>
-                    <div class="stauts-sub-text" v-if="detailData?.expectedExecuteDate">
-                        <template v-if="daysDiff > 0">
-                            距离执行时间还剩 <span class="time-text">{{ daysDiff }} 天</span>
-                        </template>
-                        <template v-else-if="daysDiff === 0">
-                            执行时间为今天
-                        </template>
-                        <template v-else>
-                            执行时间已过
-                        </template>
-                    </div>
-                </div>
-                <!-- <template v-if="query.status !== 'warning'">
-                    <div class="status-r" v-if="curRole == 0">{{ status === 0 ? "设置提醒" : "去评价" }}</div>
-                    <div class="status-r" v-if="curRole == 1">{{ status === 0 ? "提醒执行" : "提醒复核" }}</div>
-                    <div class="status-r" v-if="curRole == 2">{{ status === 0 ? "提醒执行" : "提醒复核" }}</div>
-                </template> -->
-            </div>
-            <div class="work-wrap" v-if="query?.farmWorkOrderId || detailData?.flowStatus === 4">
-                <div class="box-wrap executor-info" v-if="query.status === 'warning' || curRole == 0 || curRole == 2">
-                    <!-- <div class="executor-title">执行人</div> -->
-                    <div class="executor-content">
-                        <div class="executor-info mt-0">
-                            <div class="executor-avatar">
-                                <img
-                                    src="https://birdseye-img-ali-cdn.sysuimars.com/16926861-1e20-4cbd-8bf2-90208db5a2d0/806080da-1a30-4b5b-b64b-b22e722c6cb6/DJI_202509010800_001_806080da-1a30-4b5b-b64b-b22e722c6cb6/DJI_20250901080536_0045_V_code-ws0fsmge97gh.jpeg?x-oss-process=image/resize,w_500"
-                                    alt="执行人"
-                                />
-                            </div>
-                            <div class="executor-details">
-                                <div class="org-name">
-                                    <span class="name">{{ quotationData.agriculturalStoreName || "--" }}</span>
-                                    <span class="rating">{{
-                                        quotationData.score ? quotationData.score + "分" : ""
-                                    }}</span>
-                                </div>
-                                <div class="service-info">
-                                    <div class="service-item">
-                                        服务品种:
-                                        <span v-if="speciesList.length">
-                                            <span v-for="(sp, sIdx) in speciesList" :key="sIdx">
-                                                {{ sp }}<template v-if="sIdx < speciesList.length - 1">、</template>
-                                            </span>
-                                        </span>
-                                        <span v-else>--</span>
-                                    </div>
-                                    <div class="service-item">
-                                        服务设备:
-                                        <span v-if="equipmentList.length">
-                                            <span v-for="(eq, eIdx) in equipmentList" :key="eIdx">
-                                                {{ eq }}<template v-if="eIdx < equipmentList.length - 1">、</template>
-                                            </span>
-                                        </span>
-                                        <span v-else>--</span>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="farm-info">
-                            <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) : "--"
-                                    }}<span class="unit-text">元</span>
-                                </div>
-                            </div>
-                            <div class="info-content-wrap">
-                                <price-table
-                                    :prescriptionData="quotationData.prescriptionList"
-                                    :area="detailData?.area"
-                                    :isArrList="true"
-                                >
-                                    <template #bottomContent>
-                                        <div class="price-bottom">
-                                            <div class="info-title-wrap">
-                                                <div class="sub-title">服务费用</div>
-                                                <div class="info-more">
-                                                    {{ detailData?.serviceMuPrice ? serviceCostTotal : "--" }}
-                                                    <span class="unit-text">元</span>
-                                                </div>
-                                            </div>
-                                            <div class="price-info">
-                                                <div class="info-l">
-                                                    单亩价格<span class="main-text">{{
-                                                        detailData?.serviceMuPrice
-                                                            ? detailData?.serviceMuPrice + "元/亩"
-                                                            : "--"
-                                                    }}</span>
-                                                </div>
-                                            </div>
-                                            <div class="price-total">
-                                                报价合计:<span class="main-val">
-                                                    {{ totalCost ? formatArea(totalCost) : "--" }} </span
-                                                >元
-                                            </div>
-                                        </div>
-                                    </template>
-                                </price-table>
-                            </div>
-                        </div>
-                        <!-- <div class="contact-buttons">
-                            <button class="contact-btn">电话联系</button>
-                            <button class="contact-btn">在线联系</button>
-                        </div> -->
-                    </div>
-                </div>
-            </div>
-            <div class="work-wrap info-wrap">
-                <div class="box-wrap farm-data">
-                    <div class="card-title">
-                        <div>{{ detailData?.farmWorkName }}<span class="type-tag">标准农事</span></div>
-                        <!-- <div class="point-wrap">
-                            <div class="point"></div>
-                            <span>2区</span>
-                        </div> -->
-                        <div class="tag-text">托管农事</div>
-                    </div>
-                    <div class="data-content">
-                        <div class="form-item">
-                            <div class="item-name">农事编号</div>
-                            <div class="item-text">{{ detailData?.code }}</div>
-                        </div>
-                        <div class="form-item">
-                            <div class="item-name">服务亩数</div>
-                            <div class="item-text">
-                                {{ detailData?.area ? formatArea(detailData?.area) + "亩" : "--" }}
-                            </div>
-                        </div>
-                        <div class="form-item">
-                            <div class="item-name">服务区域</div>
-                            <div class="item-text">{{ detailData?.serviceRegion }}</div>
-                        </div>
-                        <!-- <div class="form-item">
-                            <div class="item-name">触发条件</div>
-                            <div class="item-text">{{ detailData?.condition }}</div>
-                        </div> -->
-                        <div class="form-item" v-if="detailData?.expectedExecuteDate">
-                            <div class="item-name">执行时间</div>
-                            <div class="item-text">
-                                {{detailData?.expectedExecuteDate}}
-                            </div>
-                        </div>
-                        <div class="form-item" v-else-if="detailData?.executeDeadlineDate">
-                            <div class="item-name">截止日期</div>
-                            <div class="item-text">
-                                {{detailData?.executeDeadlineDate}}
-                            </div>
-                        </div>
-                    </div>
-                </div>
-
-                <div class="box-wrap farm-table">
-                    <div class="card-title">药物处方</div>
-                    <div class="table-item">
-                        <div class="form-item">
-                            <div class="item-name">施用方式</div>
-                            <div class="item-text">{{ detailData?.usageMode || '其他' }}</div>
-                        </div>
-                        <div class="form-item">
-                            <div class="item-name">执行方式</div>
-                            <div class="item-text">
-                                {{ quotationData?.executionMethodName }}
-                            </div>
-                        </div>
-                    </div>
-                    <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>
-                            <div class="title-4"><div class="table-name">药肥配比</div></div>
-                            <div class="title-5"><div class="table-name">单亩用量</div></div>
-                        </div>
-                        <div
-                            class="new-table-wrap"
-                            v-for="(prescriptionItem, prescriptionI) in detailData?.prescriptionList"
-                            :key="prescriptionI"
-                        >
-                            <div
-                                class="new-prescription"
-                                v-for="(subP, subI) in prescriptionItem.pesticideFertilizerList"
-                                :key="subI"
-                            >
-                                <div class="new-table">
-                                    <div class="line-l">
-                                        <div class="line-1 title-1">{{ subP.typeName }}</div>
-                                        <div class="line-2">{{ subP.defaultName || subP.pesticideFertilizerName }}</div>
-                                    </div>
-                                    <div class="line-r">
-                                        <div class="line-3">
-                                            <div class="sub-line title-4">{{ quotationData.executionMethod === 1 ? subP.ratio2 : subP.ratio }}倍</div>
-                                            <div class="sub-line title-5">{{ quotationData.executionMethod === 1 ? subP.muUsage2 : subP.muUsage }}{{ subP.unit }}</div>
-                                        </div>
-                                    </div>
-                                </div>
-                                <div class="note-text" v-if="subP.remark">{{ subP.remark }}</div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-
-                <!-- <div class="work-map">
-                    <div class="card-title">执行农事区域</div>
-                    <div class="map-content">
-                        <div class="map-dom" ref="areaRef"></div>
-                    </div>
-                </div> -->
-            </div>
-
-            <!-- 农资,步骤:农资已执行,请求确认 -->
-            <div class="fixed-btn-wrap" :class="{'center': !getButtonText()}" v-if="curRole == 2 && !detailData?.expectedExecuteDate">
-                <div class="fixed-btn orange primary-text" @click="handleRemindExecuteTime" v-if="getButtonText()">提醒确认执行时间</div>
-                <div class="fixed-btn orange" @click="selectExecuteTime">确认执行时间</div>
-            </div>
-            <div class="fixed-btn-wrap" :class="{'center': !getButtonText()}" v-if="curRole == 2 && detailData?.expectedExecuteDate">
-                <div class="fixed-btn primary primary-text width-120" @click="handleExecute" v-if="getButtonText()">提醒执行</div>
-                <div class="fixed-btn primary" @click="showOfferPopup(detailData)">上传照片</div>
-            </div>
-
-            <!-- 农资,步骤:农事已确认 -->
-            <!-- <div class="fixed-btn-wrap" v-if="curRole == 2 && detailData?.expectedExecuteDate">
-                <div class="fixed-btn second" @click="showPriceSheetPopup">生成报价单</div>
-                <div class="fixed-btn" @click="handleTimelineAction(detailData)">转入农事任务</div>
-            </div> -->
-        </div>
-    </div>
-    <!-- 报价弹窗 -->
-    <!-- <offer-popup :showPopup="showPopup" :executionData="executionData"></offer-popup> -->
-    <!-- 服务报价单 -->
-    <price-sheet-popup ref="priceSheetPopupRef"></price-sheet-popup>
-    <!-- 需求发送成功 -->
-    <popup v-model:show="showTaskPopup" round class="task-tips-popup">
-        <template v-if="taskPopupType === 'warning'">
-            <img class="create-farm-icon" src="@/assets/img/home/create-farm-icon.png" alt="" />
-            <div class="create-farm-text">
-                <div>您确认取消已发起的农事需求吗</div>
-            </div>
-        </template>
-        <template v-else-if="taskPopupType === 'warningIgnore'">
-            <img class="create-farm-icon" src="@/assets/img/home/create-farm-icon.png" alt="" />
-            <div class="create-farm-text">
-                <div>
-                    您确认忽略 <span class="main-text">{{ detailData?.farmName }}</span> 的
-                    <span class="main-text">{{ detailData?.farmWorkName }}</span> 农事吗
-                </div>
-            </div>
-        </template>
-        <template v-else>
-            <img class="farm-check-icon" src="@/assets/img/home/right.png" alt="" />
-            <div class="create-farm-text success-text">{{ successText }}</div>
-        </template>
-        <div class="create-farm-btn" @click="handlePopupBtn">
-            {{ taskPopupType === "warning" ? "确认" : taskPopupType === "warningIgnore" ? "确认忽略" : "我知道了" }}
-        </div>
-    </popup>
-
-    <!-- 确认执行时间 -->
-    <calendar v-model:show="showCalendar" @confirm="onConfirmExecuteTime" :min-date="minDate" :max-date="maxDate" />
-
-    <!-- 上传照片弹窗 -->
-    <review-upload-popup :key="10" v-model="showUpload" :record-id="sectionId" @success="handleSelfDone" />
-
-    <!-- 新增:激活上传弹窗 -->
-    <active-upload-popup ref="activeUploadPopupRef" @handleUploadSuccess="handleUploadSuccess"></active-upload-popup>
-
-    <offer-popup ref="offerPopupRef" @uploadSuccess="handleUploadSuccess"></offer-popup>
-</template>
-
-<script setup>
-import customHeader from "@/components/customHeader.vue";
-import { ref, computed, onActivated, onDeactivated } from "vue";
-// import NewFarmMap from "./newFarmMap";
-import { useStore } from "vuex";
-import { Popup, Calendar } from "vant";
-import offerPopup from "@/components/popup/offerPopup.vue";
-import { useRouter, useRoute } from "vue-router";
-import farmSteps from "@/components/farmSteps.vue";
-import priceTable from "../agri_work/components/priceTable.vue";
-import priceSheetPopup from "@/components/popup/priceSheetPopup.vue";
-import { base_img_url2 } from "@/api/config";
-import { ElMessage } from "element-plus";
-import { formatArea, formatDate } from "@/common/commonFun";
-import wx from "weixin-js-sdk";
-import reviewUploadPopup from "@/components/popup/reviewUploadPopup.vue";
-import FnShareSheet from "@/components/pageComponents/FnShareSheet.vue";
-import activeUploadPopup from "@/components/popup/activeUploadPopup.vue";
-import eventBus from "@/api/eventBus";
-
-const router = useRouter();
-const store = useStore();
-const query = ref({});
-// 角色
-// const curRole = store.state.app.curRole
-const curRole = ref(localStorage.getItem("SET_USER_CUR_ROLE"));
-// const curRole = 2;
-
-// 农资待生成报价单--currentStep:1;curRole:2
-// 农资已执行,有执行照片,请求确认--currentStep:2;curRole:2
-
-const showUpload = ref(false);
-const sectionId = ref(null);
-// 上传照片处理函数
-const handleUploadPhoto = ({ id }) => {
-    showUpload.value = true;
-    sectionId.value = id;
-};
-
-onDeactivated(() => {
-    showUpload.value = false;
-    sectionId.value = null;
-});
-
-const handleSelfDone = () => {
-    VE_API.z_farm_work_record.updateFlowStatus({ id: queryRecordId.value, targetFlowStatus: 5 }).then((res) => {
-        if (res.code === 0) {
-            showUpload.value = false;
-            sectionId.value = null;
-            setTimeout(() => {
-                router.replace({
-                    path: "/review_work",
-                    query: {
-                        miniJson: JSON.stringify({ id: queryRecordId.value, goBack: true }),
-                    },
-                });
-            }, 500);
-        }
-    });
-};
-
-const successText = ref("");
-const taskPopupActionType = ref(0);
-const showTaskPopup = ref(false);
-const taskPopupType = ref("");
-const handlePopupBtn = () => {
-    showTaskPopup.value = false;
-    if (taskPopupType.value === "warning") {
-        // 取消发起
-        VE_API.z_farm_work_record.updatePublicStatus({ recordId: queryRecordId.value, isPublic: 0 }).then((res) => {
-            if (res.code === 0) {
-                getDetail(queryRecordId.value);
-            }
-        });
-    } else if (taskPopupType.value === "warningIgnore") {
-        // 确认忽略
-        VE_API.z_farm_work_record.ignoreFarmWorkRecord({ farmWorkRecordId: queryRecordId.value }).then((res) => {
-            if (res.code === 0) {
-                ElMessage.success("操作成功");
-                router.back();
-            }
-        });
-    } else {
-        if (taskPopupActionType.value === 0) {
-            getDetail(queryRecordId.value);
-        } else {
-            showUpload.value = false;
-            sectionId.value = null;
-            setTimeout(() => {
-                router.replace({
-                    path: "/review_work",
-                    query: {
-                        miniJson: JSON.stringify({ id: queryRecordId.value, goBack: true }),
-                    },
-                });
-            }, 500);
-        }
-    }
-};
-
-const cancelDemand = () => {
-    taskPopupType.value = "warning";
-    showTaskPopup.value = true;
-};
-
-const priceSheetPopupRef = ref(null);
-const showPriceSheetPopup = () => {
-    priceSheetPopupRef.value.handleShowPopup(detailData.value);
-};
-
-const getButtonText = () => {
-    return agriculturalRole.value === 1 || (agriculturalRole.value === 2 && detailData.value.executorUserId != userId.value);
-};
-
-const offerPopupRef = ref(null);
-const isGoBack = ref(false);
-const showOfferPopup = (item) => {
-    isGoBack.value = true;
-    offerPopupRef.value.openPopup(item);
-};
-
-const handleExecute = () => {
-    const query = {
-        askInfo: { title: "农事提醒", content: "是否分享该农事提醒给好友" },
-        shareText: '向您分享了一条农事执行提醒,请您尽快执行',
-        targetUrl: `completed_work`,
-        paramsPage: JSON.stringify({id: detailData.value.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`,
-    });
-};
-
-const showCalendar = ref(false);
-const maxDate = ref(new Date());
-// 最小日期设置为今天,今天可以选择
-const minDate = new Date();
-const selectExecuteTime = () => {
-    maxDate.value = new Date(detailData.value.executeDeadlineDate);
-    showCalendar.value = true;
-};
-
-const handleRemindExecuteTime = () => {
-    const query = {
-        askInfo: { title: "农事提醒", content: "是否分享该农事提醒给好友" },
-        shareText: '向您分享了一条农事提醒,请您尽快确认执行时间',
-        targetUrl: `completed_work`,
-        paramsPage: JSON.stringify({id: detailData.value.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`,
-    });
-};
-
-const onConfirmExecuteTime = (date) => {
-    showCalendar.value = false;
-    VE_API.z_farm_work_record
-        .updateExpectedExecuteDate({ recordId: queryRecordId.value, expectedExecuteDate: formatDate(date) })
-        .then((res) => {
-            if (res.code === 0) {
-                ElMessage.success("操作成功");
-                getDetail(queryRecordId.value);
-            }
-        });
-};
-
-const handleUploadSuccess = () => {
-    if (isGoBack.value) {
-        isGoBack.value = false;
-        if(showBack.value){
-            router.replace({
-                path: "/task_condition",
-                query: { active: '1' }
-            });
-        }else{
-            router.back();
-        }
-    } else {
-        getDetail(queryRecordId.value);
-    }
-};
-
-const quotationData = ref({});
-const toList = (val) => {
-    if (!val) return [];
-    return JSON.parse(val);
-};
-
-const handleClose = () => {
-    if(showBack.value){
-        router.replace({
-            path: "/task_condition",
-            query: { active: '1' }
-        });
-    }else{
-        router.back();
-    }
-};
-
-const speciesList = computed(() => toList(quotationData.value.serviceSpecies));
-const equipmentList = computed(() => toList(quotationData.value.serviceEquipment));
-const agriculturalRole = ref(null);
-const userId = ref(null);
-const showBack = ref(false);
-const queryRecordId = ref(null);
-onActivated(async () => {
-    //
-    const userInfo = JSON.parse(localStorage.getItem("localUserInfo"));
-    agriculturalRole.value = userInfo.agriculturalRole;
-    userId.value = userInfo.id;
-    //
-    query.value = useRoute().query?.miniJson ? JSON.parse(useRoute().query?.miniJson) : {};
-    let id = null;
-    if(query.value?.id){
-        id = query.value?.id;
-        showBack.value = false;
-    }else{
-        const data = JSON.parse(query.value?.paramsPage);
-        id = data?.id;
-        showBack.value = true;
-    }
-    queryRecordId.value = id;
-    if (id) {
-        await getDetail(id);
-
-        //查询农场状态信息
-        getFarmWorkArrangeDetail(detailData.value.farmWorkArrangeId);
-    }
-});
-
-const farmStatusText = ref("");
-const getFarmWorkArrangeDetail = (id) => {
-    VE_API.farm.getFarmWorkArrangeDetail({ id }).then(({ data }) => {
-        farmStatusText.value = data.farmStatus;
-    });
-};
-
-// 药肥费用总计:∑(单价 * 单亩用量 * 亩数)
-const pesticideCostTotal = computed(() => {
-    const list = settingData();
-    const area = Number(detailData.value?.area || 0);
-    if (!list.length || !area) return 0;
-
-    const sum = list.reduce((acc, item) => {
-        const price = Number(item?.muPrice || 0);
-        const dosage = Number(quotationData.value.executionMethod === 1 ? item?.muUsage2 : item?.muUsage || 0);
-        if (!price || !dosage) return acc;
-        return acc + price * dosage * area;
-    }, 0);
-    return Number(sum.toFixed(2));
-});
-
-// 报价合计 = 药肥费用 + 服务费用
-const totalCost = computed(() => {
-    const pesticide = Number(pesticideCostTotal.value || 0);
-    const service = Number(serviceCostTotal.value || 0);
-    if (!pesticide && !service) return '--';
-    return Number((pesticide + service).toFixed(2));
-});
-
-// 服务费用总计(数值):亩单价 * 亩数
-const serviceCostTotal = computed(() => {
-    const price = Number(detailData.value?.serviceMuPrice || 0);
-    const area = Number(detailData.value?.area || 0);
-    if (!price || !area) return 0;
-    return Number((price * area).toFixed(2));
-});
-
-const settingData = () => {
-    return flattenDomains(quotationData.value.prescriptionList);
-};
-function flattenDomains(data) {
-    if (!data || !Array.isArray(data)) return [];
-    // 将所有 prescriptionList 中的 pesticideFertilizerList 合并成一个数组
-    return data.reduce((acc, item) => {
-        const list = item?.pesticideFertilizerList || [];
-        return acc.concat(list);
-    }, []);
-}
-
-const detailData = ref({});
-
-// 计算距离执行时间的天数差
-const daysDiff = computed(() => {
-    if (!detailData.value?.expectedExecuteDate) {
-        return 0;
-    }
-
-    const executeDate = new Date(detailData.value.expectedExecuteDate);
-    const today = new Date();
-
-    // 将时间设置为 00:00:00,只比较日期
-    executeDate.setHours(0, 0, 0, 0);
-    today.setHours(0, 0, 0, 0);
-
-    // 计算天数差(毫秒转天数)
-    const diffTime = executeDate.getTime() - today.getTime();
-    const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));
-
-    return diffDays;
-});
-
-const getDetail = async (id) => {
-    const { data } = await VE_API.z_farm_work_record.getDetail({ id });
-    if (data && data.length > 0) {
-        detailData.value = data[0];
-        // 报价信息
-        handlePriceInfo();
-    }
-};
-
-const handlePriceInfo = async () => {
-    let priceDataObj = {};
-    const { data } = await VE_API.z_farm_work_record_cost.getByRecordId({ farmWorkRecordId: detailData.value.id });
-    priceDataObj = data;
-    // 执行方式为1:无人机,则使用无人机价格,否则使用人工价格
-    detailData.value.serviceMuPrice = data?.farmWorkServiceCost;
-    if (priceDataObj && Object.keys(priceDataObj).length > 0) {
-        // 合并外层字段
-        quotationData.value = {
-            ...detailData.value,
-            ...priceDataObj,
-        };
-
-        // 根据 itemsList 的 pesticideFertilizerId 匹配并赋值品牌和价格
-        if (priceDataObj.itemsList && Array.isArray(priceDataObj.itemsList) && detailData.value.prescriptionList) {
-            // 创建价格映射表
-            const priceMap = new Map();
-            priceDataObj.itemsList.forEach((item) => {
-                priceMap.set(String(item.pesticideFertilizerId), {
-                    brand: item.brand || "",
-                    price: item.price || 0,
-                });
-            });
-
-            // 遍历处方列表,赋值品牌和价格,并计算格式化字段供 price-table 使用
-            quotationData.value.prescriptionList = detailData.value.prescriptionList.map((prescription) => {
-                return {
-                    ...prescription,
-                    pesticideFertilizerList: prescription.pesticideFertilizerList.map((pesticide) => {
-                        const pesticideId = String(pesticide.pesticideFertilizerId || "");
-                        const priceInfo = priceMap.get(pesticideId);
-
-                        if (priceInfo) {
-                            const price = priceInfo.price || 0;
-                            const muUsage = pesticide.muUsage || 0;
-                            const unit = pesticide.unit || "";
-                            const area = detailData.value.area || 0;
-
-                            // 计算总价:优先使用 totalPrice,否则计算 price * muUsage * area
-                            const total = price * muUsage * area;
-
-                            return {
-                                ...pesticide,
-                                brand: priceInfo.brand || "--",
-                                // 格式化字段供 price-table 组件使用
-                                price: price > 0 ? `${price}元/${unit}` : "--", // 格式化单价显示
-                                dosage: muUsage > 0 ? `${muUsage}${unit}` : "--", // 格式化用量显示
-                                total: total > 0 ? total.toFixed(2) : "--", // 格式化总价显示
-                            };
-                        }
-                        return pesticide;
-                    }),
-                };
-            });
-        }
-    }
-};
-</script>
-
-<style lang="scss" scoped>
-.completed-work {
-    height: 100vh;
-    position: relative;
-    overflow: auto;
-    font-size: 14px;
-    background: #f2f3f5;
-    .work-content {
-        height: calc(100% - 40px);
-        overflow: auto;
-        box-sizing: border-box;
-        &.hasBottom {
-            padding-bottom: 60px;
-        }
-        .info-wrap {
-            margin-bottom: 80px;
-        }
-        .work-wrap {
-            position: relative;
-            z-index: 3;
-            padding: 0 12px;
-            top: -16px;
-        }
-        .pt-10 {
-            padding-top: 10px;
-        }
-        .fixed-btn-wrap {
-            position: fixed;
-            z-index: 10;
-            bottom: 0;
-            left: 0;
-            width: 100%;
-            padding: 10px 12px 25px;
-            box-sizing: border-box;
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            background: #fff;
-            box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.4);
-            &.center {
-                justify-content: center;
-            }
-            .fixed-btn {
-                width: 120px;
-                text-align: center;
-                height: 40px;
-                line-height: 40px;
-                background: linear-gradient(180deg, #70bffe, #2199f8);
-                border-radius: 25px;
-                color: #fff;
-                font-size: 14px;
-                box-sizing: border-box;
-                &.orange {
-                    color: #ff953d;
-                    border: 1px solid #ff953d;
-                    background: rgba(255, 149, 61, 0.1);
-                }
-                &.excute {
-                    background: linear-gradient(180deg, #ffd887, #ed9e1e);
-                }
-                &.second {
-                    background: #ffffff;
-                    border: 1px solid rgba(153, 153, 153, 0.5);
-                    color: #666666;
-                }
-                &.primary-text {
-                    width: 160px;
-                    background: rgba(33, 153, 248, 0.1);
-                    color: #2199f8;
-                    border: 1px solid #2199f8;
-                }
-                &.width-120 {
-                    width: 120px;
-                }
-            }
-        }
-        .card-title {
-            font-size: 16px;
-            font-weight: bold;
-            color: #000;
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            .tag-text {
-                color: #2199f8;
-                font-size: 12px;
-                font-weight: normal;
-            }
-            .point-wrap {
-                display: flex;
-                align-items: center;
-                color: #393939;
-                font-size: 12px;
-                font-weight: normal;
-                .point {
-                    width: 6px;
-                    height: 6px;
-                    border-radius: 50%;
-                    background: #393939;
-                    margin-right: 4px;
-                }
-            }
-            .type-tag {
-                margin-left: 5px;
-                font-size: 12px;
-                color: #000000;
-                padding: 4px 10px;
-                background: rgba(119, 119, 119, 0.1);
-                border-radius: 20px;
-                font-weight: normal;
-                height: 26px;
-                line-height: 26px;
-            }
-        }
-        .box-wrap {
-            background: #fff;
-            padding: 10px;
-            border-radius: 8px;
-        }
-
-        .step-wrap {
-            padding: 18px 0;
-        }
-
-        .content-status {
-            position: relative;
-            padding: 26px 12px 20px 12px;
-            color: #fff;
-            z-index: 2;
-            display: flex;
-            justify-content: space-between;
-            align-items: center;
-            &::after {
-                content: "";
-                z-index: -1;
-                position: absolute;
-                left: 0;
-                top: 0;
-                height: 136px;
-                background: #2199f8;
-                width: 100%;
-            }
-            .status-l {
-                .stauts-text {
-                    font-size: 22px;
-                    display: flex;
-                    align-items: center;
-                    .status-icon {
-                        width: 24px;
-                        height: 24px;
-                        background: #ffffff;
-                        border-radius: 50%;
-                        margin-right: 8px;
-                    }
-                }
-                .stauts-sub-text {
-                    // color: rgba(255, 255, 255, 0.51);
-                    font-size: 14px;
-                }
-                .time-text {
-                    color: #ffff;
-                }
-            }
-            &.warning {
-                &::after {
-                    background: #ff953d;
-                }
-                .stauts-sub-text {
-                    color: #fff;
-                }
-            }
-            .status-r {
-                height: 32px;
-                line-height: 32px;
-                padding: 0 16px;
-                color: #2199f8;
-                font-size: 16px;
-                background: #fff;
-                border-radius: 20px;
-            }
-        }
-
-        .info-content {
-            padding: 10px 0;
-            position: relative;
-        }
-        .info-title-wrap {
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            color: #000;
-            .info-more {
-                font-size: 18px;
-            }
-            .unit-text {
-                font-size: 12px;
-            }
-        }
-        .info-content-wrap {
-            .price-bottom {
-                padding-top: 8px;
-                .price-info {
-                    padding: 8px 0;
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-between;
-                    color: rgba(0, 0, 0, 0.2);
-                    .main-text {
-                        padding-left: 20px;
-                        color: rgba(0, 0, 0, 0.8);
-                    }
-                    .info-c {
-                        flex: 1;
-                        text-align: center;
-                    }
-                }
-                .price-total {
-                    height: 38px;
-                    display: flex;
-                    align-items: center;
-                    justify-content: center;
-                    border: 1px solid rgba(33, 153, 248, 0.5);
-                    background: rgba(33, 153, 248, 0.1);
-                    color: #000000;
-                    border-radius: 4px;
-                    .main-val {
-                        font-size: 20px;
-                        font-weight: bold;
-                        color: #2199f8;
-                        padding-right: 2px;
-                    }
-                }
-            }
-        }
-        .executor-info {
-            margin-top: 14px;
-            &.mt-0 {
-                margin-top: 0;
-            }
-            .executor-title {
-                font-size: 18px;
-                font-weight: bold;
-                color: #000;
-                margin-bottom: 12px;
-            }
-            .executor-content {
-                .executor-info {
-                    display: flex;
-                    align-items: flex-start;
-                    gap: 12px;
-                }
-                .executor-avatar {
-                    flex-shrink: 0;
-                    img {
-                        width: 60px;
-                        height: 60px;
-                        border-radius: 8px;
-                        object-fit: cover;
-                    }
-                }
-                .executor-details {
-                    flex: 1;
-                    .org-name {
-                        display: flex;
-                        align-items: center;
-                        gap: 8px;
-                        margin-bottom: 3px;
-                        .name {
-                            font-size: 16px;
-                            font-weight: bold;
-                            color: #000;
-                        }
-                        .rating {
-                            font-size: 16px;
-                            color: #ff953d;
-                            font-weight: bold;
-                        }
-                    }
-                    .service-info {
-                        .service-item {
-                            font-size: 12px;
-                            color: #b6b6b6;
-                            line-height: 1.3;
-                            margin-bottom: 2px;
-                            span {
-                                color: #666666;
-                            }
-                        }
-                    }
-                }
-            }
-            .contact-buttons {
-                display: flex;
-                justify-content: flex-end;
-                gap: 8px;
-                margin-top: 16px;
-                .contact-btn {
-                    width: 88px;
-                    height: 32px;
-                    border-radius: 20px;
-                    color: rgba(0, 0, 0, 0.5);
-                    background: #fff;
-                    border: 1px solid rgba(0, 0, 0, 0.1);
-                }
-            }
-        }
-        .farm-info {
-            color: rgba(0, 0, 0, 0.6);
-            font-size: 14px;
-            margin-top: 14px;
-            .info-title {
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                color: rgba(41, 41, 41, 0.3);
-                .info-more {
-                    display: flex;
-                    align-items: center;
-                }
-            }
-        }
-        .farm-photo {
-            margin-top: 10px;
-            .photo-list {
-                display: flex;
-                align-items: center;
-                width: 100%;
-                overflow: auto;
-                padding-bottom: 10px;
-                .photo-item {
-                    width: 92px;
-                    height: 92px;
-                    border-radius: 8px;
-                    object-fit: cover;
-                }
-
-                .img-item {
-                    img {
-                        width: 92px;
-                        height: 92px;
-                        border-radius: 8px;
-                        object-fit: cover;
-                        margin-right: 12px;
-                    }
-                }
-
-                .view-box {
-                    width: 92px;
-                    height: 92px;
-                    border-radius: 8px;
-                    object-fit: cover;
-                }
-            }
-            .list-text {
-                text-align: center;
-                color: rgba(0, 0, 0, 0.5);
-                padding-top: 2px;
-            }
-        }
-
-        .farm-data {
-            margin-top: 10px;
-            .data-content {
-                margin-top: 8px;
-                border-top: 1px solid #f5f5f5;
-                padding: 8px 0;
-            }
-        }
-
-        .form-item {
-            display: flex;
-            align-items: center;
-            font-size: 14px;
-            color: #767676;
-            height: 24px;
-            .item-name {
-                width: 80px;
-                color: rgba(0, 0, 0, 0.2);
-            }
-        }
-        .form-item + .form-item {
-            padding-top: 2px;
-        }
-
-        .farm-table {
-            margin-top: 10px;
-            .table-item {
-                padding: 10px 0 12px 0;
-            }
-        }
-
-        .new-wrap {
-            border-radius: 5px;
-            text-align: center;
-            border: 1px solid rgba(225, 225, 225, 0.5);
-            .new-title {
-                background: rgba(241, 241, 241, 0.4);
-                border-radius: 5px 5px 0 0;
-                border-bottom: 1px solid rgba(225, 225, 225, 0.5);
-                display: flex;
-                color: #767676;
-                // justify-content: space-around;
-                padding: 5px 6px;
-                font-size: 12px;
-                .table-name {
-                    width: 24px;
-                    font-size: 12px;
-                    margin: 0 auto;
-                }
-            }
-
-            .title-1 {
-                width: 46px;
-            }
-            .title-2 {
-                flex: 1;
-            }
-            .title-3 {
-                width: 52px;
-            }
-            .title-4 {
-                width: 56px;
-            }
-            .title-5 {
-                width: 52px;
-            }
-            .new-table-wrap {
-                .new-prescription {
-                    .new-table {
-                        height: 45px;
-                        display: flex;
-                        align-items: center;
-                        background: #fff;
-                        border-radius: 5px;
-                        color: rgba(0, 0, 0, 0.6);
-                        font-size: 11px;
-                        .line-l {
-                            display: flex;
-                            flex: 1;
-                            .line-2 {
-                                flex: 1;
-                                padding: 0 2px;
-                            }
-                        }
-                        .line-r {
-                            &.has-border {
-                                border-left: 1px solid rgba(225, 225, 225, 0.8);
-                            }
-                            .line-3 {
-                                display: flex;
-                                align-items: center;
-                            }
-                            .sub-line {
-                                padding: 10px 0;
-                            }
-                            .line-4 {
-                                display: flex;
-                                align-items: center;
-                                border-top: 1px solid rgba(225, 225, 225, 0.8);
-                            }
-                            .execute-line {
-                                border-right: 1px solid rgba(225, 225, 225, 0.8);
-                            }
-                        }
-                    }
-                    .note-text {
-                        margin: 8px 0 4px 0;
-                        color: rgba(0, 0, 0, 0.4);
-                        background: #fff;
-                        padding: 6px 8px;
-                        border-radius: 5px;
-                        text-align: left;
-                        font-size: 11px;
-                    }
-                }
-                .new-prescription + .new-prescription {
-                    .new-table {
-                        border-top: 1px solid rgba(0, 0, 0, 0.08);
-                    }
-                }
-            }
-        }
-
-        .work-map {
-            padding: 10px 0;
-            .map-content {
-                padding-top: 8px;
-                .map-dom {
-                    height: 166px;
-                    width: 100%;
-                    clip-path: inset(0px round 8px);
-                }
-            }
-        }
-    }
-}
-
-.task-tips-popup {
-    width: 75%;
-    padding: 28px 28px 20px;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    .create-farm-icon {
-        width: 40px;
-        height: 40px;
-        margin-bottom: 12px;
-    }
-    .farm-check-icon {
-        width: 68px;
-        height: 68px;
-        margin-bottom: 12px;
-    }
-    .create-farm-text {
-        font-size: 20px;
-        font-weight: 500;
-        line-height: 40px;
-        margin-bottom: 32px;
-        text-align: center;
-        &.success-text {
-            font-size: 23px;
-            font-weight: 400;
-        }
-    }
-    .main-text {
-        color: #2199f8;
-    }
-    .create-farm-btn {
-        width: 100%;
-        box-sizing: border-box;
-        padding: 8px;
-        border-radius: 25px;
-        font-size: 16px;
-        background: #2199f8;
-        color: #fff;
-        text-align: center;
-    }
-}
-</style>

+ 0 - 1077
src/views/old_mini/modify_work/detailWork.vue

@@ -1,1077 +0,0 @@
-<template>
-    <div class="completed-work">
-        <custom-header name="农事详情" :showClose="false" isGoBack @goback="handleClose"></custom-header>
-        <div class="work-content">
-            <div
-                class="content-status"
-            >
-                <div class="status-l">
-                    <div class="stauts-text">待触发</div>
-                    <div class="stauts-sub-text" v-if="arrangeDetail?.interactionTime">
-                        <template v-if="daysDiff > 0">
-                            距离触发还剩 <span class="time-text">{{ daysDiff }} 天</span>
-                        </template>
-                        <template v-else-if="daysDiff === 0">
-                            触发时间为今天
-                        </template>
-                        <template v-else>
-                            触发时间已过
-                        </template>
-                    </div>
-                </div>
-                <!-- <template v-if="query.status !== 'warning'">
-                    <div class="status-r" v-if="curRole == 0">{{ status === 0 ? "设置提醒" : "去评价" }}</div>
-                    <div class="status-r" v-if="curRole == 1">{{ status === 0 ? "提醒执行" : "提醒复核" }}</div>
-                    <div class="status-r" v-if="curRole == 2">{{ status === 0 ? "提醒执行" : "提醒复核" }}</div>
-                </template> -->
-            </div>
-            <div class="work-wrap">
-                <div class="box-wrap executor-info">
-                    <!-- <div class="executor-title">执行人</div> -->
-                    <div class="executor-content">
-                        <div class="executor-info mt-0">
-                            <div class="executor-avatar">
-                                <img
-                                    src="https://birdseye-img-ali-cdn.sysuimars.com/16926861-1e20-4cbd-8bf2-90208db5a2d0/806080da-1a30-4b5b-b64b-b22e722c6cb6/DJI_202509010800_001_806080da-1a30-4b5b-b64b-b22e722c6cb6/DJI_20250901080536_0045_V_code-ws0fsmge97gh.jpeg?x-oss-process=image/resize,w_500"
-                                    alt="执行人"
-                                />
-                            </div>
-                            <div class="executor-details">
-                                <div class="org-name">
-                                    <span class="name">{{ detailData?.agriculturalName || "--" }}</span>
-                                    <span class="rating">{{
-                                        detailData.score ? detailData.score + "分" : ""
-                                    }}</span>
-                                </div>
-                                <div class="service-info">
-                                    <div class="service-item">
-                                        服务品种:
-                                        <span v-if="speciesList.length">
-                                            <span v-for="(sp, sIdx) in speciesList" :key="sIdx">
-                                                {{ sp }}<template v-if="sIdx < speciesList.length - 1">、</template>
-                                            </span>
-                                        </span>
-                                        <span v-else>--</span>
-                                    </div>
-                                    <div class="service-item">
-                                        服务设备:
-                                        <span v-if="equipmentList.length">
-                                            <span v-for="(eq, eIdx) in equipmentList" :key="eIdx">
-                                                {{ eq }}<template v-if="eIdx < equipmentList.length - 1">、</template>
-                                            </span>
-                                        </span>
-                                        <span v-else>--</span>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="farm-info">
-                            <div class="info-title-wrap" v-if="detailData?.prescription?.pesticideFertilizerList?.length">
-                                <div class="sub-title">药肥费用</div>
-                                <div class="info-more">
-                                    {{ pesticideCostTotal ? formatArea(pesticideCostTotal) : "--" }}<span class="unit-text">元</span>
-                                </div>
-                            </div>
-                            <div class="info-content-wrap">
-                                <price-table :prescriptionData="detailData?.prescription" :area="detailData?.farm?.mianji">
-                                    <template #bottomContent>
-                                        <div class="price-bottom">
-                                            <div class="info-title-wrap">
-                                                <div class="sub-title">服务费用</div>
-                                                <div class="info-more">
-                                                    {{ detailData?.serviceMuPrice ? serviceCostTotal : '--' }}
-                                                    <span class="unit-text">元</span>
-                                                </div>
-                                            </div>
-                                            <div class="price-info">
-                                                <div class="info-l">
-                                                    单亩价格<span class="main-text">{{
-                                                        detailData?.serviceMuPrice
-                                                            ? detailData?.serviceMuPrice + "元/亩"
-                                                            : "--"
-                                                    }}</span>
-                                                </div>
-                                                <!-- <div class="info-l">
-                                                    执行方式<span class="main-text">{{
-                                                        detailData?.executionMethodName || "人工"
-                                                    }}</span>
-                                                </div>
-                                                <div class="info-c">
-                                                    亩单价<span class="main-text">{{
-                                                        detailData?.serviceMuPrice
-                                                            ? detailData?.serviceMuPrice + "元/亩"
-                                                            : "--"
-                                                    }}</span>
-                                                </div>
-                                                <div class="info-r">
-                                                    亩数<span class="main-text">{{
-                                                        detailData?.farm?.mianji
-                                                            ? formatArea(detailData?.farm?.mianji) + "亩"
-                                                            : "--"
-                                                    }}</span>
-                                                </div> -->
-                                            </div>
-                                            <div class="price-bottom-action">
-                                                <div class="price-total">
-                                                    报价合计:<span class="main-val">
-                                                        {{ totalCost ? formatArea(totalCost) : "--" }}</span
-                                                    >元
-                                                </div>
-                                                <div class="show-price-btn" v-if="curRole == 2" @click="showPriceSheetPopup">生成报价单</div>
-                                            </div>
-                                        </div>
-                                    </template>
-                                </price-table>
-                            </div>
-                        </div>
-                        <!-- <div class="contact-buttons">
-                            <button class="contact-btn">电话联系</button>
-                            <button class="contact-btn">在线联系</button>
-                        </div> -->
-                    </div>
-                </div>
-            </div>
-            <div class="work-wrap" :class="{ 'info-wrap': curRole == 2 }">
-
-                <div class="box-wrap farm-data">
-                    <div class="card-title">
-                        <div>{{ detailData?.name }}<span class="type-tag">标准农事</span></div>
-                        <!-- <div class="point-wrap">
-                            <div class="point"></div>
-                            <span>2区</span>
-                        </div> -->
-                        <div class="tag-text" v-if="arrangeDetail?.isFollow !== undefined">{{ statusMap[arrangeDetail?.isFollow] }}</div>
-                    </div>
-                    <div class="data-content">
-                        <div class="form-item">
-                            <div class="item-name">农事编号</div>
-                            <div class="item-text">{{ detailData?.code }}</div>
-                        </div>
-                        <div class="form-item">
-                            <div class="item-name">服务亩数</div>
-                            <div class="item-text">
-                                {{ detailData?.farm?.mianji ? formatArea(detailData?.farm?.mianji) + "亩" : "--" }}
-                            </div>
-                        </div>
-                        <div class="form-item">
-                            <div class="item-name">服务区域</div>
-                            <div class="item-text">{{ detailData?.farm?.district }}</div>
-                        </div>
-                        <!-- <div class="form-item">
-                            <div class="item-name">触发条件</div>
-                            <div class="item-text">{{ detailData?.condition }}</div>
-                        </div> -->
-                        <div class="form-item">
-                            <div class="item-name">执行日期</div>
-                            <div class="item-text">{{ detailData?.executeDate || detailData?.expectedExecuteDate || detailData?.executeDate }}</div>
-                        </div>
-                    </div>
-                </div>
-
-                <div class="box-wrap farm-table">
-                    <div class="card-title">药物处方</div>
-                    <div class="table-item">
-                        <div class="form-item">
-                            <div class="item-name">施用方式</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 === 3 ? '无人机+人工' : '人工' }}</div>
-                        </div>
-                    </div>
-                    <div class="new-wrap" v-if="detailData?.prescription?.pesticideFertilizerList?.length">
-                        <div class="new-title">
-                            <div class="title-1"><div class="table-name">使用功效</div></div>
-                            <div class="title-2"><div class="table-name">药肥名称</div></div>
-                            <div class="title-4"><div class="table-name">药肥配比</div></div>
-                            <div class="title-5"><div class="table-name">单亩用量</div></div>
-                        </div>
-                        <div
-                            class="new-table-wrap"
-                        >
-                            <div
-                                class="new-prescription"
-                                v-for="(subP, subI) in detailData?.prescription?.pesticideFertilizerList"
-                                :key="subI"
-                            >
-                                <div class="new-table">
-                                    <div class="line-l">
-                                        <div class="line-1 title-1">{{ subP.typeName || '--' }}</div>
-                                        <div class="line-2">{{ subP.name }}</div>
-                                    </div>
-                                    <div class="line-r">
-                                        <div class="line-3">
-                                            <div class="sub-line title-4">{{ subP.ratio }}倍</div>
-                                            <div class="sub-line title-5">{{ subP.dosage }}{{ subP.unit }}</div>
-                                        </div>
-                                    </div>
-                                </div>
-                                <div class="note-text" v-if="subP.remark">{{ subP.remark }}</div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-
-                <!-- <div class="work-map">
-                    <div class="card-title">执行农事区域</div>
-                    <div class="map-content">
-                        <div class="map-dom" ref="areaRef"></div>
-                    </div>
-                </div> -->
-            </div>
-
-
-            <!-- 农资,步骤:农事已确认 -->
-            <div class="fixed-btn-wrap" v-if="curRole == 2">
-                <div class="fixed-btn second" @click="editPrice">编辑报价</div>
-                <div class="fixed-btn" @click="handleTimelineAction">转入农事任务</div>
-            </div>
-        </div>
-    </div>
-    <!-- 报价弹窗 -->
-    <!-- <offer-popup :showPopup="showPopup" :executionData="executionData"></offer-popup> -->
-    <!-- 服务报价单 -->
-    <price-sheet-popup ref="priceSheetPopupRef"></price-sheet-popup>
- 
-    <!-- 新增:激活上传弹窗 -->
-    <active-upload-popup ref="activeUploadPopupRef" @handleUploadSuccess="handleUploadSuccess"></active-upload-popup>
-</template>
-
-<script setup>
-import customHeader from "@/components/customHeader.vue";
-import { ref, computed, onActivated, onDeactivated, onMounted } from "vue";
-// import NewFarmMap from "./newFarmMap";
-import { useStore } from "vuex";
-import { Popup, Calendar } from "vant";
-import offerPopup from "@/components/popup/offerPopup.vue";
-import { useRouter, useRoute } from "vue-router";
-import farmSteps from "@/components/farmSteps.vue";
-import priceTable from "../agri_work/components/priceTable.vue";
-import priceSheetPopup from "@/components/popup/priceSheetPopup.vue";
-import { base_img_url2 } from "@/api/config";
-import { ElMessage } from "element-plus";
-import { formatArea, formatDate } from "@/common/commonFun";
-import wx from "weixin-js-sdk";
-import reviewUploadPopup from "@/components/popup/reviewUploadPopup.vue";
-import FnShareSheet from "@/components/pageComponents/FnShareSheet.vue";
-import activeUploadPopup from "@/components/popup/activeUploadPopup.vue";
-import eventBus from "@/api/eventBus";
-
-const router = useRouter();
-const store = useStore();
-const query = ref({});
-// 角色
-// const curRole = store.state.app.curRole
-const curRole = ref(localStorage.getItem("SET_USER_CUR_ROLE"));
-// const curRole = 2;
-
-// 农资待生成报价单--currentStep:1;curRole:2
-// 农资已执行,有执行照片,请求确认--currentStep:2;curRole:2
-
-// 0:执行, 1: 复核
-const status = ref(0);
-const uploadExecuteRef = ref(null);
-
-const showUpload = ref(false);
-const sectionId = ref(null);
-// 上传照片处理函数
-const handleUploadPhoto = ({ id }) => {
-    showUpload.value = true;
-    sectionId.value = id;
-};
-
-onDeactivated(() => {
-    showUpload.value = false;
-    sectionId.value = null;
-});
-
-const handleSelfDone = () => {
-    VE_API.z_farm_work_record.updateFlowStatus({ id: query.value.id, targetFlowStatus: 5 }).then((res) => {
-        if (res.code === 0) {
-            showUpload.value = false;
-            sectionId.value = null;
-            setTimeout(() => {
-                router.replace({
-                    path: "/review_work",
-                    query: {
-                        miniJson: JSON.stringify({ id: query.value.id, goBack: true }),
-                    },
-                });
-            }, 500)
-        }
-    });
-};
-
-
-const priceSheetPopupRef = ref(null);
-const showPriceSheetPopup = () => {
-    priceSheetPopupRef.value.handleShowPopup({ id: detailData.value.id, farmId: query.value.farmId });
-};
-
-const userInfoStr = localStorage.getItem("localUserInfo");
-const userInfo = userInfoStr ? JSON.parse(userInfoStr) : {};
-
-const executorList = ref([])
-
-// 检查是否有"转入农事"权限
-const hasPlanPermission = computed(() => {
-    try {
-        const userInfoStr = localStorage.getItem("localUserInfo");
-        if (!userInfoStr) return false;
-        const userInfo = JSON.parse(userInfoStr);
-        const permissions = userInfo.agriculturalPermissions || [];
-        return permissions.includes("转入农事");
-    } catch (error) {
-        console.error("解析用户信息失败:", error);
-        return false;
-    }
-});
-
-onMounted(() => {
-    getManagerList();
-});
-
-// 查询当前农资店的成员列表(只保留有"任务接单"权限的成员)
-const getManagerList = async () => {
-    const { data } = await VE_API.mine.listManagerList({ onlyExecutor: true });
-    if (data && data.length > 0) {
-        // 过滤 permissionList 中包含"任务接单"的成员,并过滤掉超管(role为1)
-        executorList.value = data.filter((item) => item.role !== 1);
-    }
-};
-
-const activeUploadPopupRef = ref(null);
-const handleTimelineAction = (item) => {
-    if (hasPlanPermission.value) {
-        activeUploadPopupRef.value.showPopup({
-            gardenIdVal: query.value.farmId,
-            needExecutorVal: true,
-            problemTitleVal: "请选择 " + detailData.value.name + " 执行截止时间",
-            imgDescVal: "请上传凭证(转入农事任务凭证)",
-            arrangeIdVal: query.value.arrangeId,
-            executorListVal: executorList.value,
-            farmWorkIdVal: query.value.id,
-            schemeIdVal: detailData.value.schemeId,
-        });
-    } else {
-        ElMessage.warning("您暂无权限操作");
-    }
-};
-
-const editPrice = () => {
-    if (!hasPlanPermission.value) {
-        ElMessage.warning("您暂无权限操作");
-        return;
-    }
-    router.push({
-        path: "/modify",
-        query: {
-            isEdit: true,
-            onlyPrice: true,
-            farmId: query.value.farmId,
-            arrangeId: query.value.arrangeId,
-            farmWorkId: query.value.id,
-        },
-    });
-};
-
-const handleUploadSuccess = () => {
-    router.back();
-};
-// 地图
-// const areaRef = ref(null);
-// let newFarmMap = new NewFarmMap();
-const quotationData = ref({});
-const parmasPage = ref({});
-const toList = (val) => {
-    if (!val) return [];
-    return JSON.parse(val);
-};
-
-const speciesList = computed(() => toList(detailData.value?.agricultural?.serviceSpecies));
-const equipmentList = computed(() => toList(detailData.value?.agricultural?.serviceEquipment));
-onActivated(async () => {
-    query.value = useRoute().query?.miniJson ? JSON.parse(useRoute().query?.miniJson) : {};
-    if (query.value?.paramsPage) {
-        const data = JSON.parse(query.value.paramsPage);
-        query.value.id = data.id;
-        query.value.farmId = data.farmId;
-        query.value.arrangeId = data.arrangeId;
-        query.value.goBack = true;
-    }
-    const id = query.value?.id;
-    if (id) {
-        await getDetail();
-    }
-});
-
-function getServiceCost(cost, area) {
-    if (!cost || !area) return "--";
-    return (parseFloat(cost) * parseFloat(area)).toFixed(2);
-}
-
-const detailData = ref({});
-
-// 计算距离执行时间的天数差
-const daysDiff = computed(() => {
-    if (!arrangeDetail.value?.interactionTime) {
-        return 0;
-    }
-    
-    const executeDate = new Date(arrangeDetail.value.interactionTime);
-    const today = new Date();
-    
-    // 将时间设置为 00:00:00,只比较日期
-    executeDate.setHours(0, 0, 0, 0);
-    today.setHours(0, 0, 0, 0);
-    
-    // 计算天数差(毫秒转天数)
-    const diffTime = executeDate.getTime() - today.getTime();
-    const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));
-    
-    return diffDays;
-});
-
-// 药肥费用总计:∑(单价 * 单亩用量 * 亩数)
-const pesticideCostTotal = computed(() => {
-    const list = detailData.value?.prescription?.pesticideFertilizerList || [];
-    const area = Number(detailData.value?.farm?.mianji || 0);
-    if (!list.length || !area) return 0;
-
-    const sum = list.reduce((acc, item) => {
-        const price = Number(item?.price || 0);
-        const dosage = Number(item?.dosage || 0);
-        if (!price || !dosage) return acc;
-        return acc + price * dosage * area;
-    }, 0);
-
-    return Number(sum.toFixed(2));
-});
-
-
-// 报价合计 = 药肥费用 + 服务费用
-const totalCost = computed(() => {
-    const pesticide = Number(pesticideCostTotal.value || 0);
-    const service = Number(serviceCostTotal.value || 0);
-    if (!pesticide && !service) return '--';
-    return Number((pesticide + service).toFixed(2));
-});
-
-// 服务费用总计(数值):亩单价 * 亩数
-const serviceCostTotal = computed(() => {
-    const price = Number(detailData.value?.serviceMuPrice || 0);
-    const area = Number(detailData.value?.farm?.mianji || 0);
-    if (!price || !area) return 0;
-    return Number((price * area).toFixed(2));
-});
-
-
-const getDetail = async () => {
-    const { data } = await VE_API.farm.getFarmWorkLib({ id: query.value.id, farmId: query.value.farmId, agriculturalId: userInfo?.agriculturalId });
-    if (data) {
-        detailData.value = data;
-        const pesticideFertilizerCodes = data?.prescription?.pesticideFertilizerList?.map(item => item.code);
-        getPriceList(data.schemeId, pesticideFertilizerCodes);
-        getArrangeDetail(query.value.arrangeId);
-    }
-};
-const statusMap = ref({
-    0: "取消关注",
-    1: "特别关注",
-    2: "托管农事",
-});
-
-const arrangeDetail = ref({});
-const getArrangeDetail = async (id) => {
-    const { data } = await VE_API.container_farm_work_arrange.getArrangeDetail({ id });
-    if (data) {
-        arrangeDetail.value = data;
-    }
-};
-
-
-const getPriceList = async (schemeId, pesticideFertilizerCodes) => {
-    if (!schemeId || !pesticideFertilizerCodes || !Array.isArray(pesticideFertilizerCodes)) return;
-    const { data } = await VE_API.farm.getPriceList({ schemeId, pesticideFertilizerCodes });
-    if (!data || !Array.isArray(data)) return;
-
-    detailData.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;
-    });
-};
-
-const handleClose = () => {
-    if(query.value.goBack){
-        router.replace({
-            path: "/home",
-        });
-    }else{
-        router.back();
-    }
-};
-
-</script>
-
-<style lang="scss" scoped>
-.completed-work {
-    height: 100vh;
-    position: relative;
-    overflow: auto;
-    font-size: 14px;
-    background: #f2f3f5;
-    .work-content {
-        height: calc(100% - 40px);
-        overflow: auto;
-        box-sizing: border-box;
-        &.hasBottom {
-            padding-bottom: 60px;
-        }
-        .info-wrap {
-            margin-bottom: 80px;
-        }
-        .work-wrap {
-            position: relative;
-            z-index: 3;
-            padding: 0 12px;
-            top: -16px;
-        }
-        .pt-10 {
-            padding-top: 10px;
-        }
-        .fixed-btn-wrap {
-            position: fixed;
-            z-index: 10;
-            bottom: 0;
-            left: 0;
-            width: 100%;
-            padding: 10px 12px 25px;
-            box-sizing: border-box;
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            background: #fff;
-            box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.4);
-            &.center {
-                justify-content: center;
-            }
-            .fixed-btn {
-                width: 120px;
-                text-align: center;
-                height: 40px;
-                line-height: 40px;
-                background: linear-gradient(180deg, #70bffe, #2199f8);
-                border-radius: 25px;
-                color: #fff;
-                font-size: 14px;
-                box-sizing: border-box;
-                &.expert {
-                    width: 180px;
-                }
-                &.orange {
-                    color: #ff953d;
-                    border: 1px solid #ff953d;
-                    background: rgba(255, 149, 61, 0.1);
-                }
-                &.excute {
-                    background: linear-gradient(180deg, #ffd887, #ed9e1e);
-                }
-                &.second {
-                    background: #ffffff;
-                    border: 1px solid rgba(153, 153, 153, 0.5);
-                    color: #666666;
-                }
-            }
-        }
-        .card-title {
-            font-size: 16px;
-            font-weight: bold;
-            color: #000;
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            .tag-text {
-                color: #2199F8;
-                font-size: 12px;
-                font-weight: normal;
-            }
-            .point-wrap {
-                display: flex;
-                align-items: center;
-                color: #393939;
-                font-size: 12px;
-                font-weight: normal;
-                .point {
-                    width: 6px;
-                    height: 6px;
-                    border-radius: 50%;
-                    background: #393939;
-                    margin-right: 4px;
-                }
-            }
-            .type-tag {
-                margin-left: 5px;
-                font-size: 12px;
-                color: #000000;
-                padding: 4px 10px;
-                background: rgba(119, 119, 119, 0.1);
-                border-radius: 20px;
-                font-weight: normal;
-                height: 26px;
-                line-height: 26px;
-            }
-        }
-        .box-wrap {
-            background: #fff;
-            padding: 10px;
-            border-radius: 8px;
-        }
-
-        .step-wrap {
-            padding: 18px 0;
-        }
-
-        .content-status {
-            position: relative;
-            padding: 26px 12px 20px 12px;
-            color: #fff;
-            z-index: 2;
-            display: flex;
-            justify-content: space-between;
-            align-items: center;
-            &::after {
-                content: "";
-                z-index: -1;
-                position: absolute;
-                left: 0;
-                top: 0;
-                height: 136px;
-                background: #2199f8;
-                width: 100%;
-            }
-            .status-l {
-                .stauts-text {
-                    font-size: 22px;
-                    display: flex;
-                    align-items: center;
-                    .status-icon {
-                        width: 24px;
-                        height: 24px;
-                        background: #ffffff;
-                        border-radius: 50%;
-                        margin-right: 8px;
-                    }
-                }
-                .stauts-sub-text {
-                    // color: rgba(255, 255, 255, 0.51);
-                    font-size: 14px;
-                }
-                .time-text {
-                    color: #ffff;
-                }
-            }
-            &.warning {
-                &::after {
-                    background: #ff953d;
-                }
-                .stauts-sub-text {
-                    color: #fff;
-                }
-            }
-            .status-r {
-                height: 32px;
-                line-height: 32px;
-                padding: 0 16px;
-                color: #2199f8;
-                font-size: 16px;
-                background: #fff;
-                border-radius: 20px;
-            }
-        }
-
-        .info-content {
-            padding: 10px 0;
-            position: relative;
-        }
-        .info-title-wrap {
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            color: #000;
-            .info-more {
-                font-size: 18px;
-            }
-            .unit-text {
-                font-size: 12px;
-            }
-        }
-        .info-content-wrap {
-            .price-bottom {
-                padding-top: 8px;
-                .price-info {
-                    padding: 8px 0;
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-between;
-                    color: rgba(0, 0, 0, 0.2);
-                    .main-text {
-                        padding-left: 20px;
-                        color: rgba(0, 0, 0, 0.8);
-                    }
-                    .info-c {
-                        flex: 1;
-                        text-align: center;
-                    }
-                }
-                .price-bottom-action {
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-between;
-                    gap: 8px;
-                    .show-price-btn {
-                        flex: none;
-                        width: 96px;
-                        height: 40px;
-                        line-height: 38px;
-                        line-height: 38px;
-                        border-radius: 4px;
-                        background: #2199f8;
-                        color: #fff;
-                        font-size: 14px;
-                        text-align: center;
-                    }
-                }
-                .price-total {
-                    flex: 1;
-                    height: 38px;
-                    display: flex;
-                    align-items: center;
-                    justify-content: center;
-                    border: 1px solid rgba(33, 153, 248, 0.5);
-                    background: rgba(33, 153, 248, 0.1);
-                    color: #000000;
-                    border-radius: 4px;
-                    .main-val {
-                        font-size: 20px;
-                        font-weight: bold;
-                        color: #2199f8;
-                        padding-right: 2px;
-                    }
-                }
-            }
-        }
-        .executor-info {
-            margin-top: 14px;
-            &.mt-0 {
-                margin-top: 0;
-            }
-            .executor-title {
-                font-size: 18px;
-                font-weight: bold;
-                color: #000;
-                margin-bottom: 12px;
-            }
-            .executor-content {
-                .executor-info {
-                    display: flex;
-                    align-items: flex-start;
-                    gap: 12px;
-                }
-                .executor-avatar {
-                    flex-shrink: 0;
-                    img {
-                        width: 60px;
-                        height: 60px;
-                        border-radius: 8px;
-                        object-fit: cover;
-                    }
-                }
-                .executor-details {
-                    flex: 1;
-                    .org-name {
-                        display: flex;
-                        align-items: center;
-                        gap: 8px;
-                        margin-bottom: 3px;
-                        .name {
-                            font-size: 16px;
-                            font-weight: bold;
-                            color: #000;
-                        }
-                        .rating {
-                            font-size: 16px;
-                            color: #ff953d;
-                            font-weight: bold;
-                        }
-                    }
-                    .service-info {
-                        .service-item {
-                            font-size: 12px;
-                            color: #b6b6b6;
-                            line-height: 1.3;
-                            margin-bottom: 2px;
-                            span {
-                                color: #666666;
-                            }
-                        }
-                    }
-                }
-            }
-            .contact-buttons {
-                display: flex;
-                justify-content: flex-end;
-                gap: 8px;
-                margin-top: 16px;
-                .contact-btn {
-                    width: 88px;
-                    height: 32px;
-                    border-radius: 20px;
-                    color: rgba(0, 0, 0, 0.5);
-                    background: #fff;
-                    border: 1px solid rgba(0, 0, 0, 0.1);
-                }
-            }
-        }
-        .farm-info {
-            color: rgba(0, 0, 0, 0.6);
-            font-size: 14px;
-            margin-top: 14px;
-            .info-title {
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                color: rgba(41, 41, 41, 0.3);
-                .info-more {
-                    display: flex;
-                    align-items: center;
-                }
-            }
-        }
-        .farm-photo {
-            margin-top: 10px;
-            .photo-list {
-                display: flex;
-                align-items: center;
-                width: 100%;
-                overflow: auto;
-                padding-bottom: 10px;
-                .photo-item {
-                    width: 92px;
-                    height: 92px;
-                    border-radius: 8px;
-                    object-fit: cover;
-                }
-
-                .img-item {
-                    img {
-                        width: 92px;
-                        height: 92px;
-                        border-radius: 8px;
-                        object-fit: cover;
-                        margin-right: 12px;
-                    }
-                }
-
-                .view-box {
-                    width: 92px;
-                    height: 92px;
-                    border-radius: 8px;
-                    object-fit: cover;
-                }
-            }
-            .list-text {
-                text-align: center;
-                color: rgba(0, 0, 0, 0.5);
-                padding-top: 2px;
-            }
-        }
-
-        .farm-data {
-            margin-top: 10px;
-            .data-content {
-                margin-top: 8px;
-                border-top: 1px solid #f5f5f5;
-                padding: 8px 0;
-            }
-        }
-
-        .form-item {
-            display: flex;
-            align-items: center;
-            font-size: 14px;
-            color: #767676;
-            height: 24px;
-            .item-name {
-                width: 80px;
-                color: rgba(0, 0, 0, 0.2);
-            }
-        }
-        .form-item + .form-item {
-            padding-top: 2px;
-        }
-
-        .farm-table {
-            margin-top: 10px;
-            .table-item {
-                padding: 10px 0 12px 0;
-            }
-        }
-
-        .new-wrap {
-            border-radius: 5px;
-            text-align: center;
-            border: 1px solid rgba(225, 225, 225, 0.5);
-            .new-title {
-                background: rgba(241, 241, 241, 0.4);
-                border-radius: 5px 5px 0 0;
-                border-bottom: 1px solid rgba(225, 225, 225, 0.5);
-                display: flex;
-                color: #767676;
-                // justify-content: space-around;
-                padding: 2px 6px;
-                font-size: 12px;
-                .table-name {
-                    width: 24px;
-                    font-size: 12px;
-                    margin: 0 auto;
-                }
-            }
-
-            .title-1 {
-                width: 46px;
-            }
-            .title-2 {
-                flex: 1;
-            }
-            .title-3 {
-                width: 52px;
-            }
-            .title-4 {
-                width: 56px;
-            }
-            .title-5 {
-                width: 52px;
-            }
-            .new-table-wrap {
-                padding: 5px;
-                .new-prescription {
-                    height: 45px;
-                }
-                .new-prescription {
-                    .new-table {
-                        height: 100%;
-                        display: flex;
-                        align-items: center;
-                        // border: 1px solid rgba(225, 225, 225, 0.8);
-                        background: #fff;
-                        border-radius: 5px;
-                        color: rgba(0, 0, 0, 0.6);
-                        font-size: 11px;
-                        .line-l {
-                            display: flex;
-                            flex: 1;
-                            .line-2 {
-                                flex: 1;
-                                padding: 0 2px;
-                            }
-                        }
-                        .line-r {
-                            &.has-border {
-                                border-left: 1px solid rgba(225, 225, 225, 0.8);
-                            }
-                            .line-3 {
-                                display: flex;
-                                align-items: center;
-                            }
-                            .sub-line {
-                                padding: 10px 0;
-                            }
-                            .line-4 {
-                                display: flex;
-                                align-items: center;
-                                border-top: 1px solid rgba(225, 225, 225, 0.8);
-                            }
-                            .execute-line {
-                                border-right: 1px solid rgba(225, 225, 225, 0.8);
-                            }
-                        }
-                    }
-                    .note-text {
-                        margin: 8px 0 4px 0;
-                        color: rgba(0, 0, 0, 0.4);
-                        background: #fff;
-                        padding: 6px 8px;
-                        border-radius: 5px;
-                        text-align: left;
-                        font-size: 11px;
-                    }
-                }
-                .new-prescription + .new-prescription {
-                    // padding-top: 8px;
-                    .new-table {
-                        border-top: 1px solid rgba(0, 0, 0, 0.08);
-                    }
-                }
-            }
-        }
-
-        .work-map {
-            padding: 10px 0;
-            .map-content {
-                padding-top: 8px;
-                .map-dom {
-                    height: 166px;
-                    width: 100%;
-                    clip-path: inset(0px round 8px);
-                }
-            }
-        }
-    }
-}
-
-.task-tips-popup {
-    width: 75%;
-    padding: 28px 28px 20px;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    .create-farm-icon {
-        width: 40px;
-        height: 40px;
-        margin-bottom: 12px;
-    }
-    .farm-check-icon {
-        width: 68px;
-        height: 68px;
-        margin-bottom: 12px;
-    }
-    .create-farm-text {
-        font-size: 20px;
-        font-weight: 500;
-        line-height: 40px;
-        margin-bottom: 32px;
-        text-align: center;
-        &.success-text {
-            font-size: 23px;
-            font-weight: 400;
-        }
-    }
-    .main-text {
-        color: #2199f8;
-    }
-    .create-farm-btn {
-        width: 100%;
-        box-sizing: border-box;
-        padding: 8px;
-        border-radius: 25px;
-        font-size: 16px;
-        background: #2199f8;
-        color: #fff;
-        text-align: center;
-    }
-}
-</style>

+ 0 - 1553
src/views/old_mini/modify_work/index.vue

@@ -1,1553 +0,0 @@
-<template>
-    <div class="new-farming-page">
-        <custom-header :name="isAdd ? '新增农事' : isEdit ? '编辑方案' : '农事详情'"></custom-header>
-        <div class="new-farming-content">
-            <div v-if="!isAdd && !isEdit">
-                <div class="step-wrap">
-                    <farm-steps :currentStep="0" />
-                </div>
-                <div class="box-wrap farm-info">
-                    <div class="info-title">
-                        <div class="card-title">农场现状</div>
-                        <!-- <div class="info-more">
-                            点击查看更多
-                            <el-icon><ArrowRight /></el-icon>
-                        </div> -->
-                    </div>
-                    <div class="info-content">
-                        {{ farmStatusText }}
-                    </div>
-                </div>
-                <div class="box-wrap farm-photo" v-if="triggerImg.length">
-                    <div class="photo-list">
-                        <photo-provider :photo-closable="true">
-                                <photo-consumer v-for="src in triggerImg" intro="触发照片" :key="src" :src="base_img_url2 + src.cloudFilename">
-                                    <div class="img-item">
-                                        <img :src="base_img_url2 + src.cloudFilename" class="view-box">
-                                    </div>
-                                </photo-consumer>
-                        </photo-provider>
-                    </div>
-                    <!-- <div class="list-text">点击查看更多</div> -->
-                </div>
-            </div>
-            <el-form
-                ref="formRef"
-                style="max-width: 600px"
-                label-position="left"
-                :rules="rules"
-                :model="dynamicValidateForm"
-                class="demo-dynamic"
-            >
-                <div class="farm-card" v-if="!isAdd">
-                    <div class="card-title">{{ detailData?.farmWorkName }}<span class="type-tag">标准农事</span></div>
-                    <div class="info-content">
-                        <el-form-item label-width="70px" class="form-item text-item" label="农事编号">
-                            <div class="info-text">
-                                {{ detailData?.code }}
-                            </div>
-                        </el-form-item>
-                        <el-form-item label-width="70px" class="form-item text-item" label="服务亩数">
-                            <div class="info-text">
-                                {{ detailData?.area ? formatArea(detailData?.area) + '亩' : '--' }}
-                            </div>
-                        </el-form-item>
-                        <el-form-item label-width="70px" class="form-item text-item" label="服务区域">
-                            <div class="info-text">
-                                {{ detailData?.serviceRegion }}
-                            </div>
-                        </el-form-item>
-                        <!-- <el-form-item label-width="70px" class="form-item" prop="conditionRate" label="触发条件">
-                            <div class="condition-wrap">
-                                {{ detailData?.condition }}
-                            </div>
-                        </el-form-item> -->
-                        <el-form-item label-width="70px" class="form-item" prop="executeDate" label="执行时间">
-                            <el-date-picker
-                                class="item-input"
-                                style="width: 100%"
-                                value-format="YYYY-MM-DD"
-                                v-model="dynamicValidateForm.executeDate"
-                                type="date"
-                                :clearable="false"
-                                placeholder="选择日期"
-                                :editable="false"
-                            />
-                        </el-form-item>
-                    </div>
-                </div>
-                <template v-else>
-                    <div class="farm-card progress">
-                        <span class="progress-title">农事进度</span>
-                        <el-radio-group v-model="farmProgress">
-                            <el-radio :value="0">已做</el-radio>
-                            <el-radio :value="1">未做</el-radio>
-                        </el-radio-group>
-                    </div>
-                    <div class="farm-card" v-if="farmProgress === 0">
-                        <div class="card-title">基本信息</div>
-                        <div class="info-content">
-                                <el-form-item label-width="82px" class="form-item" prop="farmWorkName" label="农事名称">
-                                    <el-select v-model="dynamicValidateForm.farmWorkName" placeholder="请选择农事名称" style="width: 100%">
-                                        <el-option v-for="(item, index) in farmWorkNameList" :key="index" :value="item" :label="item" />
-                                    </el-select>
-                                </el-form-item>
-                                <el-form-item label-width="82px" class="form-item" prop="name" label="农事目的">
-                                    <el-input
-                                        v-model="dynamicValidateForm.purpose"
-                                        style="width: 100%"
-                                        :rows="2"
-                                        type="textarea"
-                                        placeholder="请输入农事目的"
-                                    />
-                                </el-form-item>
-                                <el-form-item label-width="82px" class="form-item" prop="conditionRate" label="执行时间">
-                                    <el-date-picker
-                                        v-model="dynamicValidateForm.checkDay"
-                                        value-format="YYYY-MM-DD"
-                                        type="date"
-                                        placeholder="请选择执行时间"
-                                        style="width: 100%"
-                                        :editable="false"
-                                    />
-                                </el-form-item>
-                        </div>
-                    </div>
-                </template>
-                <div class="farm-card prescription-content" v-if="farmProgress === 0">
-                    <div class="card-title pb-12">药物处方</div>
-                    <el-form-item label-width="82px" class="form-item" prop="usageMode" label="施用方式">
-                        <el-select v-model="dynamicValidateForm.usageMode" placeholder="请选择施用方式" style="width: 100%">
-                            <el-option
-                                v-for="(usage, uId) in allUsageModeList"
-                                :key="uId"
-                                :label="usage"
-                                :value="usage"
-                            />
-                        </el-select>
-                    </el-form-item>
-                    <div v-if="dynamicValidateForm.usageMode !== '人工农事'">
-                        <el-form-item
-                            v-for="(prescriptionItem, prescriptionI) in dynamicValidateForm.prescriptionList"
-                            :key="prescriptionI"
-                            :prop="'prescriptions.' + prescriptionI + '.value'"
-                            class="prescription-item"
-                        >
-                            <div class="recipe-item">
-                                <div class="sub-title">
-                                    <div>{{ prescriptionItem.name }}处方</div>
-                                    <div class="add-tag" @click="addDomain(prescriptionI)">
-                                        <el-icon color="#2199F8"><Plus /></el-icon>新增药物
-                                    </div>
-                                </div>
-                                <div class="recipe-form">
-                                    <el-form-item
-                                        v-for="(domain, index) in prescriptionItem.pesticideFertilizerList"
-                                        :key="domain.key"
-                                        :prop="'pesticideFertilizerList.' + index + '.value'"
-                                    >
-                                        <div class="form-box">
-                                            <div class="form-index">{{ formatIndex(index) }}</div>
-                                            <div class="box-item" v-if="domain.typeName">
-                                                <div class="form-l">药肥类型</div>
-                                                <div class="form-r r-text">
-                                                    {{ domain.typeName }}
-                                                    <!-- <el-select
-                                                    v-model="domain.typeName"
-                                                    placeholder="请选择"
-                                                    style="width: 100%"
-                                                    >
-                                                        <el-option :label="domain.typeName" :value="domain.typeName" />
-                                                </el-select> -->
-                                                </div>
-                                            </div>
-                                            <div class="box-item">
-                                                <div class="form-l">药肥名称</div>
-                                                <div class="form-r">
-                                                    <el-select
-                                                        filterable
-                                                        @change="handlePesticideFertilizerChange(prescriptionI, index)"
-                                                        v-model="domain.pesticideFertilizerId"
-                                                        placeholder="请选择"
-                                                        style="width: 100%"
-                                                    >
-                                                        <el-option
-                                                            v-for="item in pesticideFertilizersOptions"
-                                                            :key="item.id"
-                                                            :label="item.defaultName || item.name"
-                                                            :value="item.id"
-                                                        />
-                                                    </el-select>
-                                                </div>
-                                            </div>
-                                            <div class="form-title">人工方式</div>
-                                            <div class="box-item sub-item">
-                                                <div class="form-l has-sub">
-                                                    <div class="main-name">药肥配比</div>
-                                                </div>
-                                                <div class="form-r input-box text-center input-unit">
-                                                    <!-- <el-input
-                                                        v-model="domain.ratio"
-                                                        style="width: 100%"
-                                                        placeholder="请输入"
-                                                    /> -->
-
-                                                    <el-input v-model="domain.ratio" type="number" step="0.01" placeholder="请输入">
-                                                        <template #append>倍</template>
-                                                    </el-input>
-                                                </div>
-                                            </div>
-                                            <!-- <div class="box-item sub-item">
-                                                <div class="form-l">施用方式</div>
-                                                <div class="form-r">
-                                                    <el-select
-                                                        v-model="domain.usageMode"
-                                                        placeholder="请选择"
-                                                        style="width: 100%"
-                                                    >
-                                                        <el-option
-                                                            v-for="(usage, uId) in domain.usageModeList"
-                                                            :key="uId"
-                                                            :label="usage"
-                                                            :value="usage"
-                                                        />
-                                                    </el-select>
-                                                </div>
-                                            </div> -->
-                                            <div class="box-item sub-item">
-                                                <div class="form-l has-sub">
-                                                    <div class="main-name">单亩用量</div>
-                                                </div>
-                                                <div class="form-r input-box text-center">
-                                                    <!-- <el-input
-                                                        v-model="domain.muUsage"
-                                                        style="width: 100%"
-                                                        placeholder="请输入"
-                                                    /> -->
-                                                    <el-input v-model="domain.muUsage" type="number" step="0.01" placeholder="请输入">
-                                                        <template #append>{{ domain.unit }}</template>
-                                                    </el-input>
-                                                </div>
-                                            </div>
-                                            <div v-if="dynamicValidateForm.usageMode === '叶面施'">
-                                                <div class="form-title">无人机</div>
-                                                <div class="box-item sub-item">
-                                                    <div class="form-l has-sub">
-                                                        <div class="main-name">药肥配比</div>
-                                                    </div>
-                                                    <div class="form-r input-box text-center">
-                                                        <!-- <el-input
-                                                            v-model="domain.ratio2"
-                                                            style="width: 100%"
-                                                            placeholder="请输入"
-                                                        /> -->
-                                                        <el-input v-model="domain.ratio2" type="number" step="0.01" placeholder="请输入">
-                                                            <template #append>倍</template>
-                                                        </el-input>
-                                                    </div>
-                                                </div>
-                                                <div class="box-item sub-item">
-                                                    <div class="form-l has-sub">
-                                                        <div class="main-name">单亩用量</div>
-                                                    </div>
-                                                    <div class="form-r input-box text-center">
-                                                        <!-- <el-input
-                                                            v-model="domain.muUsage2"
-                                                            style="width: 100%"
-                                                            placeholder="请输入"
-                                                        /> -->
-                                                        <el-input v-model="domain.muUsage2" type="number" step="0.01" placeholder="请输入">
-                                                            <template #append>{{ domain.unit }}</template>
-                                                        </el-input>
-                                                    </div>
-                                                </div>
-                                            </div>
-                                            <div class="input-box mark-box">
-                                                <el-input
-                                                    v-model="domain.remark"
-                                                    style="width: 100%"
-                                                    placeholder="备注:用药注意事项"
-                                                />
-                                            </div>
-                                            <div class="action-btn">
-                                                <el-button
-                                                    class="btn delete-btn"
-                                                    @click.prevent="removeDomain(prescriptionI, domain)"
-                                                >
-                                                    删除
-                                                </el-button>
-                                                <el-button
-                                                    type="default"
-                                                    class="btn"
-                                                    @click.prevent="resetItemForm(prescriptionI, index)"
-                                                >
-                                                    重置
-                                                </el-button>
-                                            </div>
-                                        </div>
-                                    </el-form-item>
-                                </div>
-                            </div>
-                        </el-form-item>
-                    </div>
-                </div>
-                <div class="farm-card progress" v-else>
-                    <div class="situation-description">
-                        <div class="description-title">状况描述</div>
-                        <div class="description-content">
-                            <el-input
-                                v-model="situationDescription"
-                                type="textarea"
-                                :rows="3"
-                                placeholder="请输入目前农场状况"
-                                class="description-textarea"
-                            />
-                            <div class="upload-section">
-                                <el-button class="upload-btn" @click="handleUploadImage">
-                                    <el-icon><Upload /></el-icon>
-                                    上传图片
-                                </el-button>
-                                <div class="upload-tip">上传图片,专家诊断更清晰</div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="farm-card map-content" v-if="false">
-                <!-- <div class="farm-card map-content" v-if="!(curRole==1 && isAdd)"> -->
-                    <div class="card-title">执行农事区域</div>
-                    <div class="info-content">
-                        <div class="area-select">
-                            执行分区:
-                            <span class="block"></span>
-                            <el-select
-                                popper-class="v-select-popper-ns"
-                                v-model="regionId"
-                                placeholder="请选择分区"
-                                style="width: 160px"
-                                @change="changeRegion"
-                            >
-                                <el-option
-                                    v-for="(area, index) in areaList"
-                                    :key="index"
-                                    :label="area.name"
-                                    :value="area.id"
-                                >
-                                </el-option>
-                            </el-select>
-                        </div>
-                        <div class="area-select">
-                            服务亩数:
-                            <span class="block"></span>{{ serveArea }}
-                        </div>
-                        <div class="bottom-map" ref="areaRef"></div>
-                        <div>
-                            <div class="check-btn">
-                                <el-checkbox v-model="checkedArea" @change="handleArea" label="全选" size="large" />
-                            </div>
-                        </div>
-                    </div>
-                </div>
-
-                <div class="submit-btn" v-if="isEdit">
-                    <div class="btn second" @click.prevent="cancelEdit">取消编辑</div>
-                    <div class="btn" @click.prevent="submitForm(formRef)">保存方案</div>
-                </div>
-                <div class="submit-btn" v-if="!isAdd && !isEdit">
-                    <div class="btn second" @click="handleIgnore">忽略</div>
-                    <div class="btn" @click.prevent="submitForm(formRef)">确认并报价</div>
-                </div>
-                <div class="submit-btn" v-if="isAdd && farmProgress === 0">
-                    <div class="btn second">取消</div>
-                    <div class="btn" @click.prevent="submitForm(formRef)">确定新增</div>
-                </div>
-                <div v-if="isAdd && farmProgress === 1">
-                    <div class="expert-diagnosis-btn" @click="handleExpertDiagnosis">邀请专家诊断</div>
-                </div>
-            </el-form>
-        </div>
-    </div>
-
-    <popup v-model:show="showTaskPopup" round class="task-tips-popup">
-        <template v-if="taskPopupType === 'warning'">
-            <img  class="create-farm-icon" src="@/assets/img/home/create-farm-icon.png" alt="" />
-            <div class="create-farm-text">
-                <div>您确认忽略 <span class="main-text">{{ detailData?.farmName }}</span> 的 <span class="main-text">{{ detailData?.farmWorkName }}</span> 农事吗</div>
-            </div>
-        </template>
-        <template v-else>
-            <img class="farm-check-icon" src="@/assets/img/home/right.png" alt="">
-            <div class="create-farm-text success-text">农事已下发成功</div>
-        </template>
-        <div class="create-farm-btn" @click="handlePopupBtn">{{ taskPopupType === 'warning' ? '确认忽略' : '我知道了' }}</div>
-    </popup>
-
-    
-    <!-- 服务报价单 -->
-    <price-sheet-popup ref="priceSheetPopupRef"></price-sheet-popup>
-</template>
-
-<script setup>
-import { onActivated, ref, reactive, onDeactivated, onBeforeUnmount, computed, onMounted } from "vue";
-import { useRouter, useRoute } from "vue-router";
-import { ElMessage ,ElMessageBox} from "element-plus";
-import customHeader from "@/components/customHeader.vue";
-import NewFarmMap from "./newFarmMap";
-import { useStore } from "vuex";
-import { Popup } from "vant";
-import farmSteps from "@/components/farmSteps.vue";
-import { base_img_url2 } from "@/api/config";
-import { formatArea } from "@/common/commonFun";
-import priceSheetPopup from "@/components/popup/priceSheetPopup.vue";
-import dayjs from "dayjs";
-const store = useStore();
-const router = useRouter();
-const route = useRoute();
-
-// 角色
-// const curRole = store.state.app.curRole
-const curRole = 0
-
-const gardenId = ref(null);
-const actionType = ref([]);
-const isAdd = ref(false)
-
-const showTaskPopup = ref(false);
-const taskPopupType = ref('warning');
-
-const isEdit = ref(false)
-isAdd.value = route.query.isAdd ? true : false
-isEdit.value = route.query.isEdit ? true : false
-onActivated(() => {
-    const id = route.query.id;
-    if (id) {
-        getDetail(id);
-        getTriggerImg(id);
-    }
-    window.scrollTo(0, 0);
-    getFarmWorkNameList();
-    getFarmWorkIndexNameList();
-    if (route.query.data) {
-        actionType.value = JSON.parse(route.query.data);
-    } else {
-        actionType.value = ["生长异常"];
-    }
-    dynamicValidateForm.prescriptionList = actionType.value.map((name) => ({
-        name,
-        pesticideFertilizerList: [
-            {
-                key: 1,
-                typeName: "",
-                muUsage: "",
-                muUsage2: "",
-                ratio: "",
-                ratio2: "",
-                remark: "",
-            },
-        ],
-    }));
-    if (!(curRole==1 && isAdd.value)) {
-        const point = store.state.home.miniUserLocationPoint;
-        // newFarmMap.initMap(point, areaRef.value);
-        // eventBus.on("editNsMap:areaVal", getArea);
-        gardenId.value = route.query.gardenId;
-        // getAreaList(() => {
-        //     newFarmMap.initArea(areaList.value);
-        // });
-    }
-
-    getWarningMsg();
-});
-
-const triggerImg = ref([]);
-const getTriggerImg = async (id) => {
-    const { data } = await VE_API.z_farm_work_record.getTriggerImg({ farmWorkRecordId: id });
-    triggerImg.value = data || [];
-}
-
-
-const priceSheetPopupRef = ref(null);
-const showPriceSheetPopup = () => {
-    priceSheetPopupRef.value.handleShowPopup(detailData.value);
-};
-
-const detailData = ref({});
-const getDetail = async (id) => {
-    const { data } = await VE_API.z_farm_work_record.getDetail({ id });
-        const res = data[0];
-        detailData.value = res;
-        dynamicValidateForm.executeDate = res.executeDate;
-        dynamicValidateForm.usageMode = res.usageMode;
-
-        res.prescriptionList.forEach(item => {
-            item.pesticideFertilizerList.forEach(pesticide => {
-                pesticide.typeName = item.name;
-            });
-        });
-
-        dynamicValidateForm.prescriptionList = res.prescriptionList;
-
-        getFarmWorkArrangeDetail(res.farmWorkArrangeId);
-};
-
-
-// 获取农场现状
-const farmStatusText = ref('');
-const getFarmWorkArrangeDetail = (id) => {
-    VE_API.farm.getFarmWorkArrangeDetail({ id }).then(({ data }) => {
-        farmStatusText.value = data.farmStatus;
-    });
-};
-
-function handleIgnore() {
-    taskPopupType.value = 'warning';
-    showTaskPopup.value = true;
-}
-
-function handlePopupBtn() {
-    showTaskPopup.value = false;
-    if (taskPopupType.value === 'warning') {
-        // 确认忽略
-        VE_API.z_farm_work_record.ignoreFarmWorkRecord({ farmWorkRecordId: route.query.id }).then((res) => {
-            if (res.code === 0) {
-                ElMessage.success("操作成功");
-                router.back();
-            }
-        });
-    } else {
-        router.replace({
-            path: "/completed_work",
-            query: {
-                miniJson: JSON.stringify({ id: route.query.id }),
-            },
-        });
-    }
-}
-
-const resetForm = (formEl) => {
-    if (!formEl) return;
-    formEl.resetFields();
-    serveArea.value = null;
-    regionId.value = null;
-};
-
-// 清空所有数据
-const clearData = () => {
-    // 清空表单
-    resetForm(formRef.value);
-    
-    // 清空详情数据
-    detailData.value = {};
-    
-    // 清空表单数据
-    dynamicValidateForm.farmWorkName = "";
-    dynamicValidateForm.conditionRate = "";
-    dynamicValidateForm.purpose = "";
-    dynamicValidateForm.executeDate = dayjs().format("YYYY-MM-DD");
-    dynamicValidateForm.checkDay = "";
-    dynamicValidateForm.usageMode = "";
-    dynamicValidateForm.prescriptionList = [{
-        name: "",
-        pesticideFertilizerList: [{
-            key: 1,
-            typeName: "",
-            muUsage: "",
-            muUsage2: "",
-            ratio: "",
-            ratio2: "",
-            remark: "",
-        }],
-    }];
-    
-    // 清空其他数据
-    serveArea.value = null;
-    regionId.value = null;
-    areaList.value = [];
-    farmProgress.value = 0;
-    situationDescription.value = '';
-    checkedArea.value = false;
-    actionType.value = [];
-    gardenId.value = null;
-    showTaskPopup.value = false;
-    taskPopupType.value = 'warning';
-};
-
-onDeactivated(() => {
-    // areaRef.value && newFarmMap.destroyMap();
-    clearData();
-});
-
-onBeforeUnmount(() => {
-    clearData();
-});
-
-const cancelEdit = () => {
-    ElMessageBox.confirm("确认要取消编辑吗?", "提示", {
-        confirmButtonText: "确认",
-        cancelButtonText: "取消",
-        type: "warning",
-    })
-        .then(() => {
-            router.back();
-        })
-        .catch(() => {
-            console.log("取消编辑");
-        });
-};
-
-// 表单
-const formRef = ref();
-const dynamicValidateForm = reactive({
-    farmWorkName: "",
-    conditionRate: "",
-    purpose: "",
-    executeDate: dayjs().format("YYYY-MM-DD"),
-    checkDay: "",
-    usageMode: "",
-    prescriptionList: [
-        {
-            name: "",
-            pesticideFertilizerList: [
-                {
-                    key: 1,
-                    typeName: "",
-                    muUsage: "",
-                    muUsage2: "",
-                    ratio: "",
-                    ratio2: "",
-                    remark: "",
-                },
-            ],
-        },
-    ],
-});
-
-const rules = {
-    farmWorkName: [
-        {
-            required: true,
-            message: "请输入农事名称",
-            trigger: "blur",
-        },
-    ],
-    conditionRate: [
-        {
-            required: false,
-            message: "请输入触发条件",
-            trigger: "blur",
-        },
-    ],
-    executeDate: [
-        {
-            required: false,
-            message: "请选择执行时间",
-            trigger: "blur",
-        },
-    ],
-    checkDay: [
-        {
-            required: true,
-            message: "请选择复核时间",
-            trigger: "blur",
-        },
-    ],
-};
-
-const formatIndex = (index) => {
-    return String(index + 1).padStart(2, "0");
-};
-
-const addDomain = (parentIndex) => {
-    dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList.unshift({
-        key: Date.now(),
-        muUsage: "",
-        muUsage2: "",
-        ratio: "",
-        ratio2: "",
-        remark: "",
-    });
-};
-
-let pesticideFertilizersOptions = ref([
-    // {
-    //     id: 'null',
-    //     name: "芸苔素内酯 15000倍",
-    //     typeName: "30",
-    //     defaultRatio: null,
-    //     defaultDroneRatio: null,
-    //     unit: 0,
-    //     defaultName: "调节",
-    // },
-    {
-        brand: "天润美满",
-        capacity: 1000,
-        count: null,
-        defaultDroneRatio: null,
-        defaultName: "生物活性酶",
-        defaultRatio: null,
-        ftl: "",
-        id: "185",
-        name: "生物活性酶",
-        pesticideFertilizerCode: "1185",
-        price: 220.0,
-        processUnit: "",
-        typeId: 1,
-        typeName: "调节",
-        unit: "ml",
-        unitUsage: null,
-        unitWaterAmount: null,
-        usageModeList: ["叶面施"],
-    },
-    {
-        brand: "",
-        capacity: null,
-        count: null,
-        defaultDroneRatio: null,
-        defaultName: "矮壮素",
-        defaultRatio: null,
-        ftl: "",
-        id: "145",
-        name: "矮壮素",
-        pesticideFertilizerCode: "1145",
-        price: null,
-        processUnit: "",
-        typeId: 1,
-        typeName: "调节",
-        unit: "ml",
-        unitUsage: null,
-        unitWaterAmount: null,
-        usageModeList: ["叶面施"],
-    },
-]);
-VE_API.z_farm_work_order.pesticideFertilizersList().then(({ data }) => {
-    pesticideFertilizersOptions.value = data;
-});
-
-const allUsageMode = ref(null);
-const allUsageModeList = ["叶面施", "根部施", "人工农事"];
-
-// 农事名称列表
-const farmWorkIndexNameList = ref([
-        "片区拔节率",
-        "园区花蕾率",
-        "单树花蕾率",
-        "片区雄穗抽出率",
-        "园区花量大率",
-        "单树花量大率",
-        "片区分蘖率",
-    ]);
-function getFarmWorkIndexNameList() {
-    farmWorkIndexNameList.value = [
-        "片区拔节率",
-        "园区花蕾率",
-        "单树花蕾率",
-        "片区雄穗抽出率",
-        "园区花量大率",
-        "单树花量大率",
-        "片区分蘖率",
-    ];
-    // VE_API.farm.fetchFarmWorkIndexNameList().then(({data}) => {
-    //     farmWorkIndexNameList.value = data
-    // })
-}
-// 触发指标列表
-const farmWorkNameList = ref([]);
-function getFarmWorkNameList() {
-    // VE_API.farm.fetchFarmWorkNameList().then(({data}) => {
-    //     farmWorkNameList.value = data
-    // })
-}
-
-// 预警文字信息
-const warningMsg = ref("");
-
-const getWarningMsg = () => {
-    // VE_API.farm.getFarmWorkWarningMsg({farmId: gardenId.value}).then(({data}) => {
-    //     warningMsg.value = data
-    // })
-};
-
-/**
- * 选择药肥的时候修改订单中药肥pesticideFertilizerId 以外其他数据
- * @param index
- */
-const handlePesticideFertilizerChange = (parentIndex, index) => {
-    let obj = pesticideFertilizersOptions.value.filter(
-        (item) =>
-            dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList[index].pesticideFertilizerId ===
-            item.id
-    )[0];
-    console.log('obj', obj)
-    dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList[index] = {
-        ...dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList[index],
-        typeName: obj.typeName,
-        unit: obj.unit,
-        defaultRatio: obj.defaultRatio,
-        usageModeList: obj.usageModeList,
-        ratio: obj.defaultRatio,
-        defaultName: obj.defaultName,
-        pesticideFertilizerName: obj.name,
-        pesticideFertilizerCode: obj.pesticideFertilizerCode,
-    };
-};
-
-const removeDomain = (parentIndex, item) => {
-    const index = dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList.indexOf(item);
-    if (index !== -1) {
-        dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList.splice(index, 1);
-    }
-};
-
-const resetItemForm = (parentIndex, index) => {
-    dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList[index] = {
-        typeName: "",
-        muUsage: "",
-        muUsage2: "",
-        ratio: "",
-        ratio2: "",
-        remark: "",
-    };
-};
-
-const submitForm = (formEl) => {
-    if (!formEl) return;
-    formEl.validate((valid) => {
-        if (valid) {
-
-            // router.push({
-            //     path: "/completed_work",
-            //     query: {
-            //         id: 1,
-            //         status: 1,
-            //     },
-            // });
-            submit();
-        } else {
-            console.log("error submit!");
-        }
-    });
-};
-
-const submit = () => {
-    // let executeBlueZones = null
-    // if (!(curRole==1 && isAdd.value)) {
-    //     executeBlueZones = newFarmMap.getSelectedBlueRegion();
-    // }
-    // if (!executeBlueZones || !executeBlueZones.length) {
-    //     ElMessage({
-    //         message: "请选择执行区域",
-    //         type: "warning",
-    //     });
-    //     return false
-    // }
-
-    // 检查药物所有项是否都包含特定的字段
-    // const hasRequiredFields = dynamicValidateForm.prescriptionList.every(item => {
-    //     return item.pesticideFertilizerList.every(domain  => {
-    //         const hasPesticideFertilizerCode  = 'pesticideFertilizerCode' in domain
-    //         const hasMuUsage = 'muUsage' in domain;
-    //         const hasRatio = 'ratio' in domain;
-
-    //         const isMuUsageValid = domain.muUsage !== '';
-    //         const isRatioValid = domain.ratio ? true : false;
-
-    //         return hasPesticideFertilizerCode && hasMuUsage && hasRatio && isMuUsageValid && isRatioValid
-    //     });
-    // })
-    // if (!hasRequiredFields) {
-    //     ElMessage({
-    //         message: "请完善药物信息",
-    //         type: "warning",
-    //     });
-    //     return false
-    // }
-
-    // const flattenedDomains = flattenDomains(dynamicValidateForm.prescription)
-    const data = {
-        id: route.query.id,
-        ...dynamicValidateForm,
-    };
-    VE_API.z_farm_work_record.issueFarmWorkRecord(data).then(async (res) => {
-        if (res.code === 0) {
-            // taskPopupType.value = 'success';
-            // showTaskPopup.value = true;
-            await getDetail(route.query.id);
-            showPriceSheetPopup()
-        }
-    })
-    // 新增农事
-    // VE_API.farm.saveFarmWork(data).then(({ code }) => {
-    //     if (code === 0) {
-    //         ElMessage({
-    //             message: "保存成功",
-    //             type: "success",
-    //         });
-    //         setTimeout(() => {
-    //             // router.go(-1);
-    //             router.replace("/expert_album?reload=true");
-    //         }, 500);
-    //     }
-    // });
-    // const data = {
-    //     orderId: props.prescriptioData.orderId,
-    //     orderStatus: 1,
-    //     pesticideFertilizers: dynamicValidateForm.domains,
-    // };
-    // VE_API.order.confirm(data).then(({ code }) => {
-    //     if (code == 0) {
-    //         console.log('专家下发处方成功');
-    //         eventBus.emit('discover:submitForm')
-    //         window.location.reload()
-    //     }
-    // });
-};
-
-const farmWorkTypeVal = computed(() => {
-    const valueMap = {
-        生长异常: 1,
-        病虫异常: 3,
-        营养农事: 2,
-    };
-
-    if (actionType.value.length === 1) {
-        return valueMap[actionType.value[0]] || null; // 如果只有一个元素,返回对应的值,否则返回 null
-    } else {
-        return 1;
-    }
-});
-
-function flattenDomains(data) {
-    return data.reduce((acc, item) => {
-        return acc.concat(item.pesticideFertilizerList);
-    }, []);
-}
-
-// 地图
-const areaRef = ref(null);
-let newFarmMap = new NewFarmMap();
-
-const serveArea = ref(null);
-// 农场分区列表
-const areaList = ref([]);
-const regionId = ref(null);
-
-const farmProgress = ref(0)
-
-// 状况描述相关数据
-const situationDescription = ref('')
-
-// 切换分区
-const changeRegion = (e) => {
-    checkedArea.value = false;
-    newFarmMap.getBlueRegion({ gardenId: gardenId.value, regionId: e }, () => {
-        // newFarmMap.setBlueRegion([{id: "ws0y1me7h94u"}, {id: "ws0y1me545tg"}])
-        // serveArea.value = "3.72亩"
-    });
-};
-
-// 所选蓝色分区的面积
-const getArea = (val) => {
-    serveArea.value = val.toFixed(2) + "亩";
-};
-
-const checkedArea = ref(false);
-const handleArea = (e) => {
-    newFarmMap.toggleAllArea(e);
-};
-
-// 处理上传图片
-const handleUploadImage = () => {
-    // 这里可以添加上传图片的逻辑
-    console.log('上传图片');
-};
-
-// 处理邀请专家诊断
-const handleExpertDiagnosis = () => {
-    // 这里可以添加邀请专家诊断的逻辑
-    console.log('邀请专家诊断');
-};
-</script>
-
-<style lang="scss" scoped>
-.new-farming-page {
-    height: 100vh;
-    position: relative;
-    overflow: auto;
-    font-size: 14px;
-    background: #f2f3f5;
-    ::v-deep {
-        .custom-header {
-            position: fixed;
-            top: 0;
-            padding-bottom: 1px;
-        }
-    }
-    .step-wrap {
-        padding: 12px 0;
-    }
-    .box-wrap {
-        background: #fff;
-        padding: 10px;
-        border-radius: 8px;
-    }
-    .new-farming-content {
-        margin: 41px 0 62px 0;
-        padding: 4px 12px 8px 12px;
-        width: 100%;
-        box-sizing: border-box;
-        
-        // ::v-deep {
-        //     .el-select__input {
-        //         color: #2199F8;
-        //     }
-        //     .el-select__wrapper {
-        //         color: #2199F8;
-        //         min-height: 30px;
-        //         line-height: 28px;
-        //         box-shadow: 0 0 0 1px rgba(33, 153, 248, 0.3) inset;
-        //     }
-        //     .el-select__caret {
-        //         color: #2199F8;
-        //     }
-        //     .el-select__placeholder {
-        //         color: #2199F8;
-        //     }
-        //     .el-radio {
-        //         margin-right: 16px;
-        //     }
-        //     .el-input__wrapper {
-        //         box-shadow: 0 0 0 1px rgba(33, 153, 248, 0.3) inset;
-        //     }
-        //     .el-input__prefix {
-        //         color: #2199F8;
-        //     }
-        //     .el-input__inner {
-        //         color: #2199F8;
-        //         --el-input-placeholder-color: rgba(33, 153, 248, 0.43);
-        //     }
-        //     .el-tag.el-tag--info {
-        //         --el-tag-text-color: #2199F8;
-        //         --el-tag-bg-color: rgba(33, 153, 248, 0.1);
-        //     }
-        // }
-        .farm-info {
-            color: rgba(0, 0, 0, 0.6);
-            font-size: 14px;
-            margin-top: 14px;
-            .info-title {
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                color: rgba(41, 41, 41, 0.3);
-                .info-more {
-                    display: flex;
-                    align-items: center;
-                }
-            }
-        }
-        .farm-photo {
-            margin-top: 10px;
-            .photo-list {
-                display: flex;
-                align-items: center;
-                width: 100%;
-                overflow: auto;
-                padding-bottom: 10px;
-                .photo-item {
-                    width: 92px;
-                    height: 92px;
-                    border-radius: 8px;
-                    object-fit: cover;
-                }
-                .img-item {
-                    img {
-                        width: 92px;
-                        height: 92px;
-                        border-radius: 8px;
-                        object-fit: cover;
-                        margin-right: 12px;
-                    }
-                }
-            }
-            .list-text {
-                text-align: center;
-                color: rgba(0, 0, 0, 0.5);
-                padding-top: 2px;
-            }
-        }
-        .submit-btn {
-            z-index: 10;
-            position: fixed;
-            bottom: 0px;
-            left: 0;
-            width: 100%;
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            padding: 12px;
-            background: #fff;
-            box-sizing: border-box;
-            box-shadow: 0 4px 4px rgba(0, 0, 0, 0.4);
-            border-top: 1px solid rgba(0, 0, 0, 0.1);
-            .btn {
-                height: 40px;
-                border-radius: 25px;
-                line-height: 40px;
-                width: 110px;
-                text-align: center;
-                background: linear-gradient(180deg, #70BFFE, #2199F8);
-                color: #FFFFFF;
-                font-size: 14px;
-                &.second {
-                    background: #FFFFFF;
-                    border: 1px solid rgba(153, 153, 153, 0.5);
-                    color: #666666;
-                }
-            }
-            .btn + .btn {
-                margin-left: 12px;
-            }
-        }
-    }
-    .card-title {
-        font-size: 16px;
-        font-weight: bold;
-        color: #000;
-        display: flex;
-        align-items: center;
-        // justify-content: space-between;
-        .add-tag {
-            font-size: 12px;
-            color: #2199f8;
-            padding: 4px 8px;
-            background: rgba(33, 153, 248, 0.16);
-            border-radius: 20px;
-            font-weight: normal;
-            height: 25px;
-            line-height: 25px;
-        }
-        .type-tag {
-            margin-left: 5px;
-            font-size: 12px;
-            color: #000000;
-            padding: 0 10px;
-            background: rgba(119, 119, 119, 0.1);
-            border-radius: 20px;
-            font-weight: normal;
-            height: 26px;
-            line-height: 26px;
-        }
-    }
-    .pb-12 {
-        padding-bottom: 12px;
-    }
-    .farm-card {
-        background: #ffffff;
-        border-radius: 8px;
-        padding: 12px 12px 0 12px;
-        width: 100%;
-        box-sizing: border-box;
-        margin-top: 10px;
-        color: rgba(0, 0, 0, 0.4);
-        &.progress{
-            display: flex;
-            align-items: center;
-            padding: 12px;
-            .progress-title{
-                margin-right: 12px;
-            }
-            ::v-deep{
-                .el-radio{
-                    margin-right: 10px;
-                }
-            }
-        }
-        &.map-content {
-            margin-top: 12px;
-        }
-        &.prescription-content {
-            padding: 12px;
-        }
-    }
-
-    .usage-mode-wrap {
-        padding: 0 12px;
-        margin-top: 12px;
-        .info-content {
-            padding-top: 14px;
-            padding-bottom: 1px;
-        }
-
-        .el-form-item--default {
-            margin-bottom: 0;
-        }
-    }
-
-    ::v-deep {
-        .el-form-item__label {
-            height: 30px;
-            line-height: 30px;
-            color: rgba(0, 0, 0, 0.4);
-        }
-        .el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before {
-            display: none;
-        }
-    }
-    .info-content {
-        padding: 10px 0;
-        position: relative;
-
-        .condition-wrap {
-            display: flex;
-            align-items: center;
-            width: 100%;
-            .symbol {
-                width: 10px;
-                // text-align: center;
-                // padding: 0 4px;
-            }
-        }
-        .item-input {
-            // width: 60%;
-            min-width: 140px;
-            max-width: 240px;
-        }
-        .recheck-text {
-            padding-left: 6px;
-        }
-        .info-item {
-            display: flex;
-            justify-content: space-between;
-            align-items: center;
-            width: 100%;
-        }
-        .info-item + .info-item {
-            margin-top: 12px;
-        }
-
-        .bottom-map {
-            width: 100%;
-            height: 250px;
-            clip-path: inset(0px round 8px);
-        }
-        .check-btn {
-            position: absolute;
-            bottom: 16px;
-            right: 6px;
-            background: rgba(0, 0, 0, 0.6);
-            padding: 0 8px;
-            border-radius: 8px;
-
-            ::v-deep {
-                .el-checkbox {
-                    color: #fff;
-                }
-            }
-        }
-        .area-select {
-            padding-bottom: 12px;
-            .block {
-                width: 12px;
-                display: inline-block;
-            }
-        }
-    }
-
-    ::v-deep {
-        .el-form-item--default {
-            margin-bottom: 8px;
-            &.text-item {
-                margin-bottom: 2px;
-                .el-form-item__content {
-                    line-height: 24px;
-                }
-                .el-form-item__label {
-                    height: 24px;
-                    line-height: 24px;
-                }
-            }
-        }
-    }
-    .sub-title {
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        color: rgba(0, 0, 0, 0.6);
-        font-size: 14px;
-        .add-tag {
-            font-size: 12px;
-            color: #2199f8;
-            padding: 0 8px;
-            border: 1px solid #2199F8;
-            border-radius: 5px;
-            font-weight: normal;
-            height: 28px;
-            line-height: 28px;
-        }
-    }
-    .recipe-item {
-        width: 100%;
-        .recipe-form {
-            padding-top: 8px;
-            ::v-deep {
-                .el-form-item {
-                    &:last-child {
-                        margin-bottom: 0;
-                    }
-                }
-            }
-        }
-
-        .box-item {
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            color: rgba(0, 0, 0, 0.4);
-            .r-text {
-                width: 140px;
-                text-align: center;
-            }
-            .form-r {
-                width: 60%;
-                min-width: 140px;
-                max-width: 240px;
-            }
-        }
-        .form-box {
-            border: 1px solid rgba(33, 153, 248, 0.8);
-            border-radius: 8px;
-            padding: 20px 10px;
-            width: 100%;
-            position: relative;
-            // background: rgb(209, 235, 255, 0.3);
-            // margin-bottom: 12px;
-            .form-index {
-                position: absolute;
-                left: 0;
-                top: 0;
-                padding: 0 6px;
-                background: #2199F8;
-                border-radius: 4px 0 4px 0;
-                height: 18px;
-                line-height: 18px;
-                font-size: 12px;
-                color: #fff;
-            }
-            .input-box {
-                &.mark-box {
-                    padding: 8px 0 12px 0;
-                }
-            }
-
-            
-            // .input-unit {
-            //     ::v-deep {
-            //         .el-input {
-            //             border: 1px solid #dcdfe6;
-            //             border-radius: 5px;
-            //             height: 32px;
-            //             box-sizing: border-box;
-            //         }
-            //         .el-input__wrapper {
-            //             padding: 0 2px 0 10px;
-            //             height: 30px;
-            //             line-height: 30px;
-            //             min-height: 30px;
-            //             box-shadow: none;
-            //         }
-            //         .el-input__inner {
-            //             --el-input-inner-height: 30px;
-            //             height: 30px;
-            //             line-height: 30px;
-            //             min-height: 30px;
-            //             color: #606266;
-            //             --el-input-placeholder-color: #a8abb2;
-            //         }
-            //         .el-input-group__append {
-            //             box-shadow: none;
-            //             border: none;
-            //             background: none;
-            //         }
-            //     }
-            // }
-            .text-center {
-                ::v-deep {
-                    .el-input__inner {
-                        text-align: center;
-                    }
-                }
-            }
-            .action-btn {
-                display: flex;
-                justify-content: flex-end;
-                .btn {
-                    color: #8F8F8F;
-                    border-radius: 25px;
-                    padding: 5px 30px;
-                }
-                .delete-btn {
-                    color: rgba(255, 89, 89, 0.9);
-                    background: #fff;
-                    border: 1px solid rgba(255, 89, 89, 0.9);
-                }
-            }
-            .btn-group {
-                padding-top: 12px;
-            }
-            .sub-item {
-                padding-left: 10px;
-                .has-sub {
-                    display: flex;
-                    flex-direction: column;
-                    align-items: center;
-                    .main-name {
-                        line-height: 20px;
-                    }
-                    .sub-name {
-                        font-size: 10px;
-                        color: rgba(129, 129, 129, 0.5);
-                        line-height: 14px;
-                    }
-                }
-                .colunm-sub {
-                    display: flex;
-                    align-items: center;
-                    .sub-name {
-                        font-size: 10px;
-                        color: rgba(129, 129, 129, 0.5);
-                    }
-                }
-                .r-text {
-                    width: 132px;
-                    text-align: center;
-                    font-size: 14px;
-                    color: #474747;
-                }
-                .price {
-                    ::v-deep {
-                        .el-input__wrapper {
-                            box-shadow: 0 0 0 1px rgba(33, 153, 248, 0.3) inset;
-                        }
-                        .el-input__inner {
-                            color: #2199f8;
-                        }
-                    }
-                }
-            }
-            .form-title {
-                font-size: 14px;
-                padding-top: 6px;
-                color: #000;
-                font-weight: 600;
-            }
-            .box-item + .box-item {
-                margin-top: 8px;
-            }
-        }
-        .form-box + .form-box {
-            margin-top: 8px;
-        }
-        .usageMode-wrap {
-            padding-top: 8px;
-        }
-    }
-    
-    // 状况描述样式
-    .situation-description {
-        width: 100%;
-        .description-title {
-            font-size: 16px;
-            font-weight: bold;
-            color: #000;
-            margin-bottom: 12px;
-        }
-        
-        .description-content {
-            .description-textarea {
-                margin-bottom: 10px;
-                width: 100%;
-            }
-            
-            .upload-section {
-                .upload-btn {
-                    width: 112px;
-                    height: 32px;
-                    border-radius: 3px;
-                    border: 1px solid #e0e0e0;
-                    background: #fff;
-                    color: #000;
-                    font-size: 14px;
-                    display: flex;
-                    align-items: center;
-                    justify-content: center;
-                    margin-bottom: 8px;
-                    
-                    .el-icon {
-                        margin-right: 6px;
-                    }
-                }
-                
-                .upload-tip {
-                    font-size: 12px;
-                    color: #999;
-                    line-height: 1.4;
-                }
-            }
-        }
-    }
-    
-    // 专家诊断按钮样式
-    .expert-diagnosis-btn {
-        width: 180px;
-        height: 40px;
-        border-radius: 24px;
-        background: linear-gradient(180deg, #70BFFE 0%, #2199F8 100%);
-        color: #FFFFFF;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        margin: 30px auto 0;
-    }
-}
-.task-tips-popup {
-    width: 75%;
-    padding: 28px 28px 20px;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    .create-farm-icon{
-        width: 40px;
-        height: 40px;
-        margin-bottom: 12px;
-    }
-    .farm-check-icon{
-        width: 68px;
-        height: 68px;
-        margin-bottom: 12px;
-    }
-    .create-farm-text{
-        font-size: 20px;
-        font-weight: 500;
-        line-height: 40px;
-        margin-bottom: 32px;
-        text-align: center;
-        &.success-text{
-            font-size: 24px;
-            font-weight: 500;
-        }
-    }
-    .main-text {
-        color: #2199F8;
-    }
-    .create-farm-btn{
-        width: 100%;
-        box-sizing: border-box;
-        padding: 8px;
-        border-radius: 25px;
-        font-size: 16px;
-        background: #2199F8;
-        color: #fff;
-        text-align: center;
-    }
-}
-</style>

+ 0 - 416
src/views/old_mini/modify_work/newFarmMap.js

@@ -1,416 +0,0 @@
-
-import config from "@/api/config.js"
-import * as KMap from '@/utils/ol-map/KMap';
-import Style from "ol/style/Style";
-import * as util from "@/common/ol_common.js"
-import { newAreaFeature, newAreaPoint, newPolymerFeature, newPoint} from "@/utils/map";
-import { GARDEN_STATUS_ENUM as STATUS_ENUM } from "@/api/enum.js"
-import Icon from "ol/style/Icon";
-import eventBus from '@/api/eventBus';
-import VectorLayer from "ol/layer/Vector.js";
-import {getArea} from 'ol/sphere.js';
-import * as proj from "ol/proj";
-import { register } from "ol/proj/proj4";
-import proj4 from "proj4"
-proj4.defs("EPSG:38572","+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs");
-register(proj4);
-
-/**
- * @description 智能巡园地图层对象
- */
-class EditNsMap {
-
-    constructor() {
-        let that = this
-        this.vectorStyle = new KMap.VectorStyle()
-        let pointSimpleStyle = this.vectorStyle.getPointSimpleStyle(8, "#999999", "#d5d5d0", "1")
-        this.areaLayer = new KMap.VectorLayer("areaLayer", 999, { style: (f) => that.vectorStyle.getPolygonStyle("#0000001a", "#00000033", 3) })
-        this.subAreaLayer = new KMap.VectorLayer("subAreaLayer", 1000, {
-            style: (f) => {
-                return that.vectorStyle.getPolygonStyle(f.get("fillColor"), f.get("strokeColor"), 2)
-            }
-        })
-        this.afterDayNum = 3
-        this.areaPointLayer = new KMap.VectorLayer("areaPointLayer", 1002, { style: (f) => that.vectorStyle.getPointTextStyle(f.get("name"), "#120046", "#FFFFFF", 2, 13) })
-        this.treeCacheStyle = {}
-        this.treeStyle = (f) => {
-            let key = f.get("imgSrc");
-            if (that.treeCacheStyle[key]) {
-                return that.treeCacheStyle[key]
-            }
-            let style = new Style({
-                image: new Icon({
-                    src: f.get("imgSrc"),
-                    scale: 1,
-                    anchor: [0.5, 1],
-                })
-            });
-            that.treeCacheStyle[key] = style
-            return style
-        }
-        this.treeLayer = new KMap.VectorLayer("statusPointLayer", 999, { style: that.treeStyle })
-        this.treeFeatures = []
-
-        this.curArea = null
-        this.blueRegionLayer = new KMap.VectorLayer("blueRegionLayer", 99, {
-            minZoom: 1,
-            maxZoom: 22,
-            style: function (f) {
-                const selected = f.get('selected');
-                if (selected) {
-                    return that.vectorStyle.getPolygonStyle("rgba(23, 99, 110, 0.43)", "rgba(37, 227, 255, 0.7)", 2)
-                }
-                return that.vectorStyle.getPolygonStyle("rgba(0, 0, 0, 0.5)", "rgba(255, 255, 255, 0.2)", 1)
-            }
-        });
-
-        this.areaVal = 0
-    }
-
-    initMap(location, target, movable = true) {
-        let level = 18
-        let coordinate = util.wktCastGeom(location).getFirstCoordinate()
-        this.kmap = new KMap.Map(target, level, coordinate[0], coordinate[1], null, 10, 22, "img", movable, movable);
-        let xyz2 = config.base_img_url3 + 'map/lby/{z}/{x}/{y}.png';
-        this.kmap.addXYZLayer(xyz2, { minZoom: 12, maxZoom: 26 });
-        this.kmap.addLayer(this.areaLayer.layer)
-        this.kmap.addLayer(this.subAreaLayer.layer)
-        this.kmap.addLayer(this.treeLayer.layer)
-        this.kmap.addLayer(this.areaPointLayer.layer)
-        this.kmap.addLayer(this.blueRegionLayer.layer)
-
-        this.addMapSingerClick()
-    }
-
-    destroyMap() {
-        // 销毁地图实例
-        if (this.kmap) {
-            this.kmap.destroy()
-        }
-    }
-
-    initArea(data, callback) {
-        let that = this
-        this.areaLayer.refresh()
-        for (let item of data) {
-            that.areaLayer.addFeature(newAreaFeature(item))
-            that.areaPointLayer.addFeature(newAreaPoint(item))
-        }
-        callback && callback()
-    }
-
-    initSubArea(organId, callback) {
-        let that = this
-        this.subAreaLayer.refresh()
-        VE_API.sub_area.list({ organId }).then(({ data, code }) => {
-            for (let item of data) {
-                // item.fillColor = that.handleStatusColor(item.status).fillColor
-                // item.strokeColor = that.handleStatusColor(item.status).strokeColor
-                that.subAreaLayer.addFeature(newPolymerFeature(item))
-            }
-            callback && callback()
-        })
-    }
-
-
-    initTree(organId, callback) {
-        let that = this
-        this.treeLayer.refresh()
-        that.treeFeatures = []
-        VE_API.sub_area.treeList({ farmId: organId }).then(({ data }) => {
-            for (let item of data) {
-                let result = that.handleStatusIcon(item)
-                if (result.hasStatus) {
-                    item.imgSrc = result.imgSrc
-                    let point = newPoint(item);
-                    that.treeLayer.addFeature(point)
-                    that.treeFeatures.push(point)
-                }
-            }
-            callback && callback()
-        })
-    }
-
-    getBlueRegion({gardenId, regionId}, callback) {
-        this.blueRegionLayer.source && this.blueRegionLayer.source.clear()
-        const data = [
-        {
-            "farmCode": "LBY",
-            "farmId": "766",
-            "id": 2,
-            "isGenerateReport": 1,
-            "name": "分区2",
-            "pointCount": 131,
-            "pointWkt": "POINT (113.6142086995688 23.585836479509055)",
-            "regionCode": "LBY-MR-2",
-            "wkt": "MULTIPOLYGON (((113.61348988377155 23.58617369800422, 113.61395837633405 23.58622555407246, 113.61414076654707 23.58622555407246, 113.61436964832843 23.5862774101407, 113.61478628474084 23.586468741036786, 113.61491681896747 23.58652417337007, 113.61512424307672 23.586449071517652, 113.61491503077356 23.585742756367924, 113.61479880177082 23.585596129050916, 113.61473800497858 23.585451289764112, 113.61438931780664 23.585286780835393, 113.61410858003889 23.585299297865365, 113.61385645239149 23.585249229909184, 113.61378135053907 23.585288569029306, 113.61357571446003 23.585283204611276, 113.61347200232355 23.585342213209604, 113.61338080721704 23.585506721974614, 113.61335934954492 23.585665866485304, 113.61342193444922 23.58616296916816, 113.61348988377155 23.58617369800422)))"
-        },
-        {
-            "farmCode": "LBY",
-            "farmId": "766",
-            "id": 9,
-            "isGenerateReport": 1,
-            "name": "分区9",
-            "pointCount": 63,
-            "pointWkt": "POINT (113.61725048541882 23.585262743588892)",
-            "regionCode": "LBY-MR-9",
-            "wkt": "MULTIPOLYGON (((113.61697301904715 23.585749021838886, 113.617320420354 23.585742359348075, 113.61752600578478 23.585708095109652, 113.61772112158744 23.5856785897931, 113.61789720170187 23.58559102562808, 113.61787340709186 23.585330236701996, 113.61793812843106 23.58526932250014, 113.61795526055036 23.585167481569073, 113.61793146594025 23.585022810339957, 113.61790671954574 23.58491525870246, 113.61779345720193 23.58473346788171, 113.61779821612386 23.584601169849783, 113.61771921801855 23.584509798547092, 113.61763260563801 23.584517412822354, 113.61755741467023 23.584640193010298, 113.61736515422085 23.584823887399946, 113.61726902399624 23.58487623554194, 113.61709484745067 23.584864814129187, 113.61707105284067 23.584962847922696, 113.61699586187265 23.585023762124397, 113.61689877986377 23.585071351344393, 113.61675981934107 23.58515796372515, 113.61663132844662 23.585192227963518, 113.61646000725422 23.58524076896813, 113.61634484134152 23.585320718857897, 113.61628392713976 23.585360693802862, 113.6162163504473 23.585397813394497, 113.61601552393823 23.585480618637533, 113.61596127222741 23.585499654325552, 113.61597174185577 23.585538677485918, 113.61598125969975 23.585561520311693, 113.61608690776846 23.585591025628073, 113.61610689524092 23.585611013100582, 113.61619350762157 23.58557960421532, 113.6162886860618 23.58552820785755, 113.61632104673151 23.585492040050294, 113.61638196093314 23.585453968674216, 113.61646095903859 23.585480618637543, 113.6164771393734 23.585505365031985, 113.61649617506146 23.585564375664962, 113.61648760900198 23.58561006131614, 113.61645048941011 23.58567192730245, 113.61649807863034 23.585676686224392, 113.61662466595578 23.585595784550236, 113.61671698904298 23.585495847187836, 113.61676553004737 23.585587218490588, 113.61681787818966 23.585559616742817, 113.61689211737293 23.5854558722431, 113.61695588692798 23.585499654325556, 113.61697301904715 23.585749021838886)))"
-        },
-        {
-            "farmCode": "LBY",
-            "farmId": "766",
-            "id": 29,
-            "isGenerateReport": 1,
-            "name": "分区8",
-            "pointCount": 40,
-            "pointWkt": "POINT (113.61587084394066 23.58618878122994)",
-            "regionCode": "LBY-MR-8",
-            "wkt": "MULTIPOLYGON (((113.61516876894466 23.58617727723074, 113.6153952936325 23.58616014511155, 113.61551426668275 23.586215348606817, 113.61564275757719 23.586290539574595, 113.61565798612749 23.58640951262483, 113.61577695917796 23.58637905552401, 113.61584168051715 23.586392380505654, 113.615912112563 23.58637048946448, 113.61613483011318 23.586200120056528, 113.6162547549478 23.586365730542376, 113.61623762282863 23.586448535785365, 113.61615196223237 23.586476137533136, 113.61634435485792 23.586946782901485, 113.61654695275945 23.586932042261843, 113.61651364030526 23.58667220511998, 113.61648127963554 23.586552280285296, 113.61640894402115 23.58641903046899, 113.61636135480092 23.586292443143435, 113.6163308977001 23.586121121951034, 113.61631471736528 23.58605735239606, 113.61618622647107 23.586071629162152, 113.61612911940675 23.58603260600161, 113.61610342122786 23.58595265611185, 113.61601109814079 23.585864140162432, 113.61585310193013 23.585803225960632, 113.61557898802205 23.585730890346124, 113.6153714990225 23.585723276070855, 113.61520493675204 23.585882224066058, 113.61516591359151 23.586056400611785, 113.61516876894466 23.58617727723074)))"
-        },
-        {
-            "farmCode": "LBY",
-            "farmId": "766",
-            "id": 12828,
-            "isGenerateReport": 1,
-            "name": "分区5",
-            "pointCount": 45,
-            "pointWkt": "POINT (113.61692837797158 23.58435388968608)",
-            "regionCode": "LBY-MR-5",
-            "wkt": "MULTIPOLYGON (((113.61726902399624 23.584875938109313, 113.61732981922493 23.584649032707855, 113.61741785928217 23.58458954618279, 113.6176284415812 23.584287354634938, 113.61761892373723 23.584146966435544, 113.61762249292879 23.584041080420736, 113.61758442155264 23.584010147427676, 113.61752374529698 23.583939953328095, 113.6174499820059 23.583857861923292, 113.61723702024568 23.5839113997961, 113.61706331959229 23.583947091711153, 113.61689794705232 23.583967317129648, 113.61673019505157 23.58399468093132, 113.61659218631306 23.584025613924393, 113.61641848565968 23.584054167456387, 113.61624716446725 23.584093428562902, 113.61621623147425 23.584286164904498, 113.61622218012678 23.584531249388036, 113.6162186109351 23.58466211974327, 113.61629713314835 23.584684724622857, 113.6166052733487 23.58470970896351, 113.61669926205845 23.584731124112597, 113.61678016373266 23.584778713332653, 113.61680276861217 23.584819164169826, 113.61683846052725 23.58481916416982, 113.61689080866942 23.584775144141148, 113.61697884872665 23.58482035390024, 113.61709484745067 23.584864516696555, 113.61726902399624 23.584875938109313)))"
-        },
-        {
-            "farmCode": "LBY",
-            "farmId": "766",
-            "id": 172047,
-            "isGenerateReport": 1,
-            "name": "认养分区",
-            "pointCount": null,
-            "pointWkt": "POINT (113.61573550741103 23.586606696698798)",
-            "regionCode": "LBY认养分区",
-            "wkt": "MULTIPOLYGON (((113.61553138381385 23.586555391814727, 113.61578836560238 23.586770495089638, 113.61593018147823 23.586692924660838, 113.61571507820327 23.5864349910878, 113.61553138381385 23.586555391814727)))"
-        },
-        {
-            "farmCode": "LBY",
-            "farmId": "766",
-            "id": 175094,
-            "isGenerateReport": 1,
-            "name": "12",
-            "pointCount": null,
-            "pointWkt": "POINT (113.61860504330416 23.583859757151316)",
-            "regionCode": "LBY-MR-12",
-            "wkt": "MULTIPOLYGON (((113.61790764544605 23.58437349638575, 113.61810434755591 23.58448136528483, 113.61834039008784 23.58457781277093, 113.61887973458238 23.58461715319288, 113.61901298439875 23.584476289101246, 113.61925029597637 23.584407760624345, 113.61937973865497 23.58437349638575, 113.61932390063691 23.584164103817216, 113.61923506742585 23.5838836446801, 113.61920587937084 23.583660292607078, 113.61927060071025 23.58345216908441, 113.61940004338908 23.5832846550295, 113.6191449651692 23.58325927411221, 113.61896095351813 23.583223740827805, 113.61884166320624 23.58314759807564, 113.61873379430745 23.58305115058954, 113.6185180565094 23.583087952919755, 113.61840257333529 23.58318947658927, 113.61825028783096 23.583260543158076, 113.61815510939073 23.583216126552543, 113.61807262140928 23.583183131360045, 113.61779216227194 23.583299883580025, 113.61792541208831 23.58360953077215, 113.61817668317042 23.583615876001545, 113.61831374012445 23.583843035212283, 113.61829216634476 23.583925523193727, 113.61821348550086 23.5839014113223, 113.6179825191524 23.583770699597665, 113.6178530764738 23.583793542423393, 113.61783784792328 23.583905218459847, 113.617946985868 23.58400166594589, 113.61795713823494 23.584085422973374, 113.61786703597829 23.58419963710162, 113.61785815265716 23.58428847031246, 113.61790764544605 23.58437349638575)))"
-        },
-        {
-            "farmCode": "LBY",
-            "farmId": "766",
-            "id": 175095,
-            "isGenerateReport": 1,
-            "name": "13",
-            "pointCount": null,
-            "pointWkt": "POINT (113.61907779775447 23.582774628335315)",
-            "regionCode": "LBY-MR-13",
-            "wkt": "MULTIPOLYGON (((113.6185180565094 23.583087952919755, 113.61873379430756 23.58305115058954, 113.61884166320624 23.58314759807564, 113.61896095351813 23.583223740827805, 113.6191449651692 23.58325927411221, 113.61940004338908 23.5832846550295, 113.61952853428329 23.58303148037845, 113.61974554112703 23.582682175502953, 113.61942574156774 23.58233191884284, 113.61909737594897 23.58227005285653, 113.61872713181651 23.58242614549863, 113.61843207865172 23.58267265765886, 113.61843112686734 23.583051467850964, 113.6185180565094 23.583087952919755)))"
-        },
-        {
-            "farmCode": "LBY",
-            "farmId": "766",
-            "id": 175096,
-            "isGenerateReport": 1,
-            "name": "15",
-            "pointCount": null,
-            "pointWkt": "POINT (113.61729343325402 23.581078231145653)",
-            "regionCode": "LBY-MR-15",
-            "wkt": "MULTIPOLYGON (((113.61579634969576 23.580895993441118, 113.61623258421344 23.58139885286704, 113.61657522659812 23.581547965756727, 113.61743341886756 23.5818731587608, 113.61737155288142 23.58216345300349, 113.61798704012836 23.582252286214498, 113.61852479831566 23.58088806190449, 113.61799973058703 23.58035347633188, 113.61769991850042 23.580115530231183, 113.61644039047451 23.580399479244647, 113.61574558786083 23.580797642386187, 113.61579634969576 23.580895993441118)))"
-        }
-    ]
-    for (let item of data) {
-        item.id = item.regionCode
-        try {
-            let feature = newAreaFeature(item);
-            this.blueRegionLayer.addFeature(feature)
-        } catch {
-            console.log('error');
-        }
-    }
-    this.kmap.fit(this.blueRegionLayer.source.getExtent(), [0, 0, 0, 0])
-    callback && callback(data.length)
-        // VE_API.farm.blueRegionList({ farmId: gardenId, regionId }).then(({ data, code }) => {
-        // })
-    }
-
-    setBlueRegion(data) {
-        this.blueRegionLayer.source.getFeatures().forEach(feature => {
-            // 检查 feature 的属性中是否有 selected 属性且为 true
-            data.map(item => {
-                if (item.id === feature.get('id')) {
-                    feature.set('selected', true)
-                }
-            })
-        });
-    }
-
-    toggleAllArea(val) {
-        let that = this
-        that.areaVal = 0
-        this.blueRegionLayer.source.getFeatures().forEach(feature => {
-            feature.set('selected', val)
-            if (val === true) {
-                let geom = feature.getGeometry().clone()
-                geom.transform(proj.get("EPSG:4326"), proj.get("EPSG:38572"))
-                let areaItem = getArea(geom)
-                areaItem = (areaItem + areaItem / 2) / 1000;
-                that.areaVal += areaItem
-            }
-            eventBus.emit("editNsMap:areaVal", that.areaVal)
-        });
-
-    }
-
-    // 状态图例
-    handleStatusIcon(obj) {
-        let key = this.afterDayNum == 3 ? "ycStatus" : this.afterDayNum == 5 ? "ycStatus5d" : "ycStatus7d"
-        let hasStatus = false
-        let imgSrc = null
-        if (obj[key] == 3) {
-            hasStatus = true
-            imgSrc = require('@/assets/img/status/status_bcyc.png')
-            return { hasStatus, imgSrc }
-        }
-        if (obj[key] == 2) {
-            hasStatus = true
-            imgSrc = require('@/assets/img/status/status_szyc.png')
-            return { hasStatus, imgSrc }
-        }
-        // if (obj[key] == 1) {
-        //     hasStatus = true
-        //     imgSrc = require('@/assets/status/status_dfh.png')
-        //     return { hasStatus, imgSrc }
-        // }
-        // if (obj[key] == 0) {
-        //     hasStatus = true
-        //     imgSrc = require('@/assets/status/status_xfdw.png')
-        //     return { hasStatus, imgSrc }
-        // }
-        return { hasStatus, imgSrc }
-    }
-
-    // 区级颜色
-    handleStatusColor(key) {
-        let fillColor = '#ffffff00'
-        let strokeColor = '#ffffff'
-        switch (key) {
-            case STATUS_ENUM.DONE:
-                fillColor = 'rgba(95,255,197,0)'
-                strokeColor = '#ffffff'
-                break;
-            case STATUS_ENUM.ABNORMAL_GROWTH:
-                fillColor = 'rgba(255,189,5,0.2)'
-                strokeColor = '#FFE44E'
-                break;
-            case STATUS_ENUM.ABNORMAL_Pest:
-                fillColor = 'rgba(51,11,3,0.52)'
-                strokeColor = '#F55A5A'
-                break;
-            case STATUS_ENUM.PENDING_REVIEW:
-                fillColor = 'rgba(3,40,51,0.2)'
-                strokeColor = '#032833'
-                break;
-            case STATUS_ENUM.REVIEWED:
-                fillColor = 'rgba(95,255,197,0.1)'
-                strokeColor = '#5FFFC5'
-                break;
-            default:
-                break;
-        }
-        return { fillColor, strokeColor }
-    }
-
-    addToggleTreeSelect(listener) {
-        let that = this
-        this.treeLayer.addToggleSelect(function ({ deselected, selected, preventDefault }) {
-            if (selected.length > 0) {
-                listener && listener(selected[0], deselected[0])
-            }
-            preventDefault()
-        }, this.kmap.map, that.treeStyle)
-    }
-
-    addToggleSubAreaSelect(listener) {
-        let that = this
-        this.subAreaLayer.addToggleSelect(function ({ deselected, selected, preventDefault }) {
-            if (selected.length > 0) {
-                that.treeLayer.source.forEachFeature((f) => {
-                    if (f.get("subAreaId") == selected[0].get("id")) {
-                        that.treeLayer.toggleSelect.getFeatures().remove(f)
-                    }
-                })
-                that.treeLayer.source.forEachFeature((f) => {
-                    if (f.get("subAreaId") == selected[0].get("id")) {
-                        that.treeLayer.toggleSelect.getFeatures().push(f)
-                    }
-                })
-            }
-            if (deselected.length > 0) {
-                that.treeLayer.source.forEachFeature((f) => {
-                    if (f.get("subAreaId") == deselected[0].get("id")) {
-                        that.treeLayer.toggleSelect.getFeatures().remove(f)
-                    }
-                })
-            }
-            listener && listener(selected[0], deselected[0])
-            preventDefault()
-        }, this.kmap.map)
-    }
-
-    refreshTree(organId, day, callback) {
-        this.afterDayNum = day
-        this.initTree(organId, callback)
-
-    }
-    fit(geomOrExtent) {
-        this.kmap.fit(geomOrExtent)
-    }
-
-
-    addMapSingerClick() {
-        let that = this
-        this.kmap.on("singleclick", (evt) => {
-            that.kmap.map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
-                if (layer instanceof VectorLayer && layer.get("name") === "blueRegionLayer") {
-                    feature.set('selected', feature.get("selected") ? false : true);
-
-                    let geom = feature.getGeometry().clone()
-                    geom.transform(proj.get("EPSG:4326"), proj.get("EPSG:38572"))
-                    let areaItem = getArea(geom)
-                    areaItem = (areaItem + areaItem / 2) / 1000;
-                    if (feature.get('selected') === true) {
-                        that.areaVal += areaItem
-                    } else {
-                        that.areaVal -= areaItem
-                    }
-                    eventBus.emit("editNsMap:areaVal", that.areaVal)
-                }
-            })
-        })
-    }
-
-    getSelectedBlueRegion() {
-        // 用于存储 selected 为 true 的 feature 的 id
-        const selectedFeatureIds = [];
-        // 遍历所有 features
-        this.blueRegionLayer.source.getFeatures().forEach(feature => {
-            // 检查 feature 的属性中是否有 selected 属性且为 true
-            if (feature.get('selected') === true) {
-                // 获取 feature 的 id
-                const id = feature.get('id');
-                // 将 id 添加到数组中
-                selectedFeatureIds.push({ id });
-            }
-        });
-        return selectedFeatureIds;
-    }
-
-
-}
-
-export default EditNsMap

+ 0 - 1072
src/views/old_mini/modify_work/reviewWork.vue

@@ -1,1072 +0,0 @@
-<template>
-    <div class="work-wrap">
-        <custom-header name="农事详情" isGoBack @goback="handleClose"></custom-header>
-        <div
-            class="work-content recheck-title"
-            v-loading="loading"
-        >
-            <div class="tabs-content-item">
-                <div class="common-card-title">
-                    <img class="icon" src="@/assets/img/home/label-icon.png" alt="" />
-                    <span>农事信息</span>
-                </div>
-                <div class="info-box info-farm">
-                    <div class="info-l">
-                        <img class="farm-img" src="@/assets/img/home/farm.png" alt="" />
-                    </div>
-                    <div class="info-r">
-                        <div class="farm-name">{{ workItem.farmName }}</div>
-                        <div class="info-item">
-                            <div class="info-name">农事名称:</div>
-                            <div class="info-value">{{ workItem.farmWorkName }}</div>
-                        </div>
-                        <div class="info-item">
-                            <div class="info-name">执行时间:</div>
-                            <div class="info-value">{{ workItem.executeDate || "--" }}</div>
-                        </div>
-                        <div class="info-item line-item">
-                            <div class="info-name">药物处方:</div>
-                            <div class="info-value">
-                                <div class="rescription" v-if="workItem?.prescriptionList">
-                                    <span
-                                        v-for="(fertilizer, fertilizerI) in workItem.prescriptionList"
-                                        :key="fertilizerI"
-                                    >
-                                        <span
-                                            v-for="(pest, pestI) in fertilizer.pesticideFertilizerList"
-                                            :key="'sub' + pestI"
-                                        >
-                                            {{ pest.defaultName || pest.pesticideFertilizerName }}
-                                            <span
-                                                v-if="
-                                                    pestI !== fertilizer.pesticideFertilizerList.length - 1 ||
-                                                    fertilizerI !== workItem.prescriptionList.length - 1
-                                                "
-                                            >
-                                                +
-                                            </span>
-                                        </span>
-                                    </span>
-                                </div>
-                                <div class="rescription" v-if="!workItem?.prescriptionList || !workItem?.prescriptionList?.length|| workItem?.prescriptionList[0]?.pesticideFertilizerList?.length === 0">无处方</div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-
-                <div class="info-box subject-content">
-                    <div class="subject-box">
-                        <div class="subject-item cost-l">
-                            <img class="subject-img" :src="workItem.agriculturalIcon || 'https://birdseye-img.sysuimars.com/dinggou-mini/defalut-icon.png'" alt="" />
-                            <div class="subject-tag">
-                                {{ workItem.serviceMain }}
-                            </div>
-                        </div>
-                        <div class="subject-item">
-                            <img class="subject-img" :src="workItem.executorIcon || 'https://birdseye-img.sysuimars.com/dinggou-mini/defalut-icon.png'" alt="" />
-                            <div class="subject-tag">
-                                {{ workItem.executeName }}
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-
-            <div class="tabs-content-item">
-                <div class="common-card-title">
-                    <img class="icon" src="@/assets/img/home/label-icon.png" alt="" />
-                    <span>{{ workItem?.needReview ? '复核成效' : '服务成效' }}</span>
-                </div>
-                <div class="info-box bottom-box">
-                    <div class="recheck-box">
-                        <div class="recheck-ablum">
-
-                            <div class="img-list over-img-box">
-                                <album-carousel
-                                    class="execute-img"
-                                    :key="1"
-                                    labelText="执行照片"
-                                    :imgData="workItem"
-                                    :images="workItem.executeEvidence"
-                                ></album-carousel>
-                            </div>
-                            <div
-                                class="img-list over-img-box"
-                                v-if="workItem.reviewImage && workItem.reviewImage.length && workItem?.needReview"
-                            >
-                                <album-carousel
-                                    :key="2"
-                                    labelText="复核照片"
-                                    :isAchievementImgs="true"
-                                    :imgData="workItem"
-                                    :images="workItem.reviewImage"
-                                ></album-carousel>
-                            </div>
-
-                            <div class="img-list" v-if="(!workItem.reviewImage || !workItem.reviewImage.length) && workItem?.needReview && curRole.value == '2'">
-                                <div
-                                    class="recheck-text-wrap active"
-                                    :class="{
-                                        'center-wrap': !imageArr.length,
-                                    }"
-                                >
-                                    <div class="date" v-show="workItem.reviewDate">{{ workItem.reviewDate }}</div>
-                                    <upload
-                                        exampleImg
-                                        @handleUpload="handleUpload"
-                                        class="upload-wrap"
-                                        :style="{
-                                            height:
-                                                imageArr.length && !diffInDays(workItem.reviewDate) > 0
-                                                    ? 'auto'
-                                                    : '254px',
-                                        }"
-                                    >
-                                        <template
-                                            v-if="
-                                                diffInDays(workItem.reviewDate) == 0 ||
-                                                diffInDays(workItem.reviewDate) == null
-                                            "
-                                        >
-                                            <img
-                                                class="img-icon"
-                                                :src="require(`@/assets/img/gallery/img-icon-act.png`)"
-                                                alt=""
-                                            />
-                                            <div class="recheck-text">点击上传照片</div>
-                                        </template>
-                                        <!-- <template v-else>
-                                            <img class="img-icon" src="@/assets/img/gallery/img-icon.png" alt="" />
-                                            <div class="recheck-text">等待复核</div>
-                                            <div class="recheck-desc" v-show="diffInDays(workItem.reviewDate) >= 0">
-                                                (剩余{{ diffInDays(workItem.reviewDate) }}天)
-                                            </div>
-                                        </template> -->
-                                    </upload>
-                                    <div
-                                        class="submit"
-                                        v-show="imageArr.length && !diffInDays(workItem.reviewDate) > 0"
-                                        @click="handleSubmit('reviewImage2')"
-                                    >
-                                        确认上传
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-
-            <!-- 按钮 -->
-            <div class="up-btn-group" v-show="isPlan">
-                <template v-if="curRole == '2'">
-                    <div
-                        class="up-btn"
-                        :class="{ btn: workItem.executeEvidence && workItem.executeEvidence.length }"
-                        v-show="workItem.reviewImage && !workItem.reviewImage.length"
-                    >
-                        提醒农户拍照
-                    </div>
-                </template>
-                <template v-else>
-                    <div
-                        class="up-btn btn"
-                        @click="handleContact"
-                        v-show="workItem.reviewImage && workItem.reviewImage.length && !imageArr.length"
-                    >
-                        联系专家
-                    </div>
-                </template>
-            </div>
-
-            <div class="fixed-btn-wrap" :class="{ center: !paramsPage.isBtn && !getButtonText() }">
-                <div class="fixed-btn-wrap-left">
-                    <div class="fixed-btn more second" @click="handleRemindUser" v-if="getButtonText()">提醒复核</div>
-                    <div class="fixed-btn more" @click="handleMore" v-if="paramsPage.isBtn">更多农事</div>
-                </div>
-                <div class="fixed-btn excute" @click="generateReport">生成成果报告</div>
-            </div>
-
-            <!-- 组合照片(用于生成合成图片) -->
-            <div class="review-hide-box">
-                <div class="review-image" ref="reviewComboRef">
-                    <div class="review-mask">
-                        <div class="review-text">复核成效</div>
-                        <div class="review-content">
-                            {{ workItem?.reCheckText }}
-                        </div>
-                    </div>
-                    <div class="vs-wrap" v-if="workItem?.reviewImage && workItem?.reviewImage?.length">
-                        <img src="@/assets/img/home/vs.png" alt="" />
-                    </div>
-                    <div class="review-image-item" v-if="triggerImg?.length">
-                        <div class="review-image-item-title">复核照片</div>
-                        <img
-                        class="review-image-item-img left-img"
-                        :src="leftCoverImg"
-                        style="
-                            width: 100%;
-                            height: 255px;
-                            display: block;
-                            image-rendering: auto;
-                        "
-                        />
-
-                    </div>
-                    <div class="review-image-item" v-if="workItem?.reviewImage?.length">
-                        <img
-                        class="review-image-item-img right-img"
-                        :src="rightCoverImg"
-                        style="
-                            width: 100%;
-                            height: 255px;
-                            display: block;
-                            image-rendering: auto;
-                        "
-                        />
-
-                    </div>
-                </div>
-            </div>
-        </div>
-        <!-- 上传图片弹窗 -->
-        <upload-popup :executionData="workItem"></upload-popup>
-        <!-- 分享农事成效弹窗 -->
-        <review-popup ref="reviewPopupRef" />
-
-        <!-- 上传农事成效弹窗 -->
-        <!-- <upload-execute ref="uploadExecuteRef" :onlyShare="true" /> -->
-    </div>
-</template>
-
-<script setup>
-import { Tab, Tabs } from "vant";
-import customHeader from "@/components/customHeader.vue";
-import { onMounted, ref, onDeactivated, onActivated, onUnmounted, nextTick, watch } from "vue";
-import { useRoute, useRouter } from "vue-router";
-import upload from "@/components/upload";
-import AlbumCarousel from "@/components/album_compoents/albumCarousel";
-import { ElMessage } from "element-plus";
-import uploadPopup from "@/components/popup/uploadPopup.vue";
-import { base_img_url2 } from "@/api/config";
-import wx from "weixin-js-sdk";
-// import reviewPopup from "@/views/old_mini/task_condition/components/reviewPopup.vue";
-// import uploadExecute from "@/views/old_mini/task_condition/components/uploadExecute.vue";
-import html2canvas from "html2canvas";
-
-const route = useRoute();
-const router = useRouter();
-const uploadExecuteRef = ref(null);
-const workItem = ref({});
-const curRole = ref(localStorage.getItem("SET_USER_CUR_ROLE"));
-// 农事规划页面-显示上传农事凭证按钮
-const isPlan = ref(false);
-const loading = ref(false);
-const reviewComboRef = ref(null);
-const combinedReviewImages = ref([]);
-
-const diffInDays = (date, type = "minus") => {
-    const targetDate = new Date(date);
-    const currentDate = new Date(); // 获取当前系统时间
-    let diffInMs;
-    if (type === "minus") {
-        diffInMs = targetDate - currentDate;
-    } else {
-        diffInMs = currentDate - targetDate;
-    }
-    const day = Math.floor(diffInMs / (1000 * 60 * 60 * 24));
-    return day + 1 >= 0 ? day + 1 : null;
-};
-
-const paramsPage = ref({});
-const agriculturalRole = ref(null);
-const userId = ref(null);
-const userType = ref(localStorage.getItem("USER_TYPE"));
-onActivated(() => {
-    const userInfo = JSON.parse(localStorage.getItem("localUserInfo"));
-    agriculturalRole.value = userInfo.agriculturalRole;
-    userId.value = userInfo.id;
-
-    window.scrollTo(0, 0);
-    paramsPage.value = route.query.miniJson ? JSON.parse(route.query.miniJson) : {};
-    if(paramsPage.value.paramsPage) {
-        const data = JSON.parse(paramsPage.value.paramsPage);
-        paramsPage.value.id = data.id;
-        paramsPage.value.goBack = true;
-    }else{
-        paramsPage.value.goBack = false;
-    }
-    getDetail();
-    getTriggerImg(paramsPage.value.id);
-});
-
-const getButtonText = () => {
-    return (agriculturalRole.value === 1 || (agriculturalRole.value === 2 && workItem.value.executorUserId != userId.value)) && !workItem.value?.reviewImage?.length && workItem.value?.needReview && userType.value != '2';
-};
-
-const getDetail = () => {
-    if (!paramsPage.value.id) return;
-    loading.value = true;
-    VE_API.z_farm_work_record
-        .getDetail({ id: paramsPage.value.id })
-        .then(({ data }) => {
-            workItem.value = data[0];
-        })
-        .finally(() => {
-            loading.value = false;
-        });
-};
-
-const handleClose = () => {
-    if(paramsPage.value.goBack){
-        router.replace({
-            path: "/task_condition",
-        });
-    }else{
-        router.back();
-    }
-};
-
-const triggerImg = ref([]);
-const getTriggerImg = (farmWorkRecordId) => {
-    VE_API.z_farm_work_record.getTriggerImg({ farmWorkRecordId }).then(({ data }) => {
-        triggerImg.value = data || [];
-    });
-};
-
-// 生成组合照片,传给相册组件
-const generateCombinedReviewImage = async () => {
-  try {
-    await prepareCoverImages()
-    await nextTick()
-
-    const canvas = await html2canvas(reviewComboRef.value, {
-      backgroundColor: null,
-      useCORS: true,
-      allowTaint: true,
-      scale: window.devicePixelRatio || 2,
-    })
-
-    combinedReviewImages.value = [canvas.toDataURL('image/png')]
-  } catch (e) {
-    console.error('生成组合照片失败', e)
-  }
-}
-const prepareCoverImages = async () => {
-  await nextTick()
-
-  const itemEl =
-    reviewComboRef.value.querySelector('.review-image-item')
-
-  const cssWidth = itemEl.offsetWidth
-  const cssHeight = 255
-
-  if (triggerImg.value?.length) {
-    leftCoverImg.value = await coverImageToBase64HD(
-      base_img_url2 + triggerImg.value.at(-1).cloudFilename,
-      cssWidth,
-      cssHeight
-    )
-  }
-
-  if (workItem.value?.reviewImage?.length) {
-    rightCoverImg.value = await coverImageToBase64HD(
-      base_img_url2 + workItem.value.reviewImage.at(-1),
-      cssWidth,
-      cssHeight
-    )
-  }
-}
-
-const leftCoverImg = ref('')
-const rightCoverImg = ref('')
-
-
-function coverImageToBase64HD(imgUrl, cssWidth, cssHeight) {
-  return new Promise((resolve, reject) => {
-    const dpr = window.devicePixelRatio || 2
-
-    const img = new Image()
-    img.crossOrigin = 'anonymous'
-    img.src = imgUrl
-
-    img.onload = () => {
-      // ⚠️ 用“物理像素”创建 canvas
-      const canvas = document.createElement('canvas')
-      canvas.width = cssWidth * dpr
-      canvas.height = cssHeight * dpr
-
-      const ctx = canvas.getContext('2d')
-      ctx.scale(dpr, dpr)
-
-      const imgRatio = img.width / img.height
-      const targetRatio = cssWidth / cssHeight
-
-      let sx = 0, sy = 0, sw = img.width, sh = img.height
-
-      if (imgRatio > targetRatio) {
-        sw = img.height * targetRatio
-        sx = (img.width - sw) / 2
-      } else {
-        sh = img.width / targetRatio
-        sy = (img.height - sh) / 2
-      }
-
-      ctx.drawImage(
-        img,
-        sx, sy, sw, sh,
-        0, 0, cssWidth, cssHeight
-      )
-
-      resolve(canvas.toDataURL('image/png'))
-    }
-
-    img.onerror = reject
-  })
-}
-
-
-
-watch(
-    () => [triggerImg.value, workItem.value.reviewImage],
-    ([preImgs, reviewImgs]) => {
-        if (preImgs && preImgs.length && reviewImgs && reviewImgs.length) {
-            generateCombinedReviewImage();
-        }
-    },
-    { deep: true }
-);
-
-//确认上传
-const handleSubmit = () => {
-    const params = {
-        executeEvidence: imageArr.value,
-        recordId: workItem.value.id,
-    };
-    VE_API.monitor.addReviewImg(params).then(({ code }) => {
-        if (code === 0) {
-            getDetail();
-            ElMessage.success("您已上传成功");
-            imageArr.value = [];
-        }
-    });
-};
-
-const reviewPopupRef = ref(null);
-const handleShare = () => {
-    const preImg = triggerImg.value.length
-        ? base_img_url2 + triggerImg.value[triggerImg.value.length - 1].cloudFilename
-        : "";
-    const resImg = workItem.value?.reviewImage?.length
-        ? base_img_url2 + workItem.value.reviewImage[workItem.value.reviewImage.length - 1]
-        : "";
-    reviewPopupRef.value.handleShowPopup(workItem.value.id, preImg, resImg);
-};
-
-const generateReport = () => {
-    router.push({
-        path: "/achievement_report",
-        query: { miniJson: JSON.stringify({ id: workItem.value.id }) },
-    });
-};
-
-const handleRemindUser = () => {
-    const query = {
-        askInfo: { title: "农事提醒", content: "是否分享该农事提醒给好友" },
-        shareText: '向您分享了一条农事复核提醒,请您尽快复核',
-        targetUrl: `review_work`,
-        paramsPage: JSON.stringify({id: workItem.value.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`,
-    });
-};
-
-const handleMore = () => {
-    router.push(`/service_detail?farmId=${workItem.value.farmId}`);
-};
-
-// 清理数据的函数
-const clearData = () => {
-    workItem.value = {};
-    triggerImg.value = [];
-    imageArr.value = [];
-    paramsPage.value = {};
-    isPlan.value = false;
-    loading.value = false;
-};
-
-onDeactivated(() => {
-    clearData();
-});
-
-onUnmounted(() => {
-    clearData();
-});
-
-// //联系专家
-// const handleContact = () => {
-//     router.push(`/dialogue?userId=${workItem.value.expert}&name=${workItem.value.expertUserName}`);
-// };
-
-const imageArr = ref([]);
-const handleUpload = ({ imgArr }) => {
-    imageArr.value = imgArr;
-};
-</script>
-
-<style lang="scss" scoped>
-.work-wrap {
-    .center-wrap {
-        ::v-deep {
-            .van-uploader__wrapper {
-                justify-content: center;
-            }
-        }
-    }
-    .work-content {
-        padding-top: 1px;
-        background: #f5f5f5;
-        padding-bottom: 12px;
-        font-size: 14px;
-        height: calc(100vh - 40px);
-        box-sizing: border-box;
-        overflow: auto;
-        &.recheck-title {
-            padding-bottom: 86px;
-            .common-card-title {
-                font-size: 16px;
-                display: flex;
-                align-items: center;
-                border-bottom: 1px solid #f5f5f5;
-                padding-bottom: 10px;
-                .icon {
-                    width: 14px;
-                    height: 8px;
-                    padding-right: 6px;
-                }
-            }
-            &.no-bottom {
-                padding-bottom: 26px;
-            }
-        }
-        .up-btn-group {
-            position: fixed;
-            bottom: 80px;
-            left: 12px;
-            display: flex;
-            justify-content: center;
-            width: calc(100% - 24px);
-            .up-btn {
-                background: linear-gradient(45deg, #9fd5ff, #2199f8);
-                flex: 1;
-                height: 40px;
-                border: 2px solid rgba(255, 255, 255, 0.66);
-                color: #fff;
-                font-size: 14px;
-                border-radius: 40px;
-                line-height: 38px;
-                text-align: center;
-                box-sizing: border-box;
-            }
-            .orange {
-                margin-left: 12px;
-                background: linear-gradient(45deg, #ffd887, #ed9e1e);
-            }
-            .btn {
-                width: 200px;
-                flex: none;
-            }
-        }
-
-        .fixed-btn-wrap {
-            position: fixed;
-            z-index: 10;
-            bottom: 0;
-            left: 0;
-            width: 100%;
-            padding: 10px 12px 25px;
-            box-sizing: border-box;
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            background: #fff;
-            box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.4);
-            .fixed-btn-wrap-left{
-                display: flex;
-                align-items: center;
-                gap: 10px;
-            }
-            &.center {
-                justify-content: center;
-            }
-            .fixed-btn {
-                width: 120px;
-                text-align: center;
-                height: 40px;
-                line-height: 40px;
-                background: linear-gradient(180deg, #70bffe, #2199f8);
-                border-radius: 25px;
-                color: #fff;
-                font-size: 14px;
-                box-sizing: border-box;
-                &.expert {
-                    width: 180px;
-                }
-                &.orange {
-                    color: #ff953d;
-                    border: 1px solid #ff953d;
-                    background: #fff;
-                }
-                &.excute {
-                    background: linear-gradient(180deg, #ffd887, #ed9e1e);
-                }
-                &.more {
-                    background: #ffffff;
-                    border: 1px solid rgba(153, 153, 153, 0.5);
-                    color: #666666;
-                    width: 100px;
-                }
-                &.second {
-                    background: #ffffff;
-                    border: 1px solid #2199f8;
-                    color: #2199f8;
-                }
-            }
-        }
-        .tabs-content-item {
-            padding: 12px 12px 16px 12px;
-            margin: 0 12px;
-            border-radius: 8px;
-            background: #fff;
-            margin-top: 12px;
-            position: relative;
-            .execute-img {
-                margin-top: 12px;
-            }
-            .card-title {
-                display: flex;
-                justify-content: space-between;
-                align-items: center;
-                padding-bottom: 10px;
-                .card-title-l {
-                    display: flex;
-                    align-items: center;
-                    font-size: 16px;
-
-                    .icon {
-                        width: 14px;
-                        height: 8px;
-                        padding-right: 6px;
-                    }
-                }
-                .card-title-r {
-                    font-size: 14px;
-                    color: #2199f8;
-                }
-            }
-            .info-farm {
-                padding: 12px 0;
-            }
-            .info-box {
-                // padding-top: 12px;
-                display: flex;
-                align-items: center;
-                &.subject-content {
-                    border: none;
-                }
-                &.cost-wrap {
-                    padding-top: 8px;
-                }
-                &.bottom-box {
-                    flex-direction: column;
-                }
-                .info-l {
-                    .farm-img {
-                        width: 78px;
-                        width: 78px;
-                        border-radius: 8px;
-                        object-fit: scale-down;
-                    }
-                }
-                .info-r {
-                    padding-left: 12px;
-                }
-                .farm-name {
-                    font-weight: bold;
-                    font-size: 14px;
-                    color: #000;
-                    padding-bottom: 4px;
-                }
-                .info-item {
-                    display: flex;
-                    align-items: center;
-                    font-size: 12px;
-                    &.line-item {
-                        align-items: flex-start;
-                    }
-                    .info-name {
-                        color: #bbbbbb;
-                        flex: none;
-                    }
-                    .info-value {
-                        color: #666666;
-                    }
-                }
-                .info-item + .info-item {
-                    margin-top: 4px;
-                }
-            }
-            .subject-box {
-                width: 100%;
-                display: flex;
-                align-items: center;
-                justify-content: space-around;
-                background: #fafafa;
-                .subject-item {
-                    border-radius: 8px;
-                    padding: 4px 4px;
-                    display: flex;
-                    flex-direction: column;
-                    align-items: center;
-                    justify-content: center;
-                    width: 33%;
-                    .subject-img {
-                        width: 30px;
-                        height: 30px;
-                        object-fit: cover;
-                        border-radius: 50%;
-                        padding-bottom: 4px;
-                    }
-                    .subject-tag {
-                        font-size: 12px;
-                        padding: 2px 8px;
-                        background: #e0efff;
-                        color: #2199f8;
-                        border-radius: 4px;
-
-                        &.cost-text {
-                            margin-left: 8px;
-                            font-size: 16px;
-                            color: #2199f8;
-                            padding: 1px 8px;
-                        }
-                    }
-                }
-                .subject-item + .subject-item {
-                    margin-left: 6px;
-                }
-
-                .cost-l {
-                    position: relative;
-                    &::after {
-                        content: "";
-                        position: absolute;
-                        right: 0;
-                        top: 16px;
-                        height: calc(100% - 32px);
-                        width: 1px;
-                        background: rgba(0, 0, 0, 0.05);
-                    }
-                }
-            }
-            .cost-box {
-                border-radius: 5px;
-                background: none;
-                .cost-item {
-                    display: flex;
-                    align-items: center;
-                    flex-direction: row;
-                }
-                .subject-item {
-                    background: none;
-                    width: 50%;
-                }
-                .cost-l {
-                    position: relative;
-                    &::after {
-                        content: "";
-                        position: absolute;
-                        right: 0;
-                        top: 0;
-                        height: 100%;
-                        width: 1px;
-                        background: rgba(0, 0, 0, 0.05);
-                    }
-                }
-                .cost-text {
-                    font-size: 16px;
-                    color: #2199f8;
-                    padding-bottom: 5px;
-                }
-            }
-            .recheck-box,
-            .recheck-ablum {
-                width: 100%;
-            }
-            .evaluate {
-                background: #fff;
-                border-radius: 5px;
-                padding: 4px 8px 10px 8px;
-                margin-right: 8px;
-                .evaluate-title {
-                    font-size: 16px;
-                    font-weight: 500;
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-between;
-                    margin-bottom: 8px;
-                    .more {
-                        font-size: 14px;
-                        color: #999999;
-                        font-weight: 400;
-                        display: flex;
-                        align-items: center;
-                    }
-                }
-                .rate {
-                    display: flex;
-                    justify-content: space-between;
-                    ::v-deep {
-                        .el-rate {
-                            --el-rate-icon-margin: 0;
-                        }
-                        .el-rate--small .el-rate__icon {
-                            font-size: 12px;
-                        }
-                    }
-                    .rate-item {
-                        display: flex;
-                        align-items: center;
-                        border-radius: 4px;
-                        padding: 4px 0px;
-                        font-size: 11px;
-                        .name {
-                            margin-right: 2px;
-                            color: #666666;
-                            position: relative;
-                            top: 2px;
-                        }
-                        .num {
-                            color: #f3c11d;
-                            margin-left: 2px;
-                        }
-                    }
-                    .line {
-                        width: 1px;
-                        height: 12px;
-                        background: #cdd7e1;
-                        position: relative;
-                        top: 13px;
-                        margin: 0 3px;
-                    }
-                }
-                .comment {
-                    .user-info {
-                        display: flex;
-                        align-items: center;
-                        margin-bottom: 2px;
-                        .user-name {
-                            font-weight: 500;
-                            margin-left: 8px;
-                            span {
-                                font-weight: 400;
-                                font-size: 12px;
-                                color: #999999;
-                            }
-                        }
-                    }
-                }
-            }
-            .img-list + .img-list,
-            .upload-wrap {
-                margin-top: 12px;
-            }
-            // .over-img-box {
-            //     ::v-deep {
-            //         img {
-            //             border-radius: 8px;
-            //         }
-            //     }
-            // }
-            .img-list {
-                width: 100%;
-            }
-            .upload-wrap {
-                display: flex;
-                flex-direction: column;
-                justify-content: center;
-                height: 254px;
-                width: 100%;
-                padding: 25px 0 12px 10px;
-                box-sizing: border-box;
-            }
-            .recheck-text-wrap {
-                width: 100%;
-                border-radius: 8px;
-                background: #f2f3f5;
-                color: #666666;
-                font-size: 14px;
-                position: relative;
-                &.active {
-                    background: rgba(33, 153, 248, 0.1);
-                    border: 1px solid #2199f8;
-                    color: #2199f8;
-                    .date {
-                        background: linear-gradient(170deg, #9fd5ff, #2199f8);
-                    }
-                    .recheck-desc {
-                        color: #2199f8;
-                    }
-                }
-                .submit {
-                    background: #2199f8;
-                    border-radius: 4px;
-                    padding: 8px;
-                    font-size: 16px;
-                    color: #fff;
-                    margin: 0 10px 16px;
-                    text-align: center;
-                }
-                .date {
-                    position: absolute;
-                    top: 0;
-                    left: 0;
-                    background: #bebebe;
-                    border-radius: 8px 0 8px 0;
-                    color: #fff;
-                    font-size: 12px;
-                    padding: 3px 6px;
-                    font-family: "PangMenZhengDao";
-                }
-                .recheck-text {
-                    padding: 8px 0 2px 0;
-                }
-                .recheck-desc {
-                    font-size: 12px;
-                    color: #999999;
-                }
-                .img-icon {
-                    width: 40px;
-                    height: 40px;
-                }
-            }
-            .sub-title {
-                display: flex;
-                align-items: center;
-                justify-content: center;
-                .sub-line {
-                    width: 12px;
-                    height: 2px;
-                    border-radius: 1px;
-                    background: #d9d9d9;
-                }
-                .sub-name {
-                    padding: 0 5px;
-                    font-size: 14px;
-                    color: #666666;
-                }
-            }
-        }
-    }
-
-    .review-hide-box {
-        position: absolute;
-        left: 0;
-        width: 100%;
-        height: 100%;
-        z-index: -1;
-        bottom: 0;
-    }
-
-    .review-image {
-        position: relative;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        gap: 8px;
-        margin: 12px;
-        background: #fff;
-        border-radius: 8px;
-        .review-mask {
-            z-index: 1;
-            pointer-events: none;
-            position: absolute;
-            left: 0;
-            top: 0;
-            width: 100%;
-            height: 100%;
-            border-radius: 8px;
-            background: linear-gradient(
-                360deg,
-                rgba(0, 0, 0, 0.78) 0%,
-                rgba(0, 0, 0, 0.437208) 19.87%,
-                rgba(0, 0, 0, 0) 33.99%
-            );
-            display: flex;
-            flex-direction: column;
-            align-items: baseline;
-            justify-content: end;
-            padding: 12px;
-            box-sizing: border-box;
-            color: #fff;
-            .review-text {
-                font-family: "PangMenZhengDao";
-                font-size: 16px;
-                margin-bottom: 1px;
-            }
-            .review-content {
-                font-size: 10px;
-                line-height: 15px;
-            }
-        }
-        .vs-wrap {
-            position: absolute;
-            left: 50%;
-            top: 50%;
-            transform: translate(-50%, -50%);
-            width: 40px;
-            height: 40px;
-            z-index: 10;
-            img {
-                width: 100%;
-                height: 100%;
-                object-fit: cover;
-            }
-        }
-        .review-image-item {
-            position: relative;
-            flex: 1;
-            .review-image-item-title {
-                position: absolute;
-                top: 0;
-                left: 0;
-                background: rgba(54, 52, 52, 0.6);
-                padding: 4px 10px;
-                border-radius: 8px 0 8px 0;
-                backdrop-filter: 4px;
-                font-size: 12px;
-                color: #fff;
-            }
-            // .review-image-item-img {
-            //     width: 100%;
-            //     height: 250px;
-            //     object-fit: cover;
-            // }
-            .review-image-item-img {
-                width: 100%;
-                height: 100%;
-                object-fit: cover;
-                object-position: center;
-            }
-            .left-img {
-                border-radius: 8px 0 0 8px;
-            }
-            .right-img {
-                border-radius: 0 8px 8px 0;
-            }
-        }
-    }
-}
-</style>

+ 0 - 178
src/views/old_mini/modify_work/sharePage.vue

@@ -1,178 +0,0 @@
-<template>
-    <div class="share-page">
-        <custom-header name="选择发送到" />
-        <div class="share-content">
-            <div class="search-wrap">
-                <div class="search-input">
-                    <el-input v-model="search" placeholder="搜索昵称">
-                        <template #prefix>
-                            <el-icon><Search /></el-icon>
-                        </template>
-                    </el-input>
-                </div>
-            </div>
-            <div class="recent-chat-wrap">
-                <div class="recent-title">最近聊天</div>
-                <div class="recent-list">
-                    <div class="recent-item" v-for="(item, index) in recentList" :key="index">
-                        <img class="recent-img" src="" alt="" />
-                        <div class="recent-name">{{ item.name }}</div>
-                        <checkbox class="recent-checkbox" v-model="item.checked"></checkbox>
-                    </div>
-                </div>
-            </div>
-            <div class="chat-list">
-                <div class="chat-item" v-for="(item, index) in chatList" :key="index">
-                    <checkbox @change="changeCheck(item)" v-model="item.checked"></checkbox>
-                    <div class="chat-info" :class="{'checked': item.checked}">
-                        <img class="chat-img" src="" alt="" />
-                        <span class="chat-name">{{ item.name }}</span>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="bottom-btn" v-show="checkedList.length > 0">
-        <div class="btn">取消</div>
-        <div class="btn primary">完成</div>
-    </div>
-</template>
-
-<script setup>
-import customHeader from "@/components/customHeader.vue";
-import { Checkbox } from "vant";
-import { ref } from "vue";
-
-const search = ref("");
-
-const chatList = ref([
-    {
-        name: "张三",
-        checked: false,
-    },
-    {
-        name: "张三",
-        checked: false,
-    },
-]);
-
-const recentList = ref([
-    {
-        name: "农资11",
-        checked: false,
-    },
-    {
-        name: "农资12",
-        checked: false,
-    },
-]);
-
-const checkedList = ref([]);
-const changeCheck = (item) => {
-    console.log(item,chatList.value);
-    checkedList.value = chatList.value.filter((item) => item.checked);
-};
-</script>
-
-<style lang="scss" scoped>
-.share-page {
-    width: 100%;
-    height: 100vh;
-    background-color: #f5f7fb;
-    .share-content {
-        .search-wrap {
-            padding: 20px 20px 0 20px;
-            .search-input {
-                width: 100%;
-                ::v-deep {
-                    .el-input__wrapper {
-                        box-shadow: none;
-                        border-radius: 25px;
-                    }
-                }
-            }
-        }
-        .recent-chat-wrap {
-            padding: 0 20px 20px 20px;
-            .recent-title {
-                font-weight: 500;
-                margin: 12px 0;
-            }
-            .recent-list {
-                display: flex;
-                flex-wrap: wrap;
-                gap: 10px;
-                .recent-item {
-                    position: relative;
-                    .recent-img {
-                        width: 54px;
-                        height: 54px;
-                        border-radius: 2px;
-                        background: red;
-                    }
-                    .recent-name {
-                        text-align: center;
-                        margin-top: 5px;
-                    }
-                    .recent-checkbox{
-                        position: absolute;
-                        right: 3px;
-                        top: 3px;
-                    }
-                }
-            }
-        }
-        .chat-list {
-            background-color: #fff;
-            padding-top: 6px;
-            .chat-item {
-                padding: 10px 20px;
-                display: flex;
-                align-items: center;
-                gap: 12px;
-                .chat-info {
-                    display: flex;
-                    align-items: center;
-                    gap: 10px;
-                    .chat-img {
-                        width: 46px;
-                        height: 46px;
-                        border-radius: 2px;
-                    }
-                    &.checked {
-                        .chat-name {
-                            color: #2199F8;
-                            font-weight: 500;
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-.bottom-btn {
-    position: fixed;
-    bottom: 10px;
-    left: 20px;    
-    width: calc(100% - 40px);
-    display: flex;
-
-    .btn {
-        flex: 1;
-        text-align: center;
-        color: #2199F8;
-        padding: 10px;
-        border-radius: 25px;
-        border: 1px solid #2199F8;
-        font-size: 16px;
-        &.primary{
-            background: #2199F8;
-            color: #fff;
-        }
-    }
-    .btn + .btn {
-        margin-left: 15px;
-    }
-}
-</style>