浏览代码

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

wangsisi 1 周之前
父节点
当前提交
b8cf170d65

+ 14 - 2
src/App.vue

@@ -58,7 +58,19 @@
                 />
             </template>
         </tabbar-item>
-        <tabbar-item replace to="/plan" v-if="curRole != 2">
+        <tabbar-item replace to="/plan" v-if="curRole == 0">
+            <span>农事方案</span>
+            <template #icon="props">
+                <img
+                    :src="
+                        props.active
+                            ? require('@/assets/img/tab_bar/farm-active.png')
+                            : require('@/assets/img/tab_bar/farm.png')
+                    "
+                />
+            </template>
+        </tabbar-item>
+        <tabbar-item replace to="/expert_prescription" v-if="curRole == 1">
             <span>农事方案</span>
             <template #icon="props">
                 <img
@@ -126,7 +138,7 @@ const router = useRouter();
 // 首页loading加载完才显示底部导航栏
 const showTab = ref(false);
 // 0: 农户, 1: 专家, 2:农资农服
-const curRole = ref(0);
+const curRole = ref(1);
 
 let tabBarHeight = 0;
 onMounted(() => {

+ 8 - 0
src/api/modules/farm.js

@@ -0,0 +1,8 @@
+const config = require("../config")
+
+module.exports = {
+    fetchSpecieList: {
+        url: config.base_dev_url + "container/specieList",
+        type: "get",
+    },
+}

二进制
src/assets/img/home/today.png


+ 14 - 1
src/router/globalRoutes.js

@@ -18,6 +18,12 @@ export default [
         meta: { showTabbar: true, keepAlive: true },
         component: () => import("@/views/old_mini/home/index.vue"),
     },
+    {
+        path: "/plan",
+        name: "Plan",
+        meta: { showTabbar: true, keepAlive: true },
+        component: () => import("@/views/old_mini/plan/index.vue"),
+    },
     //个人中心
     {
         path: "/mine",
@@ -144,5 +150,12 @@ export default [
         name: "AgriServices",
         meta: { showTabbar: true, keepAlive: true },
         component: () => import("@/views/old_mini/agri_services/index.vue"),
-    }
+    },
+    // 专家-农事方案
+    {
+        path: "/expert_prescription",
+        name: "ExpertPrescription",
+        meta: { showTabbar: true, keepAlive: true },
+        component: () => import("@/views/old_mini/plan/components/myPrescription.vue"),
+    },
 ];

+ 11 - 2
src/views/old_mini/create_farm/index.vue

@@ -71,8 +71,7 @@
                                     <el-form-item label="种植作物" prop="period">
                                         <div class="select-wrap">
                                             <el-select class="select-item" v-model="ruleForm.type" placeholder="作物类型">
-                                                <el-option label="荔枝" value="lichi" />
-                                                <el-option label="龙眼" value="ly" />
+                                                <el-option v-for="(item, index) in specieList" :key="index" :value="item.id">{{ item.name }}</el-option>
                                             </el-select>
                                             <el-select
                                                 v-model="ruleForm.period"
@@ -126,6 +125,8 @@ onMounted(() => {
     indexMap.initMap(centerPoint.value, mapContainer.value);
     const arr = convertPointToArray(centerPoint.value)
     getLocationName(`${arr[1]},${arr[0]}`)
+
+    getSpecieList()
 });
 
 const polygonArr = ref(null)
@@ -255,6 +256,14 @@ watch(() => mapLocation.data,(newValue, oldValue) => {
         getLocationName(`${newValue[1]},${newValue[0]}`)
     }
 })
+
+const specieList = ref([])
+
+function getSpecieList() {
+    VE_API.farm.fetchSpecieList().then(({data}) => {
+        specieList.value = data
+    })
+}
 </script>
 
 <style lang="scss" scoped>

+ 72 - 1
src/views/old_mini/farm_manage/components/demandHall.vue

@@ -56,7 +56,25 @@
             <div class="hall-content">
                 <div class="farm-list" ref="cardContentRef" :style="{ height: `${cardContentHeight}px` }">
                     <div class="task-item" v-for="item in 10" :key="item">
-                        <task-item></task-item>
+                        <task-item>
+                            <template #footer>
+                                <div class="item-footer">
+                                    <div class="footer-l">
+                                        <img class="share-icon" src="@/assets/img/home/share-icon.png" alt="" />
+                                        转发
+                                    </div>
+                                    <div class="footer-r">
+                                        <div class="btn second">
+                                            <el-icon class="btn-icon" size="14" color="#8B8B8B"><ChatDotSquare /></el-icon>
+                                            联系果园
+                                        </div>
+                                        <div class="btn primary">
+                                            <el-icon class="btn-icon" size="14"><Plus /></el-icon>
+                                            加入任务
+                                        </div>
+                                    </div>
+                                </div>
+                            </template></task-item>
                     </div>
                 </div>
             </div>
@@ -197,6 +215,59 @@ function toPage() {
         .task-item + .task-item {
             margin-top: 10px;
         }
+        
+    .item-footer {
+        margin-top: 10px;
+        padding-top: 11px;
+        border-top: 1px solid rgba(0, 0, 0, 0.1);
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        font-size: 12px;
+        .footer-l {
+            display: inline-flex;
+            align-items: center;
+            border: 1px solid #2199F8;
+            background: rgba(33, 153, 248, 0.1);
+            padding: 0 12px;
+            height: 32px;
+            box-sizing: border-box;
+            display: flex;
+            align-items: center;
+            border-radius: 20px;
+            color: #2199F8;
+            .share-icon {
+                width: 12px;
+                padding-right: 4px;
+            }
+        }
+        .footer-r {
+            display: flex;
+            align-items: center;
+            .btn {
+                height: 32px;
+                line-height: 32px;
+                padding: 0 12px;
+                border-radius: 20px;
+                display: flex;
+                align-items: center;
+                &.second {
+                    border: 1px solid #8B8B8B;
+                    color: #8B8B8B;
+                }
+                &.primary {
+                    background: #2199F8;
+                    color: #fff;
+                }
+                .btn-icon {
+                    padding-right: 4px;
+                }
+            }
+            .btn + .btn {
+                margin-left: 8px;
+            }
+        }
+    }
     }
     
     .select-group {

+ 1341 - 0
src/views/old_mini/plan/components/myPrescription.vue

@@ -0,0 +1,1341 @@
+<template>
+    <div class="prescription-page">
+        <div class="filter-wrap">
+            <div class="plan-box">
+                <div
+                    class="plan-item"
+                    v-for="(item, index) in planList"
+                    :key="index"
+                    @click="handlePlanClick(index)"
+                    :class="{ active: activePlanIndex === index }"
+                >
+                    {{ item.name }}
+                </div>
+            </div>
+            <div class="plan-add" @click="newPlan">新增方案</div>
+        </div>
+        <div class="expert-prescription" :class="{'isSubPage': isSubPage}">
+            <div class="plan-menu">
+                <el-anchor :container="containerRef" direction="vertical" type="default" @click="handleClick">
+                    <el-menu :default-active="defaultActive" class="el-menu-vertical-demo">
+                        <el-sub-menu v-for="(menu, index) in menuData" :key="index" :index="String(menu.id)">
+                            <template #title>
+                                <img class="menu-icon" :src="require(`@/assets/img/gallery/icon-${index}.png`)" />
+                                <span class="menu-text">{{ menu.title }}</span>
+                            </template>
+                            <el-menu-item v-for="item in menu.children" :key="item.id" :index="`${menu.id}-${item.id}`">
+                                <el-anchor-link :href="item.href" :title="item.title" />
+                            </el-menu-item>
+                        </el-sub-menu>
+                    </el-menu>
+                </el-anchor>
+            </div>
+            <div class="expert-content" ref="containerRef">
+                <div v-for="(section, index) in contentData" :key="index" class="content-section">
+                    <div class="section-id" :id="section.targetId"></div>
+                    <record-item :record-item-data="section">
+                        <template #title>
+                            <div class="box-title">
+                                <div class="title-l">
+                                    {{ section.title }}
+                                    <span class="parent-text">{{ section.parentTitle || "秋梢期" }}</span>
+                                </div>
+                                <div class="title-r">
+                                    <div class="btn-item del-btn" @click="deletePlan">
+                                        <el-icon color="#fff" size="14"><Delete /></el-icon>
+                                    </div>
+                                    <div class="btn-item edit-btn">
+                                        <el-icon color="#fff" size="14"><Edit /></el-icon>
+                                    </div>
+                                </div>
+                            </div>
+                        </template>
+                    </record-item>
+                </div>
+            </div>
+        </div>
+
+        <!-- 底部 -->
+        <div class="fixed-bottom">
+            <div class="bottom-l">
+                <div class="l-btn">
+                    <el-icon color="#666666" class="btn-icon" size="16"><Download /></el-icon>
+                    下载处方
+                </div>
+            </div>
+            <div class="bottom-r">新增农事</div>
+        </div>
+    </div>
+    <add-group ref="addGroupRef" />
+</template>
+
+<script setup>
+import { ref } from "vue";
+import addGroup from "./addGroup.vue";
+import recordItem from "@/components/recordItem.vue";
+import { ElMessage, ElMessageBox } from "element-plus";
+const props = defineProps({
+    isSubPage: {
+        type: Boolean,
+        default: false
+    }
+})
+
+// 菜单
+const defaultActive = ref("1-1");
+
+const menuData = [
+    {
+        id: 1,
+        title: "秋梢期",
+        children: [
+            { id: 1, title: "巡园农事", href: "#part1" },
+            { id: 2, title: "梢期防虫", href: "#part2" },
+            { id: 3, title: "梢期营养", href: "#part3" },
+        ],
+    },
+    {
+        id: 2,
+        title: "开花期",
+        children: [
+            { id: 1, title: "巡园农事", href: "#part4" },
+            { id: 2, title: "摇花吹花", href: "#part5" },
+            { id: 3, title: "花期防治", href: "#part6" },
+        ],
+    },
+];
+
+const contentData = ref([
+    {
+        targetId: "part1",
+        title: "巡园农事",
+        parentTitle: "秋梢期",
+        reCheckText: "本次农事复核成效优异,作物产量潜力实现大幅增长,虫害风险控制优异,未发现虫害风险",
+        expert: 91356,
+        orderStatus: 4,
+        activeStatus: 0,
+        regionId: 2,
+        speciesId: "1",
+        speciesName: "荔枝",
+        farmWorkId: "699343457474318336",
+        farmWorkLibId: "699343457474318336",
+        farmWorkLibName: "梢期防虫",
+        farmWorkName: "梢期防虫",
+        expertIcon:
+            "https://birdseye-img.sysuimars.com/birdseye-look-vue/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20250411150343.png",
+        expertName: "韦帮稳",
+        icon: 4,
+        beforeExecuteDate: "2025-08-01",
+        executeDate: "2025-08-15",
+        code: "BZ-BC-04-SQFC-20",
+        expertPrescription: "",
+        condition: "单树嫩叶率大于20.0%",
+        defaultFarmWork: 0,
+        farmWorkType: 3,
+        farmWorkTypeName: "病虫",
+        usageMode: "叶面施",
+        serviceMain: "广州泽秾丰农资有限公司",
+        updateDate6: null,
+        confirmPicture: [],
+        executeMain: "广州泽秾丰农资有限公司",
+        storeShortName: "泽秾丰",
+        serviceRegion: "广州市从化区荔枝博览园",
+        attention: "当前为秋梢期,建议巡园,重点关注叶片、嫩梢等部位",
+    },
+    {
+        targetId: "part2",
+        title: "梢期防虫",
+        parentTitle: "秋梢期",
+        consequenceText: "如果不做本次农事,会导致您的产量、质量下降30%,管理得分降低10分",
+        id: "274654",
+        reCheckText: "本次农事复核成效优异,作物产量潜力实现大幅增长,树体营养较充足,土壤肥力增加",
+        farmName: "荔枝博览园",
+        farmPoint: "POINT(113.61702297075017 23.584863449735067)",
+        orderId: "745923632567422976",
+        area: 2.719998598098755,
+        expert: 91356,
+        orderStatus: 4,
+        activeStatus: 0,
+        farmId: 766,
+        regionId: 2,
+        speciesId: "1",
+        speciesName: "荔枝",
+        agriculturalId: 24,
+        farmWorkId: "699343457444958208",
+        farmWorkLibId: "699343457444958208",
+        farmWorkLibName: "梢期营养",
+        farmWorkName: "梢期营养",
+        expertIcon:
+            "https://birdseye-img.sysuimars.com/birdseye-look-vue/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20250411150343.png",
+        expertName: "韦帮稳",
+        expertUserIcon: "",
+        expertUserName: "韦帮稳",
+        icon: 4,
+        indexChart: [],
+        indexName: "",
+        beforeExecuteDate: "2025-05-26",
+        checkDate: null,
+        executeDate: "2025-08-01",
+        indexJson: "",
+        code: "BZ-YY-04-SQYY-20",
+        expertPrescription: "",
+        condition: "园区叶芽率大于20.0%",
+        solarName: "",
+        reCheck: null,
+        executeBlueZones: [
+            {
+                id: "ws0y1m6x7cjz",
+                level: null,
+            },
+            {
+                id: "ws0y1md9v3ht",
+                level: null,
+            },
+            {
+                id: "ws0y1mdspbk7",
+                level: null,
+            },
+            {
+                id: "ws0y1mdvvdsz",
+                level: null,
+            },
+            {
+                id: "ws0y1me545tg",
+                level: null,
+            },
+        ],
+        menu: 1,
+        isEdit: 0,
+        isMaster: null,
+        num: null,
+        purpose: "",
+        selfExec: null,
+        defaultFarmWork: 0,
+        farmWorkType: 2,
+        farmWorkTypeName: "营养",
+        type: 1,
+        execute: 4,
+        updateDate0: "2025-08-20",
+        updateDate1: null,
+        updateDate2: null,
+        updateDate3: null,
+        updateDate4: null,
+        updateDate5: null,
+        usageMode: "根部施",
+        serviceMain: "广州泽秾丰农资有限公司",
+        updateDate6: null,
+        confirmPicture: [],
+        executeMain: "广州泽秾丰农资有限公司",
+        storeShortName: "泽秾丰",
+        weatherWarningMsg: "",
+        executeEvidence: [],
+        userEvaluation: null,
+        reviewDate: null,
+        reviewDate2: null,
+        reviewImage: [],
+        reviewImage2: [],
+        serviceRegion: "广州市从化区荔枝博览园",
+        users: [
+            {
+                id: null,
+                orderId: null,
+                serviceType: null,
+                userType: null,
+                userId: 81881,
+                joinStatus: null,
+                icon: "https://birdseye-img.sysuimars.com/birdseye-look-mini/Group%201321316260.png",
+                userName: "飞鸟种植助手",
+                area: "",
+                point: "",
+                farmName: "",
+                selected: null,
+            },
+        ],
+        cost: null,
+        prescriptionList: [
+            {
+                name: "营养",
+                pesticideFertilizerList: [
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "尿素",
+                        defaultRatio: 0,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 15000.0,
+                        muUsage2: 15000.0,
+                        ratio: 0,
+                        ratio2: 0,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施、根部施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1001",
+                        pesticideFertilizerId: "1",
+                        pesticideFertilizerName: "尿素",
+                        brand: "山东联盟",
+                        typeName: "营养",
+                        price: 132,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "15-15-15复合肥",
+                        defaultRatio: 0,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 45000.0,
+                        muUsage2: 45000.0,
+                        ratio: 0,
+                        ratio2: 0,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["根部施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1002",
+                        pesticideFertilizerId: "2",
+                        pesticideFertilizerName: "15-15-15复合肥",
+                        brand: "金正大",
+                        typeName: "营养",
+                        price: 220,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                ],
+            },
+        ],
+        conditionList: [
+            {
+                index: "1-2-001-02-02-02-01-0008",
+                name: "园区叶芽率",
+                type: 1,
+                value: "0.2",
+            },
+        ],
+    },
+    {
+        targetId: "part3",
+        title: "梢期营养",
+        consequenceText: "如果不做本次农事,会导致您的产量、质量下降5%,管理得分降低2分",
+        reCheckText: "本次农事复核成效优异,作物产量潜力实现大幅增长,树体营养较充足,转色速度非常稳定,转色率超过80%",
+        farmName: "荔枝博览园",
+        farmPoint: "POINT(113.61702297075017 23.584863449735067)",
+        orderId: "745923697054846976",
+        area: 2.719998598098755,
+        expert: 91356,
+        orderStatus: 4,
+        activeStatus: 0,
+        farmId: 766,
+        regionId: 2,
+        speciesId: "1",
+        speciesName: "荔枝",
+        agriculturalId: 24,
+        farmWorkId: "699343457482706947",
+        farmWorkLibId: "699343457482706947",
+        farmWorkLibName: "转色营养",
+        farmWorkName: "转色营养",
+        expertIcon:
+            "https://birdseye-img.sysuimars.com/birdseye-look-vue/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20250411150343.png",
+        expertName: "韦帮稳",
+        expertUserIcon: "",
+        expertUserName: "韦帮稳",
+        icon: 0,
+        indexChart: [],
+        indexName: "",
+        beforeExecuteDate: "2025-05-26",
+        checkDate: null,
+        executeDate: "2025-05-26",
+        indexJson: "",
+        code: "BZ-YY-06-ZSYY-100",
+        expertPrescription: "",
+        condition: "园区转色率大于20.0%",
+        solarName: "",
+        reCheck: null,
+        executeBlueZones: [
+            {
+                id: "ws0y1m6x7cjz",
+                level: null,
+            },
+            {
+                id: "ws0y1md9v3ht",
+                level: null,
+            },
+            {
+                id: "ws0y1mdspbk7",
+                level: null,
+            },
+            {
+                id: "ws0y1mdvvdsz",
+                level: null,
+            },
+            {
+                id: "ws0y1me545tg",
+                level: null,
+            },
+        ],
+        menu: 1,
+        isEdit: 0,
+        isMaster: null,
+        num: null,
+        purpose: "",
+        selfExec: null,
+        defaultFarmWork: 0,
+        farmWorkType: 2,
+        farmWorkTypeName: "营养",
+        type: 1,
+        execute: 4,
+        updateDate0: "2025-08-20",
+        updateDate1: null,
+        updateDate2: null,
+        updateDate3: null,
+        updateDate4: null,
+        updateDate5: null,
+        usageMode: "根部施",
+        serviceMain: "广州泽秾丰农资有限公司",
+        updateDate6: null,
+        confirmPicture: [],
+        executeMain: "广州泽秾丰农资有限公司",
+        storeShortName: "泽秾丰",
+        weatherWarningMsg: "",
+        executeEvidence: [],
+        userEvaluation: null,
+        reviewDate: null,
+        reviewDate2: null,
+        reviewImage: [],
+        reviewImage2: [],
+        serviceRegion: "广州市从化区荔枝博览园",
+        users: [
+            {
+                id: null,
+                orderId: null,
+                serviceType: null,
+                userType: null,
+                userId: 81881,
+                joinStatus: null,
+                icon: "https://birdseye-img.sysuimars.com/birdseye-look-mini/Group%201321316260.png",
+                userName: "飞鸟种植助手",
+                area: "",
+                point: "",
+                farmName: "",
+                selected: null,
+            },
+        ],
+        cost: null,
+        prescriptionList: [
+            {
+                name: "营养",
+                pesticideFertilizerList: [
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "矿源黄腐酸钾",
+                        defaultRatio: 2000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 4.0,
+                        muUsage2: 4.0,
+                        ratio: 2000,
+                        ratio2: 200,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施、根部施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1166",
+                        pesticideFertilizerId: "166",
+                        pesticideFertilizerName: "矿源黄腐酸钾",
+                        brand: "广州大炎",
+                        typeName: "营养",
+                        price: 15000,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "有机质水溶肥",
+                        defaultRatio: 5000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 10.0,
+                        muUsage2: 10.0,
+                        ratio: 5000,
+                        ratio2: 500,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1167",
+                        pesticideFertilizerId: "167",
+                        pesticideFertilizerName: "有机质水溶肥",
+                        brand: "广州大炎",
+                        typeName: "营养",
+                        price: 10000,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "磷酸二氢钾",
+                        defaultRatio: 5000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 10.0,
+                        muUsage2: 10.0,
+                        ratio: 5000,
+                        ratio2: 500,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施、根部施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1168",
+                        pesticideFertilizerId: "168",
+                        pesticideFertilizerName: "磷酸二氢钾",
+                        brand: "广州大炎",
+                        typeName: "营养",
+                        price: 12000,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "高钾复合肥",
+                        defaultRatio: 5000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 10.0,
+                        muUsage2: 10.0,
+                        ratio: 5000,
+                        ratio2: 500,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["根部施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1169",
+                        pesticideFertilizerId: "169",
+                        pesticideFertilizerName: "高钾复合肥",
+                        brand: "未知",
+                        typeName: "营养",
+                        price: 245,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "红牛硫酸钾",
+                        defaultRatio: 5000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 10.0,
+                        muUsage2: 10.0,
+                        ratio: 5000,
+                        ratio2: 500,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["根部施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1170",
+                        pesticideFertilizerId: "170",
+                        pesticideFertilizerName: "红牛硫酸钾",
+                        brand: "广州大炎",
+                        typeName: "营养",
+                        price: 230,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                ],
+            },
+        ],
+        conditionList: [
+            {
+                index: "1-2-016-02-02-02-01-0008",
+                name: "园区转色率",
+                type: 1,
+                value: "0.2",
+            },
+        ],
+    },
+    {
+        targetId: "part4",
+        title: "巡园农事",
+        parentTitle: "开花期",
+        consequenceText: "如果不做本次农事,会导致您的产量、质量下降20%,管理得分降低8分",
+        id: "274672",
+        reCheckText: "本次农事复核成效优异,作物产量潜力实现大幅增长,病虫害基数得到大幅下降,未发现病虫害风险",
+        farmName: "荔枝博览园",
+        farmPoint: "POINT(113.61702297075017 23.584863449735067)",
+        orderId: "745923690209742848",
+        area: 2.719998598098755,
+        expert: 91356,
+        orderStatus: 4,
+        activeStatus: 0,
+        farmId: 766,
+        regionId: 2,
+        speciesId: "1",
+        speciesName: "荔枝",
+        agriculturalId: 24,
+        farmWorkId: "699343457478512646",
+        farmWorkLibId: "699343457478512646",
+        farmWorkLibName: "果期防治II",
+        farmWorkName: "果期防治II",
+        expertIcon:
+            "https://birdseye-img.sysuimars.com/birdseye-look-vue/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20250411150343.png",
+        expertName: "韦帮稳",
+        expertUserIcon: "",
+        expertUserName: "韦帮稳",
+        icon: 1,
+        indexChart: [],
+        indexName: "",
+        beforeExecuteDate: "2025-05-06",
+        checkDate: null,
+        executeDate: "2025-05-12",
+        indexJson: "",
+        code: "BZ-BC-06-GQFZ2-100",
+        expertPrescription: "",
+        condition: "园区膨果率大于20.0%",
+        solarName: "",
+        reCheck: null,
+        executeBlueZones: [
+            {
+                id: "ws0y1m6x7cjz",
+                level: null,
+            },
+            {
+                id: "ws0y1md9v3ht",
+                level: null,
+            },
+            {
+                id: "ws0y1mdspbk7",
+                level: null,
+            },
+            {
+                id: "ws0y1mdvvdsz",
+                level: null,
+            },
+            {
+                id: "ws0y1me545tg",
+                level: null,
+            },
+        ],
+        menu: 1,
+        isEdit: 0,
+        isMaster: null,
+        num: null,
+        purpose: "",
+        selfExec: null,
+        defaultFarmWork: 0,
+        farmWorkType: 3,
+        farmWorkTypeName: "病虫",
+        type: 1,
+        execute: 4,
+        updateDate0: "2025-08-20",
+        updateDate1: null,
+        updateDate2: null,
+        updateDate3: null,
+        updateDate4: null,
+        updateDate5: null,
+        usageMode: "叶面施",
+        serviceMain: "广州泽秾丰农资有限公司",
+        updateDate6: null,
+        confirmPicture: [],
+        executeMain: "广州泽秾丰农资有限公司",
+        storeShortName: "泽秾丰",
+        weatherWarningMsg: "",
+        executeEvidence: [],
+        userEvaluation: null,
+        reviewDate: null,
+        reviewDate2: null,
+        reviewImage: [],
+        reviewImage2: [],
+        serviceRegion: "广州市从化区荔枝博览园",
+        users: [
+            {
+                id: null,
+                orderId: null,
+                serviceType: null,
+                userType: null,
+                userId: 81881,
+                joinStatus: null,
+                icon: "https://birdseye-img.sysuimars.com/birdseye-look-mini/Group%201321316260.png",
+                userName: "飞鸟种植助手",
+                area: "",
+                point: "",
+                farmName: "",
+                selected: null,
+            },
+        ],
+        cost: null,
+        prescriptionList: [
+            {
+                name: "病虫",
+                pesticideFertilizerList: [
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "威远.绿凯",
+                        defaultRatio: 150000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 150.0,
+                        muUsage2: 150.0,
+                        ratio: 150000,
+                        ratio2: 15000,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1147",
+                        pesticideFertilizerId: "147",
+                        pesticideFertilizerName: "威远.绿凯",
+                        brand: "利民控股绿凯",
+                        typeName: "病虫",
+                        price: 90,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "微量元素益元液",
+                        defaultRatio: 150000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 300.0,
+                        muUsage2: 300.0,
+                        ratio: 150000,
+                        ratio2: 15000,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1174",
+                        pesticideFertilizerId: "174",
+                        pesticideFertilizerName: "微量元素益元液",
+                        brand: "广州大炎",
+                        typeName: "营养",
+                        price: 60,
+                        unit: "ml",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "中量元素益元液",
+                        defaultRatio: 150000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 300.0,
+                        muUsage2: 300.0,
+                        ratio: 150000,
+                        ratio2: 15000,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1175",
+                        pesticideFertilizerId: "175",
+                        pesticideFertilizerName: "中量元素益元液",
+                        brand: "广州大炎",
+                        typeName: "营养",
+                        price: 30,
+                        unit: "ml",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "济南中科翠剑",
+                        defaultRatio: 150000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 150.0,
+                        muUsage2: 150.0,
+                        ratio: 150000,
+                        ratio2: 15000,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1149",
+                        pesticideFertilizerId: "149",
+                        pesticideFertilizerName: "吡唑醚菌酯",
+                        brand: "济南中科翠剑",
+                        typeName: "病虫",
+                        price: 60,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "佳果天成",
+                        defaultRatio: 150000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 300.0,
+                        muUsage2: 300.0,
+                        ratio: 150000,
+                        ratio2: 15000,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1171",
+                        pesticideFertilizerId: "171",
+                        pesticideFertilizerName: "佳果天成",
+                        brand: "广州大炎",
+                        typeName: "营养",
+                        price: 120,
+                        unit: "ml",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "高效氟氯氰菊酯",
+                        defaultRatio: 150000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 150.0,
+                        muUsage2: 150.0,
+                        ratio: 150000,
+                        ratio2: 15000,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1155",
+                        pesticideFertilizerId: "155",
+                        pesticideFertilizerName: "高效氟氯氰菊酯",
+                        brand: "广东立威.立功",
+                        typeName: "病虫",
+                        price: 50,
+                        unit: "ml",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "联苯噻虫嗪",
+                        defaultRatio: 150000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 150.0,
+                        muUsage2: 150.0,
+                        ratio: 150000,
+                        ratio2: 15000,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1156",
+                        pesticideFertilizerId: "156",
+                        pesticideFertilizerName: "联苯噻虫嗪",
+                        brand: "青岛金正飞灵",
+                        typeName: "病虫",
+                        price: 60,
+                        unit: "ml",
+                        executeStyle: null,
+                    },
+                ],
+            },
+        ],
+        conditionList: [
+            {
+                index: "1-2-014-02-02-02-01-0008",
+                name: "园区膨果率",
+                type: 1,
+                value: "0.2",
+            },
+        ],
+    },
+    {
+        id: "part5",
+        title: "摇花吹花",
+        parentTitle: "开花期",
+        consequenceText: "如果不做本次农事,会导致您的产量、质量下降15%,管理得分降低5分",
+        id: "274671",
+        reCheckText: "本次农事复核成效优异,作物产量潜力实现大幅增长,树体营养较充足,膨果速度非常稳定,膨果率超过80%",
+        farmName: "荔枝博览园",
+        farmPoint: "POINT(113.61702297075017 23.584863449735067)",
+        orderId: "745923686854299648",
+        area: 2.719998598098755,
+        expert: 91356,
+        orderStatus: 4,
+        activeStatus: 0,
+        farmId: 766,
+        regionId: 2,
+        speciesId: "1",
+        speciesName: "荔枝",
+        agriculturalId: 24,
+        farmWorkId: "699343457482706944",
+        farmWorkLibId: "699343457482706944",
+        farmWorkLibName: "膨果营养",
+        farmWorkName: "膨果营养",
+        expertIcon:
+            "https://birdseye-img.sysuimars.com/birdseye-look-vue/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20250411150343.png",
+        expertName: "韦帮稳",
+        expertUserIcon: "",
+        expertUserName: "韦帮稳",
+        icon: 2,
+        indexChart: [],
+        indexName: "",
+        beforeExecuteDate: "2025-05-01",
+        checkDate: null,
+        executeDate: "2025-05-06",
+        indexJson: "",
+        code: "BZ-YY-06-PGYY-100",
+        expertPrescription: "",
+        condition: "园区膨果率大于10.0%",
+        solarName: "",
+        reCheck: null,
+        executeBlueZones: [
+            {
+                id: "ws0y1m6x7cjz",
+                level: null,
+            },
+            {
+                id: "ws0y1md9v3ht",
+                level: null,
+            },
+            {
+                id: "ws0y1mdspbk7",
+                level: null,
+            },
+            {
+                id: "ws0y1mdvvdsz",
+                level: null,
+            },
+            {
+                id: "ws0y1me545tg",
+                level: null,
+            },
+        ],
+        menu: 1,
+        isEdit: 0,
+        isMaster: null,
+        num: null,
+        purpose: "",
+        selfExec: null,
+        defaultFarmWork: 0,
+        farmWorkType: 2,
+        farmWorkTypeName: "营养",
+        type: 1,
+        execute: 4,
+        updateDate0: "2025-08-20",
+        updateDate1: null,
+        updateDate2: null,
+        updateDate3: null,
+        updateDate4: null,
+        updateDate5: null,
+        usageMode: "根部施",
+        serviceMain: "广州泽秾丰农资有限公司",
+        updateDate6: null,
+        confirmPicture: [],
+        executeMain: "广州泽秾丰农资有限公司",
+        storeShortName: "泽秾丰",
+        weatherWarningMsg: "",
+        executeEvidence: [],
+        userEvaluation: null,
+        reviewDate: null,
+        reviewDate2: null,
+        reviewImage: [],
+        reviewImage2: [],
+        serviceRegion: "广州市从化区荔枝博览园",
+        users: [
+            {
+                id: null,
+                orderId: null,
+                serviceType: null,
+                userType: null,
+                userId: 81881,
+                joinStatus: null,
+                icon: "https://birdseye-img.sysuimars.com/birdseye-look-mini/Group%201321316260.png",
+                userName: "飞鸟种植助手",
+                area: "",
+                point: "",
+                farmName: "",
+                selected: null,
+            },
+        ],
+        cost: null,
+        prescriptionList: [
+            {
+                name: "营养",
+                pesticideFertilizerList: [
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "硝酸铵钙",
+                        defaultRatio: 0,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 15000.0,
+                        muUsage2: 15000.0,
+                        ratio: 0,
+                        ratio2: 0,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["根部施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1162",
+                        pesticideFertilizerId: "162",
+                        pesticideFertilizerName: "硝酸铵钙",
+                        brand: "未知",
+                        typeName: "营养",
+                        price: 2000,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "氯化钾",
+                        defaultRatio: 0,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 15000.0,
+                        muUsage2: 15000.0,
+                        ratio: 0,
+                        ratio2: 0,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["根部施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1163",
+                        pesticideFertilizerId: "163",
+                        pesticideFertilizerName: "氯化钾",
+                        brand: "未知",
+                        typeName: "营养",
+                        price: 4500,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "高氮水溶肥",
+                        defaultRatio: 5000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 10.0,
+                        muUsage2: 10.0,
+                        ratio: 5000,
+                        ratio2: 500,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1165",
+                        pesticideFertilizerId: "165",
+                        pesticideFertilizerName: "高氮水溶肥",
+                        brand: "广州大炎",
+                        typeName: "营养",
+                        price: 8500,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                    {
+                        defaultDroneRatio: null,
+                        defaultName: "矿源黄腐酸钾",
+                        defaultRatio: 2000,
+                        id: null,
+                        muPrice: null,
+                        muUsage: 4.0,
+                        muUsage2: 4.0,
+                        ratio: 2000,
+                        ratio2: 200,
+                        remark: "",
+                        usageMode: "",
+                        usageModeList: ["叶面施、根部施"],
+                        orderId: null,
+                        pesticideFertilizerCode: "1166",
+                        pesticideFertilizerId: "166",
+                        pesticideFertilizerName: "矿源黄腐酸钾",
+                        brand: "广州大炎",
+                        typeName: "营养",
+                        price: 15000,
+                        unit: "g",
+                        executeStyle: null,
+                    },
+                ],
+            },
+        ],
+        conditionList: [
+            {
+                index: "1-2-014-02-02-02-01-0008",
+                name: "园区膨果率",
+                type: 1,
+                value: "0.1",
+            },
+        ],
+    },
+]);
+
+const activePlanIndex = ref(0);
+const planList = ref([{ name: "方案1" }, { name: "方案2" }]);
+const handlePlanClick = (index) => {
+    activePlanIndex.value = index;
+};
+
+function deletePlan() {
+    ElMessageBox.confirm("是否确认删除该农事?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+    })
+        .then(() => {
+            // ElMessage({
+            //     type: "success",
+            //     message: "删除成功!",
+            // });
+        })
+        .catch(() => {});
+}
+const handleClick = (e) => {
+    e.preventDefault();
+};
+const addGroupRef = ref(null);
+// 新增方案
+function newPlan() {
+    addGroupRef.value.openClientPopup();
+}
+
+const containerRef = ref(null);
+</script>
+
+<style lang="scss" scoped>
+.prescription-page {
+    height: 100%;
+    background: #F5F7FB;
+    position: relative;
+    .filter-wrap {
+        padding: 10px 0;
+        width: 100%;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .plan-box {
+            display: flex;
+            overflow: auto;
+            white-space: nowrap;
+            align-items: center;
+            padding-left: 12px;
+            .plan-item {
+                color: #000000;
+                background: #f1f1f1;
+                padding: 0 12px;
+                height: 32px;
+                line-height: 32px;
+                border-radius: 20px;
+                &.active {
+                    background: rgba(33, 153, 248, 0.2);
+                    color: #2199f8;
+                }
+            }
+            .plan-item + .plan-item {
+                margin-left: 10px;
+            }
+        }
+        .plan-add {
+            width: 80px;
+            height: 30px;
+            border: 1px solid #2199f8;
+            border-radius: 20px;
+            flex: none;
+            line-height: 32px;
+            text-align: center;
+            margin: 0 12px;
+            color: #2199f8;
+            font-size: 14px;
+        }
+    }
+
+    .expert-prescription {
+        display: flex;
+        width: 100%;
+        height: calc(100vh - 52px - 48px);
+        &.isSubPage {
+            height: calc(100vh - 52px - 48px - 50px);
+        }
+        .plan-menu {
+            width: 100px;
+            height: 100%;
+            overflow: auto;
+            padding: 10px 0;
+            box-sizing: border-box;
+            background: #fff;
+            border-radius: 0 10px 10px 0;
+            .menu-icon {
+                width: 13px;
+            }
+            .menu-text {
+                padding: 0 4px;
+            }
+            ::v-deep {
+                .el-anchor {
+                    height: 100%;
+                    background: none;
+                }
+                .el-anchor__marker {
+                    display: none;
+                }
+                .el-menu {
+                    background: none;
+                    border: none;
+                    .el-sub-menu__title {
+                        background: none;
+                        padding: 0 2px;
+                        justify-content: center;
+                    }
+                    .el-sub-menu__title {
+                        height: 32px;
+                    }
+                    .el-sub-menu .el-sub-menu__icon-arrow {
+                        position: static;
+                        padding-top: 6px;
+                    }
+                    .el-sub-menu {
+                        margin-bottom: 16px;
+                        &.is-opened {
+                            .el-sub-menu__icon-arrow {
+                                padding-bottom: 6px;
+                                padding-top: 0;
+                            }
+                        }
+                        .el-menu-item {
+                            height: 32px;
+                            line-height: 32px;
+                            margin: 4px 8px;
+                            padding: 0 2px;
+                            justify-content: center;
+                            background: none;
+                        }
+                        .el-menu-item.is-active {
+                            background: none;
+                            color: #fff;
+                        }
+                        .el-anchor__item {
+                            width: 100%;
+                            text-align: center;
+                        }
+                        .el-anchor__link {
+                            color: #666666;
+                        }
+                        .el-anchor__link.is-active {
+                            background: linear-gradient(180deg, #70bffe, #2199f8);
+                            border-radius: 20px;
+                            color: #fff;
+                        }
+                    }
+                }
+                .el-anchor__list {
+                    padding-left: 0;
+                }
+            }
+        }
+        .expert-content {
+            width: calc(100% - 100px);
+            height: 100%;
+            overflow: auto;
+            padding-bottom: 80px;
+            box-sizing: border-box;
+            .content-section {
+                position: relative;
+                .section-id {
+                    position: absolute;
+                    // top: -6px;
+                    top: 0;
+                    width: 100%;
+                    height: 1px;
+                }
+            }
+            .box-title {
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                padding-bottom: 8px;
+                border-bottom: 1px solid #f5f5f5;
+                margin-bottom: 8px;
+                .title-l {
+                    font-size: 16px;
+                    font-weight: 600;
+                    color: #000;
+                    .parent-text {
+                        margin-left: 5px;
+                        font-size: 12px;
+                        font-weight: normal;
+                        padding: 4px 6px;
+                        border-radius: 14px;
+                        background: rgba(119, 119, 119, 0.1);
+                    }
+                }
+                .title-btn {
+                    width: 24px;
+                    height: 24px;
+                    border-radius: 50%;
+                    background: #2199f8;
+                    display: flex;
+                    align-items: center;
+                    justify-content: center;
+                }
+
+                .title-r {
+                    display: flex;
+                    align-items: center;
+                    .btn-item {
+                        width: 24px;
+                        height: 24px;
+                        border-radius: 50%;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        background: #2199f8;
+                        &.del-btn {
+                            margin-right: 5px;
+                            background: #ff953d;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    
+    .fixed-bottom {
+        position: absolute;
+        bottom: 12px;
+        left: 12px;
+        width: calc(100% - 24px);
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        padding: 14px 12px;
+        background: linear-gradient(180deg, #f0f8ff 6px, #FFFFFF 20px);
+        border-radius: 14px;
+        box-sizing: border-box;
+        box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.1);
+        .bottom-l {
+            display: flex;
+            align-items: center;
+            .l-btn {
+                border: 1px solid rgba(153, 153, 153, 0.5);
+                border-radius: 30px;
+                padding: 0 8px 0 12px;
+                height: 32px;
+                line-height: 32px;
+                box-sizing: border-box;
+                display: flex;
+                align-items: center;
+                justify-content: center;
+                color: #666666;
+                .btn-icon {
+                    padding-right: 3px;
+                }
+                .calculator-icon {
+                    width: 12px;
+                }
+            }
+            .l-btn + .l-btn {
+                margin-left: 10px;
+            }
+        }
+        .bottom-r {
+            height: 32px;
+            line-height: 32px;
+            background: #2199F8;
+            border-radius: 20px;
+            color: #fff;
+            padding: 0 12px;
+        }
+    }
+}
+</style>

+ 15 - 87
src/views/old_mini/plan/index.vue

@@ -101,69 +101,12 @@
             </div>
         </div>
         <div class="plan-content my-recipe" v-if="activeTab === 'right'">
-            <div class="filter-wrap">
-                <div class="plan-box">
-                    <div
-                        class="plan-item"
-                        v-for="(item, index) in planList"
-                        :key="index"
-                        @click="handlePlanClick(index)"
-                        :class="{ active: activePlanIndex === index }"
-                        >
-                        {{ item.name }}
-                    </div>
-                </div>
-                <div class="plan-add" @click="newPlan">新增方案</div>
-            </div>
-            <div class="expert-prescription">
-                <div class="plan-menu">
-                    <el-anchor :container="containerRef" direction="vertical" type="default" @click="handleClick">
-                        <el-menu :default-active="defaultActive" class="el-menu-vertical-demo">
-                            <el-sub-menu v-for="(menu, index) in menuData" :key="index" :index="String(menu.id)">
-                                <template #title>
-                                    <img class="menu-icon" :src="require(`@/assets/img/gallery/icon-${index}.png`)" />
-                                    <span class="menu-text">{{ menu.title }}</span>
-                                </template>
-                                <el-menu-item
-                                    v-for="item in menu.children"
-                                    :key="item.id"
-                                    :index="`${menu.id}-${item.id}`"
-                                >
-                                    <el-anchor-link :href="item.href" :title="item.title" />
-                                </el-menu-item>
-                            </el-sub-menu>
-                        </el-menu>
-                    </el-anchor>
-                </div>
-                <div class="expert-content" ref="containerRef">
-                    <div v-for="(section, index) in contentData" :key="index" class="content-section">
-                        <div class="section-id" :id="section.targetId"></div>
-                        <record-item :record-item-data="section">
-                            <template #title>
-                                <div class="box-title">
-                                    <div class="title-l">
-                                        {{ section.title }}
-                                        <span class="parent-text">{{ section.parentTitle || "秋梢期" }}</span>
-                                    </div>
-                                    <div class="title-r">
-                                        <div class="btn-item del-btn" @click="deletePlan">
-                                            <el-icon color="#fff" size="14"><Delete /></el-icon>
-                                        </div>
-                                        <div class="btn-item edit-btn">
-                                            <el-icon color="#fff" size="14"><Edit /></el-icon>
-                                        </div>
-                                    </div>
-                                </div>
-                            </template>
-                        </record-item>
-                    </div>
-                </div>
-            </div>
+            <my-prescription :isSubPage="true"></my-prescription>
             <!-- 底部 -->
             <div class="fixed-bottom">
                 <div class="bottom-l">
                     <div class="l-btn">
-                        <img class="btn-icon calculator-icon" src="@/assets/img/home/calculator.png" alt="">
+                        <img class="btn-icon calculator-icon" src="@/assets/img/home/calculator.png" alt="" />
                         投入产出计算器
                     </div>
                 </div>
@@ -178,8 +121,8 @@
 import { computed, ref } from "vue";
 import recordItem from "@/components/recordItem.vue";
 import addGroup from "./components/addGroup.vue";
+import myPrescription from "./components/myPrescription.vue";
 import { useStore } from "vuex";
-import { ElMessage, ElMessageBox } from "element-plus";
 const store = useStore();
 
 const tabBarHeight = computed(() => store.state.home.tabBarHeight);
@@ -1302,37 +1245,21 @@ const contentData = ref([
     },
 ]);
 
-const planList = ref([{name: "方案1",}, {name: "方案2"}]);
+const planList = ref([{ name: "方案1" }, { name: "方案2" }]);
 const activePlanIndex = ref(0);
 const handlePlanClick = (index) => {
     activePlanIndex.value = index;
 };
 
-
 const addGroupRef = ref(null);
 // 新增方案
 function newPlan() {
-    addGroupRef.value.openClientPopup()
+    addGroupRef.value.openClientPopup();
 }
 
 // 将专家处方添加到我的处方
 function addToMyPlan() {
-    addGroupRef.value.openClientPopup("edit")
-}
-
-function deletePlan() {
-    ElMessageBox.confirm("是否确认删除该农事?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-    })
-        .then(() => {
-            // ElMessage({
-            //     type: "success",
-            //     message: "删除成功!",
-            // });
-        })
-        .catch(() => {});
+    addGroupRef.value.openClientPopup("edit");
 }
 </script>
 
@@ -1471,7 +1398,7 @@ function deletePlan() {
         align-items: center;
         justify-content: space-between;
         padding: 14px 12px;
-        background: linear-gradient(180deg, #f0f8ff 6px, #FFFFFF 20px);
+        background: linear-gradient(180deg, #f0f8ff 6px, #ffffff 20px);
         border-radius: 14px;
         box-sizing: border-box;
         box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.1);
@@ -1503,7 +1430,7 @@ function deletePlan() {
         .bottom-r {
             height: 32px;
             line-height: 32px;
-            background: #2199F8;
+            background: #2199f8;
             border-radius: 20px;
             color: #fff;
             padding: 0 12px;
@@ -1516,6 +1443,7 @@ function deletePlan() {
         .plan-menu {
             width: 100px;
             height: 100%;
+            overflow: auto;
             padding: 10px 0;
             box-sizing: border-box;
             background: #fff;
@@ -1647,14 +1575,14 @@ function deletePlan() {
                 padding-left: 12px;
                 .plan-item {
                     color: #000000;
-                    background: #F1F1F1;
+                    background: #f1f1f1;
                     padding: 0 12px;
                     height: 32px;
                     line-height: 32px;
                     border-radius: 20px;
                     &.active {
                         background: rgba(33, 153, 248, 0.2);
-                        color: #2199F8;
+                        color: #2199f8;
                     }
                 }
                 .plan-item + .plan-item {
@@ -1664,13 +1592,13 @@ function deletePlan() {
             .plan-add {
                 width: 80px;
                 height: 30px;
-                border: 1px solid #2199F8;
+                border: 1px solid #2199f8;
                 border-radius: 20px;
                 flex: none;
                 line-height: 32px;
                 text-align: center;
                 margin: 0 12px;
-                color: #2199F8;
+                color: #2199f8;
                 font-size: 14px;
             }
         }
@@ -1684,10 +1612,10 @@ function deletePlan() {
                 display: flex;
                 align-items: center;
                 justify-content: center;
-                background: #2199F8;
+                background: #2199f8;
                 &.del-btn {
                     margin-right: 5px;
-                    background: #FF953D;
+                    background: #ff953d;
                 }
             }
         }

+ 298 - 0
src/views/old_mini/task_condition/components/calendar.vue

@@ -0,0 +1,298 @@
+<template>
+    <div class="calendar">
+        <div class="header-wrap">
+            <div class="header-l">
+                <el-icon class="icon" color="#999999" size="11" @click="prevPeriod"><ArrowLeftBold /></el-icon>
+                <span class="header-text"
+                    >{{ dateRange.start }} <span class="center-line">-</span> {{ dateRange.end }}</span
+                >
+                <el-icon class="icon" color="#999999" size="11" @click="nextPeriod"><ArrowRightBold /></el-icon>
+            </div>
+            <!-- <div class="header-r">
+                <span class="line"></span>
+                高温预警
+            </div> -->
+        </div>
+        <div class="days">
+            <div
+                class="days-item"
+                v-for="(day, index) in calendarDays"
+                :key="index"
+                :class="[{ activeDay: activeDay === day.date, today: day.isToday && !day.solarTerm }]"
+                @click="selectDate(day.date, day)"
+            >
+                <div class="day-box">
+                    <span class="days-week">{{ day.isToday ? "今天" : `周${day.dayOfWeek}` }}</span>
+                    <span class="days-one">{{ day.day }}</span>
+                </div>
+                <div v-if="day.solarTerm" class="solar-term">{{ day.solarTerm }}</div>
+                <div v-if="day.typeName" class="type-num">{{ day.typeName.farmWorkName.length }}</div>
+                <!-- <div v-if="day.isHeatWarning" class="heat-warning"></div>
+                <div v-if="day.typeName" class="type-name">
+                    <div class="type-text">{{ day.typeName.farmWorkName }}</div>
+                </div> -->
+            </div>
+        </div>
+    </div>
+</template>
+
+<script setup>
+import { ref, computed, onDeactivated, onMounted } from "vue";
+// const props = defineProps({
+//     calendarWorkList: {
+//         type: Array,
+//         required: true,
+//     },
+// });
+
+const today = new Date();
+// const startDate = ref(getAlignedStartDate(today));
+const startDate = ref(new Date(today));
+// 定义星期几的名称
+const weekdays = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"];
+const weekdaysShort = ["一", "二", "三", "四", "五", "六", "日"];
+
+const days = computed(() => {
+    return Array.from({ length: 7 }, (_, i) => {
+        const date = new Date(startDate.value);
+        date.setDate(startDate.value.getDate() + i);
+        return date;
+    });
+});
+
+const calendarDays = computed(() => {
+    const daysList = [];
+    for (let i = 0; i < days.value.length; i++) {
+        const date = days.value[i];
+        const dayOfWeek = date.getDay(); // 0是周日,1是周一,...,6是周六
+        // 调整显示:周一显示为"一",周二显示为"二",...,周日显示为"日"
+        const displayDayOfWeek = dayOfWeek === 0 ? "日" : weekdaysShort[dayOfWeek - 1];
+
+        daysList.push({
+            day: date.getDate(),
+            date: formatDate(date),
+            isToday: formatDate(date) === formatDate(today),
+            dayOfWeek: displayDayOfWeek,
+            // 模拟数据 - 在实际应用中可以从props中获取
+            solarTerm: i === 3 ? "白露" : null,
+            isHeatWarning: i === 5,
+            typeName:
+                i === 2
+                    ? { farmWorkType: 2, farmWorkName: "播种" }
+                    : i === 4
+                    ? { farmWorkType: 1, farmWorkName: "施肥" }
+                    : i === 6
+                    ? { farmWorkType: 3, farmWorkName: "收割" }
+                    : null,
+        });
+    }
+    return daysList;
+});
+
+const dateRange = computed(() => {
+    let start = calendarDays.value[0].date;
+    start = start.replace(/-/g, ".");
+    let end = calendarDays.value[6].date;
+    end = end.replace(/^\d{4}-(\d{2})-(\d{2})$/, "$1.$2");
+    return { start, end };
+});
+
+function getAlignedStartDate(referenceDate) {
+    const start = new Date(referenceDate);
+    const dayOfWeek = start.getDay();
+    start.setDate(start.getDate() - dayOfWeek + (dayOfWeek === 0 ? -13 : 1)); // 对齐至周一,确保21天周期合理
+    return start;
+}
+
+function formatDate(date) {
+    // String(currentMonth.value).padStart(2, "0")
+    return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}-${String(date.getDate()).padStart(
+        2,
+        "0"
+    )}`;
+}
+
+function prevPeriod() {
+    startDate.value.setDate(startDate.value.getDate() - 7);
+    startDate.value = new Date(startDate.value);
+}
+
+function nextPeriod() {
+    startDate.value.setDate(startDate.value.getDate() + 7);
+    startDate.value = new Date(startDate.value);
+}
+
+const activeDay = ref(null);
+const selectDate = (date, day) => {
+    activeDay.value = date;
+    selectedDate.value = `${date} (${day.dayOfWeek})`;
+};
+
+// 初始化时选择今天
+onMounted(() => {
+    selectDate(formatDate(today), {
+        day: today.getDate(),
+        dayOfWeek: weekdaysShort[today.getDay() === 0 ? 6 : today.getDay() - 1],
+    });
+});
+
+function closeDialog() {
+    activeDay.value = null;
+}
+const selectedDate = ref(null);
+</script>
+
+<style lang="scss" scoped>
+.calendar {
+    width: 100%;
+    text-align: center;
+    box-sizing: border-box;
+    .header-wrap {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin-bottom: 10px;
+        .header-l {
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            width: 100%;
+            .header-text {
+                color: #000;
+                font-size: 16px;
+                font-weight: bold;
+                .center-line {
+                    position: relative;
+                    top: -3px;
+                }
+            }
+            .icon {
+                width: 20px;
+                height: 20px;
+                background: #F2F3F5;
+                border-radius: 50%;
+                text-align: center;
+                line-height: 20px;
+                margin-left: 6px;
+            }
+        }
+        .header-r {
+            background: rgba(252, 138, 44, 0.12);
+            padding: 6px 10px;
+            border-radius: 28px;
+            color: #fc8a2c;
+            display: inline-flex;
+            align-items: center;
+            font-size: 10px;
+            .line {
+                width: 12px;
+                height: 1px;
+                margin-right: 5px;
+                background: #fc8a2c;
+            }
+        }
+    }
+}
+
+.weekdays {
+    display: grid;
+    grid-template-columns: repeat(7, 1fr);
+    font-size: 12px;
+}
+.days {
+    display: grid;
+    grid-template-columns: repeat(7, 1fr);
+    // gap: 5px;
+    font-size: 12px;
+    .days-item + .days-item {
+        margin-left: 6px;
+    }
+    .days-item {
+        cursor: pointer;
+        position: relative;
+        &.today {
+            .day-box {
+                color: #2199f8;
+            }
+        }
+
+        &.activeDay {
+            .day-box {
+                color: #fff;
+                background: linear-gradient(136deg, #9fd5ff, #2199f8);
+            }
+        }
+        .day-box {
+            background: #ffffff;
+            color: #000;
+            border-radius: 8px;
+            padding: 7px 0;
+            position: relative;
+            .days-week {
+                font-size: 12px;
+            }
+        }
+        .solar-term {
+            padding-top: 3px;
+            color: #8D8D8D;
+            font-size: 12px;
+        }
+        .type-num {
+            position: absolute;
+            top: -5px;
+            right: -5px;
+            color: #fff;
+            font-size: 10px;
+            background: #2199F8;
+            width: 12px;
+            height: 12px;
+            border-radius: 50%;
+        }
+        .days-one {
+            text-align: center;
+            display: block;
+            margin: 0 auto;
+            font-size: 14px;
+            line-height: 16px;
+            font-weight: bold;
+            padding-top: 2px;
+            // width: 32px;
+            // height: 32px;
+            // line-height: 32px;
+            // border-radius: 50%;
+        }
+        .type-name {
+            font-size: 10px;
+            position: relative;
+            top: -4px;
+            border-radius: 12px;
+            position: relative;
+            background: #fff;
+            padding-top: 2px;
+            .type-text {
+                border-radius: 12px;
+                padding: 2px;
+            }
+        }
+    }
+}
+.today {
+    position: relative;
+    &::after {
+        content: "";
+        position: absolute;
+        left: 0;
+        right: 0;
+        bottom: 0;
+        margin: 0 auto;
+        width: 10px;
+        height: 10px;
+        background: url("@/assets/img/home/today.png") no-repeat center center / 100% 100%;
+    }
+    &.no-type {
+        &::after {
+            bottom: 14px;
+        }
+    }
+}
+</style>

+ 5 - 3
src/views/old_mini/task_condition/components/task.vue

@@ -2,7 +2,9 @@
     <div class="task-page" :style="{ height: `calc(100vh - ${tabBarHeight}px - 50px)` }">
         <div class="task-top">
             <div class="map-container" ref="mapContainer"></div>
-            <div class="calendar-wrap">calendar</div>
+            <div class="calendar-wrap">
+                <calendar></calendar>
+            </div>
         </div>
         <div class="task-list">
             <div class="list-filter">
@@ -60,6 +62,7 @@ import { computed, nextTick, onMounted, ref } from "vue";
 import { useStore } from "vuex";
 import IndexMap from "../../farm_manage/map/index";
 import taskItem from "@/components/taskItem.vue";
+import calendar from "./calendar.vue"
 
 const store = useStore();
 const indexMap = new IndexMap();
@@ -142,8 +145,7 @@ function handleActiveFilter(i) {
     }
 
     .calendar-wrap {
-        padding: 10px 0;
-        height: 130px;
+        padding: 10px 0 4px 0;
     }
 
     .task-top {