修改sha1字段为hash

This commit is contained in:
wangsongsole 2022-07-29 17:34:04 +08:00
parent fce9d9898a
commit 9097e7775c
2 changed files with 185 additions and 189 deletions

View File

@ -1,154 +1,154 @@
import React, { useState } from "react"; import React, { useState } from 'react'
import { Button, Icon, BlockLoading, Notify, Grid } from "zent"; import { Button, Icon, BlockLoading, Notify, Grid } from 'zent'
import { bachUploadAll, handelResponse } from "../../assets/api.js"; import { bachUploadAll, handelResponse } from '../../assets/api.js'
import "./style.less"; import './style.less'
const columns = [ const columns = [
{ {
title: "行号", title: '行号',
name: "id", name: 'id'
}, },
{ {
title: "key", title: 'key',
name: "key", name: 'key'
}, },
{ {
title: "错误原因", title: '错误原因',
name: "msg", name: 'msg'
}, }
]; ]
const UseUploadExcel = (props) => { const UseUploadExcel = (props) => {
const { title = "提示", onClose, onImport, visible = false, url } = props; const { title = '提示', onClose, onImport, visible = false, url } = props
const [fileState, setFilesState] = useState(null); // const [fileState, setFilesState] = useState(null) //
const [filesName, setFilesName] = useState(""); // const [filesName, setFilesName] = useState('') //
const [filesTip, setFilesTip] = useState(2); // tip 0 1 200 const [filesTip, setFilesTip] = useState(2) // tip 0 1 200
const [loading, setLoading] = useState(false); // loading const [loading, setLoading] = useState(false) // loading
const [sha1, setSha1] = useState(""); // const [hash, setHash] = useState('') //
const [disabledSureBtn, setDisabledSureBtn] = useState(true); // const [disabledSureBtn, setDisabledSureBtn] = useState(true) //
const [partSuccessTag, setPartSuccessTag] = useState(false); // const [partSuccessTag, setPartSuccessTag] = useState(false) //
const [showUpType, setShowUpType] = useState(false); // false true const [showUpType, setShowUpType] = useState(false) // false true
const [totalData, setTotalData] = useState(0); const [totalData, setTotalData] = useState(0)
const [errCoun, setErrCoun] = useState(0); const [errCoun, setErrCoun] = useState(0)
const [tableData, setTableData] = useState([]); const [tableData, setTableData] = useState([])
const bachUploadState_200 = (res) => { const bachUploadState_200 = (res) => {
setFilesTip(200); setFilesTip(200)
setSha1(res.data.sha1); setHash(res.data.hash)
setDisabledSureBtn(false); setDisabledSureBtn(false)
console.log("res => 成功", res); console.log('res => 成功', res)
}; }
const bachUploadState_0 = (res) => { const bachUploadState_0 = (res) => {
setFilesTip(0); setFilesTip(0)
}; }
const erObj = (data) => { const erObj = (data) => {
let msgObj = ""; let msgObj = ''
for (let key in data) { for (let key in data) {
msgObj += data[key] + " "; msgObj += data[key] + ' '
} }
return msgObj; return msgObj
}; }
const bachUploadState_1 = (res) => { const bachUploadState_1 = (res) => {
setPartSuccessTag(true); setPartSuccessTag(true)
let rowError = res.data.rowError; let rowError = res.data.rowError
setTotalData(rowError.total); setTotalData(rowError.total)
setErrCoun(rowError.error_count); setErrCoun(rowError.error_count)
setSha1(rowError.sha1); setHash(rowError.hash)
let errArr = []; let errArr = []
for (let key in rowError.error) { for (let key in rowError.error) {
errArr.push(rowError.error[key]); errArr.push(rowError.error[key])
} }
errArr = errArr.map((item, index) => { errArr = errArr.map((item, index) => {
return { return {
key: item.key, key: item.key,
id: index + 1, id: index + 1,
msg: erObj(item.msg), msg: erObj(item.msg)
}; }
}); })
setTableData(errArr); setTableData(errArr)
}; }
/** /**
* 文件后端解析 * 文件后端解析
*/ */
const excelParseFun = async (file) => { const excelParseFun = async (file) => {
setLoading(true); setLoading(true)
let formdata = new FormData(); let formdata = new FormData()
formdata.append("file", file); formdata.append('file', file)
bachUploadAll(url, formdata).then((res) => { bachUploadAll(url, formdata).then((res) => {
setLoading(false); setLoading(false)
if (res.code === 200 || res.code === 0 || res.code === 1) { if (res.code === 200 || res.code === 0 || res.code === 1) {
switch (res.code) { switch (res.code) {
case 200: case 200:
bachUploadState_200(res); bachUploadState_200(res)
return; return
case 0: case 0:
bachUploadState_0(res); bachUploadState_0(res)
return; return
case 1: case 1:
bachUploadState_1(res); bachUploadState_1(res)
return; return
default: default:
return; return
} }
} else { } else {
console.log("res =>", res); console.log('res =>', res)
Notify.error(res.message); Notify.error(res.message)
setFilesTip(0); setFilesTip(0)
} }
}); })
}; }
/** /**
* input 文件改变 * input 文件改变
* @param {file} e * @param {file} e
*/ */
const fileChange = (e) => { const fileChange = (e) => {
let my_file = e.target.files[0]; let my_file = e.target.files[0]
setFilesState(my_file); setFilesState(my_file)
setFilesName(my_file.name); setFilesName(my_file.name)
setShowUpType(true); setShowUpType(true)
excelParseFun(my_file); // excelParseFun(my_file) //
console.log("file =>", my_file); console.log('file =>', my_file)
}; }
/** /**
* 表格文件模版下载 * 表格文件模版下载
*/ */
const downloadMBExcel = () => { const downloadMBExcel = () => {
window.location.href = window.location.href =
"http://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/key%E6%A8%A1%E7%89%88.xlsx"; 'http://lsxdemall.oss-cn-beijing.aliyuncs.com/MarketingSystem/key%E6%A8%A1%E7%89%88.xlsx'
}; }
/** /**
* 确定导入 * 确定导入
*/ */
const importBtn = () => { const importBtn = () => {
if (sha1 !== "") { if (hash !== '') {
bachOnClose(); bachOnClose()
onImport(sha1); onImport(hash)
} }
}; }
/** /**
* 重新上传 * 重新上传
*/ */
const resetUpload = () => { const resetUpload = () => {
setPartSuccessTag(false); setPartSuccessTag(false)
setFilesTip(0); setFilesTip(0)
}; }
const bachOnClose = () => { const bachOnClose = () => {
setFilesTip(2); setFilesTip(2)
setPartSuccessTag(false); setPartSuccessTag(false)
setShowUpType(false); setShowUpType(false)
onClose(); onClose()
}; }
/** /**
* 弹窗 顶部信息 * 弹窗 顶部信息
@ -157,23 +157,23 @@ const UseUploadExcel = (props) => {
const uploadTop = () => { const uploadTop = () => {
return ( return (
<div> <div>
<div className="step-bar"> <div className='step-bar'>
<div className="step-group"> <div className='step-group'>
<div className="step-code active">1</div> <div className='step-code active'>1</div>
<span className="step-label active">上传文件</span> <span className='step-label active'>上传文件</span>
</div> </div>
<div className="step-center"> <div className='step-center'>
<div className="step-line"></div> <div className='step-line'></div>
</div> </div>
<div className="step-group"> <div className='step-group'>
<div className="step-code">2</div> <div className='step-code'>2</div>
<span className="step-label">导入完成</span> <span className='step-label'>导入完成</span>
</div> </div>
</div> </div>
<div className="upload-panel1"> <div className='upload-panel1'>
<div className="upload-label">直接上传</div> <div className='upload-label'>直接上传</div>
<div className="upload-info"> <div className='upload-info'>
<div> - 支持文件类型xlsxlsxcsv</div> <div> - 支持文件类型xlsxlsxcsv</div>
<div> <div>
- 支持所有基础字段的导入一次至多导入 10000 - 支持所有基础字段的导入一次至多导入 10000
@ -182,8 +182,8 @@ const UseUploadExcel = (props) => {
</div> </div>
</div> </div>
</div> </div>
); )
}; }
/** /**
* 文件上传 * 文件上传
@ -191,25 +191,24 @@ const UseUploadExcel = (props) => {
*/ */
const uploadExcel = () => { const uploadExcel = () => {
return ( return (
<div className="upload-excel-01"> <div className='upload-excel-01'>
<input <input
type="file" type='file'
accept=".xls,.xlsx,.csv" accept='.xls,.xlsx,.csv'
className="upload-input" className='upload-input'
onChange={(e) => fileChange(e)} onChange={(e) => fileChange(e)}
/> />
<Button <Button
style={{ style={{
background: "#1890ff", background: '#1890ff',
color: "#FFFFFF", color: '#FFFFFF',
border: "none", border: 'none'
}} }}>
>
上传文件 上传文件
</Button> </Button>
</div> </div>
); )
}; }
/** /**
* 解析 tip * 解析 tip
@ -217,20 +216,20 @@ const UseUploadExcel = (props) => {
*/ */
const tipSuccess = () => { const tipSuccess = () => {
return ( return (
<div className="upload-success"> <div className='upload-success'>
<Icon type="check-circle" className="success-icon" /> <Icon type='check-circle' className='success-icon' />
<span>文件解析成功 点击 "确定导入" 即可导入</span> <span>文件解析成功 点击 "确定导入" 即可导入</span>
</div> </div>
); )
}; }
const tipErr = () => { const tipErr = () => {
return ( return (
<div className="upload-error"> <div className='upload-error'>
<Icon type="error-circle" className="error-icon" /> <Icon type='error-circle' className='error-icon' />
<span>文件解析失败, 请查看导入规则并更新文件</span> <span>文件解析失败, 请查看导入规则并更新文件</span>
</div> </div>
); )
}; }
/** /**
* 文件上传 * 文件上传
@ -238,20 +237,20 @@ const UseUploadExcel = (props) => {
*/ */
const upFilesExcel = () => { const upFilesExcel = () => {
return ( return (
<div className="up-files-excel"> <div className='up-files-excel'>
<div className="user-file-box"> <div className='user-file-box'>
<p className="user-file-name"> <p className='user-file-name'>
<Icon type="text-guide-o" /> <Icon type='text-guide-o' />
{filesName} {filesName}
</p> </p>
<div className="file-update-box"> <div className='file-update-box'>
<input <input
type="file" type='file'
accept=".xls,.xlsx,.csv" accept='.xls,.xlsx,.csv'
className="upload-input1" className='upload-input1'
onChange={(e) => fileChange(e)} onChange={(e) => fileChange(e)}
/> />
<Icon type="up-circle-o" /> <Icon type='up-circle-o' />
<span>更新文件</span> <span>更新文件</span>
</div> </div>
</div> </div>
@ -259,16 +258,16 @@ const UseUploadExcel = (props) => {
{(() => { {(() => {
switch (filesTip) { switch (filesTip) {
case 0: case 0:
return tipErr(); return tipErr()
case 200: case 200:
return tipSuccess(); return tipSuccess()
default: default:
return; return
} }
})()} })()}
</div> </div>
); )
}; }
/** /**
* 底部 * 底部
@ -276,43 +275,41 @@ const UseUploadExcel = (props) => {
*/ */
const uploadFooter = () => { const uploadFooter = () => {
return ( return (
<div className="upload-panel1"> <div className='upload-panel1'>
<div className="upload-label">下载模板并填写后上传</div> <div className='upload-label'>下载模板并填写后上传</div>
<div className="upload-info"> <div className='upload-info'>
<div> <div>
请先下载数字世界营销管理系统_keys_模板并按照模板填写后再上传 请先下载数字世界营销管理系统_keys_模板并按照模板填写后再上传
</div> </div>
</div> </div>
<Button <Button
type="default" type='default'
className="btn-upload1" className='btn-upload1'
onClick={() => downloadMBExcel()} onClick={() => downloadMBExcel()}>
>
下载模板 下载模板
</Button> </Button>
<div className="btn-group"> <div className='btn-group'>
<Button type="default" onClick={() => bachOnClose()}> <Button type='default' onClick={() => bachOnClose()}>
取消 取消
</Button> </Button>
<Button <Button
type="primary" type='primary'
disabled={disabledSureBtn} disabled={disabledSureBtn}
onClick={(e) => { onClick={(e) => {
importBtn(e); importBtn(e)
}} }}
style={{ style={{
background: "#1890ff", background: '#1890ff',
color: "#FFFFFF", color: '#FFFFFF',
border: "none", border: 'none'
}} }}>
>
确定导入 确定导入
</Button> </Button>
</div> </div>
</div> </div>
); )
}; }
/** /**
* 全部错误和全部正确 * 全部错误和全部正确
@ -324,8 +321,8 @@ const UseUploadExcel = (props) => {
{showUpType ? upFilesExcel() : uploadExcel()} {showUpType ? upFilesExcel() : uploadExcel()}
{uploadFooter()} {uploadFooter()}
</div> </div>
); )
}; }
/** /**
* 部分正确 * 部分正确
@ -333,64 +330,62 @@ const UseUploadExcel = (props) => {
const partSuccess = () => { const partSuccess = () => {
return ( return (
<div> <div>
<div className="file-upload-tip"> <div className='file-upload-tip'>
文件上传成功. {totalData} 条手机号,其中 {totalData - errCoun} 文件上传成功. {totalData} 条手机号,其中 {totalData - errCoun}
条可成功导入 条可成功导入
</div> </div>
<div className="file-errmsg1"> <div className='file-errmsg1'>
发现以下 {errCoun} 条不符合要求,将不会被导入 发现以下 {errCoun} 条不符合要求,将不会被导入
</div> </div>
<div className="gridpanel1"> <div className='gridpanel1'>
<Grid <Grid
columns={columns} columns={columns}
datasets={tableData} datasets={tableData}
scroll={{ y: 250 }} scroll={{ y: 250 }}
size="large" size='large'
/> />
</div> </div>
<div className="foot-bar"> <div className='foot-bar'>
<div className="btn-group"> <div className='btn-group'>
<Button <Button
type="default" type='default'
onClick={(e) => { onClick={(e) => {
resetUpload(); resetUpload()
}} }}>
>
重新上传 重新上传
</Button> </Button>
<Button <Button
type="primary" type='primary'
onClick={(e) => { onClick={(e) => {
importBtn(e); importBtn(e)
}} }}
style={{ style={{
background: "#1890ff", background: '#1890ff',
color: "#FFFFFF", color: '#FFFFFF',
border: "none", border: 'none'
}} }}>
>
确定导入 确定导入
</Button> </Button>
</div> </div>
</div> </div>
</div> </div>
); )
}; }
return ( return (
<div> <div>
{visible ? ( {visible ? (
<div> <div>
<div className="modal"></div> <div className='modal'></div>
<div className="import-excel" style={{ height: "auto" }}> <div className='import-excel' style={{ height: 'auto' }}>
<BlockLoading loading={loading} iconText="解析中..." icon="circle"> <BlockLoading loading={loading} iconText='解析中...' icon='circle'>
<div className="import-header"> <div className='import-header'>
<div className="import-title">{title}</div> <div className='import-title'>{title}</div>
<Icon <Icon
type="close" type='close'
className="import-close" className='import-close'
onClick={() => bachOnClose()} onClick={() => bachOnClose()}
/> />
</div> </div>
@ -400,7 +395,7 @@ const UseUploadExcel = (props) => {
</div> </div>
) : null} ) : null}
</div> </div>
); )
}; }
export default UseUploadExcel; export default UseUploadExcel

View File

@ -193,17 +193,18 @@ export default class acclist extends React.Component {
} }
} }
iptsureFn(sha1) { iptsureFn(hash) {
let status = this.state.status > 0 ? this.state.status : null let status = this.state.status > 0 ? this.state.status : null
this.setState({ page: 1 }) this.setState({ page: 1, limit: 10 })
this.setState({ limit: 10 })
let data = { let data = {
page: 1, page: 1,
limit: 10, limit: 10
sha1
} }
if (status) { /* 兼容不同参数 当进行倒入操作时hash为字符串否则为object */
data.status = status if (typeof hash !== 'string') {
data = { ...data, ...hash }
} else {
data = { ...data, hash }
} }
if (status) { if (status) {
data.status = status data.status = status
@ -393,7 +394,7 @@ export default class acclist extends React.Component {
} }
if (this.state.bachApiType === 2) { if (this.state.bachApiType === 2) {
batchUploadVoid({ sha1: data }).then((res) => { batchUploadVoid({ hash: data }).then((res) => {
handelResponse( handelResponse(
res, res,
(req, msg) => { (req, msg) => {
@ -408,7 +409,7 @@ export default class acclist extends React.Component {
} }
if (this.state.bachApiType === 3) { if (this.state.bachApiType === 3) {
batchUploadUsed({ sha1: data }).then((res) => { batchUploadUsed({ hash: data }).then((res) => {
handelResponse( handelResponse(
res, res,
(req, msg) => { (req, msg) => {