From 00a30b9dace64d1c54afcaa08370ecbbf367c3c4 Mon Sep 17 00:00:00 2001
From: mmc <1556375442@qq.com>
Date: Thu, 3 Sep 2026 11:09:42 +0800
Subject: [PATCH] =?UTF-8?q?excel=E6=89=B9=E9=87=8F=E5=AF=BC=E5=85=A5?=
=?UTF-8?q?=E8=AE=BE=E5=A4=87=20=E9=85=8D=E7=BD=AE=E6=88=90=E5=8A=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/device.ts | 13 +++++++++
src/components/Map.jsx | 4 +--
.../SystemSetting/SmartDeviceManagement.tsx | 28 +++++++++++++++++++
src/locales/en/index.ts | 2 ++
src/locales/zh/index.ts | 2 ++
5 files changed, 47 insertions(+), 2 deletions(-)
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({
/>
} onClick={() => setSmartParams({ pageNum: 1, pageSize: 10, serialNumber: '' })}>{t('common.reset')}
} onClick={openBindSmartModal}>{t('systemSetting.equipmentFixed22')}
+
+ }>{t('common.import')}
+
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: '未选择有效设备,无法解绑',