diff --git a/frontend/src/api/mapModal/index.ts b/frontend/src/api/mapModal/index.ts index c9e28be6..6b5b0025 100644 --- a/frontend/src/api/mapModal/index.ts +++ b/frontend/src/api/mapModal/index.ts @@ -303,7 +303,7 @@ export function getAIComCalendarClick(data: any) { }); } -// 鱼类增殖站 - 运行数据 -获取年 +// 鱼类增殖站 - 运行数据 -获取年 没接 export function getFishProgressionYear(data: any) { return request({ url: '/wmp-env-server/fb/fbrdmr/getFbRelatedYrByStcd', @@ -311,7 +311,7 @@ export function getFishProgressionYear(data: any) { params: data }); } -//鱼类增殖站 - 运行数据 -获取鱼 +//鱼类增殖站 - 运行数据 -获取鱼 没接 export function getFishProgressionFish(data: any) { return request({ url: '/wmp-env-server/env/fishDic/stcd/GetKendoList', @@ -319,6 +319,33 @@ export function getFishProgressionFish(data: any) { data }); } + +// 过程图 - 亲鱼 +export function getProcessDiagramParentFish(data: any) { + return request({ + url: '/wmp-env-server/fb/bsmfr/fish/GetKendoListCust', + method: 'post', + data + }); +} + +// 过程图 - 产卵/孵化 +export function getProcessDiagramHatch(data: any, type: 1 | 2) { + return request({ + url: `/wmp-env-server/fb/fishhatchrecr/fish/GetKendoListCust?type=${type}`, + method: 'post', + data + }); +} + +// 过程图 - 鱼苗 +export function getProcessDiagramFishFry(data: any) { + return request({ + url: '/wmp-env-server/fb/fishbreedr/fish/GetKendoListCust', + method: 'post', + data + }); +} //增值放流情况 获取年 没接 export function getNormalAddedSituationYear(data: any) { return request({ @@ -344,3 +371,125 @@ export function getNormalResearchSituation(data: any) { data }); } +// 珍稀植物园 - 运行数据 没接 +export function getNormalDataMonitoring2Year(data: any) { + return request({ + url: '/wmp-env-server/env/vpr/year/GetKendoListCust', + method: 'post', + data + }); +} +// 珍稀植物园 - 运行数据 列表 没接 +export function getNormalDataMonitoring2List(data: any) { + return request({ + url: '/wmp-env-server/env/vpr/basinVpIntDetail', + method: 'post', + data + }); +} +// 珍稀动物园 - 监测数据 时间 没接 +export function getNormal2Year(data: any) { + return request({ + url: '/wmp-env-server/env/var/year/GetKendoListCust', + method: 'post', + data + }); +} + +// 珍稀动物园 - 监测数据 列表 没接 +export function getNormal2List(data: any) { + return request({ + url: '/wmp-env-server/env/var/GetKendoListCust', + method: 'post', + data + }); +} +// 水生生态调查断面 - 监测数据 年份 没接 +export function getEcologyYear(data: any) { + return request({ + url: '/wmp-env-server/we/wer/getWeYr', + method: 'get', + params: data + }); +} +// 水生生态调查断面 - 监测数据 调查批次 没接 +export function getEcologyBatch(data: any) { + return request({ + url: '/wmp-env-server/env/we/fisht/GetKendoListCust', + method: 'post', + data + }); +} +// 水生生态调查断面 - 监测数据 保护类型 没接 +export function getEcologyProtectType(data: any) { + return request({ + url: '/api/dec-modules-usm-springcloud-starter/usm/v1/dict/getRemoteDictTreeValue', + method: 'get', + params: data + }); +} +// 水生生态调查断面 - 监测数据 调查鱼类列表 没接 +export function getEcologyList(data: any) { + return request({ + url: '/wmp-env-server/env/we/fisht/qgc/GetKendoListCust', + method: 'post', + data + }); +} +// 水生生态调查断面 - 监测数据 水温列表 没接 +export function getEcologyList1(data: any) { + return request({ + url: '/wmp-env-server/we/wewtr/GetKendoListCust', + method: 'post', + data + }); +} +// 水生生态调查断面 - 监测数据 水质列表 没接 +export function getEcologyList2(data: any) { + return request({ + url: '/wmp-env-server/we/wewqr/GetKendoListCust', + method: 'post', + data + }); +} + +// 水生生态调查断面 - 监测数据 流速列表 没接 +export function getEcologyList3(data: any) { + return request({ + url: '/wmp-env-server/env/we/fvR/GetKendoListCust', + method: 'post', + data + }); +} +// 野生动物检测 -现场录像 - 年份 - 没接 +export function getLiveFootageYear(data: any) { + return request({ + url: '/wmp-env-server/env/wva/default/GetKendoListCust', + method: 'post', + data + }); +} +// 野生动物检测 -现场录像 - 没接 +export function getLiveFootageList(data: any) { + return request({ + url: '/wmp-env-server/env/wva/GetKendoListCust', + method: 'post', + data + }); +} +// 鱼类分布明细 - 年 没接 +export function getFishDistributionYear(data: any) { + return request({ + url: '/wmp-env-server/we/wer/getWeYr', + method: 'get', + params: data + }); +} +// 鱼类分布明细 - 列表 没接 +export function getFishDistributionList(data: any) { + return request({ + url: '/wmp-env-server/env/we/fisht/qgc/GetKendoListCust', + method: 'post', + data + }); +} diff --git a/frontend/src/components/MapModal/components/CommonAttachmentModal.vue b/frontend/src/components/MapModal/components/CommonAttachmentModal.vue new file mode 100644 index 00000000..1957f533 --- /dev/null +++ b/frontend/src/components/MapModal/components/CommonAttachmentModal.vue @@ -0,0 +1,262 @@ + + + + + diff --git a/frontend/src/components/MapModal/components/DZGJ.vue b/frontend/src/components/MapModal/components/DZGJ.vue new file mode 100644 index 00000000..0cd90d1d --- /dev/null +++ b/frontend/src/components/MapModal/components/DZGJ.vue @@ -0,0 +1,316 @@ + + + + + diff --git a/frontend/src/components/MapModal/components/Ecology.vue b/frontend/src/components/MapModal/components/Ecology.vue new file mode 100644 index 00000000..46057dcc --- /dev/null +++ b/frontend/src/components/MapModal/components/Ecology.vue @@ -0,0 +1,583 @@ + + + + + diff --git a/frontend/src/components/MapModal/components/Normal.vue b/frontend/src/components/MapModal/components/Normal.vue new file mode 100644 index 00000000..003537d9 --- /dev/null +++ b/frontend/src/components/MapModal/components/Normal.vue @@ -0,0 +1,259 @@ + + + + + diff --git a/frontend/src/components/MapModal/components/NormalAddedSituation.vue b/frontend/src/components/MapModal/components/NormalAddedSituation.vue index e23ab3a6..cc974823 100644 --- a/frontend/src/components/MapModal/components/NormalAddedSituation.vue +++ b/frontend/src/components/MapModal/components/NormalAddedSituation.vue @@ -39,7 +39,7 @@ + + diff --git a/frontend/src/components/MapModal/components/NormalOperationData/operationConfig.ts b/frontend/src/components/MapModal/components/NormalOperationData/operationConfig.ts index a8635b97..0a97150c 100644 --- a/frontend/src/components/MapModal/components/NormalOperationData/operationConfig.ts +++ b/frontend/src/components/MapModal/components/NormalOperationData/operationConfig.ts @@ -359,12 +359,12 @@ export const operationStepList: OperationStepItem[] = [ }, { type: 'select', - name: 'fpitocintype', - label: '催产剂种类', + name: 'fishsrc', + label: '亲鱼来源', url: '/api/dec-modules-usm-springcloud-starter/usm/v1/dict/getRemoteDictTreeValue', method: 'get', params: { - dictCode: 'FPITOCINTYPE' + dictCode: 'BSSR' } } ] diff --git a/frontend/src/components/MapModal/components/NormalOperationData/proliferationColumns.ts b/frontend/src/components/MapModal/components/NormalOperationData/proliferationColumns.ts index 7cfbf915..54b2c5b2 100644 --- a/frontend/src/components/MapModal/components/NormalOperationData/proliferationColumns.ts +++ b/frontend/src/components/MapModal/components/NormalOperationData/proliferationColumns.ts @@ -1550,9 +1550,9 @@ export const qinYuPeiYuTouWei = [ }, { dataIndexRaw: '', - key: 'ftype', + key: 'ftypeName', title: '饲料种类', - dataIndex: 'ftype', + dataIndex: 'ftypeName', children: [], visible: true, fixed: '', @@ -3868,9 +3868,9 @@ export const miaoZhongJiLu = [ }, { dataIndexRaw: '', - key: 'feedtp', + key: 'ftypeName', title: '饲料种类', - dataIndex: 'feedtp', + dataIndex: 'ftypeName', children: [], visible: true, fixed: '', diff --git a/frontend/src/components/MapModal/components/ProcessDiagram.vue b/frontend/src/components/MapModal/components/ProcessDiagram.vue new file mode 100644 index 00000000..1ea9db18 --- /dev/null +++ b/frontend/src/components/MapModal/components/ProcessDiagram.vue @@ -0,0 +1,710 @@ + + + + + diff --git a/frontend/src/components/MapModal/components/liveFootage.vue b/frontend/src/components/MapModal/components/liveFootage.vue new file mode 100644 index 00000000..6cb90c37 --- /dev/null +++ b/frontend/src/components/MapModal/components/liveFootage.vue @@ -0,0 +1,435 @@ + + + + + diff --git a/frontend/src/components/MapModal/components/onSitePhoto.vue b/frontend/src/components/MapModal/components/onSitePhoto.vue new file mode 100644 index 00000000..b4864362 --- /dev/null +++ b/frontend/src/components/MapModal/components/onSitePhoto.vue @@ -0,0 +1,404 @@ + + + + + diff --git a/frontend/src/components/MapModal/index.vue b/frontend/src/components/MapModal/index.vue index 6c9fdf90..ede98a43 100644 --- a/frontend/src/components/MapModal/index.vue +++ b/frontend/src/components/MapModal/index.vue @@ -20,7 +20,13 @@ 8. 栖息地-流量监测 没有水位视频和流量视频 字段没数据 9. 栖息地 水温、水质、流量没有数据没法测 10.鱼类增殖站 - 运行数据 要添加字典 + 11.珍惜植物园 - 种植要求字段不知道 + 12.水生调查断面 - 监测数据 不知道电导率 ,性腺发育期,早期资源量和种类 + 13.水电告警情况 生态流量 不知道字段 接口传参有问题 + + +没弄: 环保设施 -->
+ + - + + + + + + + + + + + + { ] } }); - hasPowerStatData.value = - res?.data?.data && res?.data?.data?.length > 0; + hasPowerStatData.value = res?.data?.data && res?.data?.data?.length > 0; } catch (error) { console.error('查询电站专题配置失败:', error); hasPowerStatData.value = false; @@ -605,10 +657,10 @@ const setQGCTabList = async (_tabs: any, stcd: string) => { ] }; const res2 = await getVideoList(params); - console.log('', modelStore.params.sttp); - debugger + console.log('', modelStore.params.sttp); if ( - (res2?.data?.data?.length > 0 || res2?.data?.records?.length > 0) || + res2?.data?.data?.length > 0 || + res2?.data?.records?.length > 0 || modelStore.params.sttp == 'WQ' ) { tabsConfig.value = newTabs; diff --git a/frontend/src/components/gis/map.ol.ts b/frontend/src/components/gis/map.ol.ts index a48a5282..7eed35d8 100644 --- a/frontend/src/components/gis/map.ol.ts +++ b/frontend/src/components/gis/map.ol.ts @@ -147,11 +147,16 @@ export class MapOl implements MapInterface { this.popupManager.showPopup(undefined, undefined); this.popupManager.handleMapClick(evt.pixel, detectedFeature => { console.log(detectedFeature); - modelStore.modalVisible = true; - modelStore.params = detectedFeature.values_; - modelStore.title = - detectedFeature.values_.titleName || - detectedFeature.values_.stnm + ' 详情信息'; + if (detectedFeature.values_.sttpMap == 'ylfb') { + modelStore.ylfbModalVisible = true; + modelStore.params = detectedFeature.values_; + } else { + modelStore.modalVisible = true; + modelStore.params = detectedFeature.values_; + modelStore.title = + detectedFeature.values_.titleName || + detectedFeature.values_.stnm + ' 详情信息'; + } }); }); @@ -242,6 +247,12 @@ export class MapOl implements MapInterface { } const dynamicScale = this.getDynamicPointScale(currentZoom); const fontSize = this.getPointFontSize(dynamicScale); + const formattedLabelText = this.formatPointLabelText(labelText); + const labelLineCount = formattedLabelText + ? formattedLabelText.split('\n').length + : 1; + const labelOffsetY = + labelLineCount > 1 ? -30 * dynamicScale : -22 * dynamicScale; const styleOptions: any = { image: new Icon({ @@ -254,8 +265,8 @@ export class MapOl implements MapInterface { }; styleOptions.text = new Text({ - text: labelText, - offsetY: -20 * dynamicScale, + text: formattedLabelText, + offsetY: labelOffsetY, font: `${fontSize}px sans-serif`, fill: new Fill({ color: '#fff' }), stroke: new Stroke({ color: 'rgba(0, 0, 0, .9)', width: 2 }), @@ -265,6 +276,34 @@ export class MapOl implements MapInterface { return new Style(styleOptions); } + /** + * 点位标注最多显示两行,每行 12 个字符;超出部分在第二行末尾显示省略号。 + */ + private formatPointLabelText(text: string): string { + const normalizedText = String(text || '') + .replace(/[()()]/g, '') + .trim(); + if (!normalizedText) { + return ''; + } + + const maxLineLength = 12; + if (normalizedText.length <= maxLineLength) { + return normalizedText; + } + + const firstLine = normalizedText.slice(0, maxLineLength); + if (normalizedText.length <= maxLineLength * 2) { + return `${firstLine}\n${normalizedText.slice(maxLineLength)}`; + } + + const secondLine = `${normalizedText.slice( + maxLineLength, + maxLineLength + 9 + )}...`; + return `${firstLine}\n${secondLine}`; + } + /** * 根据缩放级别计算锚点图标缩放比例,统一复用,减少样式函数中的重复判断。 */ diff --git a/frontend/src/components/gis/ol/point-layer-manager.ts b/frontend/src/components/gis/ol/point-layer-manager.ts index e32353fc..8cb6c29a 100644 --- a/frontend/src/components/gis/ol/point-layer-manager.ts +++ b/frontend/src/components/gis/ol/point-layer-manager.ts @@ -269,10 +269,12 @@ export class PointLayerManager { ...item, _layerKey: targetLayerKey }); - feature.setId(item.stcd || item._id); feature.set('_iconUrl', iconUrl); - feature.set('_labelText', titleName || stnm || ennm || ''); + feature.set( + '_labelText', + item.sttpMap === 'ylfb' ? item.ftp || '' : titleName || stnm || ennm || '' + ); feature.set('_legendVisible', true); feature.set('_sttpMap', item.sttpMap); if (item.popupHtml) { diff --git a/frontend/src/components/ylfbModal/index.vue b/frontend/src/components/ylfbModal/index.vue new file mode 100644 index 00000000..0889ac06 --- /dev/null +++ b/frontend/src/components/ylfbModal/index.vue @@ -0,0 +1,284 @@ + + + + + diff --git a/frontend/src/layout/components/AppMain.vue b/frontend/src/layout/components/AppMain.vue index 25210c81..07fbe486 100644 --- a/frontend/src/layout/components/AppMain.vue +++ b/frontend/src/layout/components/AppMain.vue @@ -3,6 +3,7 @@ import { computed } from 'vue'; import { useTagsViewStore } from '@/store/modules/tagsView'; import { useRoute } from 'vue-router'; import MapModal from '@/components/MapModal/index.vue'; +import ylfbModal from '@/components/ylfbModal/index.vue'; import { useModelStore } from '@/store/modules/model'; import GisView from '@/components/gis/GisView.vue'; @@ -32,6 +33,9 @@ const routeKey = computed(() => router.path + Math.random()); :title="modelStore.title" :tabs-config="modelStore.tabList" /> + + + diff --git a/frontend/src/store/modules/map.ts b/frontend/src/store/modules/map.ts index b08f2c7b..b086962a 100644 --- a/frontend/src/store/modules/map.ts +++ b/frontend/src/store/modules/map.ts @@ -734,7 +734,7 @@ export const useMapStore = defineStore('map', () => { if (ylfbKeys.includes(layerKey)) { if (yearTime) { requestParams.filters.push({ - field: 'tm', + field: 'startTime', operator: 'eq', dataType: 'date', value: moment(yearTime) @@ -742,7 +742,7 @@ export const useMapStore = defineStore('map', () => { .format('YYYY-MM-DD 00:00:00') }); requestParams.filters.push({ - field: 'tm', + field: 'endTime', operator: 'eq', dataType: 'date', value: moment(yearTime).endOf('year').format('YYYY-MM-DD 23:59:59') diff --git a/frontend/src/store/modules/model.ts b/frontend/src/store/modules/model.ts index bc51bc2c..7abffdf9 100644 --- a/frontend/src/store/modules/model.ts +++ b/frontend/src/store/modules/model.ts @@ -4,13 +4,14 @@ import { ref } from 'vue'; export const useModelStore = defineStore('model', () => { // state const modalVisible = ref(false); - const currentTabKey = ref("basicInfo"); + const ylfbModalVisible = ref(false); // 鱼类分布弹窗显示状态 + const currentTabKey = ref('basicInfo'); const tabList = ref([]); const title = ref(''); const isBasicEdit = ref(false); const showStcdSelector = ref(false); // 是否显示下拉框 - const stcdOptions = ref>([]); // 可选测站列表 - + const stcdOptions = ref>([]); // 可选测站列表 + // 新增:功能迁移所需的状态字段 const baseId = ref(''); // 当前基地 ID const hasPowerStatData = ref(false); // 电站是否有专题数据 @@ -20,14 +21,14 @@ export const useModelStore = defineStore('model', () => { const wtConfig = ref<{ ioWtrv?: boolean; hasRstcdWtvt?: boolean }>({}); // 水温配置 const wqShow = ref(false); // 水质 AI 预测显示 const fishTabInfo = ref(null); // 鱼类监测数据信息 - + const params = ref<{ sttp: string; stcd: any; date: any; show: any; - enfc:any; - eqtp:any; + enfc: any; + eqtp: any; baseId?: string; // 新增:基地 ID sttpCode?: string; // 新增:站点类型代码 sttpMap?: string; // 新增:站点类型映射 @@ -38,24 +39,25 @@ export const useModelStore = defineStore('model', () => { stcd: '', date: '', show: true, - enfc:'0', - eqtp:'', + enfc: '0', + eqtp: '', baseId: '', sttpCode: '', sttpMap: '', - dtinType:'', - bldstt:'', + dtinType: '', + bldstt: '' }); - const filterStll= ref('') + const filterStll = ref(''); return { params, modalVisible, + ylfbModalVisible, // 鱼类分布弹窗显示状态 currentTabKey, tabList, title, isBasicEdit, - showStcdSelector, // 新增 - stcdOptions, // 新增 + showStcdSelector, // 新增 + stcdOptions, // 新增 filterStll, // 新增返回字段 baseId, @@ -65,6 +67,6 @@ export const useModelStore = defineStore('model', () => { aiSites, wtConfig, wqShow, - fishTabInfo, + fishTabInfo }; -}); \ No newline at end of file +});