From f02a2514eb9e5e7903d57ef2828f7f0bef4a96bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=BE=E8=82=83?= <15833576927@163.com> Date: Fri, 31 May 2024 12:36:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9C=B0=E5=9D=97=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/basicData/massifApi.js | 66 ++++++++++++ src/views/system/base/massifForm.vue | 120 ++++++++++++++++------ src/views/system/base/massifTable.vue | 138 ++++++++++++-------------- 3 files changed, 224 insertions(+), 100 deletions(-) create mode 100644 src/api/basicData/massifApi.js diff --git a/src/api/basicData/massifApi.js b/src/api/basicData/massifApi.js new file mode 100644 index 0000000..452232d --- /dev/null +++ b/src/api/basicData/massifApi.js @@ -0,0 +1,66 @@ +import request from '@/utils/request' + +// 添加地块 +export function addPlot(query) { + return request({ + url: '/plot_info/add', + method: 'post', + data: query + }) +} +// 删除地块 +export function delPlotById(data) { + return request({ + url: '/plot_info/deleteById', + method: 'get', + params: data + }) +} +//分页查询地块信息 +export function selPlotPage(query) { + return request({ + url: '/plot_info/queryByPage', + method: 'post', + data: query + }) +} +//不分页查询地块信息 +export function selAllPlot(query) { + return request({ + url: '/plot_info/selectByPage', + method: 'post', + data: query + }) +} +// 查询作物种类 +export function selCropInfo(query) { + return request({ + url: '/crop_info/selCropInfo', + method: 'post', + data: query + }) +} +//通过id查询地块信息 +export function selPlotById(query) { + return request({ + url: '/plot_info/queryById', + method: 'get', + params: query + }) +} +//修改地块信息 +export function editPlot(data) { + return request({ + url: '/plot_info/edit', + method: 'put', + data: data + }) +} +//修改地块状态 +export function editPlotStatus(data) { + return request({ + url: '/plot_info/editStatus', + method: 'post', + data: data + }) +} \ No newline at end of file diff --git a/src/views/system/base/massifForm.vue b/src/views/system/base/massifForm.vue index 6d79665..2665f5f 100644 --- a/src/views/system/base/massifForm.vue +++ b/src/views/system/base/massifForm.vue @@ -9,24 +9,38 @@ import {ElMessage} from "element-plus"; import {areaConversion} from "@/utils/ruoyi.js"; import * as turf from "@turf/turf"; import {lazyAMapApiLoaderInstance} from "@vuemap/vue-amap"; +import {addPlot, editPlot, selCropInfo, selPlotById} from "@/api/basicData/massifApi.js"; let {proxy} = getCurrentInstance(); const uploadJsonData = ref([]) const props = defineProps({}) const settingsStore = useSettingsStore() const theme = computed(() => settingsStore.theme) +const initData = () => { + selCropInfo({}).then(res => { + selectOptions.cropClass = res.data.map(item => { + return { + label: item.cropName, + value: item.id + } + }) + if (selectOptions.cropClass.length > 0) { + formData.value.cropIds = selectOptions.cropClass[0].value + } + }) +} +onMounted(() => { + initData() +}) const selectOptions = reactive({ // 地块性质 massifType: [ {label: '旱地', value: 1}, - {label: '水浇地', value: 2}, {label: '水田', value: 2}, + {label: '水浇地', value: 3}, ], // 作物种类 - cropClass: [ - {label: '甘蔗', value: 1}, - {label: '其他', value: 9}, - ] + cropClass: [] }) let emit = defineEmits(['beforeSubmit', 'submitSuccess']); const loading = ref(false) @@ -39,6 +53,23 @@ const formStatus = ref(1) const formData = ref({}) const resetForm = (params) => { formData.value = { + id: undefined, + // 当前作物 + cropIds: [], + // 地块名称 + plotName: '', + // 种植季id + seasonId: undefined, + // 基地id + baseNurseryId: undefined, + // 地块面积 + area: undefined, + // 地块性质 + plotType: 1, + // 描述 + remark: '', + // 当前状态 1启用 2停用 + status: 1, // 坐标集合 coordinateList: [ {}, @@ -49,20 +80,40 @@ const resetForm = (params) => { coordinateType: 1, ...params } + if (selectOptions.cropClass.length > 0) { + formData.value.cropIds = [selectOptions.cropClass[0].value] + } + uploadJsonData.value = [] } const toAdd = (params = {}) => { formStatus.value = 1 resetForm(deepClone(params)) - uploadJsonData.value = [] showDrawer.value = true } +const getById = (row) => { + selPlotById({id: row.id}).then(res => { + formData.value = res + formData.value.coordinateType = 1 + let plotRanges = JSON.parse(res.plotRange) || [] + let coordinateList = plotRanges?.[0].map(item => { + return { + longitude: item[0], + latitude: item[1] + } + }) + formData.value.coordinateList = coordinateList + formData.value.cropIds = res.cropId?.split(',').map(Number) || [] + uploadJsonData.value = coordinateList + showDrawer.value = true + }) +} const toUpdate = (row) => { formStatus.value = 2 - showDrawer.value = true + getById(row) } const toView = (row) => { formStatus.value = 3 - showDrawer.value = true + getById(row) } // 计算地块面积(亩) const calculateArea = () => { @@ -115,30 +166,38 @@ const formRef = ref(null) const polygonList = ref([]) const saveMassif = () => { lazyAMapApiLoaderInstance.then(() => { - let newFormData = deepClone(formData.value) - for (let item of newFormData.coordinateList) { - if (!item.longitude || !item.latitude || !newFormData.massifName) { + let coordinateList = formData.value.coordinateType === 2 ? uploadJsonData.value : formData.value.coordinateList; + for (let item of coordinateList) { + if (!item.longitude || !item.latitude || !formData.value.plotName) { ElMessage.error('地块保存失败,请确认地块名称和坐标点均已填写。') return } } - let polygonTemp = newFormData.coordinateList.map(item =>[item.longitude, item.latitude]) + let polygonTemp = formData.value.coordinateList.map(item => [item.longitude, item.latitude]) for (let item of polygonList.value) { if (AMap.GeometryUtil.doesRingRingIntersect(polygonTemp.value, item.path) || AMap.GeometryUtil.isRingInRing(polygonTemp.value, item.path) || AMap.GeometryUtil.isRingInRing(item.path, polygonTemp.value)) { ElMessage.error('当前地块与已有地块边界重合,请修改后再确认') return } } - if (formData.value.coordinateType === 2) { - newFormData.coordinateList = uploadJsonData.value + let newFormData = { + ...formData.value, + cropId:formData.value.cropIds.toLocaleString(), + coordinateList: undefined, + plotRange: JSON.stringify([coordinateList.map(item => { + return [item.longitude, item.latitude] + })]) } emit('beforeSubmit', formData.value) loading.value = true - setTimeout(() => { - loading.value = false - emit('submitSuccess', formData.value) + let api = !!formData.value.id ? editPlot : addPlot + api(newFormData).then(res => { + proxy.$modal.msgSuccess(formData.value.id ? '修改成功' : "保存成功"); showDrawer.value = false - }, 2000) + emit('submitSuccess', formData.value) + }).finally(() => { + loading.value = false + }) }) } @@ -148,7 +207,7 @@ defineExpose({ toView }) const rules = ref({ - massifName: [{required: true, message: "地块名称不能为空", trigger: "blur"}], + plotName: [{required: true, message: "地块名称不能为空", trigger: "blur"}], }) @@ -161,15 +220,15 @@ const rules = ref({
地块详情
- + - -
{{ formData.massifName }}
+ +
{{ formData.plotName }}
@@ -190,34 +249,39 @@ const rules = ref({ - -
{{formData.baseName}}
+ +
{{ formData.baseNurseryName }}
- + +
{{formData.plotTypeName}}
- + +
{{formData.cropName}}
- + +
{{formData.status === 1?'启用':'禁用'}}
- + diff --git a/src/views/system/base/massifTable.vue b/src/views/system/base/massifTable.vue index c5fb068..46b5414 100644 --- a/src/views/system/base/massifTable.vue +++ b/src/views/system/base/massifTable.vue @@ -3,7 +3,7 @@ - + @@ -17,15 +17,15 @@ - - + + @@ -49,7 +49,7 @@ - + - - - - - - + + + + + + + + + + - +