Quellcode durchsuchen

feat:修改新增用户流程

wangsisi vor 2 Tagen
Ursprung
Commit
fe8194897c

+ 0 - 84
src/router/globalRoutes.js

@@ -29,19 +29,6 @@ export default [
         name: "FarmDetails",
         component: () => import("@/views/old_mini/farmDetails/index.vue"),
     },
-    //个人中心
-    {
-        path: "/mine",
-        name: "Mine",
-        meta: { showTabbar: true, keepAlive: true },
-        component: () => import("@/views/old_mini/mine/index.vue"),
-    },
-    // 我的消息
-    {
-        path: "/message",
-        name: "Message",
-        component: () => import("@/views/old_mini/mine/pages/message.vue"),
-    },
     // 创建农场
     {
         path: "/create_farm",
@@ -56,13 +43,6 @@ export default [
         meta: { showTabbar: true, keepAlive: true },
         component: () => import("@/views/old_mini/agri_record/index.vue"),
     },
-    // 认证身份
-    {
-        path: "/authentication",
-        name: "Authentication",
-        component: () => import("@/views/old_mini/mine/pages/authentication.vue"),
-        meta: { keepAlive: true },
-    },
     // 编辑地图
     {
         path: "/edit_map",
@@ -76,18 +56,6 @@ export default [
         name: "FarmPhoto",
         component: () => import("@/views/old_mini/home/patrolPhoto.vue"),
     },
-    // 我的农场
-    {
-        path: "/my_farm",
-        name: "MyFarm",
-        component: () => import("@/views/old_mini/mine/pages/farm.vue"),
-    },
-    // 消息列表
-    {
-        path: "/message_list",
-        name: "MessageList",
-        component: () => import("@/views/old_mini/mine/pages/messageList.vue"),
-    },
     // 识别结果
     {
         path: "/recognize",
@@ -128,31 +96,6 @@ export default [
         meta: { keepAlive: true },
         component: () => import("@/views/old_mini/modify_work/detailWork.vue"),
     },
-    // 团队管理
-    {
-        path: "/team_manage",
-        name: "TeamManage",
-        component: () => import("@/views/old_mini/mine/pages/teamManage.vue"),
-    },
-    // 农事记录
-    {
-        path: "/farm_records",
-        name: "FarmRecords",
-        component: () => import("@/views/old_mini/mine/pages/farmRecords.vue"),
-    },
-    // 用户管理
-    {
-        path: "/user",
-        name: "User",
-        meta: { showTabbar: true, keepAlive: true },
-        component: () => import("@/views/old_mini/user/index.vue"),
-    },
-    // 用户管理详情
-    {
-        path: "/user_manage",
-        name: "UserManage",
-        component: () => import("@/views/old_mini/user/manage.vue"),
-    },
     // 农资农服
     {
         path: "/agri_services",
@@ -252,21 +195,6 @@ export default [
         meta: { keepAlive: true },
         component: () => import("@/views/old_mini/home/subPages/expertDetail.vue"),
     },
-    //注册页面
-    {
-        path: "/register",
-        name: "Register",
-        meta: {
-            keepAlive: true,
-        },
-        component: () => import("@/views/old_mini/mine/pages/register.vue"),
-    },
-    //个人信息填写页面
-    {
-        path: "/user_info",
-        name: "UserInfo",
-        component: () => import("@/views/old_mini/mine/pages/userInfo.vue"),
-    },
     // 农事方案
     {
         path: "/agricultural_plan",
@@ -293,18 +221,6 @@ export default [
         meta: { keepAlive: true },
         component: () => import("@/views/old_mini/album_recognize/index.vue"),
     },
-    // 服务记录
-    {
-        path: "/service_records",
-        name: "ServiceRecords",
-        component: () => import("@/views/old_mini/mine/pages/serviceRecords.vue"),
-    },
-    // 服务详情
-    {
-        path: "/service_detail",
-        name: "ServiceDetail",
-        component: () => import("@/views/old_mini/mine/pages/serviceDetail.vue"),
-    },
     // 编辑农事方案
     {
         path: "/edit_plan",

+ 52 - 124
src/views/old_mini/create_farm/index.vue

@@ -40,15 +40,20 @@
                                     </el-form-item>
                                     <el-form-item label="种植作物" prop="speciesItem">
                                         <div class="select-wrap specie-wrap">
-                                            <el-select @change="changeSpecie" class="select-item specie-select"
-                                                v-model="ruleForm.speciesItem" placeholder="品类">
-                                                <el-option v-for="(item, index) in specieList" :key="index"
-                                                    :label="item.name" :value="{ value: item.id, ...item }" />
-                                            </el-select>
-                                            <el-select v-model="ruleForm.typeIds" multiple collapse-tags
-                                                placeholder="品种(可多选)" class="period-select select-item period-select">
-                                                <el-option v-for="(item, index) in fruitsList" :key="index"
-                                                    :label="item.name" :value="item.id" />
+                                            <el-select
+                                                v-model="ruleForm.speciesItem"
+                                                class="select-item specie-select"
+                                                multiple
+                                                collapse-tags
+                                                placeholder="品类(可多选)"
+                                                @change="changeSpecie"
+                                            >
+                                                <el-option
+                                                    v-for="(item, index) in specieList"
+                                                    :key="index"
+                                                    :label="item.name"
+                                                    :value="{ value: item.id, ...item }"
+                                                />
                                             </el-select>
                                         </div>
                                     </el-form-item>
@@ -73,33 +78,17 @@
                                             <div class="unit">亩</div>
                                         </div>
                                     </el-form-item>
-                                    <el-form-item v-if="paramsType !== 'farmer'" label="客户类型" prop="userType"
-                                        class="select-wrap client-wrap">
-                                        <el-select class="select-item" v-model="ruleForm.userType" placeholder="请选择">
-                                            <el-option label="普通用户" :value="1" />
-                                            <el-option label="托管用户" :value="2" />
-                                            <el-option label="优质客户" :value="3" />
-                                        </el-select>
-                                    </el-form-item>
                                     <el-form-item label="农场名称" prop="name">
                                         <el-input placeholder="请输入您的农场名称" v-model="ruleForm.name" autocomplete="off"
                                             @input="handleFarmNameInput" />
                                     </el-form-item>
-                                    <el-form-item v-if="paramsType === 'farmer'" label="基地类别" prop="baseType"
+                                    <el-form-item label="基地类别" prop="baseType"
                                         class="select-wrap client-wrap">
                                         <el-select placeholder="请选择" v-model="ruleForm.baseType" autocomplete="off">
                                             <el-option v-for="(item, index) in baseTypeList" :key="index"
                                                 :label="item.name" :value="item.id" />
                                         </el-select>
                                     </el-form-item>
-                                    <!-- <Checkbox
-                                        v-if="paramsType !== 'client' && curRole == 0"
-                                        class="checkbox"
-                                        icon-size="18px"
-                                        shape="square"
-                                        v-model="ruleForm.defaultFarm"
-                                        >是否勾选为默认农场</Checkbox
-                                    > -->
                                 </el-form>
                             </div>
                             <div class="create-btn">
@@ -130,7 +119,7 @@ import customHeader from "@/components/customHeader.vue";
 import IndexMap from "./map/index.js";
 import { useRoute, useRouter } from "vue-router";
 import { mapLocation } from "./map/index.js";
-import { onMounted, ref, reactive, watch, onActivated, nextTick,onDeactivated } from "vue";
+import { onMounted, ref, reactive, watch, onActivated, nextTick, onDeactivated } from "vue";
 import { useStore } from "vuex";
 import { convertPointToArray } from "@/utils/index";
 import { ElMessage } from "element-plus";
@@ -259,7 +248,6 @@ onMounted(() => {
     // 清空地块和面积数据
     polygonArr.value = null;
     ruleForm.mu = "";
-    ruleForm.typeIds = [];
 
     // 如果是编辑模式,等待品类列表加载完成后再回填数据
     if (route.query.type === "edit" && store.state.home.editFarmData) {
@@ -338,7 +326,6 @@ function handleMapUpdate() {
         // 不再自动生成默认地块,等待用户点击"新增地块"
         polygonArr.value = null;
         ruleForm.mu = "";
-        ruleForm.typeIds = [];
         ruleForm.defaultFarm = 0;
 
         return; // 直接返回,不执行下面的逻辑
@@ -454,12 +441,11 @@ const ruleFormRef = ref(null);
 const ruleForm = reactive({
     address: "",
     mu: "",
-    speciesItem: null,
-    typeIds: [],
+    // 多选品类:数组
+    speciesItem: [],
     name: "",
     fzr: "",
     tel: "",
-    userType: 1,
     baseType: null,
     defaultFarm: 0, // 0:否 1:是
 });
@@ -481,13 +467,11 @@ const validateMianji = (rule, value, callback) => {
 
 const rules = reactive({
     address: [{ required: true, message: "请选择农场位置", trigger: "blur" }],
-    userType: [{ required: true, message: "请选择客户类型", trigger: "blur" }],
     mu: [
         { required: true, message: "请输入农场面积", trigger: "blur" },
         { validator: validateMianji, trigger: ["blur", "change"] },
     ],
     speciesItem: [{ required: true, message: "请选择品类", trigger: "blur" }],
-    typeIds: [{ required: true, message: "请选择品种", trigger: "blur" }],
     name: [{ required: true, message: "请输入您的农场名称", trigger: ["blur", "change"] }],
     fzr: [{ required: true, message: "请输入联系人姓名", trigger: ["blur", "change"] }],
     tel: [
@@ -508,11 +492,14 @@ const submitForm = (formEl) => {
     if (!formEl) return;
     formEl.validate((valid) => {
         if (valid) {
+            const mainSpecies = Array.isArray(ruleForm.speciesItem)
+                ? ruleForm.speciesItem[0]
+                : ruleForm.speciesItem;
             const params = {
                 ...ruleForm,
                 wkt: centerPoint.value,
-                speciesId: ruleForm.speciesItem?.id,
-                containerId: ruleForm.speciesItem?.defaultContainerId,
+                speciesId: mainSpecies?.id,
+                containerId: mainSpecies?.defaultContainerId,
                 agriculturalCreate: route.query.type === "client" ? 1 : 0,
                 // 编辑时geom不是数组,新增时是数组
                 geom:
@@ -528,7 +515,7 @@ const submitForm = (formEl) => {
                 params.farmId = route.query.farmId;
             }
 
-            if (route.query.type === "client" || route.query.type === "farmer") {
+            if (route.query.type === "add" || route.query.type === "farmer") {
                 // 处理 geom 参数,如果是数组需要序列化
                 const queryParams = {
                     ...params,
@@ -540,18 +527,7 @@ const submitForm = (formEl) => {
                     queryParams.geom = JSON.stringify(queryParams.geom);
                 }
                 delete queryParams.speciesItem;
-                queryParams.speciesName = ruleForm.speciesItem?.name;
-                // 根据 typeIds 获取对应的名字
-                if (ruleForm.typeIds && ruleForm.typeIds.length > 0 && fruitsList.value.length > 0) {
-                    queryParams.typeNames = JSON.stringify(ruleForm.typeIds
-                        .map(id => {
-                            const typeItem = fruitsList.value.find(item => item.id === id);
-                            return typeItem ? typeItem.name : null;
-                        })
-                        .filter(name => name !== null));
-                }
-                console.log('queryParams', queryParams.typeNames)
-
+                queryParams.speciesName = mainSpecies?.name;
                 router.push({
                     path: "/prescription",
                     query: queryParams,
@@ -559,17 +535,6 @@ const submitForm = (formEl) => {
                 return;
             }
 
-            // if(route.query.type === "farmer") {
-            //     VE_API.farm.saveFarm({...params, expertMiniUserId: route.query.expertMiniUserId}).then((res) => {
-            //         if (res.code === 0) {
-            //             router.go(-1);
-            //         } else {
-            //             ElMessage.error(res.msg || '创建失败');
-            //         }
-            //     });
-            //     return;
-            // }
-
             const apiCall = route.query.type === "edit" ? VE_API.farm.updateFarm(params) : VE_API.farm.saveFarm(params);
 
             apiCall.then((res) => {
@@ -721,9 +686,11 @@ function getSpecieList() {
         const litchiList = list.filter((item) => item?.name && item.name.includes("荔枝"));
         specieList.value = litchiList;
         // 非编辑模式且当前未选择品类时,默认选中第一项
-        if (route.query.type !== "edit" && !ruleForm.speciesItem && litchiList.length > 0) {
+        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] };
-            ruleForm.speciesItem = first;
+            ruleForm.speciesItem = [first];
             // 同步触发品类变更逻辑(加载品种、自动生成农场名等)
             changeSpecie(first);
         }
@@ -740,36 +707,13 @@ function getBaseTypeList() {
 }
 
 async function changeSpecie(v) {
-    // const data = await checkExistsEnabledScheme(v.defaultContainerId);
-    // if (!data) {
-    //     ElMessage.warning("该品类暂无可用方案,请选择其他品类");
-    //     ruleForm.speciesItem = "";
-    //     ruleForm.typeIds = [];
-    //     fruitsList.value = [];
-    //     return;
-    // }
-    getFruitsTypeItemList(v.id);
-    // 清空品种选择
-    ruleForm.typeIds = [];
+    const current = Array.isArray(v) ? v[v.length - 1] : v;
     // 只有在创建模式下且用户没有手动修改过农场名称时,才自动设置农场名称
-    if (route.query.type !== "edit" && !isFarmNameManuallyModified.value && farmCity.value) {
-        ruleForm.name = farmCity.value + v.name + "农场";
+    if (route.query.type !== "edit" && !isFarmNameManuallyModified.value && farmCity.value && current) {
+        ruleForm.name = farmCity.value + current.name + "农场";
     }
 }
 
-//判断是否存在可用方案
-async function checkExistsEnabledScheme(containerId) {
-    const { data } = await VE_API.home.existsEnabledScheme({ containerId });
-    return data;
-}
-
-const fruitsList = ref([]);
-function getFruitsTypeItemList(parentId) {
-    VE_API.farm.fruitsTypeItemList({ parentId }).then(({ data }) => {
-        fruitsList.value = data;
-    });
-}
-
 /**
  * 格式化日期为 YYYY-MM-DD 格式
  * @param {Date} date - 日期对象
@@ -803,7 +747,7 @@ function backgToHome() {
             });
         }
         const paramsPage = JSON.parse(json.paramsPage);
-        if(paramsPage.isFarmer){
+        if (paramsPage.isFarmer) {
             router.replace('/home');
             return;
         }
@@ -861,8 +805,11 @@ function handleFarmNameInput() {
 // 根据地址更新农场名称(如果满足条件)
 function updateFarmNameIfNeeded() {
     // 只有在创建模式下且用户没有手动修改过农场名称且已选择品类时,才自动更新农场名称
-    if (route.query.type !== "edit" && !isFarmNameManuallyModified.value && ruleForm.speciesItem && farmCity.value) {
-        ruleForm.name = farmCity.value + ruleForm.speciesItem.name + "农场";
+    const mainSpecies = Array.isArray(ruleForm.speciesItem)
+        ? ruleForm.speciesItem[0]
+        : ruleForm.speciesItem;
+    if (route.query.type !== "edit" && !isFarmNameManuallyModified.value && mainSpecies && farmCity.value) {
+        ruleForm.name = farmCity.value + mainSpecies.name + "农场";
     }
 }
 
@@ -899,21 +846,14 @@ function populateEditData() {
 
     // 处理作物数据
     if (editData.speciesId && editData.speciesName) {
-        // 设置品类 - 需要匹配模板中的数据结构
-        ruleForm.speciesItem = {
+        // 设置品类 - 需要匹配模板中的数据结构(多选:用数组包一层)
+        const species = {
             value: editData.speciesId,
             id: editData.speciesId,
             name: editData.speciesName,
             defaultContainerId: editData.containerId,
         };
-
-        // 获取品种列表
-        getFruitsTypeItemList(editData.speciesId);
-
-        // 设置品种
-        if (editData.typeIds) {
-            ruleForm.typeIds = editData.typeIds;
-        }
+        ruleForm.speciesItem = [species];
     }
 
     // 设置地址信息
@@ -1155,24 +1095,19 @@ function handleMianjiInput(value) {
             z-index: 2;
 
             .create-from {
-                
+
                 .select-wrap {
                     display: flex;
-                    &.specie-wrap {
-                        flex: 1;
-                        gap: 12px;
-                        .specie-select {
-                            min-width: 56px;
-                            width: 56px;
-                        }
-                        .period-select {
-                            ::v-deep {
-                                .el-select__selection {
-                                    flex: 1;
-                                }
-                            }
-                        }
-                    }
+
+                    // &.specie-wrap {
+                    //     flex: 1;
+                    //     gap: 12px;
+
+                    //     .specie-select {
+                    //         min-width: 56px;
+                    //         width: 56px;
+                    //     }
+                    // }
 
                     // width: 86%;
                     ::v-deep {
@@ -1215,13 +1150,6 @@ function handleMianjiInput(value) {
                         }
                     }
 
-                    // .select-item {
-                    //     width: fit-content;
-                    // }
-                    .period-select {
-                        margin-left: 6px;
-                    }
-
                     .select-item {
                         min-width: 76px;
                     }

+ 0 - 272
src/views/old_mini/home/subPages/prescriptionPage copy.vue

@@ -1,272 +0,0 @@
-<template>
-    <div class="prescription-page">
-        <div class="prescription-title">
-            <img @click="goBack" src="@/assets/img/home/back.png" alt="" />
-            <div class="title-name">农事处方维护单</div>
-            <div class="title-desc">请认真核对一下内容</div>
-        </div>
-        <div class="prescription-box">
-            <div class="box-title">
-                <img src="@/assets/img/home/label-icon.png" />
-                农场情况
-            </div>
-            <div class="box-content">
-                <div class="box-item" v-for="(group, i) in productList" :key="i">
-                    <div class="item-name">
-                        <span class="required-icon">*</span>
-                        <span>{{ group.name }}</span>
-                    </div>
-                    <div class="item-checkbox">
-                        <el-radio-group v-model="group.checked">
-                            <el-radio-button
-                                v-for="(item, index) in group.items"
-                                :key="index"
-                                :label="item.name"
-                                :value="item.name"
-                            />
-                        </el-radio-group>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div class="prescription-box">
-            <div class="box-title">
-                <img src="@/assets/img/home/label-icon.png" />
-                过往出现过的灾害 (多选)
-            </div>
-            <div class="box-content">
-                <div class="box-item" style="padding-top: 0">
-                    <div class="item-checkbox">
-                        <el-checkbox-group v-model="outputVal">
-                            <el-checkbox-button v-for="(item, index) in outputList" :key="index" :value="item.name">
-                                {{ item.name }}
-                            </el-checkbox-button>
-                        </el-checkbox-group>
-                    </div>
-                </div>
-            </div>
-            <div class="disaster-desc-box">
-                <span>其它异常</span>
-                <el-input
-                    v-model="disasterDesc"
-                    :autosize="{ minRows: 2, maxRows: 4 }"
-                    type="textarea"
-                    placeholder="请简单描述一下异常情况"
-                />
-            </div>
-        </div>
-
-        <!-- 按钮 -->
-        <div class="custom-bottom-fixed-btns">
-            <div class="bottom-btn secondary-btn" @click="handlePage">跳过</div>
-            <div class="bottom-btn primary-btn" @click="handlePage">生成处方</div>
-        </div>
-    </div>
-</template>
-
-<script setup>
-import { ref, onActivated } from "vue";
-import { useRouter, useRoute } from "vue-router";
-const router = useRouter();
-const route = useRoute();
-const productList = ref([
-    { name: "请选择您的果园土壤类型", items: [{ name: "红壤" }, { name: "壤土" }, { name: "冲积土" }] },
-    { name: "请选择您的灌溉方式", items: [{ name: "滴灌" }, { name: "穴灌" }, { name: "微喷灌" }] },
-    { name: "是否需要改良土壤", items: [{ name: "需要" }, { name: "不需要" }] },
-]);
-const outputList = ref([
-    { name: "低温冻害" },
-    { name: "干旱" },
-    { name: "暴雨渍水" },
-    { name: "病虫害" },
-    { name: "阴天寡照" },
-]);
-// 默认选中前两项
-const outputVal = ref([]);
-const disasterDesc = ref("");
-// 初始化默认选中第一项
-onActivated(() => {
-    // outputVal.value = outputList.value.length >= 2
-    //     ? [outputList.value[0].name, outputList.value[1].name]
-    //     : outputList.value.length === 1
-    //     ? [outputList.value[0].name]
-    //     : []
-    if (route.query.speciesName === '籼稻') {
-        productList.value[0].items = [{ name: "黏质土" }, { name: "壤土" }, { name: "冲积土" }];
-        productList.value[1].items = [{ name: "漫灌" }, { name: "间歇灌溉" }, { name: "喷灌" }];
-    }
-    // 为 productList 的每个 group 设置默认选中第一项
-    productList.value.forEach((group) => {
-        if (group.items && group.items.length > 0 && !group.checked) {
-            group.checked = group.items[0].name;
-        }
-    });
-});
-
-const goBack = () => {
-    // router.go(-1);
-    router.replace(`/create_farm?from=${route.query.from}&type=${route.query.type}`)
-};
-
-const handlePage = () => {
-    // 获取所有需要传递的参数,包括 from 参数
-    const queryParams = {
-        containerId: route.query.containerId,
-    };
-    
-    // 如果存在 from 参数,继续传递
-    if (route.query.from) {
-        queryParams.from = route.query.from;
-    }
-    
-    // 传递所有农场相关的参数,以便在 agricultural_plan 页面创建农场
-    const farmParams = ['wkt', 'speciesId', 'containerId', 'agriculturalCreate', 'geom', 'address', 'mu', 'name', 'fzr', 'tel', 'defaultFarm', 'typeId', 'speciesName','userType'];
-    farmParams.forEach(key => {
-        if (route.query[key] !== undefined) {
-            queryParams[key] = route.query[key];
-        }
-    });
-    router.push({
-        path: '/agricultural_plan',
-        query: queryParams
-    });
-};
-</script>
-
-<style lang="scss" scoped>
-.prescription-page {
-    position: relative;
-    width: 100%;
-    height: calc(100vh - 62px);
-    overflow: auto;
-    box-sizing: border-box;
-    background: linear-gradient(to left, #e6f2ff, #8fc5fe);
-    .prescription-title {
-        padding: 16px 14px;
-        background: url("@/assets/img/home/page-bg.png") no-repeat bottom right / 149px 116px;
-        background-position-y: 30px;
-        img {
-            width: 24px;
-        }
-        .title-name {
-            font-size: 22px;
-            color: #2e2e2e;
-            text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);
-            font-weight: 800;
-            padding: 21px 0 4px 6px;
-        }
-        .title-desc {
-            font-size: 14px;
-            color: rgba(49, 49, 49, 0.56);
-            padding-left: 6px;
-        }
-    }
-    .prescription-box {
-        background: #ffffff;
-        box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1);
-        border-radius: 10px;
-        margin: 0 10px 10px;
-        box-sizing: border-box;
-        padding-bottom: 10px;
-        .box-title {
-            margin: 0 10px;
-            box-sizing: border-box;
-            border-bottom: 1px solid rgba(0, 0, 0, 0.15);
-            font-weight: 800;
-            font-size: 18px;
-            color: #222222;
-            padding: 15px 0 10px;
-            img {
-                width: 14px;
-                height: 9px;
-            }
-        }
-        .box-content {
-            padding: 0 10px;
-            .box-item {
-                padding-top: 10px;
-                .item-name {
-                    display: flex;
-                    align-items: center;
-                    font-size: 15px;
-                    color: rgba(0, 0, 0, 0.9);
-                    .required-icon {
-                        color: #ff0000;
-                        font-size: 16px;
-                        margin-right: 4px;
-                    }
-                }
-                .item-checkbox {
-                    ::v-deep {
-                        .el-radio-button,
-                        .el-checkbox-button {
-                            margin: 10px 7px 0 0;
-                            .el-radio-button__inner,
-                            .el-checkbox-button__inner {
-                                border: none;
-                                background: #f1f1f1;
-                                border-radius: 8px;
-                                padding: 13px 24px;
-                                border: 1px solid rgba(255, 255, 255, 0);
-                                color: #000000;
-                                font-size: 15px;
-                                font-weight: 400;
-                            }
-                            &.is-active,
-                            &.is-checked {
-                                &::after {
-                                    content: "";
-                                    position: absolute;
-                                    z-index: 9;
-                                    bottom: 0;
-                                    right: 0;
-                                    width: 18px;
-                                    height: 16px;
-                                    background: url("@/assets/img/home/checked-bg.png") no-repeat bottom right / 18px
-                                        16px;
-                                }
-                                .el-radio-button__inner,
-                                .el-checkbox-button__inner {
-                                    background: rgba(33, 153, 248, 0.1) !important;
-                                    color: #2199f8 !important;
-                                    border: 1px solid #2199f8 !important;
-                                    box-shadow: none;
-                                    font-weight: 500;
-                                }
-                            }
-                            &.is-active {
-                                .el-radio-button__original-radio:not(:disabled) + .el-radio-button__inner {
-                                    background: rgba(33, 153, 248, 0.1) !important;
-                                    color: #2199f8 !important;
-                                    border: 1px solid #2199f8 !important;
-                                    box-shadow: none;
-                                    font-weight: 500;
-                                }
-                            }
-                            &.is-checked {
-                                .el-checkbox-button__original-checkbox:not(:disabled) + .el-checkbox-button__inner {
-                                    background: rgba(33, 153, 248, 0.1) !important;
-                                    color: #2199f8 !important;
-                                    border: 1px solid #2199f8 !important;
-                                    box-shadow: none;
-                                    font-weight: 500;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-    .disaster-desc-box {
-        padding: 10px;
-        display: flex;
-        align-items: center;
-        span {
-            font-size: 14px;
-            color: rgba(0, 0, 0, 0.9);
-            width: 80px;
-        }
-    }
-}
-</style>

+ 38 - 37
src/views/old_mini/home/subPages/prescriptionPage.vue

@@ -156,7 +156,7 @@
             <!-- <div class="bottom-btn secondary-btn" @click="handlePage">跳过</div> -->
             <div 
                 class="bottom-btn primary-btn" 
-                @click.stop="handlePage"
+                @click.stop="submit"
                 @touchstart.stop
                 @touchend.stop
             >确认信息</div>
@@ -218,7 +218,7 @@
             </div>
         </div>
         <div class="period-footer">
-            <div class="period-footer-btn" @click="handlePeriodConfirm">确认信息</div>
+            <div class="period-footer-btn" @click="handlePage">确认信息</div>
         </div>
     </popup>
 
@@ -588,21 +588,22 @@ async function submit() {
     try {
         // 正式提交
         const draftData = handleSubmit();
-        const params = {
-            ...route.query,
-            phenologyId: phenologyList.value[0].phenologyId,
-            phenologyStartDate: phenologyList.value[0].phenologyStartDate,
-            basicInfo: draftData,
-            expertMiniUserId: '81881',
-        }
-        const res = await VE_API.basic_farm.saveBasicFarmInfoByExpert(params);
-        
+        // const params = {
+        //     ...route.query,
+        //     phenologyId: phenologyList.value[0].phenologyId,
+        //     phenologyStartDate: phenologyList.value[0].phenologyStartDate,
+        //     basicInfo: draftData,
+        //     expertMiniUserId: '81881',
+        // }
+        // const res = await VE_API.basic_farm.saveBasicFarmInfoByExpert(params);
+        const res = await VE_API.farm.saveFarm(route.query);
         if (res.code === 0) {
-            showSuccessPopup.value = true;
+            // showSuccessPopup.value = true;
 
             // 设置选中当前新增的农场
             localStorage.setItem("selectedFarmId", res.data.id);
             localStorage.setItem("selectedFarmName", res.data.name);
+            router.replace('/home');
             return true;
         } else {
             ElMessage.error(res.msg || '提交失败,请重试');
@@ -642,33 +643,33 @@ const handlePage = async () => {
         }
         
         // 安全解析 typeNames
-        let typeNames = [];
-        try {
-            if (route.query.typeNames) {
-                typeNames = JSON.parse(route.query.typeNames);
-            } else {
-                ElMessage.warning('缺少必要参数,请重新进入页面');
-                return;
-            }
-        } catch (e) {
-            console.error('解析 typeNames 失败:', e);
-            ElMessage.warning('参数格式错误,请重新进入页面');
-            return;
-        }
+        // let typeNames = [];
+        // try {
+        //     if (route.query.typeNames) {
+        //         typeNames = JSON.parse(route.query.typeNames);
+        //     } else {
+        //         ElMessage.warning('缺少必要参数,请重新进入页面');
+        //         return;
+        //     }
+        // } catch (e) {
+        //     console.error('解析 typeNames 失败:', e);
+        //     ElMessage.warning('参数格式错误,请重新进入页面');
+        //     return;
+        // }
         
-        // 检查 firstPhenology 是否已初始化
-        if (!firstPhenology.value || !firstPhenology.value.phenologyId) {
-            ElMessage.warning('物候期数据未加载完成,请稍候再试');
-            return;
-        }
+        // // 检查 firstPhenology 是否已初始化
+        // if (!firstPhenology.value || !firstPhenology.value.phenologyId) {
+        //     ElMessage.warning('物候期数据未加载完成,请稍候再试');
+        //     return;
+        // }
         
-        phenologyList.value = typeNames.map(item => ({
-            typeName: item,
-            phenologyId: firstPhenology.value.phenologyId,
-            startDateLabel: firstPhenology.value.startDateLabel,
-            phenologyName: firstPhenology.value.phenologyName,
-            phenologyStartDate: '2026-01-01',
-        }));
+        // phenologyList.value = typeNames.map(item => ({
+        //     typeName: item,
+        //     phenologyId: firstPhenology.value.phenologyId,
+        //     startDateLabel: firstPhenology.value.startDateLabel,
+        //     phenologyName: firstPhenology.value.phenologyName,
+        //     phenologyStartDate: '2026-01-01',
+        // }));
         
         // 如果有选择的专家,添加 preferredExpertCode
         if (basicForm.value.expertCode) {

+ 0 - 365
src/views/old_mini/mine/index.vue

@@ -1,365 +0,0 @@
-<template>
-    <div class="mine-index">
-        <div class="mine-header">
-            <div class="user-info-box" @click="handleUserInfoClick">
-                <el-avatar class="avatar" :size="54" :src="userInfo?.icon" />
-                <div class="user-info">
-                    <div class="user-name">
-                        <span v-if="curRole === 0">{{ userInfo?.nickname }}</span>
-                        <span v-else>{{ userInfo?.name }}</span>
-                        <span class="score" v-if="curRole !== 0">5.0分</span>
-                    </div>
-                    <div class="user-day">这是您使用飞鸟管家的第{{ daysSinceCreation }}天</div>
-                </div>
-            </div>
-            <div class="code-icon" v-if="curRole === 1">
-                <img src="@/assets/img/mine/code-icon.png" alt="" />
-            </div>
-            <!-- <div class="switch-role-btn" v-if="roles && roles.length > 1" @click="changeToggle">
-                <span>切换身份</span>
-                <el-icon><Switch /></el-icon>
-            </div> -->
-        </div>
-        <div class="mine-content">
-            <div class="garden-info" v-if="curRole !== 0">
-                <div class="item" v-for="(item, index) in gardenInfoItems" :key="index">
-                    <span class="num">{{ item.num }}</span>
-                    <span>{{ item.label }}</span>
-                </div>
-            </div>
-            <!-- <div class="grid-group">
-                <div class="grid-item" v-for="(item, index) in gridItems" :key="index" @click="handleGridClick(item)">
-                    <div class="grid-title">
-                        <span>{{ item.title }}</span>
-                        <el-icon><ArrowRight /></el-icon>
-                    </div>
-                    <span class="grid-desc">{{ item.desc }}</span>
-                </div>
-            </div> -->
-            <div class="cell-group">
-                <div class="cell-item" v-for="(item, index) in cellItems" :key="index" @click="handleCellClick(item)">
-                    <span class="item-title">{{ item.title }}</span>
-                    <el-icon class="item-arrow"><ArrowRight /></el-icon>
-                </div>
-            </div>
-        </div>
-        <!-- 角色切换 -->
-        <action-sheet :style="{ bottom: 50 + 'px' }" v-model:show="show" :actions="actions" @select="onSelect" />
-    </div>
-</template>
-<script setup>
-import { onActivated, ref, computed, onMounted } from "vue";
-import { useRouter } from "vue-router";
-import { useStore } from "vuex";
-import wx from "weixin-js-sdk";
-import { ActionSheet } from "vant";
-import { SET_USER_CUR_ROLE } from "@/store/modules/app/type";
-const store = useStore();
-const router = useRouter();
-
-// 0: 农户, 1: 专家, 2:农资农服
-const curRole = ref(Number(localStorage.getItem("SET_USER_CUR_ROLE")));
-const roles = ref(JSON.parse(store.state.app.roles));
-const userInfo = JSON.parse(localStorage.getItem("localUserInfo") || "{}");
-
-// 计算从创建时间到现在经过的天数
-const daysSinceCreation = computed(() => {
-    if (!userInfo?.createTime) {
-        return 0;
-    }
-    try {
-        // 将创建时间字符串转换为日期对象
-        const createDate = new Date(userInfo.createTime);
-        // 获取当前日期
-        const currentDate = new Date();
-        // 将两个日期都设置为当天的 00:00:00,只比较日期部分
-        const createDateOnly = new Date(createDate.getFullYear(), createDate.getMonth(), createDate.getDate());
-        const currentDateOnly = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
-        // 计算日期差(毫秒)
-        const timeDiff = currentDateOnly.getTime() - createDateOnly.getTime();
-        // 转换为天数
-        const days = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
-        // 加1,因为创建当天算作第1天
-        return days + 1;
-    } catch (error) {
-        console.error("计算天数失败:", error);
-        return 0;
-    }
-});
-
-// const roles = ref([0,1,2,3])
-const actions = ref([]);
-
-// 网格项数据
-const gridItems = ref([]);
-
-const objects = [
-    { name: "农户", id: 0, text: "NH" },
-    { name: "农资", id: 2, text: "NZ" },
-];
-
-onMounted(() => {
-    // 仅保留 objects 中存在的角色
-    actions.value = objects.filter((obj) => roles.value && roles.value.includes(obj.id));
-});
-
-const show = ref(false);
-// 切换身份角色
-const onSelect = async (item) => {
-    show.value = false;
-
-    store.dispatch(`app/${SET_USER_CUR_ROLE}`, item.id);
-    localStorage.setItem("SET_USER_CUR_ROLE", item.id);
-
-    // 保存到 session
-    try {
-        await VE_API.mine.saveSessionStore({
-            val: item.id,
-            key: "cur_role",
-        });
-    } catch (error) {
-        console.error("保存角色到 session 失败:", error);
-    }
-    window.location.reload();
-};
-
-onActivated(() => {
-    gridItems.value = [
-        {
-            title: "我的主页",
-            desc: "查看农场列表",
-            path: "/my_farm",
-        },
-        {
-            title: "我的消息",
-            desc: "查看未读信息",
-            path: "/message",
-        },
-        {
-            title: "信息化档案",
-            desc: "查看历史农事",
-            path: "/archives",
-        },
-    ];
-});
-
-// 单元格项数据 - 根据角色动态显示
-const cellItems = computed(() => {
-    let list  = [
-        {
-            title: "系统提醒",
-            path: "/message",
-        },
-        {
-            title: "种植方案",
-            path: "/plan?pageType=plant",
-        },
-        {
-            title: "服务记录",
-            path: "/service_records",
-        },
-        {
-            title: "报价维护",
-            path: "/offer_price",
-        },
-        {
-            title: "服务维护",
-            path: "/service_manage",
-        },
-        {
-            title: "团队管理",
-            path: "/team_manage",
-        },
-    ]
-    if(curRole.value === 0) {
-        list.unshift({
-            title: "认证身份",
-            path: "/authentication",
-        });
-        // list.unshift({
-        //     title: "认证农资",
-        //     path: "/register?identity=NZ",
-        // });
-    }
-    return list;
-});
-
-// 花园信息项数据
-const gardenInfoItems = ref([
-    { num: "--", label: "服务次数" },
-    { num: "--", label: "累计客户" },
-    { num: "--", label: "服务果园" },
-]);
-
-onActivated(() => {
-    if (curRole.value !== 0) {
-        getStatistics();
-    }
-});
-
-const getStatistics = () => {
-    VE_API.z_agricultural_store.statistics().then(({ data }) => {
-        gardenInfoItems.value[0].num = data.serviceCount || "--";
-        gardenInfoItems.value[1].num = data.customerCount || "--";
-        gardenInfoItems.value[2].num = data.serviceFarmCount || "--";
-    });
-};
-
-// 处理网格项点击
-const handleGridClick = (item) => {
-    if (item.path) {
-        router.push(item.path);
-    }
-};
-
-// 处理单元格项点击
-const handleCellClick = (item) => {
-    if (item.path) {
-        if (item.path === "/logout") {
-            // 退出登录逻辑
-            console.log("退出登录");
-            // 这里可以添加退出登录的具体逻辑
-        } else {
-            router.push(item.path);
-        }
-    }
-};
-
-const changeToggle = () => {
-    show.value = true;
-};
-
-const handleUserInfoClick = () => {
-    wx.miniProgram.navigateTo({
-        url: `/pages/subPages/user_info/index?route_path=/mine`,
-    });
-};
-</script>
-<style lang="scss" scoped>
-.mine-index {
-    width: 100%;
-    height: 100vh;
-    box-sizing: border-box;
-    padding: 20px 16px;
-    background: url("@/assets/img/mine/mine-bg.png") no-repeat center center / 100% 100%;
-    .mine-header {
-        width: 100%;
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        .user-info-box {
-            display: flex;
-            align-items: center;
-            .avatar {
-                border: 1px solid #fff;
-                margin-right: 12px;
-            }
-            .user-info {
-                font-size: 20px;
-                .user-name {
-                    font-weight: 500;
-                    display: flex;
-                    align-items: center;
-                    .score {
-                        font-size: 14px;
-                        color: #2199f8;
-                        margin-left: 6px;
-                        font-weight: 500;
-                    }
-                }
-                .user-day {
-                    font-size: 12px;
-                    color: rgba(0, 0, 0, 0.5);
-                }
-            }
-        }
-        .code-icon {
-            width: 21px;
-            height: 21px;
-            img {
-                width: 100%;
-                height: 100%;
-            }
-        }
-        .switch-role-btn {
-            margin-right: -16px;
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            padding: 5px 10px 6px 12px;
-            color: #fff;
-            background: #2199f8;
-            border-radius: 25px 0 0 25px;
-            gap: 5px;
-            font-size: 13px;
-        }
-    }
-    .mine-content {
-        margin-top: 20px;
-        .garden-info {
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            border-radius: 8px;
-            padding: 6px 0;
-            background-color: rgba(255, 255, 255, 0.5);
-            margin-bottom: 10px;
-            .item {
-                display: flex;
-                flex: 1;
-                flex-direction: column;
-                align-items: center;
-                justify-content: center;
-                color: #999999;
-                font-size: 13px;
-                .num {
-                    font-size: 16px;
-                    color: #000;
-                    margin-bottom: 2px;
-                }
-            }
-        }
-        .grid-group {
-            display: flex;
-            align-items: center;
-            .grid-item {
-                background-color: #fff;
-                border-radius: 14px;
-                padding: 10px 0 10px 10px;
-                color: #000;
-                font-size: 16px;
-                flex: 1;
-                .grid-title {
-                    display: flex;
-                    align-items: center;
-                    font-weight: 500;
-                    margin-bottom: 6px;
-                    span {
-                        margin-right: 1px;
-                    }
-                }
-                .grid-desc {
-                    font-size: 12px;
-                    color: rgba(0, 0, 0, 0.2);
-                }
-            }
-            .grid-item + .grid-item {
-                margin-left: 10px;
-            }
-        }
-        .cell-group {
-            .cell-item {
-                margin-top: 10px;
-                background-color: #fff;
-                border-radius: 14px;
-                padding: 13px 10px;
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                color: #000;
-                font-size: 16px;
-            }
-        }
-    }
-}
-</style>

+ 0 - 122
src/views/old_mini/mine/pages/authentication.vue

@@ -1,122 +0,0 @@
-<template>
-    <div class="authentication-page">
-        <custom-header name="认证身份"></custom-header>
-        <div class="content">
-            <span class="text">请选择您要认证的身份</span>
-            <div class="card-group">
-                <div
-                    :class="['card-item', { active: active === index }]"
-                    v-for="(item, index) in list"
-                    :key="index"
-                    @click="handleActive(item, index)"
-                >
-                    <div class="info">
-                        <div class="name">{{ item.name }}</div>
-                        <span>{{ item.desc }}</span>
-                    </div>
-                    <img :src="require(`@/assets/img/mine/${item.icon}-icon.png`)" alt="" />
-                </div>
-            </div>
-            <div class="button" @click="handleOk">选好了</div>
-        </div>
-    </div>
-</template>
-
-<script setup>
-import customHeader from "@/components/customHeader.vue";
-import {ref} from 'vue'
-import { useRouter } from "vue-router";
-const router = useRouter();
-
-const list = [
-    {
-        name:"专家",
-        desc:"根据表型触发农事,确认农事处方",
-        icon:"figure",
-        identity:"EXPERT",
-        role:3
-    },
-    {
-        name:"农资农服",
-        desc:"巡飞地形,收集农情测报",
-        icon:"drone",
-        identity:"NZ",
-        role:2
-    },
-]
-    // {
-    //     name:"农服",
-    //     desc:"接单执行,服务农户",
-    //     icon:"shield",
-    //     identity:"NF",
-    //     role:1
-    // }
-
-const active = ref(0)
-const handleActive = (item,index) =>{
-    active.value = index
-}
-
-const handleOk = () =>{
-    // router.push(`/register?identity=${list[active.value].identity}&role=${list[active.value].role}`)
-    router.push(`/register??identity=NZ`)
-}
-</script>
-
-<style lang="scss" scoped>
-.authentication-page {
-    width: 100%;
-    height: 100vh;
-    background-color: #f5f7fb;
-    .content {
-        height: calc(100% - 40px);
-        padding: 60px 30px;
-        box-sizing: border-box;
-        .text {
-            font-size: 18px;
-        }
-        .card-group {
-            margin-top: 26px;
-            .card-item {
-                background: #fff;
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                padding: 27px 20px;
-                border-radius: 2px;
-                border: 1px solid transparent;
-                &.active {
-                    background: rgba(33, 153, 248, 0.1);
-                    border: 1px solid #2199f8;
-                }
-                .info {
-                    .name {
-                        font-size: 18px;
-                        font-weight: bold;
-                        margin-bottom: 2px;
-                    }
-                    span {
-                        color: rgba(0, 0, 0, 0.2);
-                    }
-                }
-                img {
-                    width: 42px;
-                }
-            }
-
-            .card-item + .card-item {
-                margin-top: 20px;
-            }
-        }
-        .button {
-            color: #fff;
-            border-radius: 2px;
-            background: #2199f8;
-            text-align: center;
-            font-size: 16px;
-            padding: 8px 0;
-            margin-top: 50px;
-        }
-    }
-}
-</style>

+ 0 - 155
src/views/old_mini/mine/pages/farm.vue

@@ -1,155 +0,0 @@
-<template>
-    <div class="farm-page">
-        <custom-header name="我的农场"></custom-header>
-        <div class="farm-list">
-            <div class="list-item" v-for="item in farmList" :key="item.id" @click="handleItemClick(item)">
-                <div class="item-info">
-                    <div class="item-top">
-                        <img class="left-img" src="@/assets/img/home/farm.png" alt="" />
-                        <div class="left-content">
-                            <div class="content-title">
-                                <div class="title-left">
-                                    <span class="title-text van-ellipsis">{{ item.name }}</span>
-                                    <div class="content-tag" v-if="item.defaultOption">默认</div>
-                                    <div class="content-text" v-else @click.stop="handleSetDefault(item)">设为默认</div>
-                                </div>
-                                <div class="item-btn">查看详情</div>
-                            </div>
-                            <div class="content-desc">
-                                <div>服务作物:{{ item.speciesName }}</div>
-                                <div>农场位置:{{ item.address }}</div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</template>
-
-<script setup>
-import customHeader from "@/components/customHeader.vue";
-import { ref, onMounted } from "vue";
-import { ElMessageBox } from "element-plus";
-import { useRouter } from "vue-router";
-const router = useRouter();
-const farmList = ref([]);
-onMounted(() => {
-    getFarmList();
-});
-
-const handleSetDefault = async ({id}) => {
-    ElMessageBox.confirm('确定将该农场设为默认农场吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning',
-    }).then(async () => {
-        const { code } = await VE_API.farm.updateFarm({
-            farmId: id,
-            defaultFarm: 1,
-        });  
-        if(code === 0){
-            getFarmList();
-        }
-    }).catch(() => {});
-};
-
-const getFarmList = async () => {
-    const { data } = await VE_API.farm.userFarmSelectOption();
-    farmList.value = data || [];
-};
-
-const handleItemClick = (item) => {
-    router.push({
-        path: '/monitor',
-        query: {
-            farmId: item.id,
-            defaultFarm: item.defaultOption,
-            isHeaderShow: true,
-        },
-    });
-};
-</script>
-
-<style scoped lang="scss">
-.farm-page {
-    width: 100%;
-    height: 100vh;
-    .farm-list {
-        width: 100%;
-        height: calc(100% - 40px);
-        background-color: #f7f7f7;
-        padding: 12px;
-        box-sizing: border-box;
-        overflow: auto;
-        .list-item {
-            background-color: #fff;
-            border-radius: 10px;
-            padding: 10px;
-            display: flex;
-            width: 100%;
-            box-sizing: border-box;
-            .item-info {
-                width: 100%;
-                .item-top {
-                    width: 100%;
-                    display: flex;
-                    align-items: center;
-                    gap: 12px;
-                    .left-img {
-                        width: 68px;
-                        height: 68px;
-                        border-radius: 8px;
-                    }
-                    .left-content {
-                        width: calc(100% - 68px - 12px);
-                        .content-title {
-                            display: flex;
-                            align-items: center;
-                            justify-content: space-between;
-                            margin-bottom: 4px;
-                            font-size: 16px;
-                            font-weight: 500;
-                            .title-left{
-                                display: flex;
-                                align-items: center;
-                                gap: 10px;
-                                width: calc(100% - 62px);
-                                .title-text{
-                                    max-width: calc(100% - 60px);
-                                }
-                                .content-tag {
-                                    background-color: #2199f8;
-                                    color: #fff;
-                                    padding: 2px 8px;
-                                    border-radius: 15px;
-                                    font-size: 12px;
-                                    font-weight: 400;
-                                }
-                                .content-text {
-                                    font-size: 12px;
-                                    color: #2199f8;
-                                    font-weight: 400;
-                                }
-                            }
-                        }
-                        .item-btn {
-                            color: #a8a8a8;
-                            font-size: 14px;
-                            font-weight: 400;
-                        }
-                        .content-desc {
-                            font-size: 12px;
-                            color: #999999;
-                            line-height: 18px;
-                        }
-                    }
-                }
-            }
-        }
-        .list-item + .list-item {
-            margin-top: 12px;
-        }
-    }
-}
-</style>

+ 0 - 1419
src/views/old_mini/mine/pages/farmRecords.vue

@@ -1,1419 +0,0 @@
-<template>
-    <div class="farm-records-page">
-        <custom-header name="农事记录"></custom-header>
-        <div class="record-task">
-            <div class="task-top">
-                <div class="record-filter">
-                    <el-select v-model="farmVal" class="farm-select">
-                        <el-option
-                            v-for="item in farmOptions"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value"
-                        />
-                    </el-select>
-                    <el-input v-model="input" :prefix-icon="Search" placeholder="搜索农事" class="farm-search" />
-                </div>
-                <div class="select-box">
-                    <div class="select-item">
-                        <el-select v-model="typeVal" placeholder="时间排序">
-                            <el-option
-                                v-for="item in typeOptions"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                            />
-                        </el-select>
-                    </div>
-                    <div class="select-item">
-                        <el-select v-model="regionVal" placeholder="已复核">
-                            <el-option
-                                v-for="item in regionOptions"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                            />
-                        </el-select>
-                    </div>
-                    <div class="select-item">
-                        <el-select v-model="levelVal" placeholder="筛选">
-                            <el-option
-                                v-for="item in levelOptions"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value"
-                            />
-                        </el-select>
-                    </div>
-                </div>
-            </div>
-            <div class="task-content">
-                <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" :onlyRecipeName="true" class="recipe-item">
-                            <template #title>
-                                <div class="box-title">
-                                    <div class="title-l">
-                                        {{ section.title }}
-                                        <span class="parent-text">{{ section.parentTitle || "秋梢期" }}</span>
-                                    </div>
-                                    <div class="title-r">
-                                        <span class="r-dot"></span>
-                                        2区
-                                    </div>
-                                </div>
-                            </template>
-                            <template #footer>
-                                <div class="action-group">
-                                    <div class="action-l">查看详情</div>
-                                    <div class="action-r" v-if="section.orderStatus === 0">
-                                        <div class="action-item second-item">拍照识别</div>
-                                        <div class="action-item primary-item">去确认</div>
-                                    </div>
-                                    <div class="action-r" v-if="section.orderStatus === 1">
-                                        <div class="action-item warning-item">发起需求</div>
-                                        <div class="action-item primary-item">确认完成</div>
-                                    </div>
-                                    <div class="action-r" v-if="section.orderStatus === 2">
-                                        <div class="action-item warning-item">发起需求</div>
-                                        <div class="action-item primary-item">去复核</div>
-                                    </div>
-                                </div>
-                            </template>
-                        </record-item>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</template>
-
-<script setup>
-import { ref } from "vue";
-import { Search } from "@element-plus/icons-vue";
-import recordItem from "@/components/recordItem.vue";
-import customHeader from "@/components/customHeader.vue";
-
-const input = ref("");
-const farmVal = ref("all");
-const farmOptions = ref([
-    { label: "农场1", value: "all" },
-    { label: "荔枝博览园", value: "1" },
-    { label: "荔枝博览园", value: "2" },
-    { label: "荔枝博览园", value: "3" },
-]);
-
-const typeVal = ref(null);
-const regionVal = ref(null);
-const levelVal = ref(null);
-const typeOptions = ref([
-    { label: "全部", value: "all" },
-    { label: "施肥", value: "1" },
-    { label: "用药", value: "2" },
-    { label: "修剪", value: "3" },
-    { label: "其他", value: "4" },
-]);
-
-const regionOptions = ref([
-    {
-        label: "全部",
-        value: "all",
-    },
-    {
-        label: "区域1",
-        value: "1",
-    },
-    {
-        label: "区域2",
-        value: "2",
-    },
-    {
-        label: "区域3",
-        value: "3",
-    },
-]);
-
-const levelOptions = ref([
-    { label: "全部", value: "all" },
-    { label: "紧急", value: "1" },
-    { label: "一般", value: "2" },
-    { label: "不紧急", value: "3" },
-]);
-
-const containerRef = ref(null);
-const handleClick = (e) => {
-    e.preventDefault();
-};
-
-// 菜单
-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: 0,
-        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: 1,
-        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: 2,
-        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: 3,
-        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",
-            },
-        ],
-    },
-]);
-</script>
-
-<style lang="scss" scoped>
-.farm-records-page {
-    width: 100%;
-    height: 100vh;
-    background-color: #f5f7fb;
-    .record-task {
-        height: 100%;
-        width: 100%;
-        .task-top {
-            padding: 0 12px;
-            border-radius: 0 0 14px 14px;
-            .record-filter {
-                display: flex;
-                justify-content: space-between;
-                align-items: center;
-                margin-top: 12px;
-                .farm-select {
-                    width: 110px;
-                    margin-right: 10px;
-                    ::v-deep {
-                        .el-select__wrapper {
-                            border-radius: 25px;
-                            background: none;
-                            box-shadow: none;
-                            border: 1px solid #2199f8;
-                            justify-content: center;
-                        }
-                        .el-select__selection {
-                            flex: none;
-                            width: fit-content;
-                        }
-                        .el-select__placeholder {
-                            color: #2199f8;
-                            position: static;
-                            transform: none;
-                            width: fit-content;
-                        }
-                        .el-select__caret {
-                            color: #2199f8;
-                        }
-                    }
-                }
-                .farm-search {
-                    width: calc(100% - 120px);
-                    ::v-deep {
-                        .el-input__wrapper {
-                            border-radius: 25px;
-                            box-shadow: none;
-                        }
-                    }
-                }
-            }
-            .select-box {
-                padding: 5px 10px 0 10px;
-                box-sizing: border-box;
-                width: 100%;
-                display: flex;
-                justify-content: space-between;
-                .select-item {
-                    width: fit-content;
-                    ::v-deep {
-                        .el-input__wrapper {
-                            background: none;
-                            box-shadow: none;
-                        }
-                        .el-input__inner {
-                            font-size: 14px;
-                            color: rgba(0, 0, 0, 0.2);
-                        }
-                        .el-select__wrapper {
-                            background: none;
-                            box-shadow: none;
-                            gap: 2px;
-                            padding: 4px 2px;
-                            justify-content: center;
-                        }
-                        .el-select__selection {
-                            flex: none;
-                            width: fit-content;
-                        }
-                        .el-select__placeholder {
-                            color: rgba(0, 0, 0, 0.2);
-                            position: static;
-                            transform: none;
-                            width: fit-content;
-                        }
-                    }
-                }
-            }
-        }
-        .task-content {
-            display: flex;
-            padding-top: 10px;
-            height: calc(100% - 140px);
-            .plan-menu {
-                width: 90px;
-                height: 100%;
-                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% - 90px);
-                height: 100%;
-                overflow: auto;
-                padding-bottom: 10px;
-                box-sizing: border-box;
-                .content-section {
-                    position: relative;
-                    .section-id {
-                        position: absolute;
-                        // top: -6px;
-                        top: 0;
-                        width: 100%;
-                        height: 1px;
-                    }
-                    .recipe-item {
-                        margin-right: 0;
-                    }
-                }
-                .box-title {
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-between;
-                    padding-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;
-                        color: #ff8a2a;
-                        font-size: 12px;
-                        .r-dot {
-                            width: 6px;
-                            height: 6px;
-                            border-radius: 50%;
-                            background: #ff8a2a;
-                            margin-right: 5px;
-                        }
-                    }
-                }
-
-                .action-group {
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-between;
-                    padding-top: 8px;
-                    margin-top: 8px;
-                    border-top: 1px solid #f5f5f5;
-                    .action-l {
-                        font-size: 12px;
-                    }
-                    .action-r {
-                        display: flex;
-                        align-items: center;
-                        .action-item {
-                            padding: 0 11px;
-                            height: 30px;
-                            line-height: 30px;
-                            border-radius: 14px;
-                            font-size: 12px;
-                            &.second-item {
-                                border: 1px solid #2199f8;
-                                color: #2199f8;
-                            }
-                            &.primary-item {
-                                background: #2199f8;
-                                color: #fff;
-                            }
-                            &.warning-item {
-                                background: rgba(255, 131, 29, 0.1);
-                                color: #ff831d;
-                            }
-                        }
-                        .action-item + .action-item {
-                            margin-left: 5px;
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-</style>

+ 0 - 208
src/views/old_mini/mine/pages/message.vue

@@ -1,208 +0,0 @@
-<template>
-    <div class="message-page">
-        <custom-header name="系统提醒" bgColor="#f7f7f7"></custom-header>
-        <List
-            v-model:loading="loading"
-            :finished="finished"
-            finished-text="没有更多了"
-            @load="onLoad"
-            :immediate-check="false"
-        >
-            <div class="message-list">
-                <div class="message-item" v-for="(item, index) in messageList" :key="index" @click="handleItem(item)">
-                    <el-badge class="badge" is-dot v-if="!item.status"> </el-badge>
-                    <div class="message-content">
-                        <div class="title">
-                            收到来自{{ item.farmData?.farmName }}的{{ item.farmData?.farmWorkName }}农事提醒
-                        </div>
-                        <div class="desc">{{ item.desc }}</div>
-                        <div class="footer">
-                            <div class="footer-left">
-                                <span class="view-detail">查看详情</span>
-                                <span class="date">{{ formatDate(item.createDate) }}</span>
-                            </div>
-                            <el-icon class="arrow-icon"><ArrowRight /></el-icon>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </List>
-    </div>
-</template>
-
-<script setup>
-import { ref, onMounted } from "vue";
-import { useRouter } from "vue-router";
-import { ArrowRight } from "@element-plus/icons-vue";
-import { List } from "vant";
-import customHeader from "@/components/customHeader.vue";
-
-const router = useRouter();
-
-const handleItem = async (item) => {
-    VE_API.mine.confirmCard({ id: item.id }).then(async (res) => {
-        if (res.code === 0) {
-            const { data } = await VE_API.z_farm_work_record.getDetail({ id: item.farmData.farmWorkRecordId });
-            if (data && data.length > 0) {
-                const imgLength = data[0].executeEvidence.length;
-                if (imgLength > 0) {
-                    router.push("/review_work?miniJson=" + JSON.stringify({ id: data[0].id }));
-                } else {
-                    router.push("/completed_work?miniJson=" + JSON.stringify({ id: item.farmData.farmWorkRecordId }));
-                }
-            }
-        }
-    });
-};
-
-// 分页相关状态
-const messageList = ref([]);
-const loading = ref(false);
-const finished = ref(false);
-const currentPage = ref(1);
-const pageSize = ref(10);
-
-// 加载数据
-const getNoticeList = async () => {
-    try {
-        loading.value = true;
-        const params = {
-            page: currentPage.value,
-            limit: pageSize.value,
-            popType: 0,
-        };
-        const res = await VE_API.mine.listNotice(params);
-
-        if (res.data && res.data.length > 0) {
-            const newData = res.data.map((item) => {
-                return {
-                    ...item,
-                    farmData: JSON.parse(item.data),
-                };
-            });
-
-            if (currentPage.value === 1) {
-                messageList.value = newData;
-            } else {
-                messageList.value = [...messageList.value, ...newData];
-            }
-
-            // 如果返回的数据少于每页数量,说明没有更多数据了
-            if (res.data.length < pageSize.value) {
-                finished.value = true;
-            }
-        } else {
-            // 没有数据时,如果是第一页,显示空列表;否则标记为完成
-            if (currentPage.value === 1) {
-                messageList.value = [];
-            }
-            finished.value = true;
-        }
-    } catch (error) {
-        console.error("获取消息列表失败:", error);
-        finished.value = true;
-    } finally {
-        loading.value = false;
-    }
-};
-
-// 滚动加载更多
-const onLoad = () => {
-    if (finished.value) {
-        return;
-    }
-    currentPage.value += 1;
-    getNoticeList();
-};
-
-// 初始化加载
-onMounted(() => {
-    currentPage.value = 1;
-    finished.value = false;
-    getNoticeList();
-});
-
-// 格式化日期为 MM-DD 格式
-const formatDate = (dateStr) => {
-    if (!dateStr) return "--";
-    const date = new Date(dateStr);
-    if (Number.isNaN(date.getTime())) return dateStr;
-    const m = `${date.getMonth() + 1}`.padStart(2, "0");
-    const d = `${date.getDate()}`.padStart(2, "0");
-    return `${m}-${d}`;
-};
-</script>
-
-<style lang="scss" scoped>
-.message-page {
-    position: relative;
-    width: 100%;
-    height: 100vh;
-    box-sizing: border-box;
-    background-color: #f7f7f7;
-    display: flex;
-    flex-direction: column;
-
-    ::v-deep .van-list {
-        flex: 1;
-        height: calc(100vh - 40px);
-        overflow-y: auto;
-        padding: 12px;
-        box-sizing: border-box;
-    }
-
-    .message-list {
-        width: 100%;
-        .message-item {
-            background-color: #fff;
-            border-radius: 14px;
-            padding: 16px;
-            position: relative;
-            .badge {
-                position: absolute;
-                top: 0;
-                right: 0;
-            }
-            .message-content {
-                .title {
-                    font-size: 16px;
-                    font-weight: 500;
-                    margin-bottom: 8px;
-                }
-                .desc {
-                    color: #bbbbbb;
-                    margin-bottom: 10px;
-                }
-                .footer {
-                    display: flex;
-                    align-items: center;
-                    justify-content: space-between;
-                    border-top: 1px solid #f5f5f5;
-                    padding-top: 10px;
-                    .footer-left {
-                        display: flex;
-                        align-items: center;
-                    }
-                    .view-detail {
-                        color: #333333;
-                        font-size: 14px;
-                        margin-right: 8px;
-                    }
-                    .date {
-                        color: #b6b6b6;
-                        font-size: 14px;
-                    }
-                }
-            }
-            .arrow-icon {
-                color: #999999;
-                font-size: 16px;
-                margin-left: 12px;
-            }
-        }
-        .message-item + .message-item {
-            margin-top: 12px;
-        }
-    }
-}
-</style>

+ 0 - 149
src/views/old_mini/mine/pages/messageList.vue

@@ -1,149 +0,0 @@
-<template>
-    <div class="container">
-        <custom-header name="我的消息" isGoBack @goback="headerCallBack"></custom-header>
-        <div class="message-list">
-            <div class="message-item" v-for="(item, index) in messageList" :key="index" @click="handleItem(item)">
-                <div class="message">
-                    <img class="img" :src="item.targetUserAvatar || 'https://birdseye-img.sysuimars.com/dinggou-mini/defalut-icon.png'" alt="">
-                    <div class="info">
-                        <span class="name">{{item.targetUserName || '飞鸟种植助手'}}</span>
-                        <div class="van-ellipsis" v-if="item.newMessageType==='image'">[图片]</div>
-                        <div class="van-ellipsis" v-else>{{item.newContent}}</div>
-                    </div>
-                </div>
-                <div class="date-time">
-                    <div>{{timeFormat(item.updateTime) || '03/22 13:08'}}</div>
-                    <badge v-show="item.unreadCount&&item.unreadCount!=0" class="badge" :content="item.unreadCount" max="99"></badge>
-                </div>
-            </div>
-        </div>
-    </div>
-</template>
-
-<script setup>
-import { Badge } from "vant";
-import { onMounted, ref,onUnmounted } from "vue";
-import MqttClient from "@/plugins/MqttClient";
-import { useRouter,useRoute } from "vue-router";
-import customHeader from "@/components/customHeader.vue";
-const router = useRouter();
-const route = useRoute();
-const userId = Number(localStorage.getItem('MINI_USER_ID'))
-
-const messageList = ref([]);
-
-const timeFormat = (dateStr) =>{
-    // 提取月、日、时、分
-    const [, month, day, hours, minutes] = dateStr.match(
-    /(\d{2})-(\d{2})T(\d{2}):(\d{2})/
-    );
-    const formattedDate = `${month}/${day} ${hours}:${minutes}`;
-    return formattedDate
-}
-
-const handleItem = ({targetUserId,farmId}) =>{
-    VE_API.bbs.readUpdate({ targetUserId,farmId }).then((res) => {
-        if (res.code === 0) {
-            router.push(`/chat_frame?userId=${targetUserId}&farmId=${farmId}&formPage=${route.query.from}`);
-        }
-    });
-}
-
-const headerCallBack = () =>{
-    if(route.query.from === 'monitor') {
-        router.replace('/monitor');
-    } else {
-        router.replace('/mine');
-    }
-}
-
-const mqttClient = ref(null)
-const initMqtt = () =>{
-    mqttClient.value = new MqttClient(['chat/message/'+userId], (topic, message) => {
-        getMessageList()
-    });
-
-    mqttClient.value.connect();
-}
-
-const getMessageList = () =>{
-    VE_API.bbs.getSessionListAll().then((res) => {
-        messageList.value = res.data || [];
-    });
-}
-
-const getListByFarm = () =>{
-    VE_API.bbs.sessionListByFarm({ farmId: route.query.farmId }).then((res) => {
-        messageList.value = res.data || [];
-    });
-}
-
-onMounted(()=>{
-    // initMqtt()
-    if(localStorage.getItem('SET_USER_CUR_ROLE') == 0){
-        getListByFarm()
-    }else{
-        getMessageList()
-    }
-})
-
-// onUnmounted(()=>{
-//     mqttClient.value.client.end(true);
-// })
-</script>
-
-<style lang="scss" scoped>
-.container {
-    width: 100%;
-    height: 100vh;
-    background: #f7f7f7;
-    .message-list {
-        width: 100%;
-        height: calc(100% - 40px);
-        overflow: auto;
-        box-sizing: border-box;
-        padding: 0 12px;
-        .message-item {
-            margin-top: 12px;
-            display: flex;
-            justify-content: space-between;
-            background: #fff;
-            padding: 12px;
-            border-radius: 8px;
-
-            .message {
-                width: calc(100% - 64px - 58px - 10px);
-                display: flex;
-                .img {
-                    width: 48px;
-                    height: 48px;
-                    margin-right: 10px;
-                    border-radius: 10px;
-                    border-radius: 50%;
-                }
-                .info {
-                    width: 100%;
-                    color: #999999;
-                    line-height: 24px;
-                    .name {
-                        color: #333333;
-                        font-size: 16px;
-                        font-weight: 500;
-                    }
-                }
-            }
-            .date-time{
-                color: #BBBBBB;
-                font-size: 12px;
-                display: flex;
-                flex-direction: column;
-                align-items: flex-end;
-                margin-top: 4px;
-                .badge{
-                    margin: 20px 15px -6px 0;
-                }
-            }
-        }
-    }
-}
-</style>

+ 0 - 451
src/views/old_mini/mine/pages/register.vue

@@ -1,451 +0,0 @@
-<template>
-    <div class="register-page">
-        <custom-header :name="'注册' + pageName" bgColor="#E6F2FF"></custom-header>
-        <div class="content">
-            <Form @submit="onSubmit" required="auto" label-width="74px" ref="formRef">
-                <div class="card">
-                    <div class="card-title">
-                        <img src="@/assets/img/mine/label-icon.png" alt="" />
-                        <span>基本信息</span>
-                    </div>
-                    <div class="form">
-                        <field
-                            v-model="formData.name"
-                            label="姓名"
-                            :rules="[{ required: true, message: '请输入姓名' }]"
-                            placeholder="请输入姓名"
-                        />
-                        <field
-                            v-model="formData.tel"
-                            type="tel"
-                            name="tel"
-                            label="联系电话"
-                            :rules="[{ required: true, validator: validatorTel, message: '请输入电话号码' }]"
-                            placeholder="请输入电话号码"
-                        />
-                        <field
-                            v-show="pageType === 'NZ'"
-                            v-model="formData.subjectName"
-                            label="主体名称"
-                            placeholder="请输入主体名称"
-                        />
-                        <template v-if="pageType === 'EXPERT'">
-                            <field
-                                label-width="130px"
-                                readonly
-                                v-model="number"
-                                label="服务过的果园数量"
-                                placeholder="点击选择服务数量"
-                            >
-                                <template #input>
-                                    <el-dropdown trigger="click">
-                                        <div class="el-dropdown-link-text">
-                                            {{ number }}
-                                            <el-icon class="el-icon--right">
-                                                <CaretBottom />
-                                            </el-icon>
-                                        </div>
-                                        <template #dropdown>
-                                            <el-dropdown-menu class="v-dropdown-menu">
-                                                <el-dropdown-item
-                                                    v-for="(item, index) in numberList"
-                                                    :key="index"
-                                                    :class="{ active: numberActive === index }"
-                                                    @click="handleNumberDropdown(item, index)"
-                                                    >{{ item }}</el-dropdown-item
-                                                >
-                                            </el-dropdown-menu>
-                                        </template>
-                                    </el-dropdown>
-                                </template>
-                            </field>
-                            <field
-                                label-width="130px"
-                                readonly
-                                v-model="year"
-                                label="从事种植指导年数"
-                                placeholder="点击选择指导年数"
-                            >
-                                <template #input>
-                                    <el-dropdown trigger="click">
-                                        <div class="el-dropdown-link-text">
-                                            {{ year }}
-                                            <el-icon class="el-icon--right">
-                                                <CaretBottom />
-                                            </el-icon>
-                                        </div>
-                                        <template #dropdown>
-                                            <el-dropdown-menu class="v-dropdown-menu">
-                                                <el-dropdown-item
-                                                    v-for="(item, index) in yearList"
-                                                    :key="index"
-                                                    :class="{ active: yearActive === index }"
-                                                    @click="handleYearDropdown(item, index)"
-                                                    >{{ item }}</el-dropdown-item
-                                                >
-                                            </el-dropdown-menu>
-                                        </template>
-                                    </el-dropdown>
-                                </template>
-                            </field>
-                        </template>
-                        <div class="flex" v-else>
-                            <field v-model="formData.address" label="服务区域" readonly placeholder="默认位置" />
-                            <el-dropdown trigger="click">
-                                <div class="el-dropdown-link">
-                                    {{ dropdownName }}
-                                    <el-icon class="el-icon--right">
-                                        <CaretBottom />
-                                    </el-icon>
-                                </div>
-                                <template #dropdown>
-                                    <el-dropdown-menu class="v-dropdown-menu">
-                                        <el-dropdown-item
-                                            v-for="(item, index) in dropdownList"
-                                            :key="index"
-                                            :class="{ active: active === index }"
-                                            @click="handleDropdown(item, index)"
-                                            >{{ item }}</el-dropdown-item
-                                        >
-                                    </el-dropdown-menu>
-                                </template>
-                            </el-dropdown>
-                        </div>
-                        <upload ref="uploadRef" v-show="pageType === 'NZ'" exampleImg :maxCount="1" class="upload-wrap" @handleUpload="handleUploadSuccess">
-                            <div class="upload-btn">
-                                点击上传营业执照
-                            </div>
-                        </upload>
-                    </div>
-                </div>
-                <div class="card" v-if="pageType == 'EXPERT'">
-                    <div class="card-title">
-                        <img src="@/assets/img/mine/label-icon.png" alt="" />
-                        <span>个人简介</span>
-                    </div>
-                    <div class="form">
-                        <el-input v-model="input" :rows="5" type="textarea" placeholder="描述:" />
-                    </div>
-                </div>
-                <template v-else>
-                    <ServiceInfo 
-                        v-model:crops="crops"
-                        v-model:serviceTypes="serviceTypes"
-                        v-model:machines="machines"
-                        v-model:isEdit="isEdit"
-                        ref="serviceInfoRef"
-                    />
-                </template>
-                <Button class="button" round block type="primary" native-type="submit"> 提交 </Button>
-            </Form>
-        </div>
-    </div>
-</template>
-
-<script setup>
-import customHeader from "@/components/customHeader.vue";
-import { Field, Form, Button } from "vant";
-import { onActivated, onDeactivated, ref } from "vue";
-import { useRoute, useRouter } from "vue-router";
-import { ElMessage } from "element-plus";
-import upload from "@/components/upload";
-import ServiceInfo from "@/components/pageComponents/ServiceInfo.vue";
-const route = useRoute();
-const router = useRouter();
-
-const uploadRef = ref(null);
-const serviceInfoRef = ref(null);
-const formRef = ref(null);
-const formData = ref({
-    name: "",
-    tel: "",
-    subjectName: "",
-    point: "",
-    serviceCropsJson: [],
-    agriculturalEquipmentJson: [],
-    licenseImg: [],
-});
-
-const validatorTel = (val) => {
-    const phoneRegex = /^1[3-9]\d{9}$/;
-    if (!phoneRegex.test(val)) return "请输入正确的电话号码";
-};
-
-const onSubmit = () => {
-    formData.value.point = "POINT(113.1093017627431 22.574540836684672)";
-    if (pageType.value === "NZ" && !formData.value.licenseImg) {
-        ElMessage.warning("请上传营业执照");
-        return;
-    }
-    const {serviceCropsJson, serviceTypeJson, agriculturalEquipmentJson} = serviceInfoRef.value.getServiceInfo();
-    const params = {
-        ...formData.value,
-        serviceCropsJson,
-        serviceTypeJson,
-        agriculturalEquipmentJson,
-    }
-    VE_API.mine.register(params).then(res =>{
-        if(res.code===0){
-            ElMessage.success('注册成功,待审核')
-            router.push('/mine')
-        }else{
-            ElMessage.error(res.msg)
-        }
-    })
-};
-
-const resetForm = () => {
-    formRef.value.resetValidation();
-};
-
-const number = ref("请选择");
-const numberList = ["请选择", "10", "20", "30", "40"];
-const numberActive = ref(0);
-const handleNumberDropdown = (item, index) => {
-    number.value = item;
-    numberActive.value = index;
-};
-
-const year = ref("请选择");
-const yearList = ["请选择", "10", "20", "30", "40"];
-const yearActive = ref(0);
-const handleYearDropdown = (item, index) => {
-    year.value = item;
-    yearActive.value = index;
-};
-
-const dropdownList = ["周边20公里", "周边10公里", "周边5公里"];
-const active = ref(0);
-const dropdownName = ref("周边20公里");
-const handleDropdown = (item, index) => {
-    dropdownName.value = item;
-    active.value = index;
-};
-
-const input = ref("");
-
-const pageName = ref("");
-const pageType = ref("");
-const identityTyepe = {
-    EXPERT: "专家",
-    NZ: "农资",
-};
-// NF: "农服",
-
-// 服务信息数据,转换为 ServiceInfo 组件需要的格式
-const isEdit = ref(true); // 默认编辑状态
-const crops = ref([
-    { name: "荔枝", isSelf: 0 },
-    { name: "水稻", isSelf: 0 },
-    { name: "菠萝", isSelf: 0 },
-    { name: "柚子", isSelf: 0 },
-    { name: "蔬菜", isSelf: 0 },
-    { name: "小麦", isSelf: 0 },
-]);
-const serviceTypes = ref([
-    { name: "嫁接", isSelf: 0 },
-    { name: "施肥打药", isSelf: 0 },
-    { name: "修剪", isSelf: 0 },
-]);
-const machines = ref([
-    { name: "植保机", isSelf: 0 },
-    { name: "喷药车", isSelf: 0 },
-    { name: "收割机", isSelf: 0 }
-]);
-
-const handleUploadSuccess = (data) => {
-    formData.value.licenseImg = data.imgArr[0];
-};
-
-
-onActivated(() => {
-    pageName.value = identityTyepe[route.query.identity];
-    pageType.value = route.query.identity;
-    formData.value = {};
-    resetForm();
-});
-
-onDeactivated(() => {
-    // 重置 ServiceInfo 组件的选中状态
-    crops.value.forEach(item => {
-        item.selected = false;
-    });
-    serviceTypes.value.forEach(item => {
-        item.selected = false;
-    });
-    machines.value.forEach(item => {
-        item.selected = false;
-    });
-    uploadRef.value && uploadRef.value.uploadReset();
-});
-</script>
-
-<style lang="scss" scoped>
-.register-page {
-    width: 100%;
-    height: 100vh;
-    background-color: #f5f7fb;
-    ::v-deep{
-        .main-content {
-            margin: 12px 0;
-        }
-    }
-    .content {
-        height: calc(100% - 40px);
-        padding: 12px;
-        overflow: auto;
-        box-sizing: border-box;
-        background: linear-gradient(180deg, #e6f2ff 0%, #8fc5fe 100%);
-        .card {
-            background: #fff;
-            border-radius: 12px;
-            padding: 15px 12px;
-            box-sizing: border-box;
-            .card-title {
-                display: flex;
-                align-items: center;
-                margin-bottom: 10px;
-                font-size: 18px;
-
-                img {
-                    width: 14px;
-                    height: 8px;
-                    margin-right: 6px;
-                }
-            }
-            .form {
-                .van-cell {
-                    background: #f5f5f5;
-                    border-radius: 8px;
-                    ::v-deep {
-                        .van-field__label {
-                            color: #666666;
-                            border-right: 1px solid #dddddd;
-                        }
-                    }
-                }
-                .van-cell + .van-cell {
-                    margin-top: 12px;
-                }
-                .btn {
-                    width: 92%;
-                    color: #2199f8;
-                    font-size: 16px;
-                    border-radius: 8px;
-                    text-align: center;
-                    padding: 12px;
-                    margin-top: 12px;
-                    border: 1px solid #2199f8;
-                }
-
-                .el-dropdown-link-text {
-                    color: #2199f8;
-                    display: flex;
-                    align-items: center;
-                }
-
-                .flex {
-                    display: flex;
-                    align-items: center;
-                    margin-top: 12px;
-                    .el-dropdown-link {
-                        display: flex;
-                        align-items: center;
-                        justify-content: center;
-                        color: #2199f8;
-                        width: 100px;
-                        font-size: 12px;
-                        padding: 14px 0;
-                        border-radius: 8px;
-                        border: 1px solid rgba(33, 153, 248, 0.2);
-                        background: #fff;
-                        margin-left: 5px;
-                    }
-                }
-                .el-icon--right {
-                    margin-left: 4px;
-                }
-                .upload-btn {
-                    color: #2199f8;
-                    font-size: 16px;
-                    padding: 12px 0;
-                    text-align: center;
-                    width: 170px;
-                    border-radius: 8px;
-                    border: 1px solid #2199f8;
-                    background: #fff;
-                }
-                .upload-wrap{
-                    margin-top: 12px;
-                }
-            }
-        }
-        .card + .card {
-            margin-top: 12px;
-        }
-        .card-footer {
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            font-size: 16px;
-            .tips {
-                position: relative;
-                &::before {
-                    content: "*";
-                    position: absolute;
-                    top: 0;
-                    right: -1px;
-                    color: #ff0000;
-                    font-weight: bold;
-                }
-            }
-            .btn {
-                color: #fff;
-                background: #2199f8;
-                border-radius: 8px;
-                padding: 5px 37px;
-                text-align: center;
-                font-size: 14px;
-            }
-        }
-
-        .button {
-            border-radius: 8px;
-            font-size: 18px;
-            padding: 10px;
-            text-align: center;
-            background: #2199f8;
-            color: #fff;
-            margin-top: 12px;
-            border: none;
-        }
-    }
-}
-</style>
-
-<style lang="scss">
-.v-dropdown-menu {
-    .active {
-        color: #2199f8;
-    }
-}
-
-.image-preview {
-    position: fixed;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    background: rgba(0, 0, 0, 0.8);
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    z-index: 1000;
-}
-
-.image-preview img {
-    max-width: 90%;
-    max-height: 90%;
-    object-fit: contain;
-}
-</style>

+ 0 - 159
src/views/old_mini/mine/pages/serviceDetail.vue

@@ -1,159 +0,0 @@
-<template>
-    <div class="service-detail-page">
-        <custom-header name="农场详情"></custom-header>
-        <div class="service-detail-content">
-            <!-- <farm-info-card
-                v-if="
-                    farmInfoData.farmName !== '' ||
-                    farmInfoData.area !== '' ||
-                    farmInfoData.variety !== '' ||
-                    farmInfoData.address !== ''
-                "
-                class="record-box"
-                :data="farmInfoData"
-            >
-            </farm-info-card> -->
-            <div class="farm-service-box">
-                <div class="service-title">
-                    <img src="@/assets/img/home/label-icon.png" alt="" />
-                    <span>农事服务</span>
-                </div>
-                <stats-box :stats-data="serviceStatsData" />
-                <div
-                    v-for="(section, index) in detailList"
-                    :key="index"
-                    class="content-section"
-                >
-                    <record-item
-                        :record-item-data="section"
-                        content-mode="serviceDetail"
-                        title-mode="default"
-                        title-right-text="生成成果报告"
-                        class="recipe-item"
-                        showFarmImage
-                        @titleRightClick="handleTitleRightClick"
-                    />
-                </div>
-                <empty
-                    v-if="detailList.length === 0"
-                    image="https://birdseye-img.sysuimars.com/birdseye-look-mini/custom-empty-image.png"
-                    image-size="80"
-                    description="暂无数据"
-                    class="empty-state"
-                />
-            </div>
-        </div>
-    </div>
-</template>
-
-<script setup>
-import customHeader from "@/components/customHeader.vue";
-// import FarmInfoCard from "@/components/pageComponents/FarmInfoCard.vue";
-import StatsBox from "@/components/pageComponents/StatsBox.vue";
-import { ref, onMounted, computed } from "vue";
-import { useRoute, useRouter } from "vue-router";
-import recordItem from "@/components/recordItem.vue";
-import { Empty } from "vant";
-const route = useRoute();
-const router = useRouter();
-const farmIdVal = ref(null);
-onMounted(() => {
-    farmIdVal.value = route.query.farmId;
-    getFarmDetail();
-    getFarmPastServiceCost();
-    getDetailList();
-});
-
-const farmDetail = ref({});
-const getFarmDetail = () => {
-    VE_API.user.getFarmDetail({ farmId: farmIdVal.value }).then(({ data }) => {
-        farmDetail.value = data || {};
-    });
-};
-
-// 计算属性,确保数据符合 FarmInfoCard 的验证要求
-const farmInfoData = computed(() => {
-    return {
-        farmName: farmDetail.value.name || "",
-        area: farmDetail.value.mianji ? farmDetail.value.mianji + "亩" : "",
-        variety: farmDetail.value.typeName || "",
-        address: farmDetail.value.address || "",
-        maxWidth: "100%",
-    };
-});
-
-const serviceStatsData = ref([]);
-const getFarmPastServiceCost = () => {
-    VE_API.user.getFarmPastServiceCost({ farmId: farmIdVal.value }).then(({ data }) => {
-        serviceStatsData.value = [
-            { value: data?.totalCost, unit: "元", desc: "成交额" },
-            { value: data?.serviceCount, unit: "次", desc: "服务次数" },
-        ];
-    });
-};
-
-const detailList = ref([]);
-const getDetailList = () => {
-    const params = {
-        farmId: farmIdVal.value,
-        limit: 99,
-        page: 1,
-        flowStatus: "5",
-    };
-    VE_API.user.getDetailList(params).then(({ data }) => {
-        detailList.value = data || [];
-    });
-};
-
-const handleTitleRightClick = ({ id }) => {
-    router.push({
-        path: "/achievement_report",
-        query: { miniJson: JSON.stringify({ id }) },
-    });
-};
-</script>
-
-<style lang="scss" scoped>
-.service-detail-page {
-    width: 100%;
-    height: 100vh;
-    background: #f7f7f7;
-    display: flex;
-    flex-direction: column;
-    overflow: hidden;
-    .service-detail-content {
-        flex: 1;
-        overflow-y: auto;
-        padding: 10px 12px;
-        .record-box {
-            margin-bottom: 0;
-        }
-        .farm-service-box {
-            padding: 16px 12px;
-            background: #fff;
-            border-radius: 8px;
-            margin-top: 12px;
-            .service-title {
-                display: flex;
-                align-items: center;
-                gap: 6px;
-                font-size: 16px;
-                color: #000;
-                font-weight: 500;
-                padding-bottom: 12px;
-                border-bottom: 1px solid #f5f5f5;
-                img {
-                    width: 14px;
-                    height: 8px;
-                }
-            }
-            .content-section {
-                .recipe-item {
-                    border: 1px solid rgba(0, 0, 0, 0.1);
-                    margin: 12px 0 0 0;
-                }
-            }
-        }
-    }
-}
-</style>

+ 0 - 140
src/views/old_mini/mine/pages/serviceRecords.vue

@@ -1,140 +0,0 @@
-<template>
-    <div class="service-records-page">
-        <custom-header name="服务记录"></custom-header>
-        <div class="record-list">
-            <div v-if="recordList.length === 0" class="empty-data">暂无数据</div>
-            <div v-for="(item, index) in recordList" :key="index" class="record-card" @click="handleItemClick(item)">
-                <img class="thumb" :src=" base_img_url2 + item.executeEvidenceList[0] + resize" alt="照片" />
-                <div class="card-body">
-                    <div class="card-header">
-                        <div class="title van-ellipsis">{{ item.farmWorkName }}</div>
-                        <div class="date">{{ item.executeDate }}</div>
-                    </div>
-                    <div class="line">
-                        <span class="label">农场名称:</span>
-                        <span class="text van-ellipsis">{{ item.farmName }}</span>
-                    </div>
-                    <div class="line">
-                        <span class="label">药物处方:</span>
-                        <span class="text van-ellipsis">{{ getPrescriptionText(item) }}</span>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</template>
-<script setup>
-import { ref, onMounted } from "vue";
-import customHeader from "@/components/customHeader.vue";
-import { useRouter } from "vue-router";
-import { base_img_url2 } from "@/api/config";
-const router = useRouter();
-const resize = "?x-oss-process=image/resize,w_300";
-// 服务记录列表数据
-const recordList = ref([]);
-
-onMounted(() => {
-    getSimpleList();
-});
-
-const getSimpleList = async () => {
-    const { data } = await VE_API.mine.getSimpleList({
-        role: localStorage.getItem("SET_USER_CUR_ROLE"),
-        includePrescription: true,
-        isServiceRecord: true,
-        flowStatus: "5",
-    });
-    if (data.length > 0) {
-        recordList.value = data;
-    }
-};
-
-// 处理列表项点击
-const handleItemClick = (data) => {
-    router.push(`/review_work?miniJson={"id":${data.id},"goBack":true,"isBtn":true}`);
-};
-
-// 获取药肥处方文本(从prescriptionList中提取pesticideFertilizerList的defaultName,用+连接)
-const getPrescriptionText = (item) => {
-    if (!item.prescriptionList || !Array.isArray(item.prescriptionList) || item.prescriptionList.length === 0) {
-        return item.prescription || "无处方";
-    }
-
-    const nameList = [];
-    item.prescriptionList.forEach((prescription) => {
-        if (prescription.pesticideFertilizerList && Array.isArray(prescription.pesticideFertilizerList)) {
-            prescription.pesticideFertilizerList.forEach((pesticide) => {
-                if (pesticide.defaultName || pesticide.pesticideFertilizerName) {
-                    nameList.push(pesticide.defaultName || pesticide.pesticideFertilizerName);
-                }
-            });
-        }
-    });
-
-    return nameList.length > 0 ? nameList.join(" + ") : item.prescription || "无处方";
-};
-</script>
-<style lang="scss" scoped>
-.service-records-page {
-    width: 100%;
-    height: 100vh;
-    background: #f5f5f5;
-    .record-list {
-        padding: 10px 12px;
-        display: flex;
-        flex-direction: column;
-        gap: 14px;
-        height: calc(100% - 60px);
-        overflow-y: auto;
-        .empty-data {
-            text-align: center;
-            padding: 60px 0;
-            color: #999999;
-            font-size: 14px;
-        }
-    }
-    .record-card {
-        display: flex;
-        gap: 16px;
-        padding: 10px;
-        background: #ffffff;
-        border-radius: 16px;
-        align-items: center;
-        .thumb {
-            width: 64px;
-            height: 64px;
-            border-radius: 8px;
-            object-fit: cover;
-        }
-        .card-body {
-            width: calc(100% - 64px - 16px);
-            .card-header {
-                display: flex;
-                justify-content: space-between;
-                align-items: center;
-                .title {
-                    font-size: 16px;
-                    font-weight: 600;
-                    margin-bottom: 4px;
-                }
-                .date {
-                    font-size: 12px;
-                    color: #999999;
-                }
-            }
-            .line {
-                font-size: 12px;
-                color: #666;
-                display: flex;
-                align-items: center;
-                .label {
-                    color: #bbb;
-                }
-                .text {
-                    flex: 1;
-                }
-            }
-        }
-    }
-}
-</style>

+ 0 - 638
src/views/old_mini/mine/pages/teamManage.vue

@@ -1,638 +0,0 @@
-<template>
-    <div class="team-management-page">
-        <custom-header :name="route.query.add ? '选择团队成员' : '团队管理'"></custom-header>
-        <div class="team-content">
-            <div class="team-title" v-show="!route.query.add">当前团队总人数({{ teamList.length || 0 }}人)</div>
-            <div class="team-list" v-if="teamList && teamList.length">
-                <div class="list-item" v-for="ele in teamList" :key="ele.id">
-                    <Checkbox v-if="route.query.add" @change="changeCheck" v-model="ele.checked"></Checkbox>
-                    <!-- <farm-info-card
-                        class="item-info"
-                        @click="handleItem(ele)"
-                        :style="{ width: !route.query.add ? '100%' : 'calc(100% - 55px)' }"
-                        :data="{
-                            ...ele,
-                            roleName: ele.role == 1 ? '超级管理员' : ele.role == 2 ? '项目管理员' : '普通成员',
-                            className: ele.role == 1 ? 'tag-role' : ele.role == 2 ? '' : 'tag-gray',
-                            maxWidth: 'fit-content',
-                            address: ele.role == 1 ? ele.store?.address || '--' : null,
-                        }"
-                    >
-                        <template #right v-if="ele.role === 2 && !route.query.add && currentUserRole === 1">
-                            <div @click.stop="handlePermission(ele)">权限设置</div>
-                        </template>
-                    </farm-info-card> -->
-                </div>
-            </div>
-            <div v-else class="empty-wrap">
-                <div class="empty-text">暂无数据</div>
-            </div>
-        </div>
-        <div class="custom-bottom-fixed-btns" :class="{ center: currentUserRole == 2 }" v-if="(currentUserRole === 1 || (currentUserRole !== 3 && currentEditPermissions))">
-            <div class="bottom-btn secondary-btn" @click="handleSetAdmin" v-if="currentUserRole === 1">
-                {{ route.query.add ? "取消选择" : "设置管理员" }}
-            </div>
-            <div class="bottom-btn primary-btn" @click="handleAddTeamMember">
-                {{ route.query.add ? "确认设为" : "邀请团队成员" }}
-            </div>
-        </div>
-
-        <!-- 新增团队成员弹窗 -->
-        <Popup
-            v-model:show="showAddMemberPopup"
-            closeable
-            round
-            class="add-member-popup"
-            :close-on-click-overlay="false"
-            @closed="handlePopupClosed"
-        >
-            <div class="popup-content">
-                <div class="popup-title">{{ detailType === "add" ? "新增团队成员" : "成员信息" }}</div>
-                <el-form
-                    ref="formRef"
-                    :model="formData"
-                    :rules="rules"
-                    label-position="top"
-                    class="member-form"
-                    size="large"
-                >
-                    <el-form-item label="姓名" prop="name">
-                        <el-input
-                            v-model="formData.name"
-                            placeholder="请输入姓名"
-                            clearable
-                            :readonly="detailType === 'detail'"
-                        />
-                    </el-form-item>
-                    <el-form-item label="手机号" prop="phone">
-                        <el-input
-                            v-model="formData.phone"
-                            placeholder="请输入手机号"
-                            clearable
-                            maxlength="11"
-                            :readonly="detailType === 'detail'"
-                        />
-                    </el-form-item>
-                    <!-- <el-form-item label="角色类型" prop="duties">
-                        <div class="role-type-grid">
-                            <div
-                                v-for="role in dutyList"
-                                :key="role.code"
-                                class="role-btn"
-                                :class="{
-                                    active: formData.duties.includes(role.code),
-                                    readonly: detailType === 'detail',
-                                }"
-                                @click="toggleRole(role.code)"
-                            >
-                                {{ role.name }}
-                            </div>
-                        </div>
-                    </el-form-item> -->
-                </el-form>
-                <div class="popup-footer" v-show="detailType === 'add'">
-                    <div class="footer-btn share-btn" @click="handleShare">分享微信好友</div>
-                    <div class="footer-btn confirm-btn" @click="handleConfirm">确认添加</div>
-                </div>
-                <template v-if="currentPermissionItem?.role !== 1">
-                    <div class="popup-footer" v-show="detailType === 'detail' && (currentUserRole === 1 || (currentUserRole !== 3 && currentEditPermissions))">
-                        <div class="footer-btn cancel-admin-btn" @click="handleDelete">删除成员</div>
-                    </div>
-                </template>
-            </div>
-        </Popup>
-
-        <!-- 权限设置弹窗 -->
-        <Popup
-            v-model:show="showPermissionPopup"
-            closeable
-            round
-            class="add-member-popup"
-            :close-on-click-overlay="false"
-            @closed="handlePermissionPopupClosed"
-        >
-            <div class="popup-content">
-                <div class="popup-title">权限设置</div>
-                <div class="role-type-grid permission-list">
-                    <div
-                        v-for="permission in permissionList"
-                        :key="permission.code"
-                        class="role-btn"
-                        :class="{ active: selectedPermission.includes(permission.code) }"
-                        @click="togglePermission(permission.code)"
-                    >
-                        {{ permission.name }}
-                    </div>
-                </div>
-                <div class="popup-footer">
-                    <div class="footer-btn cancel-admin-btn" @click="handleCancelAdmin">
-                        {{ route.query.add ? "取消" : "取消管理权限" }}
-                    </div>
-                    <div class="footer-btn confirm-btn" @click="handleConfirmPermission">确认设置</div>
-                </div>
-            </div>
-        </Popup>
-    </div>
-</template>
-
-<script setup>
-import customHeader from "@/components/customHeader.vue";
-import { ref, reactive, onMounted } from "vue";
-import { useRouter, useRoute } from "vue-router";
-import { Popup, Checkbox } from "vant";
-import wx from "weixin-js-sdk";
-import { ElMessage, ElMessageBox } from "element-plus";
-// import FarmInfoCard from "@/components/pageComponents/FarmInfoCard.vue";
-
-const router = useRouter();
-const formRef = ref(null);
-const showAddMemberPopup = ref(false);
-const showPermissionPopup = ref(false);
-const route = useRoute();
-
-onMounted(() => {
-    getManagerList();
-    //获取职责列表
-    getDutyList();
-    //获取权限列表
-    getPermissionList();
-});
-
-//职责列表
-const dutyList = ref([]);
-//获取职责列表
-const getDutyList = async () => {
-    const { data } = await VE_API.mine.listDutyList();
-    if (data && data.length > 0) {
-        dutyList.value = data;
-        // 默认选中第一个角色
-        // formData.duties = [data[0].code];
-    }
-};
-
-const teamList = ref([]);
-// 当前登录用户在团队中的角色(1 超管、2 项目管理员、3 普通成员)
-const currentUserRole = ref(null);
-const currentEditPermissions = ref(false);
-//查询当前农资店的成员列表
-const getManagerList = async () => {
-    const { data } = await VE_API.mine.listManagerList();
-    if (Array.isArray(data) && data.length > 0) {
-        if (route.query.add) {
-            teamList.value = data.filter((item) => item.role == 3);
-        } else {
-            teamList.value = data;
-        }
-
-        // 从本地存储中获取当前用户 miniUserId,并在成员列表中找到自己的角色
-        const miniUserId = localStorage.getItem("MINI_USER_ID");
-        if (miniUserId) {
-            const selfItem = data.find(
-                (item) =>
-                    item.miniUserId != null &&
-                    String(item.miniUserId) === String(miniUserId)
-            );
-            if (selfItem) {
-                currentUserRole.value = selfItem.role;
-                currentEditPermissions.value = selfItem.permissionList.includes("增删成员");
-            }
-        }
-    } else {
-        teamList.value = [];
-        currentUserRole.value = null;
-        currentEditPermissions.value = false;
-    }
-};
-
-// 权限数据
-const permissionList = ref([]);
-const selectedPermission = ref([]);
-const currentPermissionItem = ref(null);
-
-//获取权限列表
-const getPermissionList = async () => {
-    const { data } = await VE_API.mine.listPermissionList();
-    permissionList.value = data || [];
-};
-
-const handlePermission = (item) => {
-    currentPermissionItem.value = item;
-    // 初始化选中的权限,如果item中有permissions字段,则使用它,否则为空数组
-    if (item.permissionEnumList) {
-        // 如果permissions是字符串,需要转换为数组
-        selectedPermission.value = Array.isArray(item.permissionEnumList)
-            ? [...item.permissionEnumList]
-            : typeof item.permissionEnumList === "string"
-            ? item.permissionEnumList.split(",")
-            : [];
-    } else {
-        selectedPermission.value = [];
-    }
-    showPermissionPopup.value = true;
-};
-
-// 切换权限选择(多选)
-const togglePermission = (value) => {
-    const index = selectedPermission.value.indexOf(value);
-    if (index > -1) {
-        // 如果已选中,则移除
-        selectedPermission.value.splice(index, 1);
-    } else {
-        // 如果未选中,则添加
-        selectedPermission.value.push(value);
-    }
-};
-
-// 确认权限设置
-const handleConfirmPermission = async () => {
-    if (selectedPermission.value.length === 0) {
-        ElMessage.warning("请至少选择一个权限");
-        return;
-    }
-    if (route.query.add) {
-        const params = {
-            ids: filterList.value.map((item) => item.id),
-            permissions: selectedPermission.value,
-            role: 2,
-        };
-        const { code, msg } = await VE_API.mine.batchSaveManager(params);
-        if (code === 0) {
-            ElMessage.success("权限设置成功");
-            showPermissionPopup.value = false;
-            router.go(-1);
-        } else {
-            ElMessage.error(msg);
-        }
-    } else {
-        const params = {
-            id: currentPermissionItem.value.id,
-            permissions: selectedPermission.value,
-        };
-        const { code, msg } = await VE_API.mine.saveManager(params);
-        if (code === 0) {
-            ElMessage.success("权限设置成功");
-            showPermissionPopup.value = false;
-            // 刷新列表
-            getManagerList();
-        } else {
-            ElMessage.error(msg);
-        }
-    }
-};
-
-// 权限弹窗关闭处理
-const handlePermissionPopupClosed = () => {
-    currentPermissionItem.value = null;
-    selectedPermission.value = [];
-};
-
-// 过滤选中列表
-const filterList = ref([]);
-const changeCheck = () => {
-    filterList.value = teamList.value.filter((item) => item.checked);
-};
-
-// 表单数据
-const formData = reactive({
-    name: "",
-    phone: "",
-    duties: [],
-});
-
-// 切换角色选择(多选)
-const toggleRole = (code) => {
-    const index = formData.duties.indexOf(code);
-    if (index > -1) {
-        // 如果已选中,则移除
-        formData.duties.splice(index, 1);
-    } else {
-        // 如果未选中,则添加
-        formData.duties.push(code);
-    }
-    // 触发校验
-    if (formRef.value) {
-        formRef.value.validateField("duties");
-    }
-};
-
-// 表单校验规则
-const rules = reactive({
-    name: [
-        { required: true, message: "请输入姓名", trigger: "blur" },
-        { min: 1, max: 20, message: "姓名长度在 1 到 20 个字符", trigger: "blur" },
-    ],
-    phone: [
-        { required: true, message: "请输入手机号", trigger: "blur" },
-        { pattern: /^1[3-9]\d{9}$/, message: "请输入正确的手机号", trigger: "blur" },
-    ],
-    duties: [
-        {
-            required: true,
-            validator: (rule, value, callback) => {
-                if (!value || value.length === 0) {
-                    callback(new Error("请选择角色类型"));
-                } else {
-                    callback();
-                }
-            },
-            trigger: "change",
-        },
-    ],
-});
-
-// 取消管理员
-const handleCancelAdmin = async () => {
-    if (route.query.add) {
-        showPermissionPopup.value = false;
-        return;
-    }
-    ElMessageBox.confirm("确定取消管理员权限吗?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        zIndex: 3500,
-        type: "warning",
-    })
-        .then(async () => {
-            const { code, msg } = await VE_API.mine.saveManager({ id: currentPermissionItem.value.id, role: 3 });
-            if (code === 0) {
-                ElMessage.success("取消管理员权限成功");
-                teamList.value = [];
-                getManagerList();
-                showPermissionPopup.value = false;
-            } else {
-                ElMessage.error(msg);
-            }
-        })
-        .catch(() => {});
-};
-
-// 弹窗关闭处理
-const handlePopupClosed = () => {
-    // 重置表单
-    if (formRef.value) {
-        formRef.value.resetFields();
-    }
-    // 重置为默认值(选中第一个角色)
-    // if (dutyList.value && dutyList.value.length > 0) {
-    //     formData.duties = [dutyList.value[0].code];
-    // } else {
-    //     formData.duties = [];
-    // }
-};
-
-// 分享微信好友
-const handleShare = () => {
-    const query = {
-        askInfo: { title: "分享团队", content: "是否邀请好友加入团队" },
-        shareText: "邀请您加入我的团队,快来查看吧~",
-        targetUrl: `user_info`,
-        paramsPage: JSON.stringify({
-            storeId: teamList.value[0]?.storeId || '',
-        }),
-        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 handleConfirm = () => {
-    if (!formRef.value) return;
-    formRef.value.validate(async (valid) => {
-        if (valid) {
-            const { code, msg } = await VE_API.mine.saveManager({ ...formData, role: 3 });
-            if (code === 0) {
-                ElMessage.success("添加成功");
-                showAddMemberPopup.value = false;
-                // 刷新列表
-                getManagerList();
-            } else {
-                ElMessage.error(msg);
-            }
-        } else {
-            // 校验失败,Element Plus 会自动显示错误信息
-            return false;
-        }
-    });
-};
-
-const handleAddTeamMember = async () => {
-    if (route.query.add) {
-        if (filterList.value.length) {
-            // 批量设置管理员时,默认勾选全部权限(排除"农事规划")
-            if (Array.isArray(permissionList.value) && permissionList.value.length > 0) {
-                selectedPermission.value = permissionList.value
-                    .filter((p) => p.name !== "农事规划")
-                    .map((p) => p.code);
-            }
-            showPermissionPopup.value = true;
-        } else {
-            ElMessage.warning("请选择团队成员");
-            return;
-        }
-    } else {
-        detailType.value = "add";
-        // showAddMemberPopup.value = true;
-        formData.name = "";
-        formData.phone = "";
-        formData.duties = [];
-        handleShare()
-    }
-};
-
-const handleSetAdmin = () => {
-    if (route.query.add) {
-        teamList.value = teamList.value.map((item) => {
-            item.checked = false;
-            return item;
-        });
-    } else {
-        router.push("/project_manager");
-    }
-};
-
-const detailType = ref("add");
-const handleItem = (item) => {
-    if (route.query.add) {
-        item.checked = !item.checked;
-    } else {
-        detailType.value = "detail";
-        showAddMemberPopup.value = true;
-        // 记录当前选中的成员,后续删除时使用
-        currentPermissionItem.value = item;
-        // 回填已知字段
-        formData.name = item.name || "";
-        formData.phone = item.phone || "";
-        // if (Array.isArray(item.dutyEnumList)) {
-        //     formData.duties = [...item.dutyEnumList];
-        // }
-    }
-};
-
-const handleDelete = () => {
-    ElMessageBox.confirm("确定删除该成员吗?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        zIndex: 3500,
-        type: "warning",
-    })
-        .then(async () => {
-            try {
-                const { code, msg } = await VE_API.mine.deleteManager({
-                    id: currentPermissionItem.value.id,
-                });
-                if (code === 0) {
-                    ElMessage.success("删除成功");
-                    showAddMemberPopup.value = false;
-                    await getManagerList();
-                } else {
-                    ElMessage.error(msg || "删除失败");
-                }
-            } catch (error) {
-                ElMessage.error("删除失败,请稍后重试");
-            }
-        })
-        .catch(() => {});
-};
-</script>
-
-<style lang="scss" scoped>
-.team-management-page {
-    width: 100%;
-    height: 100vh;
-    background-color: #f5f7fb;
-    .team-content {
-        width: 100%;
-        height: calc(100% - 40px);
-        padding: 10px 12px;
-        box-sizing: border-box;
-        .team-title {
-            margin-bottom: 10px;
-        }
-        .team-list {
-            .list-item {
-                display: flex;
-                justify-content: space-between;
-                width: 100%;
-                .item-info {
-                    width: calc(100% - 55px);
-                }
-            }
-            .list-item + .list-item {
-                margin-top: 10px;
-            }
-        }
-        .empty-wrap {
-            padding-top: 40px;
-            text-align: center;
-            .empty-text {
-                font-size: 14px;
-                color: #86909c;
-            }
-        }
-    }
-    .center {
-        justify-content: center;
-    }
-}
-
-.add-member-popup {
-    width: 90%;
-    max-width: 400px;
-    box-sizing: border-box;
-    padding: 24px 18px 20px;
-    background: #ffffff;
-    border-radius: 10px;
-
-    ::v-deep {
-        .van-popup__close-icon {
-            color: #000;
-            font-size: 18px;
-        }
-    }
-
-    .popup-content {
-        .popup-title {
-            font-size: 18px;
-            font-weight: 600;
-            color: #000;
-            text-align: center;
-            margin-bottom: 15px;
-        }
-
-        .member-form {
-            ::v-deep {
-                .el-form-item {
-                    .el-form-item__label {
-                        font-size: 15px;
-                        color: #000;
-                    }
-                }
-            }
-        }
-
-        .role-type-grid {
-            display: flex;
-            flex-wrap: wrap;
-            justify-content: space-between;
-            gap: 10px 0;
-            width: 100%;
-
-            .role-btn {
-                width: calc(50% - 8px);
-                border-radius: 4px;
-                text-align: center;
-                font-size: 14px;
-                color: rgba(0, 0, 0, 0.26);
-                border: 1px solid rgba(0, 0, 0, 0.26);
-
-                &.active {
-                    background: #2199f8;
-                    color: #ffffff;
-                    border-color: #2199f8;
-                }
-                &.readonly {
-                    pointer-events: none;
-                }
-            }
-
-            &.permission-list {
-                .role-btn {
-                    padding: 10px 0;
-                }
-            }
-        }
-
-        .popup-footer {
-            display: flex;
-            gap: 20px;
-            margin-top: 30px;
-            padding-top: 20px;
-            border-top: 1px solid rgba(0, 0, 0, 0.1);
-
-            .footer-btn {
-                flex: 1;
-                padding: 10px 20px;
-                border-radius: 25px;
-                text-align: center;
-                font-size: 16px;
-                color: #ffffff;
-
-                &.share-btn {
-                    background: #ff953d;
-                }
-
-                &.confirm-btn {
-                    background: #2199f8;
-                }
-
-                &.cancel-admin-btn {
-                    color: #666666;
-                    border: 1px solid rgba(153, 153, 153, 0.5);
-                }
-            }
-        }
-    }
-}
-</style>

+ 0 - 237
src/views/old_mini/mine/pages/userInfo.vue

@@ -1,237 +0,0 @@
-<template>
-    <div class="user-info-page">
-        <custom-header name="个人信息填写" :isClose="true"></custom-header>
-        <div class="form-content">
-            <el-form
-                ref="formRef"
-                :model="formData"
-                :rules="rules"
-                label-position="top"
-                class="user-form"
-                size="large"
-            >
-                <el-form-item label="姓名" prop="name">
-                    <el-input v-model="formData.name" placeholder="请输入姓名" clearable />
-                </el-form-item>
-                <el-form-item label="手机号" prop="phone">
-                    <el-input
-                        v-model="formData.phone"
-                        placeholder="请输入手机号"
-                        clearable
-                        maxlength="11"
-                    />
-                </el-form-item>
-                <!-- <el-form-item label="角色类型" prop="duties">
-                    <div class="role-type-grid">
-                        <div
-                            v-for="role in roleList"
-                            :key="role.code"
-                            class="role-btn"
-                            :class="{ active: formData.duties.includes(role.code) }"
-                            @click="selectRole(role.code)"
-                        >
-                            {{ role.name }}
-                        </div>
-                    </div>
-                </el-form-item> -->
-            </el-form>
-        </div>
-        <div class="custom-bottom-fixed-btns">
-            <div class="bottom-btn primary-btn" @click="handleConfirm">确认加入</div>
-        </div>
-    </div>
-</template>
-
-<script setup>
-import customHeader from "@/components/customHeader.vue";
-import { ref, reactive, onMounted } from "vue";
-import { useRouter, useRoute } from "vue-router";
-import { ElMessage } from "element-plus";
-
-const router = useRouter();
-const route = useRoute();
-const formRef = ref(null);
-
-// 表单数据
-const formData = reactive({
-    name: "",
-    phone: "",
-    duties: [],
-});
-
-// 角色列表
-const roleList = ref([]);
-//获取角色列表
-const getRoleList = async () => {
-    const { data } = await VE_API.mine.listDutyList();
-    if (data && data.length > 0) {
-        roleList.value = data;
-        // 默认选中第一个角色
-        // formData.duties = [data[0].code];
-    }
-};
-
-// 表单验证规则
-const rules = reactive({
-    name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
-    phone: [
-        { required: true, message: "请输入手机号", trigger: "blur" },
-        {
-            pattern: /^1[3-9]\d{9}$/,
-            message: "请输入正确的手机号码",
-            trigger: ["blur", "change"],
-        },
-    ],
-    duties: [
-        {
-            validator: (_, value, callback) => {
-                if (Array.isArray(value) && value.length > 0) {
-                    callback();
-                } else {
-                    callback(new Error("请选择角色类型"));
-                }
-            },
-            trigger: "change",
-        },
-    ],
-});
-
-// 选择角色(多选)
-const selectRole = (value) => {
-    const idx = formData.duties.indexOf(value);
-    if (idx > -1) {
-        // 已选中则取消选择
-        formData.duties.splice(idx, 1);
-    } else {
-        formData.duties.push(value);
-    }
-};
-
-const storeId = ref(null);
-// 确认加入
-const handleConfirm = () => {
-    if (!formRef.value) return;
-    formRef.value.validate(async (valid) => {
-        if (valid) {
-            const { code, msg } = await VE_API.mine.inviteManager({ ...formData, role: 3, storeId: storeId.value,miniUserId: localStorage.getItem("MINI_USER_ID")});
-            if (code === 0) {
-                ElMessage.success("加入成功");
-                setTimeout(() => {
-                    router.replace('/home');
-                }, 1000);
-            } else {
-                ElMessage.error(msg);
-            }
-        } else {
-            // 校验失败,Element Plus 会自动显示错误信息
-            return false;
-        }
-    });
-};
-
-onMounted(() => {
-    if(localStorage.getItem("SET_USER_CUR_ROLE") == 2){
-        router.replace('/home');
-        return;
-    }
-    getRoleList();
-    if (route.query.miniJson) {
-        const data = JSON.parse(route.query.miniJson);
-        storeId.value = JSON.parse(data.paramsPage).storeId;
-    }
-});
-</script>
-
-<style lang="scss" scoped>
-.user-info-page {
-    width: 100%;
-    min-height: 100vh;
-    background: #f5f5f5;
-    padding-bottom: 80px;
-
-    .form-content {
-        padding: 20px 12px;
-        background: #fff;
-        margin: 12px;
-        border-radius: 12px;
-
-        .user-form {
-            ::v-deep {
-                .el-form-item {
-                    margin-bottom: 24px;
-
-                    &:last-child {
-                        margin-bottom: 0;
-                    }
-
-                    .el-form-item__label {
-                        font-size: 14px;
-                        color: #1d2129;
-                        font-weight: 500;
-                        padding-bottom: 8px;
-                    }
-
-                    .el-input__wrapper {
-                        border-radius: 8px;
-                        box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15) inset;
-                        background: #fff;
-
-                        &:hover {
-                            box-shadow: 0 0 0 1px rgba(33, 153, 248, 0.5) inset;
-                        }
-
-                        &.is-focus {
-                            box-shadow: 0 0 0 1px #2199f8 inset;
-                        }
-
-                        .el-input__inner {
-                            color: #1d2129;
-                            font-size: 14px;
-
-                            &::placeholder {
-                                color: #86909c;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        .role-type-grid {
-            display: flex;
-            flex-wrap: wrap;
-            gap: 10px;
-            width: 100%;
-            .role-btn {
-                width: calc(50% - 10px);
-                text-align: center;
-                border-radius: 8px;
-                font-size: 14px;
-                color: #86909c;
-                background: #fff;
-                border: 1px solid rgba(153, 153, 153, 0.3);
-                padding: 4px 0;
-                &.active {
-                    background: #2199f8;
-                    color: #fff;
-                    border-color: #2199f8;
-                }
-            }
-        }
-    }
-}
-
-.custom-bottom-fixed-btns {
-    .bottom-btn {
-        width: 100%;
-        padding: 13px 0;
-        font-size: 16px;
-
-        &.primary-btn {
-            background: #2199f8;
-            color: #fff;
-        }
-    }
-}
-</style>
-