diff --git a/frontend/src/api/zngj/index.ts b/frontend/src/api/zngj/index.ts
index 986deeec..b4780180 100644
--- a/frontend/src/api/zngj/index.ts
+++ b/frontend/src/api/zngj/index.ts
@@ -12,13 +12,13 @@ export function getAisbdbyxList(data: any) {
// AI识别大坝环境-获取饼图+表格数据 /api/wmp-env-server/env/ai/com/GetKendoListCust
export function getAiChartTable(data: any) {
return request({
- url: '/api/wmp-env-server/env/ai/com/GetKendoListCust',
+ url: '/warn/ai/com/GetKendoListCust',
method: 'post',
data
});
}
-// AI识别大坝环境-获取电站列表
+// AI识别大坝环境-获取电站列表
export function getAiRstcd(data: any) {
return request({
url: '/warn/ai/com/qgc/aiRstcd/GetKendoListCust',
@@ -84,7 +84,7 @@ export function getAiRecord(data: any) {
// AI识别大坝环境-获取日历详情视频数据 /warn/ai/com/qgc/aiFile/GetKendoListCust
export function getAiFile(data: any) {
return request({
- url: '/api/wmp-env-server/env/ai/com/qgc/aiFile/GetKendoListCust',
+ url: '/warn/ai/com/qgc/aiFile/GetKendoListCust',
method: 'post',
data
});
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 @@
+
+
+
+
+ dataDimensionDataChange(val, item.name)"
+ show-search
+ allow-clear
+ :loading="shuJuTianBaoStore.baseLoading"
+ :filter-option="filterOption"
+ style="width: 135px"
+ >
+
+ {{ 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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{{ item.title }}
-
-
-
-
+
+
+
-
-
+
+
+
+
+
+
+
+
-
-
-
- {{ modalData.year }}
-
-
- {{ modalData.basinName }}
-
-
-
- {{ modalData.totalCount }} {{ getUnit() }}
-
-
-
- {{ modalData.baseid }}
-
-
+
+
+
+
+
{{ item.title }}
+
+
+
+
-
鱼类分布详情
-
-
-
-
- {{ record.percentage }}%
-
-
-
-
-
-
+
+
+
+
+
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 @@
@@ -51,9 +51,9 @@
-
+
-
+
@@ -66,6 +66,7 @@ import SidePanelItem from '@/components/SidePanelItem/index.vue';
import ArtsDetail from '@/components/carouselIntroduce/ArtsDetail.vue';
import { getMsstbprptKendoList } from '@/api/home';
import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent';
+import { useDraggable } from '@/utils/drag';
// 定义组件名(便于调试和递归)
defineOptions({
@@ -84,9 +85,9 @@ interface MediaItem {
}
// 弹框控制
-const modalVisible = ref(false);
+const modalVisibleone = ref(false);
const currentItem = ref(null);
-
+useDraggable(modalVisibleone, { boundary: true, resetOnOpen: true });
// 加载状态
const loading = ref(false);
@@ -217,7 +218,7 @@ const handleItemClick = () => {
description: item.description || '',
title: item.title || ''
}));
- modalVisible.value = true;
+ modalVisibleone.value = true;
};
// 处理下拉选择变化
diff --git a/frontend/src/modules/diwenshuijianhuansheshileixingzuchengjijieruqingkuang/index.vue b/frontend/src/modules/diwenshuijianhuansheshileixingzuchengjijieruqingkuang/index.vue
index e650e89f..f8b254dd 100644
--- a/frontend/src/modules/diwenshuijianhuansheshileixingzuchengjijieruqingkuang/index.vue
+++ b/frontend/src/modules/diwenshuijianhuansheshileixingzuchengjijieruqingkuang/index.vue
@@ -36,6 +36,8 @@ import SidePanelItem from '@/components/SidePanelItem/index.vue';
import { dwInfoGetKendoListCust } from "@/api/sw";
import { useJidiSelectEventStore } from "@/store/modules/jidiSelectEvent";
import DiwenshuijianhuansheshileixingzuchengjijieruqingkuangTwoLayers from "./TwoLayers/diwenshuijianhuansheshileixingzuchengjijieruqingkuangTwoLayers.vue"
+import { useDraggable } from '@/utils/drag';
+
const JidiSelectEventStore = useJidiSelectEventStore();
// 定义组件名(便于调试和递归)
defineOptions({
@@ -73,7 +75,7 @@ const baseid = ref('')
const modalVisible = ref(false);
const selectedItem: any = ref(null);
const twoLayersRef = ref();
-
+useDraggable(modalVisible, { boundary: true, resetOnOpen: true });
const getListData = async () => {
loading.value = true;
diff --git a/frontend/src/modules/fishSurvey/FishIntroduce/index.vue b/frontend/src/modules/fishSurvey/FishIntroduce/index.vue
index e910b751..3b90254a 100644
--- a/frontend/src/modules/fishSurvey/FishIntroduce/index.vue
+++ b/frontend/src/modules/fishSurvey/FishIntroduce/index.vue
@@ -68,6 +68,8 @@ import SidePanelItem from '@/components/SidePanelItem/index.vue';
import { fishDicGetKendoList, wbsbGetKendoList } from '@/api/yldc';
import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent';
import ArtsDetail from '@/components/carouselIntroduce/ArtsDetail.vue';
+import { useDraggable } from '@/utils/drag';
+
// 定义组件名(便于调试和递归)
defineOptions({
name: 'zengZhiZhanJieShaoMod'
@@ -87,7 +89,7 @@ let rvcd = 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/fishSurvey/ZhuanZhiIntroduce/index.vue b/frontend/src/modules/fishSurvey/ZhuanZhiIntroduce/index.vue
index d2bca5f2..6e74c811 100644
--- a/frontend/src/modules/fishSurvey/ZhuanZhiIntroduce/index.vue
+++ b/frontend/src/modules/fishSurvey/ZhuanZhiIntroduce/index.vue
@@ -62,6 +62,8 @@ import { ref, onMounted, onUnmounted, computed } from 'vue';
import SidePanelItem from '@/components/SidePanelItem/index.vue';
import { msstbprptGetKendoList } from '@/api/yldc';
import ArtsDetail from '@/components/carouselIntroduce/ArtsDetail.vue';
+import { useDraggable } from '@/utils/drag';
+
// 定义组件名(便于调试和递归)
defineOptions({
name: 'zengZhiZhanJieShaoMod'
@@ -79,7 +81,7 @@ const baseUrl = import.meta.env.VITE_APP_ATTACHMENT_URL;
// 弹框控制
const modalVisible = ref(false);
const currentItem = ref(null);
-
+useDraggable(modalVisible, { boundary: true, resetOnOpen: true });
// 加载状态
const loading = ref(false);
diff --git a/frontend/src/modules/guoyujiance/index.vue b/frontend/src/modules/guoyujiance/index.vue
index f3c39485..aea4c041 100644
--- a/frontend/src/modules/guoyujiance/index.vue
+++ b/frontend/src/modules/guoyujiance/index.vue
@@ -36,6 +36,8 @@ import SidePanelItem from '@/components/SidePanelItem/index.vue';
import { vmsstbprptGetKendoList } from '@/api/gyss'
import { useJidiSelectEventStore } from "@/store/modules/jidiSelectEvent";
import FPVDDetailMD from './components/FPVDDetailMD.vue'
+import { useDraggable } from '@/utils/drag';
+
// 定义组件名(便于调试和递归)
defineOptions({
name: 'guoyusheshijiansheqingkuang'
@@ -81,6 +83,7 @@ const loading = ref(false);
const modalVisible = ref(false);
const selectedFacility = ref(null);
const title = ref('');
+useDraggable(modalVisible, { boundary: true, resetOnOpen: true });
// 处理卡片点击事件
const handleCardClick = (facility: any) => {
selectedFacility.value = facility;
diff --git a/frontend/src/modules/guoyusheshijiansheqingkuang/index.vue b/frontend/src/modules/guoyusheshijiansheqingkuang/index.vue
index b7adca44..d75a84d1 100644
--- a/frontend/src/modules/guoyusheshijiansheqingkuang/index.vue
+++ b/frontend/src/modules/guoyusheshijiansheqingkuang/index.vue
@@ -1,201 +1,230 @@
-
-
-
-
-
-
-
-
{{ facility.name }}
-
{{ facility.count
- }}座
-
-
+
+
+
+
+
+
+
+
{{ facility.name }}
+
+ {{ facility.count }}座
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
+
diff --git a/frontend/src/modules/guoyusheshijieshao/index.vue b/frontend/src/modules/guoyusheshijieshao/index.vue
index 1e30aa44..9f2b850d 100644
--- a/frontend/src/modules/guoyusheshijieshao/index.vue
+++ b/frontend/src/modules/guoyusheshijieshao/index.vue
@@ -1,76 +1,102 @@
-
-
-
-
-
-
-
-
-
-
![]()
-
-
{{ item.stnm }}
-
-
-
-
-
-
-
-
-
-
- {{ currentDescription }}
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
![]()
+
+
{{ item.stnm }}
+
-
-
+
+
+
+
+
+
+
+ {{ currentDescription }}
+
+
+
+
+
+
+
+
+
+
\ 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 @@
-
+
@@ -49,6 +49,7 @@ import SidePanelItem from '@/components/SidePanelItem/index.vue';
import { environmentalProtectionConstruction } from '@/api/home';
import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent';
import HuanbaoModTwoLayers from './TwoLayers/HuanbaoModTwoLayers.vue';
+import { useDraggable } from '@/utils/drag';
// 定义组件名(便于调试和递归)
defineOptions({
@@ -82,7 +83,7 @@ const modalRes = ref({
bldstt: '',
hydrodtin: '1'
});
-
+useDraggable(modalVisible, { boundary: true, resetOnOpen: true });
// 获取数据
const getData = async () => {
if (!baseid.value) return;
diff --git a/frontend/src/modules/huanbaozdjcgzkzQK/index.vue b/frontend/src/modules/huanbaozdjcgzkzQK/index.vue
index 8e09ea9a..179d5e07 100644
--- a/frontend/src/modules/huanbaozdjcgzkzQK/index.vue
+++ b/frontend/src/modules/huanbaozdjcgzkzQK/index.vue
@@ -68,6 +68,7 @@ import svg_liuliangjiancezhan from '@/assets/svg/liuliangjiancezhan.svg';
import svg_shuizhijiancezhan from '@/assets/svg/shuizhijiancezhan.svg';
import svg_zengzhizhanshuizhizhan from '@/assets/svg/zengzhizhanshuizhizhan.svg';
import svg_qixidi from '@/assets/svg/qixidi.svg';
+import { useDraggable } from '@/utils/drag';
defineOptions({
name: 'huanbaoMod'
@@ -103,7 +104,7 @@ const baseid = ref('');
// 弹框相关状态
const modalVisible = ref(false);
const currentFacility = ref
(null);
-
+useDraggable(modalVisible, { boundary: true, resetOnOpen: true });
const fetchData = () => {
let params = {
filter: {
diff --git a/frontend/src/modules/liuyu/ai/spdzwaijc/AISPTK.vue b/frontend/src/modules/liuyu/ai/spdzwaijc/AISPTK.vue
index f7ac18b1..ab353c35 100644
--- a/frontend/src/modules/liuyu/ai/spdzwaijc/AISPTK.vue
+++ b/frontend/src/modules/liuyu/ai/spdzwaijc/AISPTK.vue
@@ -316,7 +316,8 @@ import { postIdUrl } from '@/api/mapModal';
import dayjs from 'dayjs';
import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent';
import videoCover from '@/assets/images/videFm.jpg';
-
+import { useDraggable } from '@/utils/drag';
+;
const baseUrl = import.meta.env.VITE_APP_ATTACHMENT_URL;
// ==================== Props ====================
@@ -393,11 +394,11 @@ let videoChartInstance: ECharts | null = null;
// ==================== 日历视图状态 ====================
const calendarLoading = ref(false);
const calendarData = ref([]);
-const calendarValue = ref(dayjs());
+const calendarValue = ref(searchData.value.month);
const detailModalVisible = ref(false);
const detailActiveKey = ref('2');
const detailDate = ref('');
-
+useDraggable(detailModalVisible, { boundary: true, resetOnOpen: true })
// 日历状态映射(运行/未运行)
const calendarStatusMap: Record<
string,
@@ -1293,7 +1294,7 @@ const colStcdData = async () => {
const params = { filter: { logic: 'and', filters } };
const res: any = await getAiRstcd(params);
- const _data = res?.data?.data?.data ?? [];
+ const _data = res?.data?.data ?? [];
const list = _data.map((item: any) => ({
label: item.stnm,
value: item.stcd
@@ -1501,6 +1502,14 @@ watch(
}
);
+// ==================== 监听月份变化,同步日历显示 ====================
+watch(
+ () => searchData.value.month,
+ (newMonth) => {
+ calendarValue.value = newMonth;
+ }
+);
+
// ==================== 监听 Tab 切换 ====================
watch(tabIndex, () => {
pieCode.value = [];
diff --git a/frontend/src/modules/liuyu/ai/spdzwaijc/index.vue b/frontend/src/modules/liuyu/ai/spdzwaijc/index.vue
index ffc41b99..5a61a858 100644
--- a/frontend/src/modules/liuyu/ai/spdzwaijc/index.vue
+++ b/frontend/src/modules/liuyu/ai/spdzwaijc/index.vue
@@ -51,6 +51,7 @@ import SidePanelItem from '@/components/SidePanelItem/index.vue';
import AISPTK from './AISPTK.vue';
import { getAiGyssList } from '@/api/zngj';
import dayjs from 'dayjs';
+import { useDraggable } from '@/utils/drag';
// 定义组件名(便于调试和递归)
defineOptions({
@@ -65,7 +66,7 @@ const panelDetail = ref({});
// ==================== 弹框状态 ====================
const modalVisible = ref(false);
const currentAction = ref('AI_5006');
-
+useDraggable(modalVisible, { boundary: true, resetOnOpen: true });
const lyName = computed(() => baseid.value === '02' ? '升鱼斗运行' : '升鱼机运行');
// ==================== 日期选择器配置 ====================
diff --git a/frontend/src/modules/liuyu/yichangyujing/shengtailiuliangxianzhigaojing/shengtailiuliangxianshuju.vue b/frontend/src/modules/liuyu/yichangyujing/shengtailiuliangxianzhigaojing/shengtailiuliangxianshuju.vue
index 4f7d7759..a29ced40 100644
--- a/frontend/src/modules/liuyu/yichangyujing/shengtailiuliangxianzhigaojing/shengtailiuliangxianshuju.vue
+++ b/frontend/src/modules/liuyu/yichangyujing/shengtailiuliangxianzhigaojing/shengtailiuliangxianshuju.vue
@@ -40,6 +40,7 @@ import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent';
import SidePanelItem from "@/components/SidePanelItem/index.vue";
import { getStllGaojingList } from '@/api/zngj';
import ModeGaoJing from './ModeGaoJing.vue';
+import { useDraggable } from '@/utils/drag';
// 定义组件名(便于调试和递归)
defineOptions({
@@ -51,7 +52,7 @@ const baseid = ref('');
const dataLoading = ref(false);
const isModalOpen = ref(false);
const currentWarnState = ref('');
-
+useDraggable(isModalOpen, { boundary: true, resetOnOpen: true });
const data = ref([
{
name:'正常',
diff --git a/frontend/src/modules/liuyu/yichangyujing/shuizhijiancegaojing/shuizhijianceshuju.vue b/frontend/src/modules/liuyu/yichangyujing/shuizhijiancegaojing/shuizhijianceshuju.vue
index 1b485eb3..418e21dd 100644
--- a/frontend/src/modules/liuyu/yichangyujing/shuizhijiancegaojing/shuizhijianceshuju.vue
+++ b/frontend/src/modules/liuyu/yichangyujing/shuizhijiancegaojing/shuizhijianceshuju.vue
@@ -38,6 +38,7 @@ import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent';
import SidePanelItem from "@/components/SidePanelItem/index.vue";
import { getShuizhiGaojingList } from '@/api/zngj';
import ModeGaoJing from './ModeGaoJing.vue';
+import { useDraggable } from '@/utils/drag';
defineOptions({
name: "shuizhijianceshuju",
@@ -51,7 +52,7 @@ const defaultValue = ref('0');
// 弹框状态
const modalVisible = ref(false);
const currentWarnState = ref('');
-
+useDraggable(modalVisible, { boundary: true, resetOnOpen: true });
const handleCardClick = (warnState: string) => {
currentWarnState.value = warnState;
modalVisible.value = true;
diff --git a/frontend/src/modules/lushengshengtaijiance/index.vue b/frontend/src/modules/lushengshengtaijiance/index.vue
index 3b2b33d9..06706870 100644
--- a/frontend/src/modules/lushengshengtaijiance/index.vue
+++ b/frontend/src/modules/lushengshengtaijiance/index.vue
@@ -68,6 +68,7 @@ import SidePanelItem from '@/components/SidePanelItem/index.vue';
import LsstjkTk from './LsstjkTk.vue';
import { wbsbGetKendoList, getEvnmAutoMonitor } from '@/api/stdc';
import moment from 'moment';
+import { useDraggable } from '@/utils/drag';
// 定义组件名
defineOptions({
@@ -81,7 +82,7 @@ const dataLoading = ref(false);
// ==================== 弹框状态 ====================
const modalVisible = ref(false);
const currentOrderIndex = ref('16');
-
+useDraggable(modalVisible, { boundary: true, resetOnOpen: true });
// ==================== 响应式变量定义 ====================
// 选择器配置
const select = ref({
diff --git a/frontend/src/modules/monthlyAvgWaterTemCompareHistory/TwoLayers/monthlyAverageMaxModal.vue b/frontend/src/modules/monthlyAvgWaterTemCompareHistory/TwoLayers/monthlyAverageMaxModal.vue
index 9f31b064..c26fde8a 100644
--- a/frontend/src/modules/monthlyAvgWaterTemCompareHistory/TwoLayers/monthlyAverageMaxModal.vue
+++ b/frontend/src/modules/monthlyAvgWaterTemCompareHistory/TwoLayers/monthlyAverageMaxModal.vue
@@ -70,6 +70,7 @@ import dayjs from 'dayjs';
import { ZoomInOutlined } from '@ant-design/icons-vue';
import type { Dayjs } from 'dayjs';
import MonthlyAverage from '../monthlyAverage.vue';
+import { useDraggable } from '@/utils/drag';
defineOptions({
name: 'MonthlyAverageMaxModal'
@@ -101,7 +102,7 @@ const detailModalData = ref(null);
// 选择器相关 - 内部状态管理
const selectValue = ref('');
const selectOptions = ref([]);
-
+useDraggable(detailModalVisible, { boundary: true, resetOnOpen: true });
// 树形选择器展开状态管理
const treeExpandedKeys = ref([])
const nodeMap = new Map()
diff --git a/frontend/src/modules/monthlyAvgWaterTemCompareHistory/index.vue b/frontend/src/modules/monthlyAvgWaterTemCompareHistory/index.vue
index 2e43cba5..fc37d643 100644
--- a/frontend/src/modules/monthlyAvgWaterTemCompareHistory/index.vue
+++ b/frontend/src/modules/monthlyAvgWaterTemCompareHistory/index.vue
@@ -41,6 +41,7 @@ import dayjs from 'dayjs'
import {
ZoomInOutlined
} from '@ant-design/icons-vue';
+import { useDraggable } from '@/utils/drag';
defineOptions({
name: 'monthlyAvgWaterTemCompareHistory'
@@ -68,7 +69,8 @@ const stationName = ref('');
// 图表放大展示弹框状态
const zoomModalVisible = ref(false);
-
+useDraggable(modalVisible, { boundary: true, resetOnOpen: true });
+useDraggable(zoomModalVisible, { boundary: true, resetOnOpen: true });
// 选择器配置
const select = ref({
show: true,
diff --git a/frontend/src/modules/qixidibaohugongzuokaizhanQK/index.vue b/frontend/src/modules/qixidibaohugongzuokaizhanQK/index.vue
index 1015e9be..29fabddb 100644
--- a/frontend/src/modules/qixidibaohugongzuokaizhanQK/index.vue
+++ b/frontend/src/modules/qixidibaohugongzuokaizhanQK/index.vue
@@ -1,206 +1,237 @@
-
-
-
-
-
-
-
-
{{ facility.name }}
-
{{ facility.count
- }}个
-
-
+
+
+
+
+
+
+
+
{{ facility.name }}
+
+ {{ facility.count }}个
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
+
diff --git a/frontend/src/modules/shengTaiLiuLiangXieFangSheShiMod/xieFangFangShi/index.vue b/frontend/src/modules/shengTaiLiuLiangXieFangSheShiMod/xieFangFangShi/index.vue
index c5d0a8b0..15cf663d 100644
--- a/frontend/src/modules/shengTaiLiuLiangXieFangSheShiMod/xieFangFangShi/index.vue
+++ b/frontend/src/modules/shengTaiLiuLiangXieFangSheShiMod/xieFangFangShi/index.vue
@@ -57,6 +57,8 @@ import type { ECharts } from 'echarts';
import { msstbprptGetKendoList } from '@/api/stll';
import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent';
import STLLXFFS from './TwoLayer/STLLXFFS.vue';
+import { useDraggable } from '@/utils/drag';
+
// 定义组件名(便于调试和递归)
defineOptions({
name: 'xieFangFangShi'
@@ -78,7 +80,7 @@ const apiRawData = ref
([]); // 保存原始 API 数据
const modalVisible = ref(false);
const modalTitle = ref('');
const selectedData = ref(null);
-
+useDraggable(modalVisible, { boundary: true, resetOnOpen: true });
// 颜色配置(根据图片配色)
const colors = [
'#9556a4', // 基荷发电 - 紫色
diff --git a/frontend/src/modules/shengTaiLiuLiangXieFangSheShiMod/xieFangFenBu/index.vue b/frontend/src/modules/shengTaiLiuLiangXieFangSheShiMod/xieFangFenBu/index.vue
index 30ae4cb3..58bf3cdc 100644
--- a/frontend/src/modules/shengTaiLiuLiangXieFangSheShiMod/xieFangFenBu/index.vue
+++ b/frontend/src/modules/shengTaiLiuLiangXieFangSheShiMod/xieFangFenBu/index.vue
@@ -38,6 +38,8 @@ import type { ECharts } from 'echarts';
import { vmsstbprptGetKendoList } from '@/api/stll';
import { useJidiSelectEventStore } from '@/store/modules/jidiSelectEvent';
import FBQKTwolayer from './TwoLayer/FenBuQingKuangTwoLayer.vue';
+import { useDraggable } from '@/utils/drag';
+
// 定义组件名
defineOptions({
name: 'XieFangFenBu'
@@ -59,7 +61,7 @@ const wbsCode = ref('');
const modalVisible = ref(false);
const selectData = ref(''); // 选中的设施类型名称
const jidiName = ref(''); // 选中的基地名称
-
+useDraggable(modalVisible, { boundary: true, resetOnOpen: true });
// 设施类型配置
const typeName = [
{ label: '生态放流孔', eqtp: 'EQ_1' },
diff --git a/frontend/src/modules/shengtaidabiaoModJZ/index.vue b/frontend/src/modules/shengtaidabiaoModJZ/index.vue
index 643c913d..3f07c556 100644
--- a/frontend/src/modules/shengtaidabiaoModJZ/index.vue
+++ b/frontend/src/modules/shengtaidabiaoModJZ/index.vue
@@ -105,6 +105,8 @@ import { useMapViewStore } from '@/modules/map/stores/map-view.store';
import STLLXFFS from './TwoLayer/ShengTaiLiuLiangDaBQKTwoLayer.vue';
import ModalYkzhbzdjcgz from './TwoLayer/ModalYkzhbzdjcgz.vue';
import HuanbaoZDJCGZKZ from '@/modules/huanbaozdjcgzkzQK/index.vue';
+import { useDraggable } from '@/utils/drag';
+
// 定义组件名(便于调试和递归)
defineOptions({
name: 'shengtaidabiaoMod'
@@ -149,7 +151,8 @@ const modalVisible = ref(false);
const modalTitle = ref('');
const selectedItem = ref(null);
const huanbaoModalVisible = ref(false);
-
+useDraggable(modalVisible, { boundary: true, resetOnOpen: true });
+useDraggable(huanbaoModalVisible, { boundary: true, resetOnOpen: true });
// 处理电站数量点击事件
const handleStationClick = () => {
huanbaoModalVisible.value = true;
diff --git a/frontend/src/modules/shengtaidabiaoTwoMod/index.vue b/frontend/src/modules/shengtaidabiaoTwoMod/index.vue
index 15e013fd..cdf54d8b 100644
--- a/frontend/src/modules/shengtaidabiaoTwoMod/index.vue
+++ b/frontend/src/modules/shengtaidabiaoTwoMod/index.vue
@@ -67,6 +67,8 @@ import { eqqecRateCount, evnmAutoMonitorGetKendoListCust } from '@/api/stll';
import ModalYkzhbzdjcgz from '../shengtaidabiaoMod/TwoLayer/ModalYkzhbzdjcgz.vue';
import STLLXFFS from './TwoLayer/STLLXFFS.vue'
import { useMapViewStore } from '@/modules/map/stores/map-view.store';
+import { useDraggable } from '@/utils/drag';
+
// 定义组件名(便于调试和递归)
defineOptions({
name: 'shengtaidabiaoMod'
@@ -604,6 +606,8 @@ watch(
const detailModalVisible = ref(false);
const detailModalTitle = ref('');
const detailData = ref([]);
+useDraggable(huanbaoModalVisible, { boundary: true, resetOnOpen: true });
+useDraggable(detailModalVisible, { boundary: true, resetOnOpen: true });
const detailColumns = ref([
{
title: mode.value === 'top' ? '基地名称' : '调节性能',
diff --git a/frontend/src/modules/shengtaidabiaoTwoModJJ/index.vue b/frontend/src/modules/shengtaidabiaoTwoModJJ/index.vue
index 1f9299d0..bb397101 100644
--- a/frontend/src/modules/shengtaidabiaoTwoModJJ/index.vue
+++ b/frontend/src/modules/shengtaidabiaoTwoModJJ/index.vue
@@ -68,6 +68,8 @@ import { eqqecRateCount, evnmAutoMonitorGetKendoListCust } from '@/api/stll';
import ModalYkzhbzdjcgz from '../shengtaidabiaoMod/TwoLayer/ModalYkzhbzdjcgz.vue';
import STLLXFFS from './TwoLayer/STLLXFFS.vue'
import { useMapViewStore } from '@/modules/map/stores/map-view.store';
+import { useDraggable } from '@/utils/drag';
+
// 定义组件名(便于调试和递归)
defineOptions({
name: 'shengtaidabiaoMod'
@@ -97,6 +99,7 @@ const huanbaoModalVisible = ref(false);
const handleStationClick = () => {
huanbaoModalVisible.value = true;
};
+
// 加载数据
const loadData = async () => {
spinning.value = true;
@@ -633,6 +636,8 @@ const detailColumns = ref([
watch(mode, () => {
loadData();
});
+useDraggable(huanbaoModalVisible, { boundary: true, resetOnOpen: true });
+useDraggable(detailModalVisible, { boundary: true, resetOnOpen: true });