|
|
@@ -1,69 +1,73 @@
|
|
|
<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" v-loading="loadingPage">
|
|
|
- <!-- <div class="box-title">
|
|
|
+ <custom-header name="基本信息" @close="goBack"></custom-header>
|
|
|
+ <div class="page-content">
|
|
|
+ <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" v-loading="loadingPage">
|
|
|
+ <!-- <div class="box-title">
|
|
|
<img src="@/assets/img/home/label-icon.png" />
|
|
|
农场情况
|
|
|
</div> -->
|
|
|
- <div class="box-content">
|
|
|
- <div class="box-item">
|
|
|
- <div class="item-name">
|
|
|
- <span>请选择您的果园土壤类型</span>
|
|
|
- </div>
|
|
|
- <div class="tips">土壤类型确认最佳施肥策略</div>
|
|
|
- <div class="item-checkbox">
|
|
|
- <el-radio-group v-model="basicForm.soilTypes">
|
|
|
- <el-radio-button v-for="(item, index) in basicFarmFormData.soilTypes" :key="index"
|
|
|
- :label="item.name" :value="item.code" />
|
|
|
- </el-radio-group>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="box-item">
|
|
|
- <div class="item-name">
|
|
|
- <span>请选择您的灌溉方式</span>
|
|
|
- <span class="sub-name"> (可多选)</span>
|
|
|
+ <div class="box-content">
|
|
|
+ <div class="box-item">
|
|
|
+ <div class="item-name">
|
|
|
+ <span>请选择您的果园土壤类型</span>
|
|
|
+ </div>
|
|
|
+ <div class="tips">土壤类型确认最佳施肥策略</div>
|
|
|
+ <div class="item-checkbox">
|
|
|
+ <el-radio-group v-model="basicForm.soilTypes">
|
|
|
+ <el-radio-button v-for="(item, index) in basicFarmFormData.soilTypes" :key="index"
|
|
|
+ :label="item.name" :value="item.code" />
|
|
|
+ </el-radio-group>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="tips">灌溉方式确认药肥最佳配比</div>
|
|
|
- <div class="item-checkbox">
|
|
|
- <div class="tag-group add-tag-group">
|
|
|
- <div class="tag-item" :class="{ self: item.custom === true, selected: item.selected }"
|
|
|
- @click="handleSelect('irrigationMethods', idx, item.custom)"
|
|
|
- v-for="(item, idx) in basicFarmFormData.irrigationMethods" :key="'ce-' + idx">
|
|
|
- <span class="text">{{ item.name }}</span>
|
|
|
+ <div class="box-item">
|
|
|
+ <div class="item-name">
|
|
|
+ <span>请选择您的灌溉方式</span>
|
|
|
+ <span class="sub-name"> (可多选)</span>
|
|
|
+ </div>
|
|
|
+ <div class="tips">灌溉方式确认药肥最佳配比</div>
|
|
|
+ <div class="item-checkbox">
|
|
|
+ <div class="tag-group add-tag-group">
|
|
|
+ <div class="tag-item" :class="{ self: item.custom === true, selected: item.selected }"
|
|
|
+ @click="handleSelect('irrigationMethods', idx, item.custom)"
|
|
|
+ v-for="(item, idx) in basicFarmFormData.irrigationMethods" :key="'ce-' + idx">
|
|
|
+ <span class="text">{{ item.name }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="tag-item last-add" @click="handleAdd('irrigationMethods')"><el-icon
|
|
|
+ class="add-icon">
|
|
|
+ <Plus />
|
|
|
+ </el-icon>其它方式</div>
|
|
|
</div>
|
|
|
- <div class="tag-item last-add" @click="handleAdd('irrigationMethods')"><el-icon class="add-icon">
|
|
|
- <Plus />
|
|
|
- </el-icon>其它方式</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="box-item">
|
|
|
- <div class="item-name">
|
|
|
- <span>请选择您的农机设备</span>
|
|
|
- <span class="sub-name"> (可多选)</span>
|
|
|
- </div>
|
|
|
- <div class="tips">农闲时可将闲置农机加入农事服务联盟,获取额外服务收益</div>
|
|
|
- <div class="item-checkbox">
|
|
|
- <div class="tag-group add-tag-group">
|
|
|
- <div class="tag-item" :class="{ self: item.custom === true, selected: item.selected }"
|
|
|
- @click="handleMachinerySelect('machinery', idx, item)"
|
|
|
- v-for="(item, idx) in basicFarmFormData.machinery" :key="'nj-' + idx">
|
|
|
- <span class="text">{{ item.name }}</span>
|
|
|
- <span class="quantity-text" v-show="item.quantity">{{ item.quantity }}</span>
|
|
|
+ <div class="box-item">
|
|
|
+ <div class="item-name">
|
|
|
+ <span>请选择您的农机设备</span>
|
|
|
+ <span class="sub-name"> (可多选)</span>
|
|
|
+ </div>
|
|
|
+ <div class="tips">农闲时可将闲置农机加入农事服务联盟,获取额外服务收益</div>
|
|
|
+ <div class="item-checkbox">
|
|
|
+ <div class="tag-group add-tag-group">
|
|
|
+ <div class="tag-item" :class="{ self: item.custom === true, selected: item.selected }"
|
|
|
+ @click="handleMachinerySelect('machinery', idx, item)"
|
|
|
+ v-for="(item, idx) in basicFarmFormData.machinery" :key="'nj-' + idx">
|
|
|
+ <span class="text">{{ item.name }}</span>
|
|
|
+ <span class="quantity-text" v-show="item.quantity">{{ item.quantity }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="tag-item last-add" @click="handleMachineryAdd('machinery', item)"><el-icon
|
|
|
+ class="add-icon">
|
|
|
+ <Plus />
|
|
|
+ </el-icon>其它设备</div>
|
|
|
</div>
|
|
|
- <div class="tag-item last-add" @click="handleMachineryAdd('machinery', item)"><el-icon class="add-icon">
|
|
|
- <Plus />
|
|
|
- </el-icon>其它设备</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <!-- 农场规模 -->
|
|
|
- <!-- <div class="farm-scale-header">
|
|
|
+ <!-- 农场规模 -->
|
|
|
+ <!-- <div class="farm-scale-header">
|
|
|
<div class="farm-scale-title">请填写您的农场规模</div>
|
|
|
<div class="farm-scale-desc">农闲时可以提供农事服务,获取额外收益</div>
|
|
|
</div>
|
|
|
@@ -75,58 +79,59 @@
|
|
|
</div>
|
|
|
<el-input v-model="farmScale.regularWorkerCount" placeholder="请输入人数" class="farm-scale-input">
|
|
|
<template #append>人</template>
|
|
|
- </el-input>
|
|
|
- </div>
|
|
|
- <div class="farm-scale-item">
|
|
|
- <label class="farm-scale-label">无人机植保人员</label>
|
|
|
- <el-input v-model="farmScale.plantProtectionWorkerCount" placeholder="请输入人数" class="farm-scale-input">
|
|
|
- <template #append>人</template>
|
|
|
- </el-input>
|
|
|
- </div>
|
|
|
- <div class="farm-scale-item">
|
|
|
- <label class="farm-scale-label">专业树形修剪人员</label>
|
|
|
- <el-input v-model="farmScale.pruningWorkerCount" placeholder="请输入人数" class="farm-scale-input">
|
|
|
- <template #append>人</template>
|
|
|
- </el-input>
|
|
|
- </div>
|
|
|
- <div class="farm-scale-item">
|
|
|
- <label class="farm-scale-label">专业嫁接换种人员</label>
|
|
|
- <el-input v-model="farmScale.graftingWorkerCount" placeholder="请输入人数" class="farm-scale-input">
|
|
|
- <template #append>人</template>
|
|
|
- </el-input>
|
|
|
- </div>
|
|
|
- <div class="farm-scale-item">
|
|
|
- <label class="farm-scale-label">农忙可调度人员</label>
|
|
|
- <el-input v-model="farmScale.tempDispatchWorkerCount" placeholder="请输入人数" class="farm-scale-input">
|
|
|
- <template #append>人</template>
|
|
|
- </el-input>
|
|
|
- </div>
|
|
|
- </div> -->
|
|
|
- <div class="box-item">
|
|
|
- <div class="item-name">
|
|
|
- <span>希望专家帮助解决的种植难题</span>
|
|
|
- <span class="sub-name"> (可多选)</span>
|
|
|
- </div>
|
|
|
- <div class="item-checkbox">
|
|
|
-
|
|
|
- <div class="tag-group add-tag-group">
|
|
|
- <div class="tag-item" :class="{ self: item.custom === true, selected: item.selected }"
|
|
|
- @click="handleSelect('improvementAreas', idx, item.custom)"
|
|
|
- v-for="(item, idx) in basicFarmFormData.improvementAreas" :key="'wt-' + idx">
|
|
|
- <span class="text">{{ item.name }}</span>
|
|
|
+</el-input>
|
|
|
+</div>
|
|
|
+<div class="farm-scale-item">
|
|
|
+ <label class="farm-scale-label">无人机植保人员</label>
|
|
|
+ <el-input v-model="farmScale.plantProtectionWorkerCount" placeholder="请输入人数" class="farm-scale-input">
|
|
|
+ <template #append>人</template>
|
|
|
+ </el-input>
|
|
|
+</div>
|
|
|
+<div class="farm-scale-item">
|
|
|
+ <label class="farm-scale-label">专业树形修剪人员</label>
|
|
|
+ <el-input v-model="farmScale.pruningWorkerCount" placeholder="请输入人数" class="farm-scale-input">
|
|
|
+ <template #append>人</template>
|
|
|
+ </el-input>
|
|
|
+</div>
|
|
|
+<div class="farm-scale-item">
|
|
|
+ <label class="farm-scale-label">专业嫁接换种人员</label>
|
|
|
+ <el-input v-model="farmScale.graftingWorkerCount" placeholder="请输入人数" class="farm-scale-input">
|
|
|
+ <template #append>人</template>
|
|
|
+ </el-input>
|
|
|
+</div>
|
|
|
+<div class="farm-scale-item">
|
|
|
+ <label class="farm-scale-label">农忙可调度人员</label>
|
|
|
+ <el-input v-model="farmScale.tempDispatchWorkerCount" placeholder="请输入人数" class="farm-scale-input">
|
|
|
+ <template #append>人</template>
|
|
|
+ </el-input>
|
|
|
+</div>
|
|
|
+</div> -->
|
|
|
+ <div class="box-item">
|
|
|
+ <div class="item-name">
|
|
|
+ <span>希望专家帮助解决的种植难题</span>
|
|
|
+ <span class="sub-name"> (可多选)</span>
|
|
|
+ </div>
|
|
|
+ <div class="item-checkbox">
|
|
|
+
|
|
|
+ <div class="tag-group add-tag-group">
|
|
|
+ <div class="tag-item" :class="{ self: item.custom === true, selected: item.selected }"
|
|
|
+ @click="handleSelect('improvementAreas', idx, item.custom)"
|
|
|
+ v-for="(item, idx) in basicFarmFormData.improvementAreas" :key="'wt-' + idx">
|
|
|
+ <span class="text">{{ item.name }}</span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="box-item">
|
|
|
- <div class="item-name">
|
|
|
- <span>您最希望得到哪位荔枝专家的农事处方</span>
|
|
|
- </div>
|
|
|
- <div class="item-checkbox">
|
|
|
+ <div class="box-item">
|
|
|
+ <div class="item-name">
|
|
|
+ <span>您最希望得到哪位荔枝专家的农事处方</span>
|
|
|
+ </div>
|
|
|
+ <div class="item-checkbox">
|
|
|
<el-radio-group v-model="basicForm.expertCode">
|
|
|
<el-radio-button v-for="(item, index) in basicFarmFormData.expertOptions" :key="index"
|
|
|
:label="item.name" :value="item.code" />
|
|
|
</el-radio-group>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -135,19 +140,16 @@
|
|
|
<!-- 按钮 -->
|
|
|
<div class="custom-bottom-fixed-btns">
|
|
|
<!-- <div class="bottom-btn secondary-btn" @click="handlePage">跳过</div> -->
|
|
|
- <div
|
|
|
- class="bottom-btn primary-btn"
|
|
|
- @click.stop="submit"
|
|
|
- @touchstart.stop
|
|
|
- @touchend.stop
|
|
|
- >确认信息</div>
|
|
|
+ <div class="bottom-btn primary-btn" @click.stop="submit" @touchstart.stop @touchend.stop>确认信息</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<popup class="add-tag-popup" round v-model:show="showAddPopup">
|
|
|
<div class="tag-item" v-if="addTypeKey !== 'machinery' || (addTypeKey === 'machinery' && isMachineSelf)">
|
|
|
- <div class="popup-title">编辑<span class="name-text">{{ formNameObj[addTypeKey] }}</span><span class="ml-2">名称</span></div>
|
|
|
- <el-input class="popup-input" v-model="popupInputVal" :placeholder="'请输入' + formNameObj[addTypeKey]" size="large" />
|
|
|
+ <div class="popup-title">编辑<span class="name-text">{{ formNameObj[addTypeKey] }}</span><span
|
|
|
+ class="ml-2">名称</span></div>
|
|
|
+ <el-input class="popup-input" v-model="popupInputVal" :placeholder="'请输入' + formNameObj[addTypeKey]"
|
|
|
+ size="large" />
|
|
|
</div>
|
|
|
<div class="device-item" v-if="addTypeKey === 'machinery'">
|
|
|
<div class="popup-title">编辑
|
|
|
@@ -155,7 +157,8 @@
|
|
|
<span class="name-text" v-show="!isMachineSelf">{{ popupInputVal }}</span>
|
|
|
<span class="ml-2">数量</span>
|
|
|
</div>
|
|
|
- <el-input type="number" class="popup-input" v-model="popupInputNum" :placeholder="'请输入' + formNameObj[addTypeKey]+'数量'" size="large">
|
|
|
+ <el-input type="number" class="popup-input" v-model="popupInputNum"
|
|
|
+ :placeholder="'请输入' + formNameObj[addTypeKey] + '数量'" size="large">
|
|
|
<template #append>{{ machineryUnit || '辆' }}</template>
|
|
|
</el-input>
|
|
|
</div>
|
|
|
@@ -163,7 +166,7 @@
|
|
|
<div class="delete" v-if="isEditPopup && isMachineSelf" @click="handleDelete">删除</div>
|
|
|
<div class="delete" v-else-if="isEditPopup && !isMachineSelf" @click="handleCancelSelect">取消选中</div>
|
|
|
<div class="cancel" v-else @click="showAddPopup = false">取消</div>
|
|
|
- <div @click="handleConfirm">确认</div>
|
|
|
+ <div :class="{ disabled: isPopupConfirmDisabled() }" @click="handleConfirm">确认</div>
|
|
|
</div>
|
|
|
</popup>
|
|
|
|
|
|
@@ -181,18 +184,10 @@
|
|
|
<div class="label-item-group">
|
|
|
<div class="label-item">{{ item.startDateLabel || '起始时间' }}</div>
|
|
|
<div class="label-item-value">
|
|
|
- <el-date-picker
|
|
|
- v-model="item.phenologyStartDate"
|
|
|
- type="date"
|
|
|
- :default-value="new Date(2026, 1, 1)"
|
|
|
- placeholder="选择时间"
|
|
|
- :disabled-date="disabledDate"
|
|
|
- :clearable="false"
|
|
|
- :editable="false"
|
|
|
- format="YYYY-MM-DD"
|
|
|
- value-format="YYYY-MM-DD"
|
|
|
- style="width: 100%"
|
|
|
- />
|
|
|
+ <el-date-picker v-model="item.phenologyStartDate" type="date"
|
|
|
+ :default-value="new Date(2026, 1, 1)" placeholder="选择时间" :disabled-date="disabledDate"
|
|
|
+ :clearable="false" :editable="false" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
|
|
|
+ style="width: 100%" />
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -203,19 +198,13 @@
|
|
|
</div>
|
|
|
</popup>
|
|
|
|
|
|
- <tip-popup
|
|
|
- v-model:show="showSuccessPopup"
|
|
|
- type="success"
|
|
|
- text="专属处方已经生成"
|
|
|
- buttonText="点击查看"
|
|
|
- @closedPopup="handleSuccessConfirm"
|
|
|
- @confirm="handleSuccessConfirm"
|
|
|
- >
|
|
|
+ <tip-popup v-model:show="showSuccessPopup" type="success" text="专属处方已经生成" buttonText="点击查看"
|
|
|
+ @closedPopup="handleSuccessConfirm" @confirm="handleSuccessConfirm">
|
|
|
<template #default>
|
|
|
<div class="expert-info">
|
|
|
<!-- <img class="expert-img" src="@/assets/img/home/zj-1.png" alt=""> -->
|
|
|
<el-avatar class="expert-img" :size="26" :src="basicForm?.expertInfo?.avatar" />
|
|
|
- {{ basicForm?.expertInfo?.name }} 专家的
|
|
|
+ {{ basicForm?.expertInfo?.name }} 专家的
|
|
|
</div>
|
|
|
</template>
|
|
|
</tip-popup>
|
|
|
@@ -226,6 +215,7 @@ import { ref, onActivated, onBeforeUnmount, onDeactivated, onMounted } from "vue
|
|
|
import { ElMessage } from "element-plus";
|
|
|
import { useRouter, useRoute } from "vue-router";
|
|
|
import tipPopup from "@/components/popup/tipPopup.vue";
|
|
|
+import customHeader from "@/components/customHeader.vue";
|
|
|
import { Popup } from "vant";
|
|
|
import { useStore } from "vuex";
|
|
|
const router = useRouter();
|
|
|
@@ -265,9 +255,9 @@ const basicFarmFormData = ref({});
|
|
|
const getBasicFarmFormData = (options = {}) => {
|
|
|
const machineryMerge = options.machineryMerge;
|
|
|
loadingPage.value = true;
|
|
|
- VE_API.basic_farm.fetchBasicFarmFormData({subjectId: route.query?.subjectId}).then(({ data }) => {
|
|
|
+ VE_API.basic_farm.fetchBasicFarmFormData({ subjectId: route.query?.subjectId }).then(({ data }) => {
|
|
|
basicFarmFormData.value = data;
|
|
|
-
|
|
|
+
|
|
|
// 根据返回的数据进行默认赋值
|
|
|
// 1. 土壤类型 - 找到 selected: true 的项
|
|
|
if (data.soilTypes && Array.isArray(data.soilTypes)) {
|
|
|
@@ -276,7 +266,7 @@ const getBasicFarmFormData = (options = {}) => {
|
|
|
basicForm.value.soilTypes = selectedSoilType.code;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 2. 专家选项 - 找到 selected: true 的项
|
|
|
if (data.expertOptions && Array.isArray(data.expertOptions)) {
|
|
|
const selectedExpert = data.expertOptions.find(item => item.selected);
|
|
|
@@ -285,7 +275,7 @@ const getBasicFarmFormData = (options = {}) => {
|
|
|
basicForm.value.expertInfo = selectedExpert;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 3. 农场规模数据
|
|
|
if (data.farmScale) {
|
|
|
farmScale.value = {
|
|
|
@@ -296,7 +286,7 @@ const getBasicFarmFormData = (options = {}) => {
|
|
|
graftingWorkerCount: data.farmScale.graftingWorkerCount || "",
|
|
|
};
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 4. irrigationMethods, improvementAreas, machinery 的 selected 状态已经在 data 中设置好了
|
|
|
// 这些数据会直接显示在页面上,因为页面是通过 basicFarmFormData 来渲染的
|
|
|
|
|
|
@@ -395,7 +385,26 @@ function handleMachinerySelect(type, index, item) {
|
|
|
currentEditIndex.value = index;
|
|
|
}
|
|
|
|
|
|
+function isPopupConfirmDisabled() {
|
|
|
+ const nameFilled = String(popupInputVal.value ?? "").trim().length > 0;
|
|
|
+ const quantityFilled = String(popupInputNum.value ?? "").trim().length > 0;
|
|
|
+
|
|
|
+ // 仅需名称:非农机场景
|
|
|
+ if (addTypeKey.value !== "machinery") {
|
|
|
+ return !nameFilled;
|
|
|
+ }
|
|
|
+ // 仅需数量:选择已有农机(非自定义)
|
|
|
+ if (!isMachineSelf.value) {
|
|
|
+ return !quantityFilled;
|
|
|
+ }
|
|
|
+ // 名称 + 数量都必填:自定义农机
|
|
|
+ return !(nameFilled && quantityFilled);
|
|
|
+}
|
|
|
+
|
|
|
function handleConfirm() {
|
|
|
+ if (isPopupConfirmDisabled()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
if (addTypeKey.value === 'machinery') {
|
|
|
if (isMachineSelf.value && !isEditPopup.value) {
|
|
|
if (!popupInputVal.value.trim()) {
|
|
|
@@ -501,7 +510,7 @@ const goBack = () => {
|
|
|
|
|
|
function handleSubmit() {
|
|
|
// 收集土壤类型(转换为数组)
|
|
|
- const soilTypes = basicForm.value.soilTypes
|
|
|
+ const soilTypes = basicForm.value.soilTypes
|
|
|
? (Array.isArray(basicForm.value.soilTypes) ? basicForm.value.soilTypes : [basicForm.value.soilTypes])
|
|
|
: [];
|
|
|
|
|
|
@@ -603,12 +612,12 @@ async function submit() {
|
|
|
// }
|
|
|
// const res = await VE_API.basic_farm.saveBasicFarmInfoByExpert(params);
|
|
|
let paramsData = null
|
|
|
- if(route.query.subjectId) {
|
|
|
+ if (route.query.subjectId) {
|
|
|
paramsData = {
|
|
|
...draftData,
|
|
|
subjectId: route.query.subjectId,
|
|
|
}
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
paramsData = {
|
|
|
...route.query,
|
|
|
expertMiniUserId: '81881',
|
|
|
@@ -621,9 +630,9 @@ async function submit() {
|
|
|
apiCall.then((res) => {
|
|
|
if (res.code === 0) {
|
|
|
// showSuccessPopup.value = true;
|
|
|
- if(route.query.subjectId) {
|
|
|
+ if (route.query.subjectId) {
|
|
|
router.go(-1);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
// 设置选中当前新增的农场
|
|
|
localStorage.setItem("selectedFarmId", res.data.id);
|
|
|
localStorage.setItem("selectedFarmName", res.data.name);
|
|
|
@@ -649,15 +658,15 @@ const disabledDate = (time) => {
|
|
|
// 获取今天的开始时间(00:00:00)
|
|
|
const today = new Date();
|
|
|
today.setHours(0, 0, 0, 0);
|
|
|
-
|
|
|
+
|
|
|
// 获取明天的开始时间(00:00:00)
|
|
|
const tomorrow = new Date(today);
|
|
|
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
|
-
|
|
|
+
|
|
|
// 设置最小日期为 2025-01-01
|
|
|
const minDate = new Date(2025, 10, 1); // 月份从0开始,0表示1月
|
|
|
minDate.setHours(0, 0, 0, 0);
|
|
|
-
|
|
|
+
|
|
|
// 如果时间 < 2025-10-01 或 >= 明天的开始时间,则禁用
|
|
|
// 只能选择 2025-10-01 到今天的日期范围
|
|
|
return time.getTime() < minDate.getTime() || time.getTime() >= tomorrow.getTime();
|
|
|
@@ -668,7 +677,7 @@ const handlePage = async () => {
|
|
|
if (!validateForm()) {
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 安全解析 typeNames
|
|
|
// let typeNames = [];
|
|
|
// try {
|
|
|
@@ -683,13 +692,13 @@ const handlePage = async () => {
|
|
|
// ElMessage.warning('参数格式错误,请重新进入页面');
|
|
|
// return;
|
|
|
// }
|
|
|
-
|
|
|
+
|
|
|
// // 检查 firstPhenology 是否已初始化
|
|
|
// if (!firstPhenology.value || !firstPhenology.value.phenologyId) {
|
|
|
// ElMessage.warning('物候期数据未加载完成,请稍候再试');
|
|
|
// return;
|
|
|
// }
|
|
|
-
|
|
|
+
|
|
|
// phenologyList.value = typeNames.map(item => ({
|
|
|
// typeName: item,
|
|
|
// phenologyId: firstPhenology.value.phenologyId,
|
|
|
@@ -697,7 +706,7 @@ const handlePage = async () => {
|
|
|
// phenologyName: firstPhenology.value.phenologyName,
|
|
|
// phenologyStartDate: '2026-01-01',
|
|
|
// }));
|
|
|
-
|
|
|
+
|
|
|
// 如果有选择的专家,添加 preferredExpertCode
|
|
|
if (basicForm.value.expertCode) {
|
|
|
const selectedExpert = basicFarmFormData.value.expertOptions?.find(item => item.code === basicForm.value.expertCode);
|
|
|
@@ -705,7 +714,7 @@ const handlePage = async () => {
|
|
|
basicForm.value.expertInfo = selectedExpert;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
showPeriodPopup.value = true;
|
|
|
} catch (error) {
|
|
|
console.error('handlePage 执行失败:', error);
|
|
|
@@ -742,7 +751,7 @@ const tryParse = (str) => {
|
|
|
// 获取当前和下一个物候期
|
|
|
const getCurrentAndNextPhenology = async () => {
|
|
|
try {
|
|
|
- const { data } = await VE_API.home.getCurrentAndNextPhenology({
|
|
|
+ const { data } = await VE_API.home.getCurrentAndNextPhenology({
|
|
|
expertMiniUserId: '81881',
|
|
|
containerId: getContainerIdFromQuery(),
|
|
|
});
|
|
|
@@ -764,7 +773,7 @@ const handlePeriodConfirm = async () => {
|
|
|
ElMessage.warning('请选择时间');
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 关闭弹窗并提交表单
|
|
|
showPeriodPopup.value = false;
|
|
|
loadingPage.value = true;
|
|
|
@@ -774,7 +783,7 @@ const handlePeriodConfirm = async () => {
|
|
|
if (!success) {
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 提交成功后跳转
|
|
|
// if (route.query.type === 'farmer') {
|
|
|
// router.push('/agri_record')
|
|
|
@@ -814,10 +823,16 @@ const handlePeriodConfirm = async () => {
|
|
|
box-sizing: border-box;
|
|
|
background: linear-gradient(to left, #e6f2ff, #8fc5fe);
|
|
|
|
|
|
+ .page-content {
|
|
|
+ height: calc(100% - 40px);
|
|
|
+ overflow: auto;
|
|
|
+ box-sizing: border-box;
|
|
|
+ }
|
|
|
+
|
|
|
.prescription-title {
|
|
|
- padding: 16px 14px;
|
|
|
- background: url("@/assets/img/home/page-bg.png") no-repeat bottom right / 149px 116px;
|
|
|
- background-position-y: 30px;
|
|
|
+ padding: 26px 14px 10px 14px;
|
|
|
+ background: url("@/assets/img/home/page-bg.png") no-repeat bottom right / 141px 116px;
|
|
|
+ background-position-y: 7px;
|
|
|
|
|
|
img {
|
|
|
width: 24px;
|
|
|
@@ -828,7 +843,7 @@ const handlePeriodConfirm = async () => {
|
|
|
color: #2e2e2e;
|
|
|
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);
|
|
|
font-weight: 500;
|
|
|
- padding: 21px 0 4px 6px;
|
|
|
+ padding: 0 0 4px 6px;
|
|
|
}
|
|
|
|
|
|
.title-desc {
|
|
|
@@ -916,6 +931,7 @@ const handlePeriodConfirm = async () => {
|
|
|
line-height: 40px;
|
|
|
cursor: pointer;
|
|
|
transition: all 0.3s;
|
|
|
+
|
|
|
.quantity-text {
|
|
|
font-size: 10px;
|
|
|
color: #fff;
|
|
|
@@ -958,6 +974,7 @@ const handlePeriodConfirm = async () => {
|
|
|
border: 1px solid #2199F8;
|
|
|
background: #E8F5FF;
|
|
|
color: #2199F8;
|
|
|
+
|
|
|
&::after {
|
|
|
content: "";
|
|
|
position: absolute;
|
|
|
@@ -982,6 +999,7 @@ const handlePeriodConfirm = async () => {
|
|
|
border: 1px solid #2199F8;
|
|
|
background: #E8F5FF;
|
|
|
color: #2199F8;
|
|
|
+
|
|
|
&::after {
|
|
|
content: "";
|
|
|
position: absolute;
|
|
|
@@ -1130,6 +1148,7 @@ const handlePeriodConfirm = async () => {
|
|
|
color: rgba(0, 0, 0, 0.9);
|
|
|
// text-align: right;
|
|
|
margin-right: 10px;
|
|
|
+
|
|
|
.sub-label {
|
|
|
font-size: 10px;
|
|
|
color: rgba(0, 0, 0, 0.4);
|
|
|
@@ -1180,7 +1199,8 @@ const handlePeriodConfirm = async () => {
|
|
|
font-weight: 400;
|
|
|
margin-bottom: 12px;
|
|
|
color: #000000;
|
|
|
- .name-text{
|
|
|
+
|
|
|
+ .name-text {
|
|
|
font-weight: 500;
|
|
|
color: #2199F8;
|
|
|
padding: 0 2px;
|
|
|
@@ -1215,6 +1235,12 @@ const handlePeriodConfirm = async () => {
|
|
|
background: #fff;
|
|
|
border: 1px solid #999999;
|
|
|
}
|
|
|
+
|
|
|
+ .disabled {
|
|
|
+ opacity: 0.5;
|
|
|
+ cursor: not-allowed;
|
|
|
+ }
|
|
|
+
|
|
|
.delete {
|
|
|
margin-right: 13px;
|
|
|
color: #FF3D3D;
|
|
|
@@ -1223,11 +1249,12 @@ const handlePeriodConfirm = async () => {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
.period-popup {
|
|
|
width: 90%;
|
|
|
padding: 24px 16px 20px 16px;
|
|
|
background: linear-gradient(360deg, #FFFFFF 74.2%, #D1EBFF 100%);
|
|
|
-
|
|
|
+
|
|
|
.period-header {
|
|
|
font-size: 16px;
|
|
|
font-weight: 400;
|
|
|
@@ -1235,10 +1262,10 @@ const handlePeriodConfirm = async () => {
|
|
|
color: #121212;
|
|
|
line-height: 22px;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
.period-content {
|
|
|
margin-bottom: 16px;
|
|
|
-
|
|
|
+
|
|
|
.period-item {
|
|
|
background: rgba(33, 153, 248, 0.05);
|
|
|
border: 1px solid rgba(33, 153, 248, 0.2);
|
|
|
@@ -1246,11 +1273,11 @@ const handlePeriodConfirm = async () => {
|
|
|
padding: 10px;
|
|
|
margin-bottom: 16px;
|
|
|
position: relative;
|
|
|
-
|
|
|
+
|
|
|
&:last-child {
|
|
|
margin-bottom: 0;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
.period-item-name {
|
|
|
background: rgba(33, 153, 248, 0.1);
|
|
|
font-size: 12px;
|
|
|
@@ -1260,19 +1287,19 @@ const handlePeriodConfirm = async () => {
|
|
|
font-weight: 400;
|
|
|
width: fit-content;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
.period-item-label {
|
|
|
margin-top: 10px;
|
|
|
-
|
|
|
+
|
|
|
.label-item-group {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
margin-bottom: 12px;
|
|
|
-
|
|
|
+
|
|
|
&:last-child {
|
|
|
margin-bottom: 0;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
.label-item {
|
|
|
font-size: 14px;
|
|
|
color: #1D2129;
|
|
|
@@ -1280,7 +1307,7 @@ const handlePeriodConfirm = async () => {
|
|
|
flex-shrink: 0;
|
|
|
padding-right: 10px;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
.label-item-value {
|
|
|
border-radius: 2px;
|
|
|
flex: 1;
|
|
|
@@ -1290,6 +1317,7 @@ const handlePeriodConfirm = async () => {
|
|
|
line-height: 31px;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
+
|
|
|
&.period-display {
|
|
|
background: #FFFFFF;
|
|
|
border: 0.5px solid rgba(0, 0, 0, 0.2);
|
|
|
@@ -1300,7 +1328,7 @@ const handlePeriodConfirm = async () => {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
.period-footer {
|
|
|
.period-footer-btn {
|
|
|
width: 100%;
|
|
|
@@ -1313,19 +1341,21 @@ const handlePeriodConfirm = async () => {
|
|
|
border-radius: 4px;
|
|
|
cursor: pointer;
|
|
|
font-weight: 500;
|
|
|
-
|
|
|
+
|
|
|
&:active {
|
|
|
opacity: 0.8;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
.expert-info {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
font-size: 20px;
|
|
|
line-height: 36px;
|
|
|
+
|
|
|
.expert-img {
|
|
|
// width: 26px;
|
|
|
// height: 26px;
|
|
|
@@ -1339,7 +1369,7 @@ const handlePeriodConfirm = async () => {
|
|
|
.custom-bottom-fixed-btns {
|
|
|
z-index: 99 !important; // 提高 z-index,确保不被其他元素遮挡
|
|
|
pointer-events: auto; // 确保可以接收点击事件
|
|
|
-
|
|
|
+
|
|
|
.bottom-btn {
|
|
|
cursor: pointer;
|
|
|
user-select: none; // 防止文本选择
|
|
|
@@ -1347,13 +1377,13 @@ const handlePeriodConfirm = async () => {
|
|
|
-webkit-tap-highlight-color: transparent; // 移除移动端点击高亮
|
|
|
position: relative; // 确保点击区域正确
|
|
|
z-index: 1;
|
|
|
-
|
|
|
+
|
|
|
// 添加点击反馈效果
|
|
|
&:active {
|
|
|
opacity: 0.8;
|
|
|
transform: scale(0.98);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
&.primary-btn {
|
|
|
// 确保按钮可点击
|
|
|
pointer-events: auto;
|