From 549849b47948aac8b808b935bbb23da3253d2c6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=88=E5=85=86=E5=A2=9E?= <你的邮箱@example.com> Date: Tue, 7 Jul 2026 13:48:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A1=AB=E6=8A=A5=E9=A1=B5=E9=9D=A2=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=8C=E6=B2=BF=E7=A8=8B=E9=85=8D=E7=BD=AE=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=8C=E6=B7=BB=E5=8A=A0=E9=A2=84=E8=AD=A6=E5=92=8C?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend-sjtb/.env.development | 2 +- frontend/.env.development | 7 +- frontend/src/api/select/index.ts | 10 +- .../api/system/map/ConfigManagement/index.ts | 26 +- frontend/src/api/zzfl/index.ts | 6 +- frontend/src/utils/request.ts | 3 + .../ConfigManagement/ConfigManagementForm.vue | 784 ++++++++++++++++++ .../ConfigManagementSearch.vue | 75 ++ .../components/ConfigManagement/index.vue | 228 +++++ .../RulesManagement/LayerManagementForm.vue | 260 ++++++ .../RulesManagement/LayerManagementSearch.vue | 69 ++ .../components/RulesManagement/index.vue | 358 ++++++++ .../src/views/system/alertRules/index.vue | 89 ++ .../ConfigManagement/ConfigManagementForm.vue | 154 ++-- .../ConfigManagementSearch.vue | 46 +- .../map/components/ConfigManagement/index.vue | 107 ++- .../components/LegendData/LegendDataForm.vue | 20 +- .../map/components/LegendData/index.vue | 9 + .../ConfigManagement/ConfigManagementForm.vue | 784 ++++++++++++++++++ .../ConfigManagementSearch.vue | 75 ++ .../components/ConfigManagement/index.vue | 228 +++++ .../HistoryManagement/LayerManagementForm.vue | 260 ++++++ .../LayerManagementSearch.vue | 69 ++ .../components/HistoryManagement/index.vue | 358 ++++++++ .../src/views/system/pushManagement/index.vue | 89 ++ 25 files changed, 4006 insertions(+), 110 deletions(-) create mode 100644 frontend/src/views/system/alertRules/components/ConfigManagement/ConfigManagementForm.vue create mode 100644 frontend/src/views/system/alertRules/components/ConfigManagement/ConfigManagementSearch.vue create mode 100644 frontend/src/views/system/alertRules/components/ConfigManagement/index.vue create mode 100644 frontend/src/views/system/alertRules/components/RulesManagement/LayerManagementForm.vue create mode 100644 frontend/src/views/system/alertRules/components/RulesManagement/LayerManagementSearch.vue create mode 100644 frontend/src/views/system/alertRules/components/RulesManagement/index.vue create mode 100644 frontend/src/views/system/alertRules/index.vue create mode 100644 frontend/src/views/system/pushManagement/components/ConfigManagement/ConfigManagementForm.vue create mode 100644 frontend/src/views/system/pushManagement/components/ConfigManagement/ConfigManagementSearch.vue create mode 100644 frontend/src/views/system/pushManagement/components/ConfigManagement/index.vue create mode 100644 frontend/src/views/system/pushManagement/components/HistoryManagement/LayerManagementForm.vue create mode 100644 frontend/src/views/system/pushManagement/components/HistoryManagement/LayerManagementSearch.vue create mode 100644 frontend/src/views/system/pushManagement/components/HistoryManagement/index.vue create mode 100644 frontend/src/views/system/pushManagement/index.vue diff --git a/frontend-sjtb/.env.development b/frontend-sjtb/.env.development index 6f8bd729..083fa926 100644 --- a/frontend-sjtb/.env.development +++ b/frontend-sjtb/.env.development @@ -7,7 +7,7 @@ VITE_APP_TITLE = '水电水利建设项目全过程环境管理信息平台' VITE_APP_PORT = 3000 VITE_APP_BASE_API = '/dev-api' # 本地环境 -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://172.16.21.142:8093' # VITE_APP_BASE_URL = 'http://172.16.21.142:8096' diff --git a/frontend/.env.development b/frontend/.env.development index 699b8b22..27f26cbe 100644 --- a/frontend/.env.development +++ b/frontend/.env.development @@ -12,12 +12,9 @@ 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' -# 李林 -# VITE_APP_BASE_URL = 'http://10.84.121.43:8093' +VITE_APP_BASE_URL = 'http://10.84.111.25:8093' # 测试环境线上10.84.121.122: VITE_APP_TEST_ONLINE_URL = 'https://211.99.26.225:12122' diff --git a/frontend/src/api/select/index.ts b/frontend/src/api/select/index.ts index 647e773e..d322e8e1 100644 --- a/frontend/src/api/select/index.ts +++ b/frontend/src/api/select/index.ts @@ -1,5 +1,5 @@ import request from '@/utils/request'; -//水电基地数据获取 +//水电基地数据获取 export function wbsbGetKendoList(data: any) { return request({ url: '/env/hydrobase/wbsb/GetKendoList', @@ -106,3 +106,11 @@ export function uploadFile(data: any) { headers: { 'Content-Type': 'multipart/form-data' } }); } +// 所在位置下拉列表 +export function getAddvcdDropdownByRvcd(params: any) { + return request({ + url: '/base/msalongb/noAuth/GetKendoList', + method: 'post', + params + }); +} diff --git a/frontend/src/api/system/map/ConfigManagement/index.ts b/frontend/src/api/system/map/ConfigManagement/index.ts index d9549aed..bed99f3b 100644 --- a/frontend/src/api/system/map/ConfigManagement/index.ts +++ b/frontend/src/api/system/map/ConfigManagement/index.ts @@ -3,7 +3,7 @@ import request from '@/utils/request'; // 获取所有沿程配置数据 export function getAllConfigTree(data: any) { return request({ - url: '/api/dec-lygk-base-server/base/msalongb/GetKendoList', + url: '/base/msalongb/GetKendoList', method: 'post', data: data }); @@ -11,7 +11,7 @@ export function getAllConfigTree(data: any) { // 保存沿程配置 export function saveBaseWbsb(data: any) { return request({ - url: '/api/dec-lygk-base-server/base/wbsb/addOrUpdate', + url: '/base/msalongb/save', method: 'post', data: data }); @@ -19,8 +19,24 @@ export function saveBaseWbsb(data: any) { // 删除沿程配置 export function deleteBaseWbsb(data: any) { return request({ - url: '/api/dec-lygk-base-server/base/wbsb/delete', - method: 'get', - params: data + url: '/base/msalongb/delete', + method: 'post', + data + }); +} +// 保存沿程配置子节点 +export function saveBaseWbsbChild(data: any) { + return request({ + url: '/base/msalongb/save', + method: 'post', + data: data + }); +} + +export function saveBaseWbsbChildDetail(data: any) { + return request({ + url: '/base/msalongdetb/save', + method: 'post', + data: data }); } diff --git a/frontend/src/api/zzfl/index.ts b/frontend/src/api/zzfl/index.ts index 426de90f..dcf647e0 100644 --- a/frontend/src/api/zzfl/index.ts +++ b/frontend/src/api/zzfl/index.ts @@ -26,7 +26,7 @@ export function overviewGetOverviewSecond(data: any) { data }); } -//增殖站介绍 /api/dec-lygk-base-server/base/msstbprpt/GetKendoList +//增殖站介绍 export function msstbprptGetKendoList(data: any) { return request({ url: '/fb/msstbprpt/GetKendoList', @@ -34,7 +34,7 @@ export function msstbprptGetKendoList(data: any) { data }); } -// 增殖站运行数据统计 +// 增殖站运行数据统计 export function qgcgetFbStaticsData(data: any) { return request({ url: '/fb/station/qgc/getFbStaticsData', @@ -73,4 +73,4 @@ export function msfbrdmGetKendoListCust(data: any) { method: 'post', data }); -} \ No newline at end of file +} diff --git a/frontend/src/utils/request.ts b/frontend/src/utils/request.ts index 7c79d240..0f9323c2 100644 --- a/frontend/src/utils/request.ts +++ b/frontend/src/utils/request.ts @@ -56,6 +56,9 @@ service.interceptors.response.use( if (status === 200) { if (response.data.code == 401) { message.error(response.data.msg || '请求失败'); + setTimeout(() => { + router.push('/login'); + }, 1000); return; } else if (response.data.code == 1) { message.error(response.data.msg); diff --git a/frontend/src/views/system/alertRules/components/ConfigManagement/ConfigManagementForm.vue b/frontend/src/views/system/alertRules/components/ConfigManagement/ConfigManagementForm.vue new file mode 100644 index 00000000..4835ade9 --- /dev/null +++ b/frontend/src/views/system/alertRules/components/ConfigManagement/ConfigManagementForm.vue @@ -0,0 +1,784 @@ + + + + + diff --git a/frontend/src/views/system/alertRules/components/ConfigManagement/ConfigManagementSearch.vue b/frontend/src/views/system/alertRules/components/ConfigManagement/ConfigManagementSearch.vue new file mode 100644 index 00000000..c10b93c8 --- /dev/null +++ b/frontend/src/views/system/alertRules/components/ConfigManagement/ConfigManagementSearch.vue @@ -0,0 +1,75 @@ + + + + diff --git a/frontend/src/views/system/alertRules/components/ConfigManagement/index.vue b/frontend/src/views/system/alertRules/components/ConfigManagement/index.vue new file mode 100644 index 00000000..6170d007 --- /dev/null +++ b/frontend/src/views/system/alertRules/components/ConfigManagement/index.vue @@ -0,0 +1,228 @@ + + + + + + diff --git a/frontend/src/views/system/alertRules/components/RulesManagement/LayerManagementForm.vue b/frontend/src/views/system/alertRules/components/RulesManagement/LayerManagementForm.vue new file mode 100644 index 00000000..caa405e3 --- /dev/null +++ b/frontend/src/views/system/alertRules/components/RulesManagement/LayerManagementForm.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/frontend/src/views/system/alertRules/components/RulesManagement/LayerManagementSearch.vue b/frontend/src/views/system/alertRules/components/RulesManagement/LayerManagementSearch.vue new file mode 100644 index 00000000..40cb5033 --- /dev/null +++ b/frontend/src/views/system/alertRules/components/RulesManagement/LayerManagementSearch.vue @@ -0,0 +1,69 @@ + + + + diff --git a/frontend/src/views/system/alertRules/components/RulesManagement/index.vue b/frontend/src/views/system/alertRules/components/RulesManagement/index.vue new file mode 100644 index 00000000..9484aa57 --- /dev/null +++ b/frontend/src/views/system/alertRules/components/RulesManagement/index.vue @@ -0,0 +1,358 @@ + + + + + + diff --git a/frontend/src/views/system/alertRules/index.vue b/frontend/src/views/system/alertRules/index.vue new file mode 100644 index 00000000..15401494 --- /dev/null +++ b/frontend/src/views/system/alertRules/index.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/frontend/src/views/system/map/components/ConfigManagement/ConfigManagementForm.vue b/frontend/src/views/system/map/components/ConfigManagement/ConfigManagementForm.vue index 4835ade9..90b7d48a 100644 --- a/frontend/src/views/system/map/components/ConfigManagement/ConfigManagementForm.vue +++ b/frontend/src/views/system/map/components/ConfigManagement/ConfigManagementForm.vue @@ -26,32 +26,40 @@ /> - + + placeholder="请输入沿程配置编码" + /> + + - - + + placeholder="请选择所在河段" + :options="riverOptions" + :filter-option="filterOption" + @change="handleRiverSelect" + :disabled="isEdit" + /> + + - + + /> + +
@@ -70,7 +78,7 @@ :key="item.stcd" :value="item.stcd" > - {{ item.stnm }} + {{ item.ennm }} - {{ item.stnm }} + {{ dataRef.parentId ? item.stnm : item.ennm }} @@ -280,18 +290,21 @@ import { ArrowUpOutlined, ArrowDownOutlined } from '@ant-design/icons-vue'; +import { getEngInfoDropdown, getAddvcdDropdownByRvcd } from '@/api/select'; interface Props { visible: boolean; initialValues?: any | null; loading?: boolean; + riverOptions?: any[]; } const localLoading = ref(false); const props = withDefaults(defineProps(), { visible: false, initialValues: null, - loading: false + loading: false, + riverOptions: () => [] }); const modalVisible = computed({ @@ -311,15 +324,20 @@ const defaultFormData = reactive({ id: undefined, name: undefined, code: undefined, - rvnm: undefined, - description: undefined + rvcd: undefined, + remark: undefined }); const formData: any = reactive({ ...defaultFormData }); const rules: Record = { name: [{ required: true, message: '请输入沿程配置名称', trigger: 'blur' }], code: [{ required: true, message: '请输入配置编码', trigger: 'blur' }], - rvnm: [{ required: true, message: '请输入所在河段', trigger: 'blur' }] + rvcd: [{ required: true, message: '请选择所在河段', trigger: 'change' }] +}; + +const handleRiverSelect = async (value: string) => { + const res = await getEngInfoDropdown({ rvcd: value }); + stationList.value = res.data || []; }; const isEdit = computed(() => !!props.initialValues); @@ -331,7 +349,7 @@ const treeData = ref([]); const addingNewNode = ref(false); const newNodeData = ref({ stcd: undefined, - stnm: '', + ennm: '', sttpName: '' }); @@ -340,7 +358,7 @@ const addingChildNode = ref(false); const currentParentKey = ref(null); const childNodeData = ref({ stcd: undefined, - stnm: '', + ennm: '', sttpName: '' }); @@ -349,18 +367,13 @@ const editingNode = ref(false); const editingNodeKey = ref(null); const editNodeData = ref({ stcd: undefined, - stnm: '', + ennm: '', sttpName: '', originalData: null as any }); -// 站点列表(模拟数据,实际应从接口获取) -const stationList = ref([ - { stcd: '1', stnm: '站点A', sttpName: '类型1' }, - { stcd: '2', stnm: '站点B', sttpName: '类型2' }, - { stcd: '3', stnm: '站点C', sttpName: '类型1' }, - { stcd: '4', stnm: '站点D', sttpName: '类型3' } -]); +const stationList = ref([]); +const childStationList = ref([]); // 生成唯一ID let nodeIdCounter = 0; @@ -369,19 +382,19 @@ const generateNodeId = () => `node_${Date.now()}_${++nodeIdCounter}`; // 获取节点标题 const getNodeTitle = (dataRef: any) => { if (!dataRef.parentId) { - // 一级节点:只显示 stnm - return dataRef.stnm || ''; + return dataRef.ennm || ''; } else { - // 二级节点:显示 stnm + sttpName - return `${dataRef.stnm || ''} ${dataRef.sttpName || ''}`; + return `${dataRef.ennm || ''} ${dataRef.sttpName || ''}`; } }; // 搜索过滤 -const filterOption = (input: string, option: any) => { - return ( - option.children[0].children.toLowerCase().indexOf(input.toLowerCase()) >= 0 - ); +const filterOption = (inputValue: string, option: any) => { + const label = option.label || option.name || ''; + const reachcdName = option.reachcdName || ''; + const keyword = inputValue || ''; + + return label.indexOf(keyword) !== -1 || reachcdName.indexOf(keyword) !== -1; }; // 判断是否为第一个节点 @@ -426,10 +439,14 @@ const findNodeByKey = (nodes: any[], key: string): any => { // 新增一级节点 const handleAdd = () => { + if (!formData.rvcd) { + message.warning('请先选择所在河段'); + return; + } addingNewNode.value = true; newNodeData.value = { stcd: undefined, - stnm: '', + ennm: '', sttpName: '' }; }; @@ -438,7 +455,7 @@ const handleAdd = () => { const handleNodeSelect = (value: string) => { const station = stationList.value.find(item => item.stcd === value); if (station) { - newNodeData.value.stnm = station.stnm; + newNodeData.value.ennm = station.ennm; newNodeData.value.sttpName = station.sttpName; } }; @@ -453,7 +470,7 @@ const handleSaveNewNode = () => { const newNode = { key: generateNodeId(), stcd: newNodeData.value.stcd, - stnm: newNodeData.value.stnm, + ennm: newNodeData.value.ennm, sttpName: newNodeData.value.sttpName, parentId: null, children: [] @@ -469,27 +486,29 @@ const handleCancelAdd = () => { addingNewNode.value = false; newNodeData.value = { stcd: undefined, - stnm: '', + ennm: '', sttpName: '' }; }; // 添加子节点(二级节点) -const handleAddChild = (parentData: any) => { +const handleAddChild = async (parentData: any) => { addingChildNode.value = true; currentParentKey.value = parentData.key; childNodeData.value = { stcd: undefined, - stnm: '', + ennm: '', sttpName: '' }; + const res = await getAddvcdDropdownByRvcd({ stcd: parentData.stcd }); + childStationList.value = res.data || []; }; // 选择子节点 const handleChildNodeSelect = (value: string) => { - const station = stationList.value.find(item => item.stcd === value); + const station = childStationList.value.find(item => item.stcd === value); if (station) { - childNodeData.value.stnm = station.stnm; + childNodeData.value.ennm = station.stnm; childNodeData.value.sttpName = station.sttpName; } }; @@ -510,7 +529,7 @@ const handleSaveChildNode = () => { const newChild = { key: generateNodeId(), stcd: childNodeData.value.stcd, - stnm: childNodeData.value.stnm, + ennm: childNodeData.value.ennm, sttpName: childNodeData.value.sttpName, parentId: parent.key, children: [] @@ -533,29 +552,38 @@ const handleCancelAddChild = () => { currentParentKey.value = null; childNodeData.value = { stcd: undefined, - stnm: '', + ennm: '', sttpName: '' }; }; // 编辑节点 -const handleEditNode = (dataRef: any) => { +const handleEditNode = async (dataRef: any) => { editingNode.value = true; editingNodeKey.value = dataRef.key; // 保存原始数据 editNodeData.value = { stcd: dataRef.stcd, - stnm: dataRef.stnm, + ennm: dataRef.ennm, sttpName: dataRef.sttpName, originalData: { ...dataRef } }; + if (dataRef.parentId) { + const parent = findNodeByKey(treeData.value, dataRef.parentId); + if (parent) { + const res = await getAddvcdDropdownByRvcd({ stcd: parent.stcd }); + childStationList.value = res.data || []; + } + } }; // 选择编辑节点 -const handleEditNodeSelect = (value: string) => { - const station = stationList.value.find(item => item.stcd === value); +const handleEditNodeSelect = (dataRef: any) => { + const value = editNodeData.value.stcd; + const list = dataRef.parentId ? childStationList.value : stationList.value; + const station = list.find(item => item.stcd === value); if (station) { - editNodeData.value.stnm = station.stnm; + editNodeData.value.ennm = dataRef.parentId ? station.stnm : station.ennm; editNodeData.value.sttpName = station.sttpName; editNodeData.value.stcd = station.stcd; } @@ -577,7 +605,7 @@ const handleSaveEditNode = () => { // 更新节点数据 node.stcd = editNodeData.value.stcd; - node.stnm = editNodeData.value.stnm; + node.ennm = editNodeData.value.ennm; node.sttpName = editNodeData.value.sttpName; editingNode.value = false; @@ -591,7 +619,7 @@ const handleCancelEditNode = () => { editingNodeKey.value = null; editNodeData.value = { stcd: undefined, - stnm: '', + ennm: '', sttpName: '', originalData: null }; @@ -631,7 +659,7 @@ const handleMoveDown = (dataRef: any) => { const handleDeleteNode = (dataRef: any) => { Modal.confirm({ title: '确认删除', - content: `确定要删除节点"${dataRef.stnm}"吗?`, + content: `确定要删除节点"${dataRef.ennm}"吗?`, okText: '确定', cancelText: '取消', onOk: () => { @@ -677,7 +705,7 @@ const handleOk = async () => { } }; -const initForm = () => { +const initForm = async () => { if (props.initialValues) { const values = props.initialValues; Object.keys(formData).forEach(key => { @@ -702,6 +730,12 @@ const initForm = () => { } else { treeData.value = []; } + + // 编辑时调用接口获取一级站点列表 + if (formData.rvcd) { + const res = await getEngInfoDropdown({ rvcd: formData.rvcd }); + stationList.value = res.data || []; + } } else { resetForm(); } diff --git a/frontend/src/views/system/map/components/ConfigManagement/ConfigManagementSearch.vue b/frontend/src/views/system/map/components/ConfigManagement/ConfigManagementSearch.vue index c10b93c8..91cd9b3b 100644 --- a/frontend/src/views/system/map/components/ConfigManagement/ConfigManagementSearch.vue +++ b/frontend/src/views/system/map/components/ConfigManagement/ConfigManagementSearch.vue @@ -10,7 +10,9 @@ > @@ -18,46 +20,52 @@ diff --git a/frontend/src/views/system/map/components/ConfigManagement/index.vue b/frontend/src/views/system/map/components/ConfigManagement/index.vue index 84d71955..af27d7db 100644 --- a/frontend/src/views/system/map/components/ConfigManagement/index.vue +++ b/frontend/src/views/system/map/components/ConfigManagement/index.vue @@ -4,6 +4,8 @@ @@ -37,6 +39,8 @@ ref="configManagementForm" v-model:visible="editModalVisible" :initial-values="currentRecord" + :river-options="riverOptions" + :river-options-load="riverOptionsLoad" @cancel="editModalCancel" @ok="handleEditSubmit" /> @@ -52,8 +56,10 @@ import { message, Modal } from 'ant-design-vue'; import { getAllConfigTree, deleteBaseWbsb, - saveBaseWbsb + saveBaseWbsbChild, + saveBaseWbsbChildDetail } from '@/api/system/map/ConfigManagement'; +import { getRvcdDropdown } from '@/api/select'; // 表格实例 const basicTable = ref(null); @@ -129,9 +135,20 @@ const handleAdd = () => { editModalVisible.value = true; }; +// 过滤掉值为 '-' 的字段 +const filterRecord = (record: any) => { + const filtered: any = {}; + Object.keys(record).forEach(key => { + if (record[key] !== '-') { + filtered[key] = record[key]; + } + }); + return filtered; +}; + // 编辑处理 const handleEdit = (record: any) => { - currentRecord.value = { ...record }; + currentRecord.value = filterRecord(record); editModalVisible.value = true; }; @@ -144,8 +161,12 @@ const handleDelete = (record: any) => { onOk: async () => { try { let res = await deleteBaseWbsb([record.id]); - message.success('删除成功'); - basicTable.value.refresh(); + if (res.code == 0) { + message.success('删除成功'); + basicTable.value.refresh(); + } else { + message.error('删除失败'); + } } catch (error) { message.error('删除失败'); return; @@ -159,12 +180,12 @@ const onSearchFinish = (values: any) => { const params = { logic: 'and', filters: [ - values.parentId + values.rvcd ? { - field: 'parentId', + field: 'rvcd', operator: 'eq', dataType: 'string', - value: values.parentId + value: values.rvcd } : null, values.name @@ -197,23 +218,79 @@ const editModalCancel = () => { // 表单提交 const handleEditSubmit = async (values: any) => { try { - let res = await saveBaseWbsb({ + const formData = { ...currentRecord.value, ...values - }); - message.success(`保存成功`); + }; + delete formData.configNodes; - editModalVisible.value = false; - basicTable.value.refresh(); + Object.keys(formData).forEach(key => { + if (key.includes('-')) { + delete formData[key]; + } + }); + + let res = await saveBaseWbsbChild(formData); + if (res.code == 0) { + const alongId = res.data; + const treeData = values.configNodes || []; + + if (treeData.length > 0) { + const formatTreeData = ( + nodes: any[], + parentId: string | null = null + ) => { + return nodes.map(node => ({ + alongId, + stcd: node.stcd, + stnm: node.ennm, + sttpName: node.sttpName, + parentId: parentId ? parentId : null, + children: + node.children && node.children.length > 0 + ? formatTreeData(node.children, node.key) + : [] + })); + }; + + const detailData = formatTreeData(treeData); + + const detailRes = await saveBaseWbsbChildDetail(detailData); + if (detailRes.code == 0) { + message.success(`保存成功`); + editModalVisible.value = false; + basicTable.value.refresh(); + } else { + message.error(`保存子节点失败`); + } + } else { + message.success(`保存成功`); + editModalVisible.value = false; + basicTable.value.refresh(); + } + } else { + message.error(`保存失败`); + } } catch (error) { message.error(`保存失败`); - editModalVisible.value = false; return; } }; - -const initOption = () => {}; +const riverOptions = ref([]); +const riverOptionsLoad = ref(false); +const initOption = () => { + const params = {}; + riverOptionsLoad.value = true; + getRvcdDropdown(params).then((res: any) => { + res.data.forEach((item: any) => { + item.value = item.rvcd; + item.label = item.rvnm; + }); + riverOptions.value = res.data || []; + riverOptionsLoad.value = false; + }); +}; onMounted(() => { initOption(); }); diff --git a/frontend/src/views/system/map/components/LegendData/LegendDataForm.vue b/frontend/src/views/system/map/components/LegendData/LegendDataForm.vue index bccce97a..c2014599 100644 --- a/frontend/src/views/system/map/components/LegendData/LegendDataForm.vue +++ b/frontend/src/views/system/map/components/LegendData/LegendDataForm.vue @@ -2,7 +2,7 @@ emit('update:visible', val) }); +const confirmLoading = computed(() => { + return localLoading.value || props.loading; +}); + const emit = defineEmits<{ (e: 'update:visible', value: boolean): void; (e: 'cancel'): void; @@ -276,6 +280,7 @@ const handleLayerSelect = (value: any) => { }; const handleOk = async () => { + localLoading.value = true; try { await formRef.value.validate(); // 过滤掉 undefined 的字段,不提交空值 @@ -329,6 +334,7 @@ const handleOk = async () => { } catch (error) { console.error('Validate Failed:', error); message.error('请检查表单填写是否正确'); + localLoading.value = false; } }; @@ -350,6 +356,7 @@ const resetForm = () => { formRef.value.resetFields(); } Object.assign(formData, defaultFormData); + localLoading.value = false; }; const handleCancel = () => { @@ -358,11 +365,22 @@ const handleCancel = () => { resetForm(); }; +watch( + () => props.loading, + newLoading => { + if (newLoading) { + localLoading.value = false; + } + } +); + watch( () => props.visible, newVisible => { if (newVisible) { initForm(); + } else { + localLoading.value = false; } }, { immediate: false } diff --git a/frontend/src/views/system/map/components/LegendData/index.vue b/frontend/src/views/system/map/components/LegendData/index.vue index 59deedd4..9738c1a6 100644 --- a/frontend/src/views/system/map/components/LegendData/index.vue +++ b/frontend/src/views/system/map/components/LegendData/index.vue @@ -66,6 +66,7 @@ :LayerOptions="LayerOptions" v-model:visible="editModalVisible" :initial-values="currentRecord" + :loading="editLoading" @cancel="editModalCancel" @ok="handleEditSubmit" /> @@ -249,6 +250,7 @@ const LegendOptions = ref([]); const LayerOptions = ref([]); const currentRecord = ref(null); const editModalVisible = ref(false); +const editLoading = ref(false); const handleAdd = () => { currentRecord.value = null; ensureOptionsLoaded().then(() => { @@ -401,11 +403,16 @@ const editModalCancel = () => { // 表单提交 const handleEditSubmit = async (values: any, type: string) => { + editLoading.value = true; try { let res = await saveMapLegend({ ...currentRecord.value, ...values }); + if (res.code == 1) { + message.error('保存失败'); + return; + } if (type === 'switch') { message.success('修改状态成功'); } else { @@ -421,6 +428,8 @@ const handleEditSubmit = async (values: any, type: string) => { } editModalVisible.value = false; return; + } finally { + editLoading.value = false; } }; const initOption = () => { diff --git a/frontend/src/views/system/pushManagement/components/ConfigManagement/ConfigManagementForm.vue b/frontend/src/views/system/pushManagement/components/ConfigManagement/ConfigManagementForm.vue new file mode 100644 index 00000000..4835ade9 --- /dev/null +++ b/frontend/src/views/system/pushManagement/components/ConfigManagement/ConfigManagementForm.vue @@ -0,0 +1,784 @@ + + + + + diff --git a/frontend/src/views/system/pushManagement/components/ConfigManagement/ConfigManagementSearch.vue b/frontend/src/views/system/pushManagement/components/ConfigManagement/ConfigManagementSearch.vue new file mode 100644 index 00000000..c10b93c8 --- /dev/null +++ b/frontend/src/views/system/pushManagement/components/ConfigManagement/ConfigManagementSearch.vue @@ -0,0 +1,75 @@ + + + + diff --git a/frontend/src/views/system/pushManagement/components/ConfigManagement/index.vue b/frontend/src/views/system/pushManagement/components/ConfigManagement/index.vue new file mode 100644 index 00000000..64294dbc --- /dev/null +++ b/frontend/src/views/system/pushManagement/components/ConfigManagement/index.vue @@ -0,0 +1,228 @@ + + + + + + diff --git a/frontend/src/views/system/pushManagement/components/HistoryManagement/LayerManagementForm.vue b/frontend/src/views/system/pushManagement/components/HistoryManagement/LayerManagementForm.vue new file mode 100644 index 00000000..caa405e3 --- /dev/null +++ b/frontend/src/views/system/pushManagement/components/HistoryManagement/LayerManagementForm.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/frontend/src/views/system/pushManagement/components/HistoryManagement/LayerManagementSearch.vue b/frontend/src/views/system/pushManagement/components/HistoryManagement/LayerManagementSearch.vue new file mode 100644 index 00000000..40cb5033 --- /dev/null +++ b/frontend/src/views/system/pushManagement/components/HistoryManagement/LayerManagementSearch.vue @@ -0,0 +1,69 @@ + + + + diff --git a/frontend/src/views/system/pushManagement/components/HistoryManagement/index.vue b/frontend/src/views/system/pushManagement/components/HistoryManagement/index.vue new file mode 100644 index 00000000..372b78b1 --- /dev/null +++ b/frontend/src/views/system/pushManagement/components/HistoryManagement/index.vue @@ -0,0 +1,358 @@ + + + + + + diff --git a/frontend/src/views/system/pushManagement/index.vue b/frontend/src/views/system/pushManagement/index.vue new file mode 100644 index 00000000..c630490d --- /dev/null +++ b/frontend/src/views/system/pushManagement/index.vue @@ -0,0 +1,89 @@ + + + + +