|
|
@@ -2,69 +2,69 @@
|
|
|
<custom-header name="农情互动" bgColor="#f2f4f5"></custom-header>
|
|
|
<div class="interaction-list">
|
|
|
<div class="list-item" v-for="(item, index) in listData" :key="item.id || index"
|
|
|
- :class="{ 'uploaded-item': item.imageIds.length }">
|
|
|
- <!-- 标题区域 -->
|
|
|
- <div class="item-header-wrapper" :class="{ 'has-status': item.imageIds.length }">
|
|
|
- <div class="item-header">{{ item.interactionTypeName }}</div>
|
|
|
- <div class="upload-status" v-show="item.imageIds.length">
|
|
|
- <el-icon class="status-icon">
|
|
|
- <SuccessFilled />
|
|
|
- </el-icon>
|
|
|
- <span class="status-text">上传成功</span>
|
|
|
- </div>
|
|
|
+ :class="{ 'uploaded-item': item.isConfirmed != null }">
|
|
|
+ <!-- 标题区域 -->
|
|
|
+ <div class="item-header-wrapper" :class="{ 'has-status': item.isConfirmed != null }">
|
|
|
+ <div class="item-header">{{ item.interactionTypeName }}</div>
|
|
|
+ <div class="upload-status" v-show="item.isConfirmed != null">
|
|
|
+ <el-icon class="status-icon">
|
|
|
+ <SuccessFilled />
|
|
|
+ </el-icon>
|
|
|
+ <span class="status-text">上传成功</span>
|
|
|
</div>
|
|
|
+ </div>
|
|
|
|
|
|
- <!-- 展开状态内容 -->
|
|
|
- <div class="expanded-content" v-show="item.imageIds.length && item.expanded">
|
|
|
- <!-- 原因说明 -->
|
|
|
- <div class="reason-text">原因原因: 便于记录农场档案,及时调整农事规划</div>
|
|
|
+ <!-- 展开状态内容 -->
|
|
|
+ <div class="expanded-content" v-show="item.isConfirmed != null && item.expanded">
|
|
|
+ <!-- 原因说明 -->
|
|
|
+ <div class="reason-text">原因: {{ item.reason }}</div>
|
|
|
|
|
|
- <!-- 图片展示 -->
|
|
|
- <div class="uploaded-images">
|
|
|
- <img class="uploaded-img" src="@/assets/img/home/example-4.png" alt="" />
|
|
|
- <img class="uploaded-img" src="@/assets/img/home/example-4.png" alt="" />
|
|
|
- <img class="uploaded-img" src="@/assets/img/home/example-4.png" alt="" />
|
|
|
- </div>
|
|
|
+ <!-- 图片展示 -->
|
|
|
+ <div class="uploaded-images" v-show="item.imagePaths.length > 0">
|
|
|
+ <img class="uploaded-img" v-for="image in item.imagePaths" :key="image" :src="base_img_url2 + image" alt="" />
|
|
|
</div>
|
|
|
+ </div>
|
|
|
|
|
|
- <!-- 未上传状态内容 -->
|
|
|
- <div v-show="!item.imageIds.length">
|
|
|
- <!-- 说明文字 -->
|
|
|
- <div class="item-desc">{{ item.question }}</div>
|
|
|
+ <!-- 未上传状态内容 -->
|
|
|
+ <div v-show="item.isConfirmed == null">
|
|
|
+ <!-- 说明文字 -->
|
|
|
+ <div class="item-desc">{{ item.question }}</div>
|
|
|
|
|
|
- <upload @handleUpload="handleUploadSuccess" :exampleList="item.exampleImagesJson"></upload>
|
|
|
+ <upload :maxCount="8" @handleUpload="handleUploadSuccess" :exampleList="item.exampleImagesJson">
|
|
|
+ </upload>
|
|
|
|
|
|
- <div class="question-wrapper">
|
|
|
- <div class="question-text">
|
|
|
- <span class="text-title">{{ item.phenologyName }}占比</span>
|
|
|
- <el-input v-model="item.replyText" type="number" style="width: 80px" />
|
|
|
- <span class="text-unit">%</span>
|
|
|
- </div>
|
|
|
- <div class="draw-region-btn" @click="handleDrawRegion(item)">勾画发生区域</div>
|
|
|
- </div>
|
|
|
- <!-- 输入框 -->
|
|
|
- <div class="input-wrapper">
|
|
|
- <el-input v-model="item.remark" placeholder="添加备注:" clearable />
|
|
|
+ <div class="question-wrapper">
|
|
|
+ <div class="question-text">
|
|
|
+ <span class="text-title">{{ item.phenologyName }}占比</span>
|
|
|
+ <el-input v-model="item.replyText" type="number" style="width: 80px" />
|
|
|
+ <span class="text-unit">%</span>
|
|
|
</div>
|
|
|
+ <div class="draw-region-btn" @click="handleDrawRegion(item)">勾画发生区域</div>
|
|
|
+ </div>
|
|
|
+ <!-- 输入框 -->
|
|
|
+ <div class="input-wrapper">
|
|
|
+ <el-input v-model="item.remark" placeholder="添加备注:" clearable />
|
|
|
+ </div>
|
|
|
|
|
|
- <!-- 按钮区域 -->
|
|
|
- <div class="button-group">
|
|
|
- <div class="btn-not-reached" @click="handleNotReached(item)">{{ item.cancelButtonName }}</div>
|
|
|
- <div class="btn-confirm" @click="handleConfirm(item)">确认上传</div>
|
|
|
- </div>
|
|
|
+ <!-- 按钮区域 -->
|
|
|
+ <div class="button-group">
|
|
|
+ <div class="btn-not-reached" @click="handleNotReached(item)">{{ item.cancelButtonName }}</div>
|
|
|
+ <div class="btn-confirm" @click="handleConfirm(item)">确认上传</div>
|
|
|
</div>
|
|
|
+ </div>
|
|
|
|
|
|
- <!-- 比例信息(已上传状态显示) -->
|
|
|
- <div class="proportion-info" v-show="item.imageIds.length">
|
|
|
- <span class="proportion-text">当前果园达到物候期的比例: {{ item.proportion || "10%" }}</span>
|
|
|
- <div class="toggle-btn" @click="toggleExpand(item)">
|
|
|
- <span>{{ item.expanded ? "收起" : "展开" }}</span>
|
|
|
- <el-icon :class="{ rotate: !item.expanded }">
|
|
|
- <CaretTop />
|
|
|
- </el-icon>
|
|
|
- </div>
|
|
|
+ <!-- 比例信息(已上传状态显示) -->
|
|
|
+ <div class="proportion-info" v-show="item.isConfirmed != null">
|
|
|
+ <span class="proportion-text" v-if="item.replyText">当前果园{{ item.phenologyName }}占比: {{ item.replyText }}%</span>
|
|
|
+ <span class="proportion-text" v-else>暂无数据</span>
|
|
|
+ <div class="toggle-btn" @click="toggleExpand(item)">
|
|
|
+ <span>{{ item.expanded ? "收起" : "展开" }}</span>
|
|
|
+ <el-icon :class="{ rotate: !item.expanded }">
|
|
|
+ <CaretTop />
|
|
|
+ </el-icon>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ </div>
|
|
|
|
|
|
<div class="empty-data" v-if="!loading && listData.length === 0">暂无数据</div>
|
|
|
</div>
|
|
|
@@ -79,6 +79,7 @@ import customHeader from "@/components/customHeader.vue";
|
|
|
import upload from "@/components/upload.vue";
|
|
|
import FarmInfoPopup from "@/components/popup/farmInfoPopup.vue";
|
|
|
import { useRouter, useRoute } from "vue-router";
|
|
|
+import { base_img_url2 } from "@/api/config";
|
|
|
const showFarmInfoPopup = ref(false);
|
|
|
const loading = ref(false);
|
|
|
const router = useRouter();
|
|
|
@@ -94,8 +95,8 @@ const loadData = async () => {
|
|
|
// 将 exampleImagesJson 转换为数组
|
|
|
if (item.exampleImagesJson) {
|
|
|
try {
|
|
|
- item.exampleImagesJson = typeof item.exampleImagesJson === 'string'
|
|
|
- ? JSON.parse(item.exampleImagesJson)
|
|
|
+ item.exampleImagesJson = typeof item.exampleImagesJson === 'string'
|
|
|
+ ? JSON.parse(item.exampleImagesJson)
|
|
|
: item.exampleImagesJson;
|
|
|
// 确保是数组格式
|
|
|
if (!Array.isArray(item.exampleImagesJson)) {
|
|
|
@@ -125,17 +126,16 @@ const refreshList = async () => {
|
|
|
|
|
|
// 暂未到达进程
|
|
|
const handleNotReached = async (item) => {
|
|
|
- // 这里可以处理业务逻辑
|
|
|
const parmas = {
|
|
|
- isConfirmed:false,
|
|
|
+ isConfirmed: false,
|
|
|
farmId: localStorage.getItem("selectedFarmId"),
|
|
|
imagePaths: uploadData.value,
|
|
|
isUploadPhoto: uploadData.value.length > 0 ? true : false,
|
|
|
- rangeWkt:'',
|
|
|
- interactionId:item.id,
|
|
|
- replyText:item.replyText
|
|
|
+ rangeWkt: '',
|
|
|
+ interactionId: item.id,
|
|
|
+ replyText: item.replyText
|
|
|
}
|
|
|
- const {code, msg} = await VE_API.home.uploadAnswer(parmas);
|
|
|
+ const { code, msg } = await VE_API.home.uploadAnswer(parmas);
|
|
|
if (code === 0) {
|
|
|
ElMessage.success("回答成功");
|
|
|
// 清空上传数据
|
|
|
@@ -149,7 +149,7 @@ const handleNotReached = async (item) => {
|
|
|
|
|
|
// 确认上传
|
|
|
const handleConfirm = async (item) => {
|
|
|
- if (!item.proportion) {
|
|
|
+ if (!item.phenologyName) {
|
|
|
ElMessage.warning("请输入当前果园比例");
|
|
|
return;
|
|
|
}
|
|
|
@@ -157,15 +157,26 @@ const handleConfirm = async (item) => {
|
|
|
ElMessage.warning("请上传图片");
|
|
|
return;
|
|
|
}
|
|
|
- console.log("确认上传", item);
|
|
|
- item.expanded = false;
|
|
|
- // 这里可以处理提交逻辑
|
|
|
- // const {code, msg} = await VE_API.home.uploadAnswer(item);
|
|
|
- // if (code === 0) {
|
|
|
- // ElMessage.success("上传成功");
|
|
|
- // } else {
|
|
|
- // ElMessage.error(msg || '上传失败');
|
|
|
- // }
|
|
|
+ const parmas = {
|
|
|
+ isConfirmed: true,
|
|
|
+ farmId: localStorage.getItem("selectedFarmId"),
|
|
|
+ imagePaths: uploadData.value,
|
|
|
+ isUploadPhoto: uploadData.value.length > 0 ? true : false,
|
|
|
+ rangeWkt: sessionStorage.getItem("drawRegionPolygonData"),
|
|
|
+ interactionId: item.id,
|
|
|
+ replyText: item.replyText
|
|
|
+ }
|
|
|
+ const { code, msg } = await VE_API.home.uploadAnswer(parmas);
|
|
|
+ if (code === 0) {
|
|
|
+ ElMessage.success("上传成功");
|
|
|
+ sessionStorage.removeItem("drawRegionPolygonData");
|
|
|
+ // 清空上传数据
|
|
|
+ uploadData.value = [];
|
|
|
+ // 刷新列表
|
|
|
+ await refreshList();
|
|
|
+ } else {
|
|
|
+ ElMessage.error(msg || '上传失败');
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
// 切换展开/收起
|
|
|
@@ -186,6 +197,8 @@ const handleFarmInfoConfirm = async (data) => {
|
|
|
|
|
|
const handleDrawRegion = (item) => {
|
|
|
console.log("勾画发生区域", item);
|
|
|
+ router.push(`/draw_region`)
|
|
|
+ // router.push('/edit_map?type=edit')
|
|
|
};
|
|
|
|
|
|
const uploadData = ref([]);
|
|
|
@@ -222,6 +235,10 @@ const getFarmList = async () => {
|
|
|
background: #ffffff;
|
|
|
border-radius: 6px;
|
|
|
padding: 10px;
|
|
|
+ border: 1px solid #ffffff;
|
|
|
+ &.uploaded-item{
|
|
|
+ border: 1px solid #2199f8;
|
|
|
+ }
|
|
|
|
|
|
.item-header-wrapper {
|
|
|
.item-header {
|
|
|
@@ -265,19 +282,20 @@ const getFarmList = async () => {
|
|
|
|
|
|
.expanded-content {
|
|
|
.reason-text {
|
|
|
- padding: 12px 0;
|
|
|
+ padding-top: 12px;
|
|
|
color: #969696;
|
|
|
font-size: 14px;
|
|
|
}
|
|
|
|
|
|
.uploaded-images {
|
|
|
display: flex;
|
|
|
- gap: 12px;
|
|
|
- margin-bottom: 12px;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 8px;
|
|
|
+ margin: 12px 0;
|
|
|
|
|
|
.uploaded-img {
|
|
|
- width: 80px;
|
|
|
- height: 80px;
|
|
|
+ width: calc((100vw - 68px) / 4);
|
|
|
+ height: calc((100vw - 68px) / 4);
|
|
|
border-radius: 4px;
|
|
|
object-fit: cover;
|
|
|
}
|
|
|
@@ -358,6 +376,7 @@ const getFarmList = async () => {
|
|
|
color: #999999;
|
|
|
font-size: 14px;
|
|
|
}
|
|
|
+
|
|
|
.question-wrapper {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
@@ -372,9 +391,11 @@ const getFarmList = async () => {
|
|
|
color: #6f6f6f;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
+
|
|
|
.text-title {
|
|
|
margin-right: 4px;
|
|
|
}
|
|
|
+
|
|
|
.text-unit {
|
|
|
margin-left: 4px;
|
|
|
}
|