diff --git a/frontend/.env.development b/frontend/.env.development index 4aa7a0cd..95ce05a0 100644 --- a/frontend/.env.development +++ b/frontend/.env.development @@ -12,21 +12,12 @@ VITE_APP_BASE_URL = 'http://localhost:8093' # VITE_APP_BASE_URL = 'http://172.16.21.142:8093' # VITE_APP_BASE_URL = 'http://172.16.21.142:8096' # 汤伟 -<<<<<<< Updated upstream -<<<<<<< HEAD -# VITE_APP_BASE_URL = 'http://10.84.121.21:8093' -# 李林 -VITE_APP_BASE_URL = 'http://10.84.121.43:8093' -======= VITE_APP_BASE_URL = 'http://10.84.121.127:8093' -# VITE_APP_BASE_URL = 'http://192.168.1.162:8093' ->>>>>>> fa4e1bc194446adb8adfd7f6404be1fbb50b31c3 -======= -# VITE_APP_BASE_URL = 'http://10.84.121.127:8093' -VITE_APP_BASE_URL = 'http://192.168.1.168:8093' # 李林 # VITE_APP_BASE_URL = 'http://10.84.121.43:8093' ->>>>>>> Stashed changes +# VITE_APP_BASE_URL = 'http://192.168.1.162:8093' +# 李林 +# VITE_APP_BASE_URL = 'http://10.84.121.43:8093' # 测试环境线上10.84.121.122: VITE_APP_TEST_ONLINE_URL = 'https://211.99.26.225:12122' diff --git a/frontend/src/components/BasicSearch/index.vue b/frontend/src/components/BasicSearch/index.vue index b5e9ff90..f8dd431f 100644 --- a/frontend/src/components/BasicSearch/index.vue +++ b/frontend/src/components/BasicSearch/index.vue @@ -184,6 +184,7 @@ --> { - previewImageUrl.value = url; + previewImageUrl.value = import.meta.env.VITE_APP_ATTACHMENT_URL + '/?' + url; imagePreviewVisible.value = true; }; const openVideoPreview = (url: string) => { - previewVideoUrl.value = url; + previewVideoUrl.value = import.meta.env.VITE_APP_ATTACHMENT_URL + '/?' + url; videoPreviewVisible.value = true; }; diff --git a/frontend/src/components/MapModal/components/FishFacilityRunState.vue b/frontend/src/components/MapModal/components/FishFacilityRunState.vue index 1bc6a0cd..9354ccfb 100644 --- a/frontend/src/components/MapModal/components/FishFacilityRunState.vue +++ b/frontend/src/components/MapModal/components/FishFacilityRunState.vue @@ -134,12 +134,12 @@ const filterFtpOption = (input: string, option: any) => { }; const openImagePreview = (url: string) => { - previewImageUrl.value = url; + previewImageUrl.value = import.meta.env.VITE_APP_ATTACHMENT_URL + '/?' + url; imagePreviewVisible.value = true; }; const openVideoPreview = (url: string) => { - currentVideoUrl.value = url; + currentVideoUrl.value = import.meta.env.VITE_APP_ATTACHMENT_URL + '/?' + url; videoPreviewVisible.value = true; }; diff --git a/frontend/src/composables/useTimeScale.ts b/frontend/src/composables/useTimeScale.ts new file mode 100644 index 00000000..795bc368 --- /dev/null +++ b/frontend/src/composables/useTimeScale.ts @@ -0,0 +1,137 @@ +import { ref, computed } from 'vue'; +import dayjs, { Dayjs } from 'dayjs'; +import { DateSetting } from '@/utils/enumeration'; + +export interface UseTimeScaleOptions { + defaultTimeScale?: string; + onSearchFinish?: (values: any) => void; + onReset?: (values: any) => void; +} + +export function useTimeScale(options: UseTimeScaleOptions = {}) { + const defaultTimeScale = options.defaultTimeScale || 'tm'; + const currentTimeScale = ref(defaultTimeScale); + + const jcdt = ref({ + min: null as string | null, + max: null as string | null + }); + + // 根据时间尺度动态切换 picker 类型 + const timePicker = computed(() => { + if (currentTimeScale.value === 'tm') return 'date'; + if (currentTimeScale.value === 'dt') return 'date'; + return 'month'; + }); + + // 根据时间尺度动态切换 format + const timeFormat = computed(() => { + if (currentTimeScale.value === 'tm') return 'YYYY-MM-DD HH:mm'; + if (currentTimeScale.value === 'dt') return 'YYYY-MM-DD'; + return 'YYYY-MM'; + }); + + // 小时模式需要 showTime 配置 + const timeShowTime = computed(() => { + if (currentTimeScale.value === 'tm') return { format: 'HH:mm' }; + return undefined; + }); + + // 设置默认时间范围 + const setDefaultTimeRange = (timeScale: string) => { + const now = dayjs(); + const today = now.format('YYYY-MM-DD'); + + if (timeScale === 'tm') { + // 小时:默认前七天,使用当前时分秒 + jcdt.value = { + min: `${dayjs().subtract(6, 'day').format('YYYY-MM-DD')} ${now.format( + 'HH:mm:ss' + )}`, + max: `${today} ${now.format('HH:mm:ss')}` + }; + } else if (timeScale === 'dt') { + // 日:默认前一个月 + jcdt.value = { + min: `${dayjs().subtract(1, 'month').format('YYYY-MM-DD')} 00:00:00`, + max: `${today} 23:59:59` + }; + } else { + // 月:默认前4个月 + jcdt.value = { + min: `${dayjs().subtract(4, 'month').format('YYYY-MM')}-01 00:00:00`, + max: `${today} 23:59:59` + }; + } + }; + + const handleRangeClick = (value: any) => { + jcdt.value = { + min: dayjs(value.value[0]).format('YYYY-MM-DD HH:mm:ss'), + max: dayjs(value.value[1]).format('YYYY-MM-DD HH:mm:ss') + }; + }; + + // 禁用起始时间之前的日期 + const disabledEndDate = (current: Dayjs) => { + if (!jcdt.value.min) return false; + return current && current < dayjs(jcdt.value.min).endOf('day'); + }; + + // 处理搜索完成 + const handleSearchFinish = (values: any) => { + values.jcdt = { + min: values.jcdt?.min || jcdt.value.min, + max: values.jcdt?.max || jcdt.value.max + }; + if (jcdt.value.min) values.jcdt.min = dayjs(jcdt.value.min); + if (jcdt.value.max) values.jcdt.max = dayjs(jcdt.value.max); + // 强制使用当前 timeScale,不被传入值覆盖 + values.timeScale = currentTimeScale.value; + options.onSearchFinish?.(values); + }; + + // 处理值变化 + const handleValuesChange = (changedValues: any, allValues: any) => { + if ( + changedValues.timeScale && + changedValues.timeScale !== currentTimeScale.value + ) { + currentTimeScale.value = changedValues.timeScale; + setDefaultTimeRange(changedValues.timeScale); + } + }; + + // 处理重置 + const handleReset = () => { + jcdt.value = { + min: null, + max: null + }; + currentTimeScale.value = defaultTimeScale; + setDefaultTimeRange(defaultTimeScale); + options.onReset?.({ + timeScale: defaultTimeScale + }); + }; + + // 初始化 + const init = () => { + setDefaultTimeRange(defaultTimeScale); + }; + + return { + jcdt, + currentTimeScale, + timePicker, + timeFormat, + timeShowTime, + handleRangeClick, + disabledEndDate, + handleSearchFinish, + handleValuesChange, + handleReset, + init, + setDefaultTimeRange + }; +} diff --git a/frontend/src/utils/buildTimeFilters.ts b/frontend/src/utils/buildTimeFilters.ts new file mode 100644 index 00000000..20bbecd8 --- /dev/null +++ b/frontend/src/utils/buildTimeFilters.ts @@ -0,0 +1,150 @@ +import dayjs from 'dayjs'; + +interface TimeFilterValues { + timeScale: string; + jcdt: { + min: any; + max: any; + }; +} + +/** + * 构建时间过滤条件 + * @param values - 包含 timeScale 和 jcdt 的对象 + * @returns 过滤条件数组 + */ +export function buildTimeFilters(values: TimeFilterValues) { + const { timeScale, jcdt } = values; + const filters: any[] = []; + + if (!jcdt || !jcdt.min || !jcdt.max) return filters; + + if (timeScale === 'tm') { + // 小时:传 tm,拆成 gte 和 lte + filters.push({ + field: 'tm', + operator: 'gte', + dataType: 'date', + value: dayjs(jcdt.min).format('YYYY-MM-DD HH:mm:ss') + }); + filters.push({ + field: 'tm', + operator: 'lte', + dataType: 'date', + value: dayjs(jcdt.max).format('YYYY-MM-DD HH:mm:ss') + }); + } else if (timeScale === 'dt') { + // 日:传 dt,拆成 gte 和 lte + filters.push({ + field: 'dt', + operator: 'gte', + dataType: 'date', + value: dayjs(jcdt.min).format('YYYY-MM-DD HH:mm:ss') + }); + filters.push({ + field: 'dt', + operator: 'lte', + dataType: 'date', + value: dayjs(jcdt.max).format('YYYY-MM-DD HH:mm:ss') + }); + } else if (timeScale === 'month') { + // 月:drtp 固定 MON,year 和 month 数组 + const minDate = dayjs(jcdt.min); + const maxDate = dayjs(jcdt.max); + const minYear = minDate.year(); + const maxYear = maxDate.year(); + + // 同年:传 drtp=MON + year + month 数组 + if (minYear === maxYear) { + filters.push({ + field: 'drtp', + operator: 'eq', + dataType: 'string', + value: 'MON' + }); + + filters.push({ + field: 'year', + operator: 'eq', + dataType: 'string', + value: String(minYear) + }); + + const months: number[] = []; + let m = minDate.month() + 1; + const endMonth = maxDate.month() + 1; + while (true) { + months.push(m); + if (m === endMonth) break; + m = m >= 12 ? 1 : m + 1; + if (months.length > 12) break; + } + filters.push({ + field: 'month', + operator: 'in', + dataType: 'number', + value: months + }); + } else { + // 跨年:拆分成两个 AND 组合,用 OR 连接,不传 drtp + const firstYearMonths: number[] = []; + let m1 = minDate.month() + 1; + while (m1 <= 12) { + firstYearMonths.push(m1); + m1++; + } + filters.push({ + logic: 'and', + filters: [ + { + field: 'year', + operator: 'eq', + dataType: 'string', + value: String(minYear) + }, + { + field: 'month', + operator: 'in', + dataType: 'number', + value: firstYearMonths + } + ] + }); + + const secondYearMonths: number[] = []; + let m2 = 1; + const endMonth = maxDate.month() + 1; + while (m2 <= endMonth) { + secondYearMonths.push(m2); + m2++; + } + filters.push({ + logic: 'and', + filters: [ + { + field: 'year', + operator: 'eq', + dataType: 'string', + value: String(maxYear) + }, + { + field: 'month', + operator: 'in', + dataType: 'number', + value: secondYearMonths + } + ] + }); + + // 将 filters 数组转换为 OR 逻辑 + return [ + { + logic: 'or', + filters: filters + } + ]; + } + } + + return filters; +} diff --git a/frontend/src/utils/exportExcel.ts b/frontend/src/utils/exportExcel.ts new file mode 100644 index 00000000..26d25d08 --- /dev/null +++ b/frontend/src/utils/exportExcel.ts @@ -0,0 +1,246 @@ +/** + * 前端表格 Excel 导出工具 + * 基于 exceljs 实现所见即所得的导出功能 + */ +import * as ExcelJS from 'exceljs'; + +export interface ExportColumn { + title: string; + dataIndex: string; + customRender?: (params: { text: any; record: any; index: number }) => any; + /** 是否在导出时排除该列 */ + excludeFromExport?: boolean; +} + +export interface ExportParams { + /** 导出数据列表 */ + data: any[]; + /** 表格列配置 */ + columns: ExportColumn[]; + /** 导出文件名(不含扩展名) */ + fileName?: string; + /** 表头主标题 */ + tbtitle?: string; + /** 表头副标题 */ + tbsub?: string; + /** 导出回调 */ + callback?: (message: string | boolean) => void; +} + +/** + * 下载 Excel 文件 + */ +function downloadExcel({ + filename, + sheets, + callback +}: { + filename: string; + sheets: { + sheetName: string; + columns: ExportColumn[]; + dataSource: any[]; + tbtitle?: string; + tbsub?: string; + }[]; + callback?: (message: string | boolean) => void; +}) { + try { + const workbook = new ExcelJS.Workbook(); + + for (const sheet of sheets) { + const { columns, dataSource, tbtitle, tbsub, sheetName } = sheet; + + // 添加 sheet + const worksheet = workbook.addWorksheet(sheetName || 'Sheet1', { + properties: { tabColor: { argb: 'FFC0000' } } + }); + + // 固定列宽(根据定义宽度计算导出宽度) + worksheet.columns = columns.map(col => { + const definedWidth = col.width || 150; + // < 200: 29.22, 200-300: 39.22, 300-400: 59.22 + const exportWidth = 29.22 + Math.max(0, (definedWidth - 150) / 50) * 10; + return { width: exportWidth }; + }); + + // 样式定义 + const headerStyle: Partial = { + font: { bold: true, size: 14, name: '微软雅黑' }, + alignment: { + wrapText: true, + vertical: 'middle', + horizontal: 'left' + } + }; + + const dataStyle: Partial = { + font: { size: 12, name: '微软雅黑' }, + alignment: { + wrapText: true, + vertical: 'middle', + horizontal: 'left' + } + }; + + // 当前行号 + let currentRow = 1; + + // 写入表头标题(如果有) + if (tbtitle) { + const titleRow = worksheet.getRow(currentRow); + titleRow.getCell(1).value = tbtitle; + titleRow.getCell(2).value = tbsub || ''; + currentRow++; + } + + // 写入表头行 + const headerRow = worksheet.getRow(currentRow); + columns.forEach((col, index) => { + headerRow.getCell(index + 1).value = col.title; + headerRow.getCell(index + 1).style = headerStyle; + }); + // 冻结表头行 + worksheet.views = [{ state: 'frozen', ySplit: currentRow }]; + currentRow++; + + // 写入数据行 + dataSource.forEach(record => { + const row = worksheet.getRow(currentRow); + columns.forEach((col, index) => { + const { dataIndex, customRender } = col; + if (!dataIndex) return; + + let value = record[dataIndex]; + + // 如果有 customRender,优先使用它处理后的值 + if (customRender) { + try { + const renderResult = customRender({ + text: value, + record, + index: currentRow - (tbtitle ? 3 : 2) + }); + value = renderResult !== undefined ? renderResult : value; + } catch { + // customRender 执行失败,使用原始值 + } + } + + if (value === null || value === undefined || value === '') { + value = '-'; + } + + const cell = row.getCell(index + 1); + cell.value = value; + + // 所有单元格统一应用样式,确保 - 占位符也居中对齐 + cell.style = dataStyle; + }); + currentRow++; + }); + } + + // 生成 Excel 文件并下载 + workbook.xlsx + .writeBuffer() + .then(buffer => { + const blob = new Blob([buffer], { + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + }); + + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = `${filename}.xlsx`; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + URL.revokeObjectURL(url); + + callback?.(true); + }) + .catch(error => { + console.error('导出 Excel 失败:', error); + callback?.(false); + }); + } catch (error) { + console.error('导出 Excel 失败:', error); + callback?.(false); + } +} + +/** + * 获取列的真实标题(支持函数类型) + */ +function resolveColumnTitle(col: ExportColumn): string | null { + const title = col.title; + if (typeof title === 'function') { + try { + const result = title(); + // 如果函数返回的是字符串,使用它 + if (typeof result === 'string') return result; + // 如果返回的是 VNode 或其他类型,无法导出标题 + return null; + } catch { + return null; + } + } + if (typeof title === 'string') return title; + return null; +} + +/** + * 获取嵌套属性值 + */ +function getNestedValue(obj: any, path: string): any { + if (!path || !path.includes('.')) return obj?.[path]; + return path.split('.').reduce((current, key) => current?.[key], obj); +} + +/** + * 导出表格数据为 Excel 文件 + */ +export function exportTable({ + data, + columns, + fileName = '导出数据', + tbtitle, + tbsub, + callback +}: ExportParams) { + if (!data || data.length === 0) { + callback?.('没有可导出的数据'); + return; + } + + // 过滤掉不需要导出的列,并解析函数类型的 title + const exportColumns: ExportColumn[] = []; + for (const col of columns) { + if (!col.dataIndex || col.dataIndex === 'action' || col.excludeFromExport) { + continue; + } + const resolvedTitle = resolveColumnTitle(col); + // 如果没有解析出标题,跳过该列 + if (!resolvedTitle) continue; + + exportColumns.push({ + ...col, + title: resolvedTitle + }); + } + + downloadExcel({ + filename: fileName, + sheets: [ + { + sheetName: fileName, + columns: exportColumns, + dataSource: data, + tbtitle, + tbsub + } + ], + callback + }); +} diff --git a/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/Approval/ApprovalSearch.vue b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/Approval/ApprovalSearch.vue new file mode 100644 index 00000000..63865246 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/Approval/ApprovalSearch.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/Approval/index.vue b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/Approval/index.vue new file mode 100644 index 00000000..00878452 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/Approval/index.vue @@ -0,0 +1,305 @@ + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/BasicDataSearch.vue b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/BasicDataSearch.vue new file mode 100644 index 00000000..0c3e6c3c --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/BasicDataSearch.vue @@ -0,0 +1,310 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/CustomColumnModal.vue b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/CustomColumnModal.vue new file mode 100644 index 00000000..0bf0c5f6 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/CustomColumnModal.vue @@ -0,0 +1,297 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/DeleteConfirmModal.vue b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/DeleteConfirmModal.vue new file mode 100644 index 00000000..e46e5f05 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/DeleteConfirmModal.vue @@ -0,0 +1,89 @@ + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/EditPowerModal.vue b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/EditPowerModal.vue new file mode 100644 index 00000000..ac56a920 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/EditPowerModal.vue @@ -0,0 +1,251 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/index.vue b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/index.vue new file mode 100644 index 00000000..3b7d4630 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/BasicData/index.vue @@ -0,0 +1,1085 @@ + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/FishResource/FishResourceSearch.vue b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/FishResource/FishResourceSearch.vue new file mode 100644 index 00000000..05ba6d7c --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/FishResource/FishResourceSearch.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/FishResource/index.vue b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/FishResource/index.vue new file mode 100644 index 00000000..a8f8dbd6 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/conventionalHydropower/FishResource/index.vue @@ -0,0 +1,606 @@ + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/Export/index.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/Export/index.vue new file mode 100644 index 00000000..248776ee --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/Export/index.vue @@ -0,0 +1,324 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/FishDataSearch.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/FishDataSearch.vue new file mode 100644 index 00000000..5714664a --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/FishDataSearch.vue @@ -0,0 +1,255 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/index.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/index.vue new file mode 100644 index 00000000..3b60c6b9 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/index.vue @@ -0,0 +1,549 @@ + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/FishRelease/FishReleaseSearch.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishRelease/FishReleaseSearch.vue new file mode 100644 index 00000000..058387de --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishRelease/FishReleaseSearch.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/FishRelease/index.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishRelease/index.vue new file mode 100644 index 00000000..44404400 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishRelease/index.vue @@ -0,0 +1,208 @@ + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/FlowData/FlowDataSearch.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/FlowData/FlowDataSearch.vue new file mode 100644 index 00000000..873c7dba --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/FlowData/FlowDataSearch.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/FlowData/index.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/FlowData/index.vue new file mode 100644 index 00000000..99910251 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/FlowData/index.vue @@ -0,0 +1,473 @@ + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/FlowStation/FlowStationSearch.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/FlowStation/FlowStationSearch.vue new file mode 100644 index 00000000..1bddd775 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/FlowStation/FlowStationSearch.vue @@ -0,0 +1,265 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/FlowStation/index.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/FlowStation/index.vue new file mode 100644 index 00000000..a4e7fab0 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/FlowStation/index.vue @@ -0,0 +1,252 @@ + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/SurfaceTemp/SurfaceTempSearch.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/SurfaceTemp/SurfaceTempSearch.vue new file mode 100644 index 00000000..6fddc8f4 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/SurfaceTemp/SurfaceTempSearch.vue @@ -0,0 +1,265 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/SurfaceTemp/index.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/SurfaceTemp/index.vue new file mode 100644 index 00000000..0d7824ba --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/SurfaceTemp/index.vue @@ -0,0 +1,224 @@ + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/VerticalTemp/VerticalTempSearch.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/VerticalTemp/VerticalTempSearch.vue new file mode 100644 index 00000000..92e6a6d4 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/VerticalTemp/VerticalTempSearch.vue @@ -0,0 +1,271 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/VerticalTemp/index.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/VerticalTemp/index.vue new file mode 100644 index 00000000..77d19257 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/VerticalTemp/index.vue @@ -0,0 +1,624 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/WaterData/WaterDataSearch.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/WaterData/WaterDataSearch.vue new file mode 100644 index 00000000..06760b69 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/WaterData/WaterDataSearch.vue @@ -0,0 +1,286 @@ + + + + + diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/WaterData/index.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/WaterData/index.vue new file mode 100644 index 00000000..74f7e9e1 --- /dev/null +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/WaterData/index.vue @@ -0,0 +1,359 @@ + + + + diff --git a/frontend/src/views/system/map/components/LegendData/LegendDataSelectedConfig.vue b/frontend/src/views/system/map/components/LegendData/LegendDataSelectedConfig.vue new file mode 100644 index 00000000..44934f55 --- /dev/null +++ b/frontend/src/views/system/map/components/LegendData/LegendDataSelectedConfig.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/frontend/src/views/system/map/components/LegendData/LegendDataSelectedConfigForm.vue b/frontend/src/views/system/map/components/LegendData/LegendDataSelectedConfigForm.vue new file mode 100644 index 00000000..bfcfc5a4 --- /dev/null +++ b/frontend/src/views/system/map/components/LegendData/LegendDataSelectedConfigForm.vue @@ -0,0 +1,190 @@ + + + + +