Commit d85bceebf80036279c9f6755cc61608a9873ba6d

Authored by ww
1 parent 56c76212

fix: 修复设备导入使用.csv格式存在问题

... ... @@ -41,6 +41,8 @@
41 41 showIndexColumn: false,
42 42 columns: columnTypeSchema,
43 43 resizeHeightOffset: -300,
  44 + maxHeight: 300,
  45 + canResize: false,
44 46 });
45 47
46 48 const parseValueToTableData = () => {
... ... @@ -54,7 +56,7 @@
54 56 const dataSource = header.map((columnKey, index) => {
55 57 return {
56 58 [ColumnFileEnum.EXAMPLE_VALUE]: exampleRow[columnKey],
57   - [ColumnFileEnum.TYPE]: getColumnType(index),
  59 + [ColumnFileEnum.TYPE]: index < 2 ? getColumnType(index) : null,
58 60 [ColumnFileEnum.KEY]: columnKey,
59 61 id: buildUUID(),
60 62 } as ColumnDataRecord;
... ... @@ -136,6 +138,8 @@
136 138 :disabled="getColumnNeedDisabled(index)"
137 139 :options="columnTypeOptions"
138 140 :dropdown-match-select-width="false"
  141 + allow-clear
  142 + placeholder="请选择列类型"
139 143 />
140 144 </section>
141 145 </template>
... ... @@ -165,11 +169,11 @@
165 169 .ant-select,
166 170 .ant-input,
167 171 .ant-select-selector {
168   - height: 22px !important;
  172 + height: 30px !important;
169 173 }
170 174
171 175 .ant-select-selection-item {
172   - line-height: 22px !important;
  176 + line-height: 30px !important;
173 177 }
174 178 }
175 179 </style>
... ...
... ... @@ -54,7 +54,7 @@
54 54 try {
55 55 const data = (event.target as FileReader).result as string;
56 56
57   - const result = XLSX.read(data, { type: 'string' });
  57 + const result = XLSX.read(data, { type: 'binary' });
58 58
59 59 const sheetName = result.SheetNames.at(0);
60 60 const workbook = result.Sheets;
... ... @@ -72,7 +72,7 @@
72 72 resolve({ header, content });
73 73 } catch (error) {
74 74 const { createMessage } = useMessage();
75   - createMessage.error('请检查csv文件是否正确');
  75 + createMessage.error('请检查xlsx文件是否正确');
76 76 throw error;
77 77 }
78 78 };
... ... @@ -80,7 +80,7 @@
80 80 fileReader.onerror = () => {
81 81 reject(false);
82 82 };
83   - fileReader.readAsText(file, 'GB2312');
  83 + fileReader.readAsBinaryString(file);
84 84 });
85 85 };
86 86
... ... @@ -120,7 +120,7 @@
120 120 <Upload.Dragger
121 121 :fileList="fileList"
122 122 :customRequest="handleParseFile"
123   - accept=".csv"
  123 + accept=".xlsx"
124 124 name="file"
125 125 :remove="handleRemove"
126 126 >
... ...
... ... @@ -8,6 +8,7 @@ import { FormSchema } from '/@/components/Form';
8 8 import { BasicColumn } from '/@/components/Table';
9 9 import { copyTransFun } from '/@/utils/fnUtils';
10 10 import { TransportTypeEnum } from '/@/views/device/profiles/components/TransportDescript/const';
  11 +import XLSX from 'xlsx';
11 12
12 13 export enum FieldsEnum {
13 14 ORGANIZATION_ID = 'organizationId',
... ... @@ -310,6 +311,8 @@ export const generateColumnTypeOptions = () => {
310 311 };
311 312 options.push(credentialsOption);
312 313
  314 + options.push({ label: '设备名称', value: ColumTypeEnum.NAME });
  315 +
313 316 return options;
314 317 };
315 318
... ... @@ -332,19 +335,13 @@ export const columnTypeSchema: BasicColumn[] = [
332 335 },
333 336 ];
334 337
335   -export const csvTemplate = `设备名称,凭证账号,凭证密码
336   -温湿度设备,admin,123456
337   -`;
  338 +export function exportTemplate() {
  339 + const book = XLSX.utils.book_new();
  340 + const sheet = XLSX.utils.aoa_to_sheet([
  341 + ['设备名称', '访问令牌'],
  342 + ['温湿度设备', 'admin'],
  343 + ]);
338 344
339   -export const downloadFile = (data: string, fileName: string, type: string, ext: string) => {
340   - const blob = new Blob([data], { type: type });
341   - const objectURL = URL.createObjectURL(blob);
342   - const element = document.createElement('a');
343   - element.href = objectURL;
344   - element.download = `${fileName}.${ext}`;
345   - element.style.display = 'none';
346   - document.body.appendChild(element);
347   - element.click();
348   - element.remove();
349   - URL.revokeObjectURL(objectURL);
350   -};
  345 + XLSX.utils.book_append_sheet(book, sheet, '设备导入模版');
  346 + XLSX.writeFile(book, 'template.xlsx', { bookType: 'xlsx' });
  347 +}
... ...
... ... @@ -9,7 +9,7 @@
9 9 import CreateEntity from './CreateEntity.vue';
10 10 import CompleteResult from './CompleteResult.vue';
11 11 import { ImportDeviceResponse } from '/@/api/device/model/batchImportModel';
12   - import { csvTemplate, downloadFile } from './config';
  12 + import { exportTemplate } from './config';
13 13
14 14 const emit = defineEmits(['importFinally']);
15 15
... ... @@ -79,7 +79,8 @@
79 79 };
80 80
81 81 const handleTemplateDownload = () => {
82   - downloadFile(csvTemplate, 'template', 'text/csv', 'csv');
  82 + exportTemplate();
  83 + // downloadFile(csvTemplate, 'template', 'text/csv,chartset=UTF-8', 'csv');
83 84 };
84 85 </script>
85 86
... ... @@ -142,7 +143,7 @@
142 143 </Steps.Step>
143 144 </Steps>
144 145 <Tooltip
145   - title="模板表头的第一列为设备名称,且不能重复,如需预置访问凭证(ACCESS_TOKEN、MQTT client ID、MQTT user name、MQTT password)添加新的列即可。例如:凭证账号,凭证密码"
  146 + title="注意:模板表头的第一列为设备名称,第二列为访问令牌。新增列时,名称和访问令牌不能重复。下载的模板建议使用文本打开,如使用wps打开请另外为新的csv文件。"
146 147 >
147 148 <Button
148 149 type="text"
... ...