From 41b8aba2c796e8c864d5d5c0ef5c87115fa40d93 Mon Sep 17 00:00:00 2001 From: zhang1106 <849185023@qq.com> Date: Fri, 17 Apr 2026 15:54:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=AE=BE=E5=A4=87=E5=AF=BC=E5=85=A5):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=A8=A1=E6=9D=BF=E4=B8=8B=E8=BD=BD=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=B9=B6=E4=BC=98=E5=8C=96=E9=94=99=E8=AF=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/device/ImportModal.jsx | 55 +++++++++++++++---- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/frontend/src/components/device/ImportModal.jsx b/frontend/src/components/device/ImportModal.jsx index 4cea266..83102f8 100644 --- a/frontend/src/components/device/ImportModal.jsx +++ b/frontend/src/components/device/ImportModal.jsx @@ -171,6 +171,38 @@ const ImportModal = ({ visible, deviceFields, onImport, onCancel }) => { return ''; }; + const handleDownloadTemplate = async () => { + try { + const token = localStorage.getItem('token'); + const response = await axios.get('/api/devices/import-template', { + responseType: 'blob', + headers: token ? { Authorization: `Bearer ${token}` } : {}, + }); + const blob = new Blob([response.data], { type: 'text/csv; charset=gbk' }); + const url = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = '设备导入模板.csv'; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + window.URL.revokeObjectURL(url); + } catch (error) { + console.error('下载模板失败:', error); + if (error.response?.data) { + const text = await error.response.data.text(); + try { + const json = JSON.parse(text); + message.error(json.message || '下载模板失败'); + } catch { + message.error('下载模板失败'); + } + } else { + message.error('下载模板失败'); + } + } + }; + const renderUploadStep = () => (
请上传CSV格式的设备数据文件
@@ -222,18 +254,17 @@ const ImportModal = ({ visible, deviceFields, onImport, onCancel }) => {