|
@@ -1,6 +1,10 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="create-farm">
|
|
<div class="create-farm">
|
|
|
- <custom-header :name="paramsType === 'client' ? '新增用户' : paramsType === 'edit' ? '编辑农场': '创建农场'" :isGoBack="true" @goback="backgToHome"></custom-header>
|
|
|
|
|
|
|
+ <custom-header
|
|
|
|
|
+ :name="paramsType === 'client' ? '新增用户' : paramsType === 'edit' ? '编辑农场' : '创建农场'"
|
|
|
|
|
+ :isGoBack="true"
|
|
|
|
|
+ @goback="backgToHome"
|
|
|
|
|
+ ></custom-header>
|
|
|
<!-- 地图 -->
|
|
<!-- 地图 -->
|
|
|
<div class="map-container" ref="mapContainer"></div>
|
|
<div class="map-container" ref="mapContainer"></div>
|
|
|
<div class="farm-content">
|
|
<div class="farm-content">
|
|
@@ -35,16 +39,11 @@
|
|
|
<div class="box-content">
|
|
<div class="box-content">
|
|
|
<div class="create-title">
|
|
<div class="create-title">
|
|
|
<img class="title-icon" src="@/assets/img/home/create-icon.png" alt="" />
|
|
<img class="title-icon" src="@/assets/img/home/create-icon.png" alt="" />
|
|
|
- {{ paramsType === 'client' ? "新增用户" : paramsType === 'edit' ?"编辑农场":"创建农场" }}
|
|
|
|
|
|
|
+ {{ paramsType === "client" ? "新增用户" : paramsType === "edit" ? "编辑农场" : "创建农场" }}
|
|
|
</div>
|
|
</div>
|
|
|
<div class="create-content">
|
|
<div class="create-content">
|
|
|
<div class="create-from">
|
|
<div class="create-from">
|
|
|
- <el-form
|
|
|
|
|
- ref="ruleFormRef"
|
|
|
|
|
- :model="ruleForm"
|
|
|
|
|
- :rules="rules"
|
|
|
|
|
- class="demo-ruleForm"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" class="demo-ruleForm">
|
|
|
<el-form-item label="农场位置" prop="address">
|
|
<el-form-item label="农场位置" prop="address">
|
|
|
<div class="position-wrap">
|
|
<div class="position-wrap">
|
|
|
<el-input
|
|
<el-input
|
|
@@ -53,7 +52,9 @@
|
|
|
v-model="ruleForm.address"
|
|
v-model="ruleForm.address"
|
|
|
autocomplete="off"
|
|
autocomplete="off"
|
|
|
/>
|
|
/>
|
|
|
- <div class="draw-btn" @click="toSubPage">{{ hasDefaultPolygon ? '点击勾选地块' : '新增地块' }}</div>
|
|
|
|
|
|
|
+ <div class="draw-btn" @click="toSubPage">
|
|
|
|
|
+ {{ hasDefaultPolygon ? "点击勾选地块" : "新增地块" }}
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="种植作物" prop="speciesItem">
|
|
<el-form-item label="种植作物" prop="speciesItem">
|
|
@@ -108,7 +109,9 @@
|
|
|
<el-form-item label="农场面积" prop="mu">
|
|
<el-form-item label="农场面积" prop="mu">
|
|
|
<div class="area-box">
|
|
<div class="area-box">
|
|
|
<el-input
|
|
<el-input
|
|
|
- :placeholder="isFromEditMap ? '勾选地块获得农场面积' : '请输入农场的真实面积'"
|
|
|
|
|
|
|
+ :placeholder="
|
|
|
|
|
+ isFromEditMap ? '勾选地块获得农场面积' : '请输入农场的真实面积'
|
|
|
|
|
+ "
|
|
|
v-model="ruleForm.mu"
|
|
v-model="ruleForm.mu"
|
|
|
:readonly="isFromEditMap"
|
|
:readonly="isFromEditMap"
|
|
|
type="text"
|
|
type="text"
|
|
@@ -120,6 +123,20 @@
|
|
|
<div class="unit">亩</div>
|
|
<div class="unit">亩</div>
|
|
|
</div>
|
|
</div>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
+ <el-form-item label="客户类型" prop="clientType" class="select-wrap client-wrap">
|
|
|
|
|
+ <el-select
|
|
|
|
|
+ class="select-item"
|
|
|
|
|
+ v-model="ruleForm.clientType"
|
|
|
|
|
+ placeholder="客户类型"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-option
|
|
|
|
|
+ v-for="(item, index) in clientTypeList"
|
|
|
|
|
+ :key="index"
|
|
|
|
|
+ :label="item.label"
|
|
|
|
|
+ :value="item.value"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-select>
|
|
|
|
|
+ </el-form-item>
|
|
|
<el-form-item label="农场名称" prop="name">
|
|
<el-form-item label="农场名称" prop="name">
|
|
|
<el-input
|
|
<el-input
|
|
|
placeholder="请输入您的农场名称"
|
|
placeholder="请输入您的农场名称"
|
|
@@ -128,13 +145,26 @@
|
|
|
@input="handleFarmNameInput"
|
|
@input="handleFarmNameInput"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- <Checkbox v-if="paramsType !== 'client' && curRole == 0" class="checkbox" icon-size="18px" shape="square" v-model="ruleForm.defaultFarm">是否勾选为默认农场</Checkbox>
|
|
|
|
|
|
|
+ <Checkbox
|
|
|
|
|
+ v-if="paramsType !== 'client' && curRole == 0"
|
|
|
|
|
+ class="checkbox"
|
|
|
|
|
+ icon-size="18px"
|
|
|
|
|
+ shape="square"
|
|
|
|
|
+ v-model="ruleForm.defaultFarm"
|
|
|
|
|
+ >是否勾选为默认农场</Checkbox
|
|
|
|
|
+ >
|
|
|
</el-form>
|
|
</el-form>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="create-btn">
|
|
<div class="create-btn">
|
|
|
<div class="btn-item sencond-btn" @click="resetForm(ruleFormRef)">取消</div>
|
|
<div class="btn-item sencond-btn" @click="resetForm(ruleFormRef)">取消</div>
|
|
|
<div class="btn-item primary-btn" @click="submitForm(ruleFormRef)">
|
|
<div class="btn-item primary-btn" @click="submitForm(ruleFormRef)">
|
|
|
- {{ paramsType === 'client' ? "添加" : paramsType === 'edit' ?"确认修改":"立即创建" }}
|
|
|
|
|
|
|
+ {{
|
|
|
|
|
+ paramsType === "client"
|
|
|
|
|
+ ? "添加"
|
|
|
|
|
+ : paramsType === "edit"
|
|
|
|
|
+ ? "确认修改"
|
|
|
|
|
+ : "立即创建"
|
|
|
|
|
+ }}
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -183,36 +213,34 @@ function generateSquarePolygonBySideLength(center, sideLength) {
|
|
|
// 确保输入是数字类型
|
|
// 确保输入是数字类型
|
|
|
const lng = parseFloat(center[0]);
|
|
const lng = parseFloat(center[0]);
|
|
|
const lat = parseFloat(center[1]);
|
|
const lat = parseFloat(center[1]);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 半边长(米)
|
|
// 半边长(米)
|
|
|
const halfSide = sideLength / 2;
|
|
const halfSide = sideLength / 2;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 纬度方向:1度约等于111000米
|
|
// 纬度方向:1度约等于111000米
|
|
|
const latDelta = halfSide / 111000;
|
|
const latDelta = halfSide / 111000;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 经度方向:需要根据纬度调整,1度约等于111000 * cos(lat)米
|
|
// 经度方向:需要根据纬度调整,1度约等于111000 * cos(lat)米
|
|
|
- const lngDelta = halfSide / (111000 * Math.cos(lat * Math.PI / 180));
|
|
|
|
|
-
|
|
|
|
|
|
|
+ const lngDelta = halfSide / (111000 * Math.cos((lat * Math.PI) / 180));
|
|
|
|
|
+
|
|
|
// 计算四个顶点(逆时针顺序)
|
|
// 计算四个顶点(逆时针顺序)
|
|
|
const topLeft = [lng - lngDelta, lat + latDelta];
|
|
const topLeft = [lng - lngDelta, lat + latDelta];
|
|
|
const topRight = [lng + lngDelta, lat + latDelta];
|
|
const topRight = [lng + lngDelta, lat + latDelta];
|
|
|
const bottomRight = [lng + lngDelta, lat - latDelta];
|
|
const bottomRight = [lng + lngDelta, lat - latDelta];
|
|
|
const bottomLeft = [lng - lngDelta, lat - latDelta];
|
|
const bottomLeft = [lng - lngDelta, lat - latDelta];
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 生成MULTIPOLYGON格式的WKT(需要闭合,所以第一个点要重复)
|
|
// 生成MULTIPOLYGON格式的WKT(需要闭合,所以第一个点要重复)
|
|
|
// 明确使用join来格式化坐标点
|
|
// 明确使用join来格式化坐标点
|
|
|
const formatPoint = (point) => `${point[0]} ${point[1]}`;
|
|
const formatPoint = (point) => `${point[0]} ${point[1]}`;
|
|
|
- const coordinates = [topLeft, topRight, bottomRight, bottomLeft, topLeft]
|
|
|
|
|
- .map(formatPoint)
|
|
|
|
|
- .join(', ');
|
|
|
|
|
-
|
|
|
|
|
|
|
+ const coordinates = [topLeft, topRight, bottomRight, bottomLeft, topLeft].map(formatPoint).join(", ");
|
|
|
|
|
+
|
|
|
// 注意:MULTIPOLYGON 和括号之间需要有一个空格
|
|
// 注意:MULTIPOLYGON 和括号之间需要有一个空格
|
|
|
const wkt = `MULTIPOLYGON (((${coordinates})))`;
|
|
const wkt = `MULTIPOLYGON (((${coordinates})))`;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 计算面积(亩): 边长200米 = 40,000平方米 ≈ 60亩
|
|
// 计算面积(亩): 边长200米 = 40,000平方米 ≈ 60亩
|
|
|
const areaInSquareMeters = sideLength * sideLength;
|
|
const areaInSquareMeters = sideLength * sideLength;
|
|
|
const areaInMu = (areaInSquareMeters / 666.67).toFixed(2);
|
|
const areaInMu = (areaInSquareMeters / 666.67).toFixed(2);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
return { wkt, area: areaInMu };
|
|
return { wkt, area: areaInMu };
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -226,35 +254,33 @@ function generateSquarePolygonByMu(center, mu) {
|
|
|
// 确保输入是数字类型
|
|
// 确保输入是数字类型
|
|
|
const lng = parseFloat(center[0]);
|
|
const lng = parseFloat(center[0]);
|
|
|
const lat = parseFloat(center[1]);
|
|
const lat = parseFloat(center[1]);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 1亩 ≈ 666.67平方米
|
|
// 1亩 ≈ 666.67平方米
|
|
|
const areaInSquareMeters = mu * 666.67;
|
|
const areaInSquareMeters = mu * 666.67;
|
|
|
// 正方形边长(米)
|
|
// 正方形边长(米)
|
|
|
const sideLength = Math.sqrt(areaInSquareMeters);
|
|
const sideLength = Math.sqrt(areaInSquareMeters);
|
|
|
// 半边长(米)
|
|
// 半边长(米)
|
|
|
const halfSide = sideLength / 2;
|
|
const halfSide = sideLength / 2;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 纬度方向:1度约等于111000米
|
|
// 纬度方向:1度约等于111000米
|
|
|
const latDelta = halfSide / 111000;
|
|
const latDelta = halfSide / 111000;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 经度方向:需要根据纬度调整,1度约等于111000 * cos(lat)米
|
|
// 经度方向:需要根据纬度调整,1度约等于111000 * cos(lat)米
|
|
|
- const lngDelta = halfSide / (111000 * Math.cos(lat * Math.PI / 180));
|
|
|
|
|
-
|
|
|
|
|
|
|
+ const lngDelta = halfSide / (111000 * Math.cos((lat * Math.PI) / 180));
|
|
|
|
|
+
|
|
|
// 计算四个顶点(逆时针顺序)
|
|
// 计算四个顶点(逆时针顺序)
|
|
|
const topLeft = [lng - lngDelta, lat + latDelta];
|
|
const topLeft = [lng - lngDelta, lat + latDelta];
|
|
|
const topRight = [lng + lngDelta, lat + latDelta];
|
|
const topRight = [lng + lngDelta, lat + latDelta];
|
|
|
const bottomRight = [lng + lngDelta, lat - latDelta];
|
|
const bottomRight = [lng + lngDelta, lat - latDelta];
|
|
|
const bottomLeft = [lng - lngDelta, lat - latDelta];
|
|
const bottomLeft = [lng - lngDelta, lat - latDelta];
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 生成MULTIPOLYGON格式的WKT(需要闭合,所以第一个点要重复)
|
|
// 生成MULTIPOLYGON格式的WKT(需要闭合,所以第一个点要重复)
|
|
|
const formatPoint = (point) => `${point[0]} ${point[1]}`;
|
|
const formatPoint = (point) => `${point[0]} ${point[1]}`;
|
|
|
- const coordinates = [topLeft, topRight, bottomRight, bottomLeft, topLeft]
|
|
|
|
|
- .map(formatPoint)
|
|
|
|
|
- .join(', ');
|
|
|
|
|
-
|
|
|
|
|
|
|
+ const coordinates = [topLeft, topRight, bottomRight, bottomLeft, topLeft].map(formatPoint).join(", ");
|
|
|
|
|
+
|
|
|
// 注意:MULTIPOLYGON 和括号之间需要有一个空格
|
|
// 注意:MULTIPOLYGON 和括号之间需要有一个空格
|
|
|
const wkt = `MULTIPOLYGON (((${coordinates})))`;
|
|
const wkt = `MULTIPOLYGON (((${coordinates})))`;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
return { wkt, area: parseFloat(mu).toFixed(2) };
|
|
return { wkt, area: parseFloat(mu).toFixed(2) };
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -263,7 +289,7 @@ onMounted(() => {
|
|
|
store.commit("home/SET_FARM_POLYGON", null);
|
|
store.commit("home/SET_FARM_POLYGON", null);
|
|
|
isFromEditMap.value = false; // 初始化时可以手动输入
|
|
isFromEditMap.value = false; // 初始化时可以手动输入
|
|
|
hasDefaultPolygon.value = false; // 初始化时没有默认地块
|
|
hasDefaultPolygon.value = false; // 初始化时没有默认地块
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
centerPoint.value = store.state.home.miniUserLocationPoint;
|
|
centerPoint.value = store.state.home.miniUserLocationPoint;
|
|
|
const arr = convertPointToArray(centerPoint.value);
|
|
const arr = convertPointToArray(centerPoint.value);
|
|
|
getLocationName(`${arr[1]},${arr[0]}`);
|
|
getLocationName(`${arr[1]},${arr[0]}`);
|
|
@@ -272,11 +298,11 @@ onMounted(() => {
|
|
|
// 不再初始化时绘制默认地块,等待用户点击"新增地块"按钮
|
|
// 不再初始化时绘制默认地块,等待用户点击"新增地块"按钮
|
|
|
// 清空地块和面积数据
|
|
// 清空地块和面积数据
|
|
|
polygonArr.value = null;
|
|
polygonArr.value = null;
|
|
|
- ruleForm.mu = '';
|
|
|
|
|
- ruleForm.typeId = '';
|
|
|
|
|
|
|
+ ruleForm.mu = "";
|
|
|
|
|
+ ruleForm.typeId = "";
|
|
|
|
|
|
|
|
// 如果是编辑模式,等待品类列表加载完成后再回填数据
|
|
// 如果是编辑模式,等待品类列表加载完成后再回填数据
|
|
|
- if (route.query.type === 'edit' && store.state.home.editFarmData) {
|
|
|
|
|
|
|
+ if (route.query.type === "edit" && store.state.home.editFarmData) {
|
|
|
getSpecieList().then(() => {
|
|
getSpecieList().then(() => {
|
|
|
populateEditData();
|
|
populateEditData();
|
|
|
});
|
|
});
|
|
@@ -285,11 +311,16 @@ onMounted(() => {
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+const clientTypeList = [{
|
|
|
|
|
+ label:'全托管客户',
|
|
|
|
|
+ value:1
|
|
|
|
|
+}]
|
|
|
|
|
+
|
|
|
const polygonArr = ref(null);
|
|
const polygonArr = ref(null);
|
|
|
const paramsType = ref(null);
|
|
const paramsType = ref(null);
|
|
|
onActivated(() => {
|
|
onActivated(() => {
|
|
|
paramsType.value = route.query.type;
|
|
paramsType.value = route.query.type;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 确保地图已初始化,使用 nextTick 等待 DOM 更新
|
|
// 确保地图已初始化,使用 nextTick 等待 DOM 更新
|
|
|
nextTick(() => {
|
|
nextTick(() => {
|
|
|
// 检查地图实例是否已初始化
|
|
// 检查地图实例是否已初始化
|
|
@@ -306,7 +337,7 @@ onActivated(() => {
|
|
|
}, 100);
|
|
}, 100);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
handleMapUpdate();
|
|
handleMapUpdate();
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
@@ -318,34 +349,33 @@ function handleMapUpdate() {
|
|
|
store.commit("home/SET_FARM_POLYGON", null);
|
|
store.commit("home/SET_FARM_POLYGON", null);
|
|
|
isFromEditMap.value = false; // 从home进入,可以手动输入
|
|
isFromEditMap.value = false; // 从home进入,可以手动输入
|
|
|
hasDefaultPolygon.value = false; // 重置默认地块状态
|
|
hasDefaultPolygon.value = false; // 重置默认地块状态
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
centerPoint.value = store.state.home.miniUserLocationPoint;
|
|
centerPoint.value = store.state.home.miniUserLocationPoint;
|
|
|
const arr = convertPointToArray(centerPoint.value);
|
|
const arr = convertPointToArray(centerPoint.value);
|
|
|
getLocationName(`${arr[1]},${arr[0]}`);
|
|
getLocationName(`${arr[1]},${arr[0]}`);
|
|
|
indexMap.setMapPosition(arr);
|
|
indexMap.setMapPosition(arr);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
indexMap.clearLayer();
|
|
indexMap.clearLayer();
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 不再自动生成默认地块,等待用户点击"新增地块"
|
|
// 不再自动生成默认地块,等待用户点击"新增地块"
|
|
|
polygonArr.value = null;
|
|
polygonArr.value = null;
|
|
|
- ruleForm.mu = '';
|
|
|
|
|
- ruleForm.typeId = '';
|
|
|
|
|
|
|
+ ruleForm.mu = "";
|
|
|
|
|
+ ruleForm.typeId = "";
|
|
|
ruleForm.defaultFarm = false;
|
|
ruleForm.defaultFarm = false;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
return; // 直接返回,不执行下面的逻辑
|
|
return; // 直接返回,不执行下面的逻辑
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
indexMap.clearLayer();
|
|
indexMap.clearLayer();
|
|
|
// 绘制勾画范围(从edit_map返回的情况)
|
|
// 绘制勾画范围(从edit_map返回的情况)
|
|
|
const polygonData = store.state.home.polygonData;
|
|
const polygonData = store.state.home.polygonData;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 优先处理从编辑地图页面返回的数据
|
|
// 优先处理从编辑地图页面返回的数据
|
|
|
if (polygonData) {
|
|
if (polygonData) {
|
|
|
// 检查地块数据是否有效(数组存在且不为空)
|
|
// 检查地块数据是否有效(数组存在且不为空)
|
|
|
- const hasValidGeometry = polygonData.geometryArr &&
|
|
|
|
|
- Array.isArray(polygonData.geometryArr) &&
|
|
|
|
|
- polygonData.geometryArr.length > 0;
|
|
|
|
|
-
|
|
|
|
|
|
|
+ const hasValidGeometry =
|
|
|
|
|
+ polygonData.geometryArr && Array.isArray(polygonData.geometryArr) && polygonData.geometryArr.length > 0;
|
|
|
|
|
+
|
|
|
if (hasValidGeometry) {
|
|
if (hasValidGeometry) {
|
|
|
// 用户从edit_map返回,且有有效的地块数据
|
|
// 用户从edit_map返回,且有有效的地块数据
|
|
|
// 根据 isConfirmed 判断是否锁定输入框
|
|
// 根据 isConfirmed 判断是否锁定输入框
|
|
@@ -369,12 +399,12 @@ function handleMapUpdate() {
|
|
|
// 用户在编辑页面删除了所有地块
|
|
// 用户在编辑页面删除了所有地块
|
|
|
// 重置所有状态
|
|
// 重置所有状态
|
|
|
polygonArr.value = null;
|
|
polygonArr.value = null;
|
|
|
- ruleForm.mu = '';
|
|
|
|
|
|
|
+ ruleForm.mu = "";
|
|
|
isFromEditMap.value = false;
|
|
isFromEditMap.value = false;
|
|
|
hasDefaultPolygon.value = false;
|
|
hasDefaultPolygon.value = false;
|
|
|
ruleForm.defaultFarm = false;
|
|
ruleForm.defaultFarm = false;
|
|
|
}
|
|
}
|
|
|
- } else if (route.query.type === 'edit' && store.state.home.editFarmData) {
|
|
|
|
|
|
|
+ } else if (route.query.type === "edit" && store.state.home.editFarmData) {
|
|
|
// 如果是编辑模式且没有从编辑地图返回的数据,回填原始编辑数据
|
|
// 如果是编辑模式且没有从编辑地图返回的数据,回填原始编辑数据
|
|
|
populateEditData();
|
|
populateEditData();
|
|
|
} else if (centerPoint.value && polygonArr.value) {
|
|
} else if (centerPoint.value && polygonArr.value) {
|
|
@@ -435,7 +465,7 @@ const handleSearchRes = (v) => {
|
|
|
ruleForm.address = v.item?.title || v.item?.address;
|
|
ruleForm.address = v.item?.title || v.item?.address;
|
|
|
pointAddress.value = v.item?.province + v.item?.city + v.item?.district;
|
|
pointAddress.value = v.item?.province + v.item?.city + v.item?.district;
|
|
|
// 更新farmCity以便后续更新农场名称
|
|
// 更新farmCity以便后续更新农场名称
|
|
|
- farmCity.value = v.item?.city + v.item?.district || '';
|
|
|
|
|
|
|
+ farmCity.value = v.item?.city + v.item?.district || "";
|
|
|
// 地址修改后,如果满足条件则自动更新农场名称
|
|
// 地址修改后,如果满足条件则自动更新农场名称
|
|
|
updateFarmNameIfNeeded();
|
|
updateFarmNameIfNeeded();
|
|
|
};
|
|
};
|
|
@@ -450,18 +480,19 @@ const ruleForm = reactive({
|
|
|
name: "",
|
|
name: "",
|
|
|
fzr: "",
|
|
fzr: "",
|
|
|
tel: "",
|
|
tel: "",
|
|
|
- defaultFarm:0, // 0:否 1:是
|
|
|
|
|
|
|
+ clientType: 1,
|
|
|
|
|
+ defaultFarm: 0, // 0:否 1:是
|
|
|
});
|
|
});
|
|
|
// 自定义验证规则:验证面积必须是大于0的数字
|
|
// 自定义验证规则:验证面积必须是大于0的数字
|
|
|
const validateMianji = (rule, value, callback) => {
|
|
const validateMianji = (rule, value, callback) => {
|
|
|
if (!value) {
|
|
if (!value) {
|
|
|
- callback(new Error('请输入农场面积'));
|
|
|
|
|
|
|
+ callback(new Error("请输入农场面积"));
|
|
|
} else {
|
|
} else {
|
|
|
const num = parseFloat(value);
|
|
const num = parseFloat(value);
|
|
|
if (isNaN(num)) {
|
|
if (isNaN(num)) {
|
|
|
- callback(new Error('面积必须是数字'));
|
|
|
|
|
|
|
+ callback(new Error("面积必须是数字"));
|
|
|
} else if (num <= 0) {
|
|
} else if (num <= 0) {
|
|
|
- callback(new Error('面积必须大于0'));
|
|
|
|
|
|
|
+ callback(new Error("面积必须大于0"));
|
|
|
} else {
|
|
} else {
|
|
|
callback();
|
|
callback();
|
|
|
}
|
|
}
|
|
@@ -470,9 +501,10 @@ const validateMianji = (rule, value, callback) => {
|
|
|
|
|
|
|
|
const rules = reactive({
|
|
const rules = reactive({
|
|
|
address: [{ required: true, message: "请选择农场位置", trigger: "blur" }],
|
|
address: [{ required: true, message: "请选择农场位置", trigger: "blur" }],
|
|
|
|
|
+ clientType: [{ required: true, message: "请选择客户类型", trigger: "blur" }],
|
|
|
mu: [
|
|
mu: [
|
|
|
{ required: true, message: "请输入农场面积", trigger: "blur" },
|
|
{ required: true, message: "请输入农场面积", trigger: "blur" },
|
|
|
- { validator: validateMianji, trigger: ["blur", "change"] }
|
|
|
|
|
|
|
+ { validator: validateMianji, trigger: ["blur", "change"] },
|
|
|
],
|
|
],
|
|
|
speciesItem: [{ required: true, message: "请选择品类", trigger: "blur" }],
|
|
speciesItem: [{ required: true, message: "请选择品类", trigger: "blur" }],
|
|
|
typeId: [{ required: true, message: "请选择品种", trigger: "blur" }],
|
|
typeId: [{ required: true, message: "请选择品种", trigger: "blur" }],
|
|
@@ -480,16 +512,16 @@ const rules = reactive({
|
|
|
fzr: [{ required: true, message: "请输入联系人姓名", trigger: "blur" }],
|
|
fzr: [{ required: true, message: "请输入联系人姓名", trigger: "blur" }],
|
|
|
tel: [
|
|
tel: [
|
|
|
{ required: true, message: "请输入联系人电话", trigger: "blur" },
|
|
{ required: true, message: "请输入联系人电话", trigger: "blur" },
|
|
|
- {
|
|
|
|
|
- pattern: /^1[3-9]\d{9}$/,
|
|
|
|
|
- message: "请输入正确的手机号码",
|
|
|
|
|
- trigger: "blur"
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ pattern: /^1[3-9]\d{9}$/,
|
|
|
|
|
+ message: "请输入正确的手机号码",
|
|
|
|
|
+ trigger: "blur",
|
|
|
|
|
+ },
|
|
|
],
|
|
],
|
|
|
defaultFarm: [{ required: true, message: "请选择是否为默认农场", trigger: "blur" }],
|
|
defaultFarm: [{ required: true, message: "请选择是否为默认农场", trigger: "blur" }],
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-const curRole = localStorage.getItem('SET_USER_CUR_ROLE');
|
|
|
|
|
|
|
+const curRole = localStorage.getItem("SET_USER_CUR_ROLE");
|
|
|
|
|
|
|
|
const submitForm = (formEl) => {
|
|
const submitForm = (formEl) => {
|
|
|
if (!formEl) return;
|
|
if (!formEl) return;
|
|
@@ -500,19 +532,22 @@ const submitForm = (formEl) => {
|
|
|
wkt: centerPoint.value,
|
|
wkt: centerPoint.value,
|
|
|
speciesId: ruleForm.speciesItem?.id,
|
|
speciesId: ruleForm.speciesItem?.id,
|
|
|
containerId: ruleForm.speciesItem?.defaultContainerId,
|
|
containerId: ruleForm.speciesItem?.defaultContainerId,
|
|
|
- agriculturalCreate: route.query.type === 'client' ? 1 : 0,
|
|
|
|
|
|
|
+ agriculturalCreate: route.query.type === "client" ? 1 : 0,
|
|
|
// 编辑时geom不是数组,新增时是数组
|
|
// 编辑时geom不是数组,新增时是数组
|
|
|
- geom: route.query.type === 'edit'
|
|
|
|
|
- ? (polygonArr.value && polygonArr.value.length > 0 ? polygonArr.value[0] : null)
|
|
|
|
|
- : polygonArr.value,
|
|
|
|
|
|
|
+ geom:
|
|
|
|
|
+ route.query.type === "edit"
|
|
|
|
|
+ ? polygonArr.value && polygonArr.value.length > 0
|
|
|
|
|
+ ? polygonArr.value[0]
|
|
|
|
|
+ : null
|
|
|
|
|
+ : polygonArr.value,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// 如果是编辑模式,添加农场ID
|
|
// 如果是编辑模式,添加农场ID
|
|
|
- if (route.query.type === 'edit' && route.query.farmId) {
|
|
|
|
|
|
|
+ if (route.query.type === "edit" && route.query.farmId) {
|
|
|
params.farmId = route.query.farmId;
|
|
params.farmId = route.query.farmId;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if(route.query.type === 'client'){
|
|
|
|
|
|
|
+ if (route.query.type === "client") {
|
|
|
// 处理 geom 参数,如果是数组需要序列化
|
|
// 处理 geom 参数,如果是数组需要序列化
|
|
|
const queryParams = {
|
|
const queryParams = {
|
|
|
...params,
|
|
...params,
|
|
@@ -531,46 +566,43 @@ const submitForm = (formEl) => {
|
|
|
});
|
|
});
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- const apiCall = route.query.type === 'edit'
|
|
|
|
|
- ? VE_API.farm.updateFarm(params)
|
|
|
|
|
- : VE_API.farm.saveFarm(params);
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+ const apiCall = route.query.type === "edit" ? VE_API.farm.updateFarm(params) : VE_API.farm.saveFarm(params);
|
|
|
|
|
+
|
|
|
apiCall.then((res) => {
|
|
apiCall.then((res) => {
|
|
|
- if(res.code === 0) {
|
|
|
|
|
- ElMessage.success(route.query.type === 'edit' ? "修改成功" : "创建成功");
|
|
|
|
|
|
|
+ if (res.code === 0) {
|
|
|
|
|
+ ElMessage.success(route.query.type === "edit" ? "修改成功" : "创建成功");
|
|
|
// 重置表单和地块数据
|
|
// 重置表单和地块数据
|
|
|
ruleFormRef.value.resetFields();
|
|
ruleFormRef.value.resetFields();
|
|
|
store.commit("home/SET_FARM_POLYGON", null);
|
|
store.commit("home/SET_FARM_POLYGON", null);
|
|
|
store.commit("home/SET_EDIT_FARM_DATA", null); // 清除编辑数据
|
|
store.commit("home/SET_EDIT_FARM_DATA", null); // 清除编辑数据
|
|
|
polygonArr.value = null;
|
|
polygonArr.value = null;
|
|
|
isFromEditMap.value = false;
|
|
isFromEditMap.value = false;
|
|
|
- localStorage.setItem('isGarden', true);
|
|
|
|
|
|
|
+ localStorage.setItem("isGarden", true);
|
|
|
|
|
|
|
|
- if(route.query.type !== 'edit' && curRole == 0){
|
|
|
|
|
- localStorage.setItem('selectedFarmId', res.data.id);
|
|
|
|
|
- localStorage.setItem('selectedFarmName', res.data.name);
|
|
|
|
|
|
|
+ if (route.query.type !== "edit" && curRole == 0) {
|
|
|
|
|
+ localStorage.setItem("selectedFarmId", res.data.id);
|
|
|
|
|
+ localStorage.setItem("selectedFarmName", res.data.name);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 根据来源页面决定跳转目标
|
|
// 根据来源页面决定跳转目标
|
|
|
const fromPage = route.query.from;
|
|
const fromPage = route.query.from;
|
|
|
- if (fromPage && fromPage !== 'details') {
|
|
|
|
|
|
|
+ if (fromPage && fromPage !== "details") {
|
|
|
// 如果是从monitor页面来的
|
|
// 如果是从monitor页面来的
|
|
|
router.replace(`/${fromPage}`);
|
|
router.replace(`/${fromPage}`);
|
|
|
- if(fromPage === 'home'){
|
|
|
|
|
|
|
+ if (fromPage === "home") {
|
|
|
let showSuccess = false;
|
|
let showSuccess = false;
|
|
|
- if(localStorage.getItem('isGarden') != 'true' && curRole == 0){
|
|
|
|
|
|
|
+ if (localStorage.getItem("isGarden") != "true" && curRole == 0) {
|
|
|
showSuccess = true;
|
|
showSuccess = true;
|
|
|
}
|
|
}
|
|
|
router.replace(`/home?showSuccess=${showSuccess}`);
|
|
router.replace(`/home?showSuccess=${showSuccess}`);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
} else if (fromPage === "details") {
|
|
} else if (fromPage === "details") {
|
|
|
- router.go(-1)
|
|
|
|
|
|
|
+ router.go(-1);
|
|
|
} else {
|
|
} else {
|
|
|
router.replace(`/home`);
|
|
router.replace(`/home`);
|
|
|
}
|
|
}
|
|
|
- }else{
|
|
|
|
|
|
|
+ } else {
|
|
|
ElMessage.error(res.msg);
|
|
ElMessage.error(res.msg);
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
@@ -586,14 +618,14 @@ const resetForm = (formEl) => {
|
|
|
polygonArr.value = null;
|
|
polygonArr.value = null;
|
|
|
isFromEditMap.value = false;
|
|
isFromEditMap.value = false;
|
|
|
hasDefaultPolygon.value = false; // 重置默认地块状态
|
|
hasDefaultPolygon.value = false; // 重置默认地块状态
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 根据来源页面决定返回目标
|
|
// 根据来源页面决定返回目标
|
|
|
const fromPage = route.query.from;
|
|
const fromPage = route.query.from;
|
|
|
- if (fromPage && fromPage !== 'details') {
|
|
|
|
|
|
|
+ if (fromPage && fromPage !== "details") {
|
|
|
router.replace(`/${fromPage}`);
|
|
router.replace(`/${fromPage}`);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
- router.go(-1)
|
|
|
|
|
|
|
+ router.go(-1);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const centerPoint = ref(null);
|
|
const centerPoint = ref(null);
|
|
@@ -603,37 +635,37 @@ function toSubPage() {
|
|
|
if (!hasDefaultPolygon.value) {
|
|
if (!hasDefaultPolygon.value) {
|
|
|
if (centerPoint.value) {
|
|
if (centerPoint.value) {
|
|
|
const arr = convertPointToArray(centerPoint.value);
|
|
const arr = convertPointToArray(centerPoint.value);
|
|
|
- const squareData = generateSquarePolygonBySideLength(arr, 200); // 200米边长
|
|
|
|
|
|
|
+ const squareData = generateSquarePolygonBySideLength(arr, 200); // 200米边长
|
|
|
const geometryData = {
|
|
const geometryData = {
|
|
|
geometryArr: [squareData.wkt],
|
|
geometryArr: [squareData.wkt],
|
|
|
mianji: squareData.area,
|
|
mianji: squareData.area,
|
|
|
};
|
|
};
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 绘制默认地块
|
|
// 绘制默认地块
|
|
|
indexMap.setAreaGeometry(geometryData.geometryArr);
|
|
indexMap.setAreaGeometry(geometryData.geometryArr);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 保存地块数据
|
|
// 保存地块数据
|
|
|
polygonArr.value = geometryData.geometryArr;
|
|
polygonArr.value = geometryData.geometryArr;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 标记已创建默认地块
|
|
// 标记已创建默认地块
|
|
|
hasDefaultPolygon.value = true;
|
|
hasDefaultPolygon.value = true;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 不跳转,停留在当前页面
|
|
// 不跳转,停留在当前页面
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 如果已有默认地块,则跳转到编辑页面
|
|
// 如果已有默认地块,则跳转到编辑页面
|
|
|
// 保存到store中以便在编辑页面回显
|
|
// 保存到store中以便在编辑页面回显
|
|
|
if (polygonArr.value) {
|
|
if (polygonArr.value) {
|
|
|
const polygonData = {
|
|
const polygonData = {
|
|
|
geometryArr: polygonArr.value,
|
|
geometryArr: polygonArr.value,
|
|
|
- mianji: ruleForm.mu || '', // 保存用户输入的面积,如果没有输入则为空
|
|
|
|
|
- isConfirmed: false, // 标记:还未从编辑页面确认返回
|
|
|
|
|
|
|
+ mianji: ruleForm.mu || "", // 保存用户输入的面积,如果没有输入则为空
|
|
|
|
|
+ isConfirmed: false, // 标记:还未从编辑页面确认返回
|
|
|
};
|
|
};
|
|
|
store.commit("home/SET_FARM_POLYGON", polygonData);
|
|
store.commit("home/SET_FARM_POLYGON", polygonData);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
router.push(
|
|
router.push(
|
|
|
`/edit_map?mapCenter=${centerPoint.value}&pointName=${ruleForm.address}&pointAddress=${pointAddress.value}&from=${route.query.from}&type=${route.query.type}`
|
|
`/edit_map?mapCenter=${centerPoint.value}&pointName=${ruleForm.address}&pointAddress=${pointAddress.value}&from=${route.query.from}&type=${route.query.type}`
|
|
|
);
|
|
);
|
|
@@ -651,7 +683,7 @@ function getLocationName(location) {
|
|
|
const add = result.formatted_addresses?.recommend ? result.formatted_addresses.recommend : result.address + "";
|
|
const add = result.formatted_addresses?.recommend ? result.formatted_addresses.recommend : result.address + "";
|
|
|
ruleForm.address = add;
|
|
ruleForm.address = add;
|
|
|
pointAddress.value = result.address;
|
|
pointAddress.value = result.address;
|
|
|
- farmCity.value = result.address_component?.city + result.address_component?.district || '';
|
|
|
|
|
|
|
+ farmCity.value = result.address_component?.city + result.address_component?.district || "";
|
|
|
// 地址修改后,如果满足条件则自动更新农场名称
|
|
// 地址修改后,如果满足条件则自动更新农场名称
|
|
|
updateFarmNameIfNeeded();
|
|
updateFarmNameIfNeeded();
|
|
|
});
|
|
});
|
|
@@ -680,9 +712,9 @@ function getSpecieList() {
|
|
|
function changeSpecie(v) {
|
|
function changeSpecie(v) {
|
|
|
getFruitsTypeItemList(v.id);
|
|
getFruitsTypeItemList(v.id);
|
|
|
// 清空品种选择
|
|
// 清空品种选择
|
|
|
- ruleForm.typeId = '';
|
|
|
|
|
|
|
+ ruleForm.typeId = "";
|
|
|
// 只有在创建模式下且用户没有手动修改过农场名称时,才自动设置农场名称
|
|
// 只有在创建模式下且用户没有手动修改过农场名称时,才自动设置农场名称
|
|
|
- if (route.query.type !== 'edit' && !isFarmNameManuallyModified.value) {
|
|
|
|
|
|
|
+ if (route.query.type !== "edit" && !isFarmNameManuallyModified.value) {
|
|
|
ruleForm.name = farmCity.value + v.name + "农场";
|
|
ruleForm.name = farmCity.value + v.name + "农场";
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -696,14 +728,14 @@ function getFruitsTypeItemList(parentId) {
|
|
|
|
|
|
|
|
function backgToHome() {
|
|
function backgToHome() {
|
|
|
ruleFormRef.value?.resetFields();
|
|
ruleFormRef.value?.resetFields();
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 根据来源页面决定返回目标
|
|
// 根据来源页面决定返回目标
|
|
|
const fromPage = route.query.from;
|
|
const fromPage = route.query.from;
|
|
|
- if (fromPage && fromPage !== 'details') {
|
|
|
|
|
|
|
+ if (fromPage && fromPage !== "details") {
|
|
|
router.replace(`/${fromPage}`);
|
|
router.replace(`/${fromPage}`);
|
|
|
return;
|
|
return;
|
|
|
} else {
|
|
} else {
|
|
|
- router.go(-1)
|
|
|
|
|
|
|
+ router.go(-1);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -714,25 +746,25 @@ function handleMianjiKeypress(event) {
|
|
|
event.preventDefault();
|
|
event.preventDefault();
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
const charCode = event.which ? event.which : event.keyCode;
|
|
const charCode = event.which ? event.which : event.keyCode;
|
|
|
const char = String.fromCharCode(charCode);
|
|
const char = String.fromCharCode(charCode);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 允许数字 (0-9) 和小数点 (.)
|
|
// 允许数字 (0-9) 和小数点 (.)
|
|
|
if (!/^[0-9.]$/.test(char)) {
|
|
if (!/^[0-9.]$/.test(char)) {
|
|
|
event.preventDefault();
|
|
event.preventDefault();
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 如果已经有小数点,不允许再输入小数点
|
|
// 如果已经有小数点,不允许再输入小数点
|
|
|
- const currentValue = ruleForm.mu || '';
|
|
|
|
|
- if (char === '.' && currentValue.includes('.')) {
|
|
|
|
|
|
|
+ const currentValue = ruleForm.mu || "";
|
|
|
|
|
+ if (char === "." && currentValue.includes(".")) {
|
|
|
event.preventDefault();
|
|
event.preventDefault();
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 不允许以小数点开头
|
|
// 不允许以小数点开头
|
|
|
- if (char === '.' && !currentValue) {
|
|
|
|
|
|
|
+ if (char === "." && !currentValue) {
|
|
|
event.preventDefault();
|
|
event.preventDefault();
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -747,7 +779,7 @@ function handleFarmNameInput() {
|
|
|
// 根据地址更新农场名称(如果满足条件)
|
|
// 根据地址更新农场名称(如果满足条件)
|
|
|
function updateFarmNameIfNeeded() {
|
|
function updateFarmNameIfNeeded() {
|
|
|
// 只有在创建模式下且用户没有手动修改过农场名称且已选择品类时,才自动更新农场名称
|
|
// 只有在创建模式下且用户没有手动修改过农场名称且已选择品类时,才自动更新农场名称
|
|
|
- if (route.query.type !== 'edit' && !isFarmNameManuallyModified.value && ruleForm.speciesItem && farmCity.value) {
|
|
|
|
|
|
|
+ if (route.query.type !== "edit" && !isFarmNameManuallyModified.value && ruleForm.speciesItem && farmCity.value) {
|
|
|
ruleForm.name = farmCity.value + ruleForm.speciesItem.name + "农场";
|
|
ruleForm.name = farmCity.value + ruleForm.speciesItem.name + "农场";
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -758,22 +790,22 @@ function populateEditData() {
|
|
|
if (!editData) {
|
|
if (!editData) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 回填基本信息
|
|
// 回填基本信息
|
|
|
- ruleForm.name = editData.name || '';
|
|
|
|
|
- ruleForm.fzr = editData.fzr || '';
|
|
|
|
|
- ruleForm.tel = editData.tel || '';
|
|
|
|
|
|
|
+ ruleForm.name = editData.name || "";
|
|
|
|
|
+ ruleForm.fzr = editData.fzr || "";
|
|
|
|
|
+ ruleForm.tel = editData.tel || "";
|
|
|
ruleForm.defaultFarm = editData.defaultOption || false;
|
|
ruleForm.defaultFarm = editData.defaultOption || false;
|
|
|
- ruleForm.mu = editData.mianji || '';
|
|
|
|
|
- ruleForm.address = editData.address || '';
|
|
|
|
|
-
|
|
|
|
|
|
|
+ ruleForm.mu = editData.mianji || "";
|
|
|
|
|
+ ruleForm.address = editData.address || "";
|
|
|
|
|
+
|
|
|
// 设置地图中心点
|
|
// 设置地图中心点
|
|
|
if (editData.pointWkt) {
|
|
if (editData.pointWkt) {
|
|
|
centerPoint.value = editData.pointWkt;
|
|
centerPoint.value = editData.pointWkt;
|
|
|
const arr = convertPointToArray(editData.pointWkt);
|
|
const arr = convertPointToArray(editData.pointWkt);
|
|
|
indexMap.setMapPosition(arr);
|
|
indexMap.setMapPosition(arr);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 处理地块数据
|
|
// 处理地块数据
|
|
|
if (editData.geomWkt) {
|
|
if (editData.geomWkt) {
|
|
|
polygonArr.value = [editData.geomWkt];
|
|
polygonArr.value = [editData.geomWkt];
|
|
@@ -781,7 +813,7 @@ function populateEditData() {
|
|
|
hasDefaultPolygon.value = true;
|
|
hasDefaultPolygon.value = true;
|
|
|
isFromEditMap.value = true; // 编辑模式下锁定面积输入
|
|
isFromEditMap.value = true; // 编辑模式下锁定面积输入
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 处理作物数据
|
|
// 处理作物数据
|
|
|
if (editData.speciesId && editData.speciesName) {
|
|
if (editData.speciesId && editData.speciesName) {
|
|
|
// 设置品类 - 需要匹配模板中的数据结构
|
|
// 设置品类 - 需要匹配模板中的数据结构
|
|
@@ -789,25 +821,25 @@ function populateEditData() {
|
|
|
value: editData.speciesId,
|
|
value: editData.speciesId,
|
|
|
id: editData.speciesId,
|
|
id: editData.speciesId,
|
|
|
name: editData.speciesName,
|
|
name: editData.speciesName,
|
|
|
- defaultContainerId: editData.containerId
|
|
|
|
|
|
|
+ defaultContainerId: editData.containerId,
|
|
|
};
|
|
};
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 获取品种列表
|
|
// 获取品种列表
|
|
|
getFruitsTypeItemList(editData.speciesId);
|
|
getFruitsTypeItemList(editData.speciesId);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 设置品种
|
|
// 设置品种
|
|
|
if (editData.typeId) {
|
|
if (editData.typeId) {
|
|
|
ruleForm.typeId = editData.typeId;
|
|
ruleForm.typeId = editData.typeId;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 设置地址信息
|
|
// 设置地址信息
|
|
|
if (editData.district) {
|
|
if (editData.district) {
|
|
|
try {
|
|
try {
|
|
|
const districtInfo = JSON.parse(editData.district);
|
|
const districtInfo = JSON.parse(editData.district);
|
|
|
pointAddress.value = districtInfo.province + districtInfo.city + districtInfo.district;
|
|
pointAddress.value = districtInfo.province + districtInfo.city + districtInfo.district;
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
- console.warn('解析地址信息失败:', e);
|
|
|
|
|
|
|
+ console.warn("解析地址信息失败:", e);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -819,56 +851,56 @@ function handleMianjiInput(value) {
|
|
|
if (isFromEditMap.value) {
|
|
if (isFromEditMap.value) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 过滤非法字符,只保留数字和小数点
|
|
// 过滤非法字符,只保留数字和小数点
|
|
|
- let filteredValue = value.replace(/[^\d.]/g, '');
|
|
|
|
|
-
|
|
|
|
|
|
|
+ let filteredValue = value.replace(/[^\d.]/g, "");
|
|
|
|
|
+
|
|
|
// 确保只有一个小数点
|
|
// 确保只有一个小数点
|
|
|
- const parts = filteredValue.split('.');
|
|
|
|
|
|
|
+ const parts = filteredValue.split(".");
|
|
|
if (parts.length > 2) {
|
|
if (parts.length > 2) {
|
|
|
- filteredValue = parts[0] + '.' + parts.slice(1).join('');
|
|
|
|
|
|
|
+ filteredValue = parts[0] + "." + parts.slice(1).join("");
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 限制小数点后最多2位
|
|
// 限制小数点后最多2位
|
|
|
if (parts.length === 2 && parts[1].length > 2) {
|
|
if (parts.length === 2 && parts[1].length > 2) {
|
|
|
- filteredValue = parts[0] + '.' + parts[1].substring(0, 2);
|
|
|
|
|
|
|
+ filteredValue = parts[0] + "." + parts[1].substring(0, 2);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 更新输入框的值(如果被过滤了)
|
|
// 更新输入框的值(如果被过滤了)
|
|
|
if (filteredValue !== value) {
|
|
if (filteredValue !== value) {
|
|
|
ruleForm.mu = filteredValue;
|
|
ruleForm.mu = filteredValue;
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 清除之前的定时器
|
|
// 清除之前的定时器
|
|
|
if (mianjiInputTimer) {
|
|
if (mianjiInputTimer) {
|
|
|
clearTimeout(mianjiInputTimer);
|
|
clearTimeout(mianjiInputTimer);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 防抖处理,用户停止输入500ms后再更新地块
|
|
// 防抖处理,用户停止输入500ms后再更新地块
|
|
|
mianjiInputTimer = setTimeout(() => {
|
|
mianjiInputTimer = setTimeout(() => {
|
|
|
const mu = parseFloat(filteredValue);
|
|
const mu = parseFloat(filteredValue);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 验证输入的有效性
|
|
// 验证输入的有效性
|
|
|
if (!mu || isNaN(mu) || mu <= 0) {
|
|
if (!mu || isNaN(mu) || mu <= 0) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 根据亩数重新生成地块
|
|
// 根据亩数重新生成地块
|
|
|
if (centerPoint.value) {
|
|
if (centerPoint.value) {
|
|
|
const arr = convertPointToArray(centerPoint.value);
|
|
const arr = convertPointToArray(centerPoint.value);
|
|
|
const squareData = generateSquarePolygonByMu(arr, mu);
|
|
const squareData = generateSquarePolygonByMu(arr, mu);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
const geometryData = {
|
|
const geometryData = {
|
|
|
geometryArr: [squareData.wkt],
|
|
geometryArr: [squareData.wkt],
|
|
|
mianji: squareData.area,
|
|
mianji: squareData.area,
|
|
|
};
|
|
};
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 清除旧地块
|
|
// 清除旧地块
|
|
|
indexMap.clearLayer();
|
|
indexMap.clearLayer();
|
|
|
// 绘制新地块
|
|
// 绘制新地块
|
|
|
indexMap.setAreaGeometry(geometryData.geometryArr);
|
|
indexMap.setAreaGeometry(geometryData.geometryArr);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 更新状态
|
|
// 更新状态
|
|
|
polygonArr.value = geometryData.geometryArr;
|
|
polygonArr.value = geometryData.geometryArr;
|
|
|
// 标记已创建默认地块
|
|
// 标记已创建默认地块
|
|
@@ -879,8 +911,8 @@ function handleMianjiInput(value) {
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
<style lang="scss" scoped>
|
|
|
-::v-deep{
|
|
|
|
|
- .el-form-item--default{
|
|
|
|
|
|
|
+::v-deep {
|
|
|
|
|
+ .el-form-item--default {
|
|
|
margin-bottom: 20px;
|
|
margin-bottom: 20px;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -893,7 +925,7 @@ function handleMianjiInput(value) {
|
|
|
width: 100%;
|
|
width: 100%;
|
|
|
height: calc(100% - 320px);
|
|
height: calc(100% - 320px);
|
|
|
}
|
|
}
|
|
|
- .checkbox{
|
|
|
|
|
|
|
+ .checkbox {
|
|
|
padding: 0 12px 6px;
|
|
padding: 0 12px 6px;
|
|
|
font-size: 15px;
|
|
font-size: 15px;
|
|
|
}
|
|
}
|
|
@@ -1051,6 +1083,13 @@ function handleMianjiInput(value) {
|
|
|
width: fit-content;
|
|
width: fit-content;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ &.client-wrap{
|
|
|
|
|
+ ::v-deep{
|
|
|
|
|
+ .el-select__wrapper {
|
|
|
|
|
+ justify-content: flex-start;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
// .select-item {
|
|
// .select-item {
|
|
|
// width: fit-content;
|
|
// width: fit-content;
|
|
|
// }
|
|
// }
|