630dfca7
baiyun
优化导入库存和废弃代码删除
|
1
2
|
import React, { useState } from 'react';
import { InboxOutlined } from '@ant-design/icons';
|
5244fa25
baiyun
fix
|
3
|
import { Button, Modal, Upload, message, Switch } from 'antd';
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
4
|
import { useStore } from "@/pages/pms/storage/partShop";
|
d9dba536
by1642146903
库存导入优化
|
5
6
7
|
import {importStockFix, shopImport} from './api';
import _ from 'lodash';
import type { UploadFile, UploadProps } from 'antd/es/upload/interface';
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
8
|
|
e9f0db2a
by1642146903
优化维护接口
|
9
10
11
|
interface Props{
stock?:boolean
}
|
d9dba536
by1642146903
库存导入优化
|
12
13
14
15
|
const apiObj: {[key: number]: any} = {
1: importStockFix,
2: shopImport
};
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
16
|
const Dragger = Upload.Dragger;
|
e9f0db2a
by1642146903
优化维护接口
|
17
|
export default function UploadExcel(props: Props) {
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
18
|
const { importVisible, setImportVisible, override, setOverride } = useStore();
|
d9dba536
by1642146903
库存导入优化
|
19
|
const [fileList, setFileList] = useState<UploadFile[]>([]);
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
20
|
const [uploadResult, setUploadResult] = useState<any>();
|
d9dba536
by1642146903
库存导入优化
|
21
|
const [confirmLoading, setConfirmLoading] = useState(false);
|
e9f0db2a
by1642146903
优化维护接口
|
22
|
const {stock} = props;
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
23
24
|
function beforeUpload(file: any) {
|
d9dba536
by1642146903
库存导入优化
|
25
|
setFileList([...fileList, file]);
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
26
27
28
29
|
if (override == null) {
message.error('请选择是否覆盖数据');
return false;
}
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
30
31
32
33
34
|
const isLt2M = file.size / 1024 / 1024 < 20;
if (!isLt2M) {
message.error('文件不能超过20MB!');
return false;
}
|
d9dba536
by1642146903
库存导入优化
|
35
|
return false;
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
36
37
|
}
|
d9dba536
by1642146903
库存导入优化
|
38
39
40
41
|
function submit() {
if (override == null) {
message.error('请选择是否覆盖数据');
return;
|
e9f0db2a
by1642146903
优化维护接口
|
42
|
}
|
d9dba536
by1642146903
库存导入优化
|
43
44
|
setConfirmLoading(true);
const type = stock ? 1 : 2;
|
03416d33
莫红玲
调运库存导入结果展示
|
45
|
apiObj[type]({file: fileList[0], override}).then((res) => {
|
d9dba536
by1642146903
库存导入优化
|
46
|
setConfirmLoading(false);
|
03416d33
莫红玲
调运库存导入结果展示
|
47
|
setUploadResult(res.data)
|
d9dba536
by1642146903
库存导入优化
|
48
49
50
51
52
|
message.success('导入成功');
}).catch((e: any) => {
setConfirmLoading(false);
message.error(e.message);
});
|
e9f0db2a
by1642146903
优化维护接口
|
53
|
}
|
d9dba536
by1642146903
库存导入优化
|
54
55
56
57
58
59
60
61
62
63
64
|
const uploadProps: UploadProps = {
onRemove: (file) => {
const index = fileList.indexOf(file);
const newFileList = fileList.slice();
newFileList.splice(index, 1);
setFileList(newFileList);
},
beforeUpload,
fileList,
};
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
65
66
67
68
|
return (
<Modal
visible={importVisible}
maskClosable={false}
|
e9f0db2a
by1642146903
优化维护接口
|
69
|
title={uploadResult ? '导入结果' : stock ? '调运库存导入': '文件导入'}
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
70
71
72
|
onCancel={() => { setImportVisible(false); setUploadResult(null); }}
footer={
<div>
|
d9dba536
by1642146903
库存导入优化
|
73
74
75
76
77
78
|
<Button
loading={confirmLoading}
onClick={() => {
setImportVisible(false);
setUploadResult(null);
}}
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
79
80
81
|
>
取消
</Button>
|
d9dba536
by1642146903
库存导入优化
|
82
|
<Button type="primary" onClick={_.throttle(submit, 3000)} disabled={!fileList.length} loading={confirmLoading}>确定</Button>
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
83
84
85
|
</div>
}
>
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
86
|
{!uploadResult ? (
|
4a34f2e3
baiyun
配件类型
|
87
88
89
90
91
|
<div>
<div style={{marginBottom: 20}}>
<span style={{marginRight: 20, color: '#333', fontSize: 14}}>是否覆盖数据:</span>
<Switch defaultChecked={override} onChange={(checked) => setOverride(checked)} />
</div>
|
e9f0db2a
by1642146903
优化维护接口
|
92
|
{stock ? (
|
d9dba536
by1642146903
库存导入优化
|
93
|
<Dragger {...uploadProps}>
|
e9f0db2a
by1642146903
优化维护接口
|
94
95
96
97
98
99
|
<p className="ant-upload-drag-icon">
<InboxOutlined />
</p>
<p className="ant-upload-text">将文件拖到此处上传</p>
</Dragger>
) : (
|
d9dba536
by1642146903
库存导入优化
|
100
|
<Dragger {...uploadProps}>
|
e9f0db2a
by1642146903
优化维护接口
|
101
102
103
104
105
106
|
<p className="ant-upload-drag-icon">
<InboxOutlined />
</p>
<p className="ant-upload-text">将文件拖到此处上传</p>
</Dragger>
)}
|
4a34f2e3
baiyun
配件类型
|
107
|
</div>
|
630dfca7
baiyun
优化导入库存和废弃代码删除
|
108
109
110
111
112
113
114
115
116
117
118
|
) : (
<div>
<p>数据总条数:{uploadResult.totalCount}条</p>
<p>成功条数:{uploadResult.successCount}条</p>
<p>失败条数:{uploadResult.failedCount}条</p>
{uploadResult.filePath ? (<a href={uploadResult.filePath} target="_blank" rel="noopener noreferrer">下载错误文件</a>):null}
</div>
)}
</Modal>
);
}
|