diff --git a/src/api/device.ts b/src/api/device.ts index 718e2ff..3ebbc30 100644 --- a/src/api/device.ts +++ b/src/api/device.ts @@ -198,6 +198,19 @@ export function unbindSmartDevice(data) { }) } +// 批量导入绑定智能装备(上传 Excel) +// 上传文件必须用 data(FormData)且带 multipart/form-data 头 +export function importBindDevices(data) { + return request({ + url: '/iot/deviceRunParam/importData', + method: 'post', + data, + headers: { + 'Content-Type': 'multipart/form-data' + } + }) +} + // 直播心跳 export function postLiveHeartbeat(data) { diff --git a/src/components/Map.jsx b/src/components/Map.jsx index b563c58..a24eba2 100644 --- a/src/components/Map.jsx +++ b/src/components/Map.jsx @@ -761,7 +761,7 @@ const CesiumMap = React.forwardRef(({ ifClear, ifClearPlanLine, ifClearNavLine, } } - function flyToLayer(layerIdentifier, baseUrl, flyHeight = 1000) { + function flyToLayer(layerIdentifier, baseUrl, flyHeight = 100) { //console.log('开始获取图层范围', layerIdentifier); const url = `${baseUrl}/wms?service=WMS&version=1.1.1&request=GetCapabilities`; @@ -951,7 +951,7 @@ const CesiumMap = React.forwardRef(({ ifClear, ifClearPlanLine, ifClearNavLine, // 根据场站映射图层定位地图 useEffect(() => { if (!mapLayer || !viewerRef.current) return; - flyToLayer(mapLayer, envConfig.geoserver_url, 1000); + flyToLayer(mapLayer, envConfig.geoserver_url, 100); }, [mapLayer]); diff --git a/src/components/SystemSetting/SmartDeviceManagement.tsx b/src/components/SystemSetting/SmartDeviceManagement.tsx index adc8936..1525efd 100644 --- a/src/components/SystemSetting/SmartDeviceManagement.tsx +++ b/src/components/SystemSetting/SmartDeviceManagement.tsx @@ -14,12 +14,14 @@ import { App, Card, InputNumber, + Upload, } from 'antd'; const { Text } = Typography; import { ReloadOutlined, LinkOutlined, DisconnectOutlined, + UploadOutlined, EditOutlined, } from '@ant-design/icons'; @@ -27,6 +29,7 @@ import { getAllDevice, bindSmartDevice, unbindSmartDevice, + importBindDevices, getDeviceAuth, hasPermission, } from '@/api/device'; @@ -261,6 +264,28 @@ export default function SmartDeviceManagement({ }, 0); }; + // 上传 Excel 批量导入绑定装备 + const handleImportDevices = async (options: any) => { + const { file, onSuccess, onError } = options; + try { + const formData = new FormData(); + formData.append('file', file); + const res = await importBindDevices(formData); + if (res.code == 200 && res.data == true) { + utils.message.success(res.msg || t('systemSetting.importSuccess')); + onSuccess?.(res); + fetchSmartList(); + onAllDataNeedRefresh?.(); + } else { + utils.message.error(res.msg || t('systemSetting.importFail')); + onError?.(new Error(res.msg || 'import failed')); + } + } catch (err) { + utils.message.error(t('systemSetting.importFail')); + onError?.(err); + } + }; + const handleBindSmart = async (values) => { try { const payload = { @@ -386,6 +411,9 @@ export default function SmartDeviceManagement({ /> + + + diff --git a/src/locales/en/index.ts b/src/locales/en/index.ts index c00af5a..9bd367c 100644 --- a/src/locales/en/index.ts +++ b/src/locales/en/index.ts @@ -3132,6 +3132,8 @@ const en = { s92: 'nickname', + importSuccess: 'Import Success', + importFail: 'Import Failed', successFixed22: 'Bind Success ', device2: 'No valid Device was selected. Unbinding is not possible.', diff --git a/src/locales/zh/index.ts b/src/locales/zh/index.ts index 392c224..e7b60ba 100644 --- a/src/locales/zh/index.ts +++ b/src/locales/zh/index.ts @@ -3167,6 +3167,8 @@ const zh = { s92: '昵称', + importSuccess: '导入成功', + importFail: '导入失败', successFixed22: '绑定成功', device2: '未选择有效设备,无法解绑',