Blame view

src/pages/pms/storage/partShop/components/UploadExcel.tsx 3.74 KB
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>
    );
  }