diff --git a/main/.env.development b/main/.env.development index 6687280..7729b29 100644 --- a/main/.env.development +++ b/main/.env.development @@ -13,9 +13,9 @@ VITE_APP_SUB_GSR = '//localhost:9530/new-digital-agriculture-screen/' VITE_APP_BASE_API = '/apis' VITE_APP_UPLOAD_API = '/uploadApis' # 阿里云接口地址 -# VITE_APP_BASE_URL = 'http://47.109.205.240:8080' -# VITE_APP_UPLOAD_URL = 'http://47.109.205.240:9300' +VITE_APP_BASE_URL = 'http://47.109.205.240:8080' +VITE_APP_UPLOAD_URL = 'http://47.109.205.240:9300' # 内网接口地址 -VITE_APP_BASE_URL = 'http://192.168.18.74:8080' +# VITE_APP_BASE_URL = 'http://192.168.18.99:8080' # VITE_APP_UPLOAD_URL = 'http://192.168.18.99:8080' # VITE_APP_VIST_URL = 'http://192.168.18.99' diff --git a/new-digital-agriculture-screen/components.d.ts b/new-digital-agriculture-screen/components.d.ts index ca0fa36..694dcaa 100644 --- a/new-digital-agriculture-screen/components.d.ts +++ b/new-digital-agriculture-screen/components.d.ts @@ -12,7 +12,6 @@ declare module 'vue' { 'CenterMap copy': typeof import('./src/components/centerMap copy.vue')['default'] CodeDialog: typeof import('./src/components/code-dialog/index.vue')['default'] Components: typeof import('./src/components/index.js')['default'] - copy: typeof import('./src/components/centerMap copy.vue')['default'] CurrentTime: typeof import('./src/components/currentTime.vue')['default'] CustomBack: typeof import('./src/components/customBack.vue')['default'] CustomCarouselPicture: typeof import('./src/components/custom-carousel-picture/index.vue')['default'] diff --git a/sub-government-affairs-service/.env.development b/sub-government-affairs-service/.env.development index 93c9ebe..a0a3355 100644 --- a/sub-government-affairs-service/.env.development +++ b/sub-government-affairs-service/.env.development @@ -9,11 +9,12 @@ VITE_APP_BASE_API = '/apis' VITE_APP_UPLOAD_API = '/uploadApis' # 阿里云接口地址 -# VITE_APP_BASE_URL = 'http://47.109.205.240:8080' -# VITE_APP_UPLOAD_URL = 'http://47.109.205.240:9204' +VITE_APP_BASE_URL = 'http://47.109.205.240:8080' +VITE_APP_UPLOAD_URL = 'http://47.109.205.240:9204' # 内网测试库接口地址 -VITE_APP_BASE_URL = 'http://192.168.18.99:8080' +# VITE_APP_BASE_URL = 'http://192.168.18.99:8080' +# VITE_APP_UPLOAD_URL = 'http://192.168.18.99:8080' # 本地开发接口地址 # VITE_APP_BASE_URL = 'http://192.168.18.74:8080' diff --git a/sub-government-affairs-service/.eslintrc.cjs b/sub-government-affairs-service/.eslintrc.cjs index 974ba1b..04d04c5 100644 --- a/sub-government-affairs-service/.eslintrc.cjs +++ b/sub-government-affairs-service/.eslintrc.cjs @@ -50,6 +50,7 @@ module.exports = { defineEmits: 'readonly', defineExpose: 'readonly', withDefaults: 'readonly', + T: 'readonly', }, // 这里时配置规则的,自己看情况配置 rules: { diff --git a/sub-government-affairs-service/package.json b/sub-government-affairs-service/package.json index 1620349..ea6967b 100644 --- a/sub-government-affairs-service/package.json +++ b/sub-government-affairs-service/package.json @@ -22,6 +22,7 @@ "@wangeditor/editor-for-vue": "^5.1.12", "axios": "^1.6.5", "echarts": "^5.6.0", + "echarts-gl": "^2.0.9", "element-plus": "^2.7.2", "js-base64": "^3.7.6", "lodash": "^4.17.21", @@ -33,7 +34,8 @@ "screenfull": "^6.0.2", "splitpanes": "^4.0.3", "vue": "^3.3.11", - "vue-router": "^4.2.5" + "vue-router": "^4.2.5", + "vue-tianditu": "^2.7.6" }, "devDependencies": { "@babel/core": "^7.23.7", diff --git a/sub-government-affairs-service/src/apis/inputSuppliesApi/material.js b/sub-government-affairs-service/src/apis/inputSuppliesApi/material.js index 71f0e72..73eea46 100644 --- a/sub-government-affairs-service/src/apis/inputSuppliesApi/material.js +++ b/sub-government-affairs-service/src/apis/inputSuppliesApi/material.js @@ -11,27 +11,35 @@ export function getMaterailTypes(params) { /* 获取农药列表 */ export function getPesticideList(params) { - return request('/inputGoods/pesticide/page', { + return request('/inputGoods/supervise/pesticide/page', { params, }); } /* 新增农药 */ export function addPesticide(data) { - return request('/inputGoods/pesticide/save', { + return request('/inputGoods/supervise/pesticide/save', { method: 'POST', data, }); } -/* 农药检测报告 */ +/* 编辑农药 */ export function pesticideReportSave(data) { - return request('/inputGoods/pesticide/uploadReport', { + return request('/inputGoods/supervise/pesticide/edit', { data, method: 'PUT', }); } /* 删除农药 */ export function delPesticide(ids) { - return request(`/inputGoods/pesticide/delete/${ids}`); + return request(`/inputGoods/supervise/pesticide/delete/${ids}`); +} +/* 获取用药地块下拉选项 */ +export function getLandList() { + return request(`/inputGoods/supervise/pesticide/getLandList`); +} +/* 获取农药用药下拉选项 */ +export function getPesticideSelectList() { + return request(`/inputGoods/pesticide/getPesticideList`); } // #endregion diff --git a/sub-government-affairs-service/src/apis/inputSuppliesApi/record.js b/sub-government-affairs-service/src/apis/inputSuppliesApi/record.js new file mode 100644 index 0000000..5ea0597 --- /dev/null +++ b/sub-government-affairs-service/src/apis/inputSuppliesApi/record.js @@ -0,0 +1,47 @@ +import request from '@/utils/axios'; +//新增备案信息(POST) +export function createRecord(data) { + return request({ + url: '/inputGoods/cropPlantRegistration/save', + method: 'post', + data: data, + }); +} +// 删除备案信息(DELETE) +export function deleteRecord(id) { + return request({ + url: `/inputGoods/cropPlantRegistration/delete/${id}`, + method: 'delete', + }); +} +// 修改备案信息(PUT) +export function updateRecord(data) { + return request({ + url: `/inputGoods/cropPlantRegistration/uploadReport`, + method: 'put', + data: data, + }); +} +// 查询备案信息(GET) +export function getRecord(id) { + return request({ + url: `/inputGoods/cropPlantRegistration/get/${id}`, + method: 'get', + }); +} +// 查询备案信息列表(GET) +export function fetchRecordList(params) { + return request({ + url: '/inputGoods/cropPlantRegistration/page', + method: 'get', + params: params, + }); +} +// 备案审核(PUT) +export function auditRecord(data) { + return request({ + url: `/inputGoods/cropPlantRegistration/approval`, + method: 'put', + data, + }); +} diff --git a/sub-government-affairs-service/src/apis/landResourceManagement/landManagement/index.js b/sub-government-affairs-service/src/apis/landResourceManagement/landManagement/index.js index b13e65c..b16adb0 100644 --- a/sub-government-affairs-service/src/apis/landResourceManagement/landManagement/index.js +++ b/sub-government-affairs-service/src/apis/landResourceManagement/landManagement/index.js @@ -68,3 +68,12 @@ export function getLandById(id) { params: { landId: id }, }); } + +// 土地信息审批(PUT) +export function approveLand(data) { + return request({ + url: '/land-resource/approval/approval', + method: 'POST', + data, + }); +} diff --git a/sub-government-affairs-service/src/apis/resource/statisticAnalysis.js b/sub-government-affairs-service/src/apis/resource/statisticAnalysis.js index f2d640e..87f22f7 100644 --- a/sub-government-affairs-service/src/apis/resource/statisticAnalysis.js +++ b/sub-government-affairs-service/src/apis/resource/statisticAnalysis.js @@ -15,3 +15,17 @@ export function GetLandData(params = {}) { params, }); } +//获取流转去未流转接口 +export function getOverview(params = {}) { + return request('/land-resource/analysis/overview', { + method: 'GET', + params, + }); +} +//获取具体土地信息 +export function getSubArea(params = {}) { + return request('/land-resource/analysis/subArea', { + method: 'GET', + params, + }); +} diff --git a/sub-government-affairs-service/src/components/AreaCascader/index.vue b/sub-government-affairs-service/src/components/AreaCascader/index.vue index 81d74f2..b65c570 100644 --- a/sub-government-affairs-service/src/components/AreaCascader/index.vue +++ b/sub-government-affairs-service/src/components/AreaCascader/index.vue @@ -98,7 +98,14 @@ async function fetchGridList(regionCode) { } } -onMounted(fetchAreaData); +onMounted(async () => { + await fetchAreaData(); + + // 初始化时如果有区域编码,加载对应网格 + if (props.regionCode) { + await fetchGridList(props.regionCode); + } +}); // 样式计算 const containerStyle = computed(() => ({ diff --git a/sub-government-affairs-service/src/components/FileUploader/index.vue b/sub-government-affairs-service/src/components/FileUploader/index.vue index 808d766..62afe0c 100644 --- a/sub-government-affairs-service/src/components/FileUploader/index.vue +++ b/sub-government-affairs-service/src/components/FileUploader/index.vue @@ -2,6 +2,7 @@
diff --git a/sub-government-affairs-service/src/components/UrlSelect/index.vue b/sub-government-affairs-service/src/components/UrlSelect/index.vue index bbb6394..e2ed994 100644 --- a/sub-government-affairs-service/src/components/UrlSelect/index.vue +++ b/sub-government-affairs-service/src/components/UrlSelect/index.vue @@ -11,19 +11,12 @@ @remove-tag="$emit('remove-tag', $event)" @scroll="$emit('scroll', $event)" > - - - + - - - - - - - diff --git a/sub-government-affairs-service/src/components/tableComponent.vue b/sub-government-affairs-service/src/components/tableComponent.vue new file mode 100644 index 0000000..bebcf19 --- /dev/null +++ b/sub-government-affairs-service/src/components/tableComponent.vue @@ -0,0 +1,331 @@ + + + + + diff --git a/sub-government-affairs-service/src/composables/useLandCrud.js b/sub-government-affairs-service/src/composables/useLandCrud.js index 3b26c1b..b6f8e95 100644 --- a/sub-government-affairs-service/src/composables/useLandCrud.js +++ b/sub-government-affairs-service/src/composables/useLandCrud.js @@ -1,5 +1,5 @@ import { ref } from 'vue'; -import { fetchLandList, deleteLand, createLand, updateLand } from '@/apis/landResourceManagement/landManagement'; +import { createLand, deleteLand, editLand, fetchLandList, getLandById } from '@/apis/landResourceManagement/landManagement'; import { ElMessageBox, ElMessage } from 'element-plus'; import { cloneDeep } from 'lodash'; @@ -36,7 +36,7 @@ export function useLandCrud(type) { await createLand({ ...data, type }); ElMessage.success('新增成功'); } else { - await updateLand(data); + await editLand(data); ElMessage.success('更新成功'); } formVisible.value = false; diff --git a/sub-government-affairs-service/src/config/map.js b/sub-government-affairs-service/src/config/map.js new file mode 100644 index 0000000..a8da465 --- /dev/null +++ b/sub-government-affairs-service/src/config/map.js @@ -0,0 +1,55 @@ +export const map_config = { + tianditu: { + version: '4.0', + token: '5e3204b9312c1d2618049d90a4ae917c', + center: [100.088, 23.883], + zoom: 13, + }, + + baseMaps: [ + { + label: 'OSM街道图', + Url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', + }, + { + label: 'ArcGIS影像图', + Url: 'https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', + }, + { + label: 'ArcGIS街道图', + Url: 'http://cache1.arcgisonline.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}', + }, + { + label: '天地图街道图', + Url: 'http://t{s}.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=7786923a385369346d56b966bb6ad62f', + }, + { + label: '天地图影像图', + Url: 'http://t{s}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=7786923a385369346d56b966bb6ad62f', + }, + { + label: '谷歌街道图', + Url: 'http://www.google.cn/maps/vt?lyrs=m@189&gl=cn&x={x}&y={y}&z={z}', + }, + { + label: '谷歌影像图', + Url: 'http://www.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}', + }, + { + label: '高德街道图', + Url: 'http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}', + }, + { + label: '高德影像图', + Url: 'http://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', + }, + { + label: '百度街道图', + Url: 'http://online{s}.map.bdimg.com/onlinelabel/?qt=tile&x={x}&y={y}&z={z}&styles={styles}&scaler=1&p=1', + }, + { + label: '百度影像图', + Url: 'http://shangetu{s}.map.bdimg.com/it/u=x={x};y={y};z={z};v=009;type=sate&fm=46', + }, + ], +}; diff --git a/sub-government-affairs-service/src/main.js b/sub-government-affairs-service/src/main.js index 1228094..8718b51 100644 --- a/sub-government-affairs-service/src/main.js +++ b/sub-government-affairs-service/src/main.js @@ -8,14 +8,20 @@ import 'element-plus/dist/index.css'; import Avue from '@smallwei/avue'; import '@smallwei/avue/lib/index.css'; import './utils/permission'; +import './styles/custom.scss'; import { registerDirective } from './directives'; import { registerGlobalComponents } from './plugins/globalComponents'; import { registerElIcons } from './plugins/icon'; import { registerMicroApps } from './plugins/micro'; import { registerSplitpanes } from './plugins/splitpanes'; +import VueTianditu from 'vue-tianditu'; +import { map_config } from './config/map'; const app = createApp(App); -app.use(pinia).use(router).use(ElementPlus).use(Avue); +app.use(pinia).use(router).use(ElementPlus).use(Avue).use(VueTianditu, { + v: map_config.tianditu.version, + tk: map_config.tianditu.token, +}); registerGlobalComponents(app); registerElIcons(app); registerSplitpanes(app); diff --git a/sub-government-affairs-service/src/router/modules/inputSupplies/index.js b/sub-government-affairs-service/src/router/modules/inputSupplies/index.js index b8f4e0f..f8e28e6 100644 --- a/sub-government-affairs-service/src/router/modules/inputSupplies/index.js +++ b/sub-government-affairs-service/src/router/modules/inputSupplies/index.js @@ -9,6 +9,18 @@ const inputSuppliesRoutes = [ redirect: '/sub-government-affairs-service/material/pesticide', meta: { title: '农产品种植管理', icon: 'FullScreen' }, children: [ + { + path: '/sub-government-affairs-service/statistics', + name: 'Statistics', + component: () => import('@/views/planting-management/statistics/index.vue'), + meta: { title: '使用监管概况统计', icon: 'PieChart' }, + }, + { + path: '/sub-government-affairs-service/variety-record', + name: 'PlantVarietyRecord', + component: () => import('@/views/planting-management/variety-record/index.vue'), + meta: { title: '农产品种植品种备案', icon: 'Calendar' }, + }, { path: '/sub-government-affairs-service/material/annualPlans', name: 'annualPlans', diff --git a/sub-government-affairs-service/src/styles/custom.scss b/sub-government-affairs-service/src/styles/custom.scss new file mode 100644 index 0000000..4c81671 --- /dev/null +++ b/sub-government-affairs-service/src/styles/custom.scss @@ -0,0 +1,348 @@ +.app-container { + .container-custom { + width: 100%; + overflow: hidden; /* 防止全局滚动条 */ + border-radius: 10px; + background: #fff; + + .custom-h2 { + margin: 14px 0 0 20px; + font-size: 24px; + } + + .search-box { + overflow: hidden; + padding: 16px 8px 0 16px; + background: #fff; + .order-tab { + width: 100%; + .el-tabs__nav-wrap::after { + background: transparent !important; + } + .el-tabs__active-bar { + height: 3px !important; + border-radius: 4px; + } + .el-descriptions__label, + .el-descriptions__content { + font-size: 16px !important; + } + .cell-item { + display: inline-flex; + } + .el-descriptions__label { + color: #999; + } + .el-descriptions__content { + color: #333; + } + } + } + .search-bar { + display: flex; + flex-shrink: 0; /* 禁止收缩 */ + + .search-bar-left { + flex: 1; + } + + .search-bar-right { + width: 100px; + text-align: right; + padding-right: 8px; + } + + .demo-form-inline { + text-align: left; + } + + .el-form--inline .el-form-item { + margin-right: 30px; + } + + .demo-form-inline .el-input { + --el-input-width: 160px; + } + + .demo-form-inline .el-select { + --el-select-width: 160px; + } + + .demo-form-inline .el-date-picker { + --el-select-width: 160px; + } + .el-form .el-form-item__label { + font-weight: 400; + } + .custom-form-inline .el-input { + width: 260px; + } + } + .table-toolbar { + text-align: left; + padding-left: 20px; + padding-top: 20px; + background-color: #fff; + } + .table-cont { + padding: 10px 20px; + overflow: hidden; + background-color: #fff; + position: relative; + .el-table__empty-text { + width: 200px; + } + .el-button-custom{ + font-size: 14px !important; + color: #25bf82; + padding: 0; + } + .el-button-delete{ + font-size: 14px !important; + color: #ff4d4f; + padding: 0; + } + } + + /* 自定义弹窗样式 */ + .traceability-dialog { + background: transparent; + box-shadow: none; + border-radius: 16px !important; + } + + /* 主要内容区域 */ + .dialog-content { + display: flex; + flex-direction: column; + align-items: center; + background: white; + border-radius: 8px; + padding: 0 0 20px 0; + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); + } + + /* 产品信息 */ + .product-info { + width: 100%; + display: flex; + justify-content: space-between; + margin-bottom: 20px; + font-size: 14px; + color: #666; + } + + .product-name { + font-weight: bold; + color: #333; + } + + /* 二维码图片 */ + .qrcode-image { + width: 200px; + height: 200px; + margin: 0 auto; + } + + /* 下载区域 */ + .download-section { + display: flex; + align-items: center; + margin: 0 0 10px 0; + color: #25bf82; + cursor: pointer; + font-size: 12px; + line-height: 18px; + } + + .download-icon { + margin-left: 8px; + font-size: 16px; + } + + /* 遗传编码区域 */ + .code-section { + display: flex; + align-items: center; + margin: 10px 0; + background: rgba(37, 191, 130, 0.1); + border-radius: 4px; + } + + .genetic-code { + font-family: monospace; + font-size: 14px; + color: #25bf82; + display: inline-block; + max-width: 250px; + padding: 0 10px; + } + + .copy-icon { + margin-left: 10px; + color: #409eff; + cursor: pointer; + font-size: 16px; + } + + /* 关闭按钮 */ + .close-button { + position: absolute; + left: 50%; + transform: translateX(-50%); + bottom: -60px; + color: white; + font-size: 30px; + cursor: pointer; + transition: all 0.3s; + } + } + // 表格中文本的颜色 + .color-blue { + color: #3685fe; + } + .color-black { + color: #000000; + } + .color-gray { + color: #5a5a5a; + } + .color-orange { + color: #ffb345; + } + .color-green { + color: #25bf82; + } + .color-red { + color: #ff4348; + } +} +.el-button { + font-size: 12px !important; + font-weight: 400; +} +// 页面添加的自定义容器,上下撑满 +.customer-control { + position: absolute; + height: 100%; + left: 0; + right: 0; + min-width: 1000px; +} +// 表格组件中的各插槽元素自定义样式 +.custom-tooltip-content { + display: flex; + justify-content: space-between; + gap: 10px; + padding: 3px 0; + +} +.el-icon-custom { + vertical-align: middle; + cursor: pointer; + font-size: 16px; + // color: #fff; +} +.table-cell-img-box { + width: 60px; + height: 60px; + text-align: center; + overflow: hidden; /* 隐藏超出部分 */ + display: flex; /* 使用 Flex 布局居中 */ + justify-content: center; + align-items: center; + .table-cell-img { + min-width: 100%; /* 至少撑满宽度 */ + min-height: 100%; /* 至少撑满高度 */ + object-fit: cover; /* 保持比例并覆盖容器 */ + } +} + +// 新增商品页面-开始 +.customer-box { + height: 100%; + border-radius: 16px; + padding: 20px 16px; + overflow-y: auto; + background-color: #fff; + .my-el-select { + width: 200px; + } + .el-input-number .el-input__inner { + text-align: left; + } + // 商品属性 + .attr-item { + display: inline-block; + margin-right: 10px; + .el-icon { + vertical-align: middle; + margin: 5px; + } + } + .attr-row { + display: flex; + flex-direction: row; + justify-content: flex-start; + flex-wrap: nowrap; + gap: 10px; + margin-bottom: 10px; + } + .attr-input { + width: 120px; + } + .attr-clomn { + width: 160px; + } + .attr-clomn200 { + width: 160px; + } + .attr-clomn220 { + width: 220px; + } + .attr-box { + padding: 16px 16px 6px 16px; + border-radius: 6px; + border: 1px solid #999; + } +} +// 新增商品页面-结束 + +// 弹性布局-左对齐-上对齐 +.flex-left-top { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: flex-start; +} + +// 溢出隐藏 +.text-ellipsis { + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +// 弹窗表单样式-子元素一行2个列 +.dialog-form-container { + .dialog-form-title { + font-weight: bold; + margin-bottom: 20px; + } + .dialog-form-item{ + margin-right: 20px; + .el-input, + .el-select { + width: 230px; + } + } + .dialog-form-many { + position: relative; + .dialog-form-many-delete { + position: absolute; + top: 28px; + right: 0; + } + } +} \ No newline at end of file diff --git a/sub-government-affairs-service/src/views/inputSuppliesManage/material/pesticide/index.vue b/sub-government-affairs-service/src/views/inputSuppliesManage/material/pesticide/index.vue index 2f6df0b..cc955d8 100644 --- a/sub-government-affairs-service/src/views/inputSuppliesManage/material/pesticide/index.vue +++ b/sub-government-affairs-service/src/views/inputSuppliesManage/material/pesticide/index.vue @@ -1,617 +1,477 @@