From 5465ef72d6f6303acd627e183c9d4f092a25989f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=B4=E5=87=AF?= <2448379534@qq.com> Date: Tue, 7 Jul 2026 10:33:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=B9=E7=AA=97=E6=8B=96=E5=8A=A8+=E8=BF=87?= =?UTF-8?q?=E9=B1=BC=E8=AE=BE=E6=96=BD-=E8=BF=87=E9=B1=BC=E6=80=BB?= =?UTF-8?q?=E9=87=8F-=E5=BC=B9=E6=A1=86=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/.env.development | 2 +- frontend/src/components/BasicSearch/index.vue | 107 +- .../FishResource/FishResourceSearch.vue | 282 ++++ .../src/components/FishResource/index.vue | 554 +++++++ .../MapModal/components/AIYXSB/index.vue | 4 +- .../MapModal/components/BasicInfo.vue | 3 +- .../components/FishFacilityMonitorData.vue | 4 +- .../components/FishFacilityRunState.vue | 4 +- .../MapModal/components/FlowMeasure.vue | 3 +- .../components/NormalOperationData/index.vue | 2 + .../components/developStatusChart/index.vue | 4 +- .../components/engEnvironmentData/index.vue | 4 +- .../JiuZhuZhanQingKuangJieShao.vue | 3 +- .../EnvironmentalQualityTwoLayers.vue | 3 +- .../modules/EnvironmentalQuality/index.vue | 4 +- frontend/src/modules/GYZLLB/index.vue | 1272 +++++++++-------- .../index.vue | 3 +- frontend/src/modules/alongFishMod/index.vue | 3 +- .../src/modules/churukushuiwenMod/index.vue | 4 +- .../modules/dianxingcuoshijieshao/index.vue | 13 +- .../index.vue | 4 +- .../fishSurvey/FishIntroduce/index.vue | 4 +- .../fishSurvey/ZhuanZhiIntroduce/index.vue | 4 +- frontend/src/modules/guoyujiance/index.vue | 3 + .../guoyusheshijiansheqingkuang/index.vue | 313 ++-- .../src/modules/guoyusheshijieshao/index.vue | 533 +++---- frontend/src/modules/huanbaoMod/index.vue | 5 +- .../src/modules/huanbaozdjcgzkzQK/index.vue | 3 +- .../src/modules/liuyu/ai/spdzwaijc/AISPTK.vue | 5 +- .../src/modules/liuyu/ai/spdzwaijc/index.vue | 3 +- .../shengtailiuliangxianshuju.vue | 3 +- .../shuizhijianceshuju.vue | 3 +- .../modules/lushengshengtaijiance/index.vue | 3 +- .../TwoLayers/monthlyAverageMaxModal.vue | 3 +- .../index.vue | 4 +- .../qixidibaohugongzuokaizhanQK/index.vue | 325 +++-- .../xieFangFangShi/index.vue | 4 +- .../xieFangFenBu/index.vue | 4 +- .../src/modules/shengtaidabiaoModJZ/index.vue | 5 +- .../modules/shengtaidabiaoTwoMod/index.vue | 4 + .../modules/shengtaidabiaoTwoModJJ/index.vue | 5 + .../modules/sheshileixingjieshao/index.vue | 3 + .../src/modules/shuiWenNianNeiFenBu/index.vue | 3 +- .../shuidianhuangjingjieruMod/DataTable.vue | 3 +- .../modules/shuishengshengtaijiance/index.vue | 3 +- .../index.vue | 4 +- .../modules/shuizhijiancegongzuoQK/index.vue | 4 +- .../yanchengshuiwenChangeMod/index.vue | 4 +- .../yunXingGaoJIng/Aisbdbyx/AISBTK.vue | 3 +- .../modules/yunXingGaoJIng/Aisbdbyx/index.vue | 3 +- .../zengZhiJiHuaWanChengQingKuang/index.vue | 4 +- .../modules/zengZhiZhanJieShaoMod/index.vue | 4 +- .../zengzhizhanjiansheyunxing/index.vue | 3 + frontend/src/store/modules/shuJuTianBao.ts | 10 +- frontend/src/utils/drag.ts | 91 +- .../BasicData/DeleteConfirmModal.vue | 4 +- .../components/monitorData/FishData/index.vue | 4 +- .../home/huanBaoSheShiYunXingZhuangKuang.vue | 2 +- frontend/src/views/register/index.vue | 3 +- .../shuiShengShengTaiDiaoCha.vue | 3 +- .../guoYuSheShiShuJuTianBao/index.vue | 3 +- 61 files changed, 2406 insertions(+), 1273 deletions(-) create mode 100644 frontend/src/components/FishResource/FishResourceSearch.vue create mode 100644 frontend/src/components/FishResource/index.vue diff --git a/frontend/.env.development b/frontend/.env.development index b9d4b82d..e9a06736 100644 --- a/frontend/.env.development +++ b/frontend/.env.development @@ -12,7 +12,7 @@ VITE_APP_BASE_API = '/dev-api' # VITE_APP_BASE_URL = 'http://172.16.21.142:8093' # VITE_APP_BASE_URL = 'http://172.16.21.142:8096' # 汤伟 -VITE_APP_BASE_URL = 'http://10.84.121.127:8093' +VITE_APP_BASE_URL = 'http://10.84.111.235:8093' # 李林 # VITE_APP_BASE_URL = 'http://10.84.121.43:8093' # VITE_APP_BASE_URL = 'http://192.168.1.162:8093' diff --git a/frontend/src/components/BasicSearch/index.vue b/frontend/src/components/BasicSearch/index.vue index 70e421bd..1a500565 100644 --- a/frontend/src/components/BasicSearch/index.vue +++ b/frontend/src/components/BasicSearch/index.vue @@ -177,7 +177,84 @@ + +
+ + + + + {{ opt.basename }} + + + + + + {{ opt.ennm }},{{ opt.reachcdName }} + + + + + + {{ opt.ennm }} + + + +
+ + + + + + + +
+ +
+
+ + + +
+ +
+
+ + + + + diff --git a/frontend/src/components/MapModal/components/AIYXSB/index.vue b/frontend/src/components/MapModal/components/AIYXSB/index.vue index fddb65fd..921b2525 100644 --- a/frontend/src/components/MapModal/components/AIYXSB/index.vue +++ b/frontend/src/components/MapModal/components/AIYXSB/index.vue @@ -245,6 +245,7 @@ import { useModelStore } from '@/store/modules/model'; import videoCover from '@/assets/images/videFm.jpg'; import MediaViewer from './MediaViewer.vue'; import AttachmentPreview from './AttachmentPreview.vue'; +import { useDraggable } from '@/utils/drag'; const modelStore = useModelStore(); @@ -875,7 +876,8 @@ const notRunningMediaViewerRef = ref(); // 附件预览弹窗 const attachmentModalVisible = ref(false); const currentAttachmentFid = ref(''); - +useDraggable(detailModalVisible, { boundary: true, resetOnOpen: true }); +useDraggable(attachmentModalVisible, { boundary: true, resetOnOpen: true }); // 查看附件 const handleViewAttachment = (record: any) => { if (!record.fid) { diff --git a/frontend/src/components/MapModal/components/BasicInfo.vue b/frontend/src/components/MapModal/components/BasicInfo.vue index c66884fa..70a185dd 100644 --- a/frontend/src/components/MapModal/components/BasicInfo.vue +++ b/frontend/src/components/MapModal/components/BasicInfo.vue @@ -152,7 +152,7 @@ import { getStcdDetail } from '@/api/mapModal'; const baseUrl = import.meta.env.VITE_APP_ATTACHMENT_URL; const modelStore = useModelStore(); const hasLoaded = ref(false); // 标记是否已经请求过 - +import { useDraggable } from '@/utils/drag'; const props = defineProps({ url: { type: String, @@ -168,6 +168,7 @@ const isLogo = ref(false); const loading = ref(false); const data2: any = ref({}); const tabledata = ref([]); +useDraggable(visible, { boundary: true, resetOnOpen: true }); const columnsConfig = ref([ { type: 'ENG', diff --git a/frontend/src/components/MapModal/components/FishFacilityMonitorData.vue b/frontend/src/components/MapModal/components/FishFacilityMonitorData.vue index e3e3bb4c..a9e993cb 100644 --- a/frontend/src/components/MapModal/components/FishFacilityMonitorData.vue +++ b/frontend/src/components/MapModal/components/FishFacilityMonitorData.vue @@ -56,6 +56,7 @@ import { getMonitorDataFpq, getMonitorDataOnline } from '@/api/mapModal'; import { useModelStore } from '@/store/modules/model'; import { DateSetting } from '@/utils/enumeration'; import dayjs from 'dayjs'; +import { useDraggable } from '@/utils/drag'; const loading = ref(false); const modelStore = useModelStore(); @@ -72,7 +73,8 @@ const previewImageUrl = ref(''); // 视频预览 const videoPreviewVisible = ref(false); const previewVideoUrl = ref(''); - +useDraggable(imagePreviewVisible, { boundary: true, resetOnOpen: true }); +useDraggable(videoPreviewVisible, { boundary: true, resetOnOpen: true }); const openImagePreview = (url: string) => { previewImageUrl.value = import.meta.env.VITE_APP_ATTACHMENT_URL + '/?' + url; imagePreviewVisible.value = true; diff --git a/frontend/src/components/MapModal/components/FishFacilityRunState.vue b/frontend/src/components/MapModal/components/FishFacilityRunState.vue index 9354ccfb..f93afe69 100644 --- a/frontend/src/components/MapModal/components/FishFacilityRunState.vue +++ b/frontend/src/components/MapModal/components/FishFacilityRunState.vue @@ -102,6 +102,7 @@ import { getDictItemsByCode } from '@/api/dict'; import { getFishDictoryDropdown } from '@/api/select'; import { useModelStore } from '@/store/modules/model'; import dayjs from 'dayjs'; +import { useDraggable } from '@/utils/drag'; const loading = ref(false); const modelStore = useModelStore(); @@ -125,7 +126,8 @@ const previewImageUrl = ref(''); // 视频预览 const videoPreviewVisible = ref(false); const currentVideoUrl = ref(''); - +useDraggable(imagePreviewVisible, { boundary: true, resetOnOpen: true }); +useDraggable(videoPreviewVisible, { boundary: true, resetOnOpen: true }); // 鱼类搜索过滤 const filterFtpOption = (input: string, option: any) => { console.log('filterOption', input, option); diff --git a/frontend/src/components/MapModal/components/FlowMeasure.vue b/frontend/src/components/MapModal/components/FlowMeasure.vue index b3908191..b5d619ef 100644 --- a/frontend/src/components/MapModal/components/FlowMeasure.vue +++ b/frontend/src/components/MapModal/components/FlowMeasure.vue @@ -79,6 +79,7 @@ import { queryPostUrlList } from '@/api/mapModal'; import { useModelStore } from '@/store/modules/model'; import BasicTable from '@/components/BasicTable/index.vue'; import { DateSetting } from '@/utils/enumeration'; +import { useDraggable } from '@/utils/drag'; const modelStore = useModelStore(); @@ -102,7 +103,7 @@ let chartInstance: echarts.ECharts | null = null; const videoModalVisible = ref(false); const videoModalTitle = ref(''); const currentVideoUrl = ref(''); - +useDraggable(videoModalVisible, { boundary: true, resetOnOpen: true }); const tabsList = [{ name: '流量监测', key: 'flowMeasure' }]; const activeTabKey = ref('flowMeasure'); diff --git a/frontend/src/components/MapModal/components/NormalOperationData/index.vue b/frontend/src/components/MapModal/components/NormalOperationData/index.vue index 432b1a4f..e99ef6b4 100644 --- a/frontend/src/components/MapModal/components/NormalOperationData/index.vue +++ b/frontend/src/components/MapModal/components/NormalOperationData/index.vue @@ -110,6 +110,7 @@ import { type OperationFilterField, type OperationTableItem } from './operationConfig'; +import { useDraggable } from '@/utils/drag'; const props = defineProps({ isActive: { type: Boolean, default: false } @@ -141,6 +142,7 @@ const loadYear = ref(false); const loadFtp = ref(false); const tableRef = ref(); const attachmentModalVisible = ref(false); +useDraggable(attachmentModalVisible, { boundary: true, resetOnOpen: true }); const currentAttachmentFid = ref(''); const fieldOptionsMap = reactive>({}); const selectLoadingMap = reactive>({}); diff --git a/frontend/src/components/developStatusChart/index.vue b/frontend/src/components/developStatusChart/index.vue index c9bb000d..1a0c370a 100644 --- a/frontend/src/components/developStatusChart/index.vue +++ b/frontend/src/components/developStatusChart/index.vue @@ -28,7 +28,7 @@ import * as echarts from 'echarts'; import { getVmsstbprptKendoList } from '@/api/home'; import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent'; import ShuiDianKaiFQKTwoLayer from '@/modules/shuidianhuangjingjieruMod/TwoLayer/ShuiDianKaiFQKTwoLayer.vue'; - +import { useDraggable } from '@/utils/drag'; defineOptions({ name: 'developStatusChart' }); @@ -41,7 +41,7 @@ const dataLoading = ref(false); const modalVisible = ref(false); const modalProps = ref({}); - +useDraggable(modalVisible, { boundary: true, resetOnOpen: true }); function openModal(props: any) { modalProps.value = props; modalVisible.value = true; diff --git a/frontend/src/components/engEnvironmentData/index.vue b/frontend/src/components/engEnvironmentData/index.vue index b368b924..cdedab24 100644 --- a/frontend/src/components/engEnvironmentData/index.vue +++ b/frontend/src/components/engEnvironmentData/index.vue @@ -60,7 +60,7 @@ import { ref, watch } from 'vue'; import { getVmsstbprptKendoList } from '@/api/home'; import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent'; import HuanJingSJJRQK from '@/modules/shuidianhuangjingjieruMod/TwoLayer/HuanJingSJJRQK.vue'; - +import { useDraggable } from '@/utils/drag'; defineOptions({ name: 'EngEnvironmentData' }); @@ -72,7 +72,7 @@ const data = ref>({ one: 0, two: 0, three: 0 }); const modalVisible = ref(false); const modalProps = ref({}); - +useDraggable(modalVisible, { boundary: true, resetOnOpen: true }); function openModal(props: any) { modalProps.value = props; modalVisible.value = true; diff --git a/frontend/src/modules/DongWuJiuZhuZhan/JiuZhuZhanQingKuangJieShao.vue b/frontend/src/modules/DongWuJiuZhuZhan/JiuZhuZhanQingKuangJieShao.vue index d65599df..4a82d2cd 100644 --- a/frontend/src/modules/DongWuJiuZhuZhan/JiuZhuZhanQingKuangJieShao.vue +++ b/frontend/src/modules/DongWuJiuZhuZhan/JiuZhuZhanQingKuangJieShao.vue @@ -63,6 +63,7 @@ import SidePanelItem from '@/components/SidePanelItem/index.vue'; import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent'; import { vpcGetKendoListCust } from '@/api/zxdzw'; import ArtsDetail from '@/components/carouselIntroduce/ArtsDetail.vue'; +import { useDraggable } from '@/utils/drag'; // 定义组件名(便于调试和递归) defineOptions({ @@ -83,7 +84,7 @@ const baseid = ref(''); // 弹框控制 const modalVisible = ref(false); const currentItem = ref(null); - +useDraggable(modalVisible, { boundary: true, resetOnOpen: true }); // 加载状态 const loading = ref(false); diff --git a/frontend/src/modules/EnvironmentalQuality/TwoLayers/EnvironmentalQualityTwoLayers.vue b/frontend/src/modules/EnvironmentalQuality/TwoLayers/EnvironmentalQualityTwoLayers.vue index e871f270..912ca453 100644 --- a/frontend/src/modules/EnvironmentalQuality/TwoLayers/EnvironmentalQualityTwoLayers.vue +++ b/frontend/src/modules/EnvironmentalQuality/TwoLayers/EnvironmentalQualityTwoLayers.vue @@ -109,6 +109,7 @@ import isSameOrAfter from 'dayjs/plugin/isSameOrAfter' import BasicTable from '@/components/BasicTable/index.vue' import { wqGetKendoList } from '@/api/sz' import HJMZDTwoLays from "./HJMZDTwoLays.vue" +import { useDraggable } from '@/utils/drag'; // 注册 dayjs 插件 dayjs.extend(isSameOrAfter) @@ -155,7 +156,7 @@ const detailModalVisible = ref(false) const detailData = ref({}) const mapModalVisible = ref(false) const mapModalData = ref({}) - +useDraggable(detailModalVisible, { boundary: true, resetOnOpen: true }); // 排序配置 const sortConfig = computed(() => [ { field: 'rstcdStepSort', dir: 'asc' }, diff --git a/frontend/src/modules/EnvironmentalQuality/index.vue b/frontend/src/modules/EnvironmentalQuality/index.vue index d2c9a511..814a5bcc 100644 --- a/frontend/src/modules/EnvironmentalQuality/index.vue +++ b/frontend/src/modules/EnvironmentalQuality/index.vue @@ -36,6 +36,8 @@ import SidePanelItem from '@/components/SidePanelItem/index.vue'; import { wqGetKendoListCust } from '@/api/sz' import { useJidiSelectEventStore } from "@/store/modules/jidiSelectEvent"; import EnvironmentalQualityTwoLayers from "./TwoLayers/EnvironmentalQualityTwoLayers.vue" +import { useDraggable } from '@/utils/drag'; + // 定义组件名(便于调试和递归) defineOptions({ name: 'EnvironmentalQuality' @@ -774,7 +776,7 @@ onUnmounted(() => { // 弹框相关状态 const modalVisible = ref(false); const clickedBarData = ref<{ name: string; current: number | null; lastYear: number | null; selectedId?: string } | null>(null); - +useDraggable(modalVisible, { boundary: true, resetOnOpen: true }); diff --git a/frontend/src/modules/GYZLLB/index.vue b/frontend/src/modules/GYZLLB/index.vue index 91f70884..bfa7ed5d 100644 --- a/frontend/src/modules/GYZLLB/index.vue +++ b/frontend/src/modules/GYZLLB/index.vue @@ -1,77 +1,60 @@ diff --git a/frontend/src/modules/ZhenXiZhiWuYuanMod/ZhiWuYuanJianSheJiJieRuQingKuangBar/index.vue b/frontend/src/modules/ZhenXiZhiWuYuanMod/ZhiWuYuanJianSheJiJieRuQingKuangBar/index.vue index 2ace8474..4933ef49 100644 --- a/frontend/src/modules/ZhenXiZhiWuYuanMod/ZhiWuYuanJianSheJiJieRuQingKuangBar/index.vue +++ b/frontend/src/modules/ZhenXiZhiWuYuanMod/ZhiWuYuanJianSheJiJieRuQingKuangBar/index.vue @@ -32,6 +32,7 @@ import SidePanelItem from '@/components/SidePanelItem/index.vue'; import { vpcGetKendoListCust } from '@/api/zxdzw'; import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent'; import ZhiWuYuanDetailTable from './ZhiWuYuanDetailTable.vue'; +import { useDraggable } from '@/utils/drag'; // 定义组件名(便于调试和递归) defineOptions({ @@ -50,7 +51,7 @@ const loading = ref(false); // 弹窗状态 const modalVisible = ref(false); const modalJidi = ref('all'); - +useDraggable(modalVisible, { boundary: true, resetOnOpen: true }); // 基地选项(用于弹窗中的下拉) const jidiOptions = ref([]); diff --git a/frontend/src/modules/alongFishMod/index.vue b/frontend/src/modules/alongFishMod/index.vue index f0d3adc2..2ca8e91d 100644 --- a/frontend/src/modules/alongFishMod/index.vue +++ b/frontend/src/modules/alongFishMod/index.vue @@ -54,6 +54,7 @@ import Yanchengyulei from './TwoLayers/Yanchengyulei.vue'; import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent'; import { wbsbGetKendoList, getDftYear, fishChanges2 } from '@/api/stdc'; import moment from 'moment'; +import { useDraggable } from '@/utils/drag'; defineOptions({ name: 'alongFishMod' @@ -108,7 +109,7 @@ const modalHbrvcd = ref(''); const modalStateName = ref(''); const modalSectionName = ref(''); const modalStcd = ref(''); - +useDraggable(modalVisible, { boundary: true, resetOnOpen: true }); // ==================== 图表相关 ==================== /** diff --git a/frontend/src/modules/churukushuiwenMod/index.vue b/frontend/src/modules/churukushuiwenMod/index.vue index 388895b7..abf6cc30 100644 --- a/frontend/src/modules/churukushuiwenMod/index.vue +++ b/frontend/src/modules/churukushuiwenMod/index.vue @@ -53,6 +53,8 @@ import { getVmsstbprpt, inOutOneGetKendoListCust } from '@/api/sw'; import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent'; import churukushuiwen from './churukushuiwen.vue'; import { MapClass } from '@/components/gis/map.class'; +import { useDraggable } from '@/utils/drag'; + // ==================== 组件基础配置 ==================== // 定义组件名(便于调试和递归) defineOptions({ @@ -96,7 +98,7 @@ const modalVisible = ref(false); // 弹框显示状态 const clickDataInfo = ref(null); // 点击的数据点信息 const stationName = ref(''); // 站点名称 // ==================== 数据处理函数 ==================== - +useDraggable(modalVisible, { boundary: true, resetOnOpen: true }); /** * 转换图表数据格式 * 将后端返回的扁平数据结构转换为ECharts所需的双线数据格式 diff --git a/frontend/src/modules/dianxingcuoshijieshao/index.vue b/frontend/src/modules/dianxingcuoshijieshao/index.vue index 44cc22b1..e08eea2a 100644 --- a/frontend/src/modules/dianxingcuoshijieshao/index.vue +++ b/frontend/src/modules/dianxingcuoshijieshao/index.vue @@ -2,7 +2,7 @@ \ No newline at end of file + diff --git a/frontend/src/modules/huanbaoMod/index.vue b/frontend/src/modules/huanbaoMod/index.vue index d02f6001..262ef197 100644 --- a/frontend/src/modules/huanbaoMod/index.vue +++ b/frontend/src/modules/huanbaoMod/index.vue @@ -1,5 +1,5 @@ -