Commit 8dfb2601 authored by FE-安焕焕's avatar FE-安焕焕 👣

贷款结算管理测试

parent eb4e7288
...@@ -28,7 +28,15 @@ ul, ...@@ -28,7 +28,15 @@ ul,
ol { ol {
list-style: none; list-style: none;
} }
.mr20 {
margin-right: 20px;
}
.mr10 {
margin-right: 10px;
}
.mt10 {
margin-top: 10px;
}
@media (max-width: @screen-xs) { @media (max-width: @screen-xs) {
.ant-table { .ant-table {
width: 100%; width: 100%;
......
import { Upload, Icon, Modal } from 'antd'; import { Upload, Icon, Modal } from 'antd';
import React from 'react'; import React from 'react';
import localStorage from '@/utils/localStorage';
import config from '../../../config/env.config'; import config from '../../../config/env.config';
import { qiniuToken } from '@/services/qiniu';
const qiniu = require('@/utils/qiniu.min.js'); const qiniu = require('@/utils/qiniu.min.js');
const { qiniuHost } = config; const { qiniuHost } = config;
const token = localStorage.get('qiniuToken');
function getBase64(file) { function getBase64(file) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
...@@ -16,6 +15,7 @@ function getBase64(file) { ...@@ -16,6 +15,7 @@ function getBase64(file) {
reader.onerror = error => reject(error); reader.onerror = error => reject(error);
}); });
} }
let token = null;
class PicturesWall extends React.Component { class PicturesWall extends React.Component {
state = { state = {
...@@ -24,6 +24,10 @@ class PicturesWall extends React.Component { ...@@ -24,6 +24,10 @@ class PicturesWall extends React.Component {
fileList: [], fileList: [],
}; };
async componentDidMount() {
token = await qiniuToken();
}
handleCancel = () => this.setState({ previewVisible: false }); handleCancel = () => this.setState({ previewVisible: false });
handlePreview = async file => { handlePreview = async file => {
...@@ -68,6 +72,12 @@ class PicturesWall extends React.Component { ...@@ -68,6 +72,12 @@ class PicturesWall extends React.Component {
return fileList; return fileList;
}; };
clearFileList = () => {
this.setState({
fileList: [],
});
};
render() { render() {
const { previewVisible, previewImage, fileList } = this.state; const { previewVisible, previewImage, fileList } = this.state;
const uploadButton = ( const uploadButton = (
......
...@@ -10,6 +10,7 @@ export const settleStatus = { ...@@ -10,6 +10,7 @@ export const settleStatus = {
8: { text: '驳回' }, 8: { text: '驳回' },
}; };
export const actionStatus = { export const actionStatus = {
1: { text: '已确认' }, 1: { text: '待操作' },
2: { text: '已拒绝' }, 2: { text: '已确认' },
3: { text: '已拒绝' },
}; };
...@@ -49,10 +49,12 @@ class fileModal extends Component { ...@@ -49,10 +49,12 @@ class fileModal extends Component {
dataSource={tableData} dataSource={tableData}
columns={tableColumns} columns={tableColumns}
rowKey={record => record.id} rowKey={record => record.id}
scroll={{ x: '100%', y: 300 }}
/> />
<Button type="primary" onClick={this.props.onCancel} className={styles.logBtn}> <Button type="primary" onClick={this.props.onCancel} className={styles.fileBtn}>
关闭 关闭
</Button> </Button>
<Modal <Modal
title="附件详情" title="附件详情"
visible={this.state.imgModal} visible={this.state.imgModal}
......
...@@ -4,7 +4,7 @@ import { Input, Button, Popconfirm, Notification } from 'antd'; ...@@ -4,7 +4,7 @@ import { Input, Button, Popconfirm, Notification } from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { actionStatus, settleStatus } from './data'; import { actionStatus, settleStatus } from './data';
import style from './style.less'; import style from './style.less';
import { query, updateStatus, download, docQuery, qiniuToken } from './service'; import { query, updateStatus, download, docQuery } from './service';
import FileModal from './fileModal'; import FileModal from './fileModal';
import UploadModal from './uploadModal'; import UploadModal from './uploadModal';
...@@ -17,11 +17,10 @@ export default () => { ...@@ -17,11 +17,10 @@ export default () => {
const [showViewUpload, setShowViewUpload] = useState(false); const [showViewUpload, setShowViewUpload] = useState(false);
const [settlementNoV, setSettlementNo] = useState(''); const [settlementNoV, setSettlementNo] = useState('');
const reload = () => { const reload = () => {
if (protable.reload) { if (protable?.current?.reload) {
protable.reload(); protable.current.reload();
} }
}; };
qiniuToken();
const confirmText = '您是否已确认结算金额是否正确?确认后无法撤回'; const confirmText = '您是否已确认结算金额是否正确?确认后无法撤回';
const confirmAction = async (r, isRefuse) => { const confirmAction = async (r, isRefuse) => {
const data = await updateStatus({ const data = await updateStatus({
...@@ -54,44 +53,55 @@ export default () => { ...@@ -54,44 +53,55 @@ export default () => {
setShowViewFile(true); setShowViewFile(true);
}; };
const refuseNode = () => <TextArea rows={4} onChange={refuseContent} value={refuse} />; const refuseNode = () => <TextArea rows={4} onChange={refuseContent} value={refuse} />;
const tableRenderBtn = r => [ const tableRenderBtn = r => (
<Popconfirm <div>
placement="topLeft" <p>
title={confirmText} <Popconfirm
onConfirm={() => confirmAction(r)} placement="topLeft"
okText="确认" title={confirmText}
cancelText="取消" onConfirm={() => confirmAction(r)}
> okText="确认"
<Button type="primary">确认</Button> cancelText="取消"
</Popconfirm>, >
<Popconfirm <Button disabled={r.settlementStatus !== 2} type="primary" className="mr10">
icon={null} 确认
placement="topLeft" </Button>
title={refuseNode()} </Popconfirm>
onConfirm={() => confirmAction(r, true)} <Popconfirm
okText="确认" icon={null}
cancelText="取消" placement="topLeft"
> title={refuseNode()}
<Button type="primary" onClick={clearRefuseContent}> onConfirm={() => confirmAction(r, true)}
拒绝 okText="确认"
cancelText="取消"
>
<Button
disabled={r.settlementStatus !== 2}
type="primary"
onClick={clearRefuseContent}
className="mr10"
>
拒绝
</Button>
</Popconfirm>
<Button type="primary" onClick={() => uploadInvoice(r)} disabled={r.settlementStatus === 6}>
上传发票
</Button>
</p>
<Button type="primary" onClick={() => downDetail(r)} className="mr20">
下载明细
</Button> </Button>
</Popconfirm>, <Button type="primary" onClick={() => viewAccessory(r)}>
<Button type="primary" onClick={() => downDetail(r)}> 查看附件
下载明细 </Button>
</Button>, </div>
<Button type="primary" onClick={() => uploadInvoice(r)}> );
上传发票
</Button>,
<Button type="primary" onClick={() => viewAccessory(r)}>
查看附件
</Button>,
];
const columns = [ const columns = [
{ {
title: '排序', title: '排序',
dataIndex: 'index', dataIndex: 'index',
valueType: 'index', valueType: 'index',
width: 80, width: 100,
}, },
{ {
title: '结算订单号', title: '结算订单号',
...@@ -137,8 +147,7 @@ export default () => { ...@@ -137,8 +147,7 @@ export default () => {
{ {
title: '操作', title: '操作',
valueType: 'option', valueType: 'option',
dataIndex: 'id', width: 280,
width: 200,
fixed: 'right', fixed: 'right',
render: (_, r) => tableRenderBtn(r), render: (_, r) => tableRenderBtn(r),
}, },
...@@ -171,6 +180,7 @@ export default () => { ...@@ -171,6 +180,7 @@ export default () => {
settlementNo={settlementNoV} settlementNo={settlementNoV}
onCancel={() => { onCancel={() => {
setShowViewUpload(false); setShowViewUpload(false);
reload();
}} }}
/> />
</PageHeaderWrapper> </PageHeaderWrapper>
......
...@@ -4,7 +4,6 @@ import request from '@/utils/request'; ...@@ -4,7 +4,6 @@ import request from '@/utils/request';
import { saveAs } from 'file-saver'; import { saveAs } from 'file-saver';
import { format } from 'date-fns'; import { format } from 'date-fns';
import config from '../../../config/env.config'; import config from '../../../config/env.config';
import localStorage from '@/utils/localStorage';
// 分页查询 // 分页查询
export async function query(data) { export async function query(data) {
const params = { const params = {
...@@ -18,7 +17,7 @@ export async function query(data) { ...@@ -18,7 +17,7 @@ export async function query(data) {
data: { current, records, total, size }, data: { current, records, total, size },
} = await request.get('/api/kdsp/settlement/wait-confirm/page/query', { } = await request.get('/api/kdsp/settlement/wait-confirm/page/query', {
prefix: config.kdspApi, prefix: config.kdspApi,
params: stringify(_.omitBy(params, v => !v)), params: _.omitBy(params, v => !v),
headers: { headers: {
'Content-Type': 'application/x-www-form-urlencoded', 'Content-Type': 'application/x-www-form-urlencoded',
}, },
...@@ -45,18 +44,6 @@ export async function updateStatus(params) { ...@@ -45,18 +44,6 @@ export async function updateStatus(params) {
return data; return data;
} }
// export async function getGoods(orderId) {
// const { data } = await request.get(`/api/kdsp/op/mch-order/skus?orderId=${orderId}`, {
// prefix: config.kdspApi,
// });
// return data;
// }
// export async function getLogistics(orderId) {
// const { data } = await request.get(`/api/kdsp/op/mch-order/logistics-skus?orderId=${orderId}`, {
// prefix: config.kdspApi,
// });
// return data;
// }
export async function uploadFile(file, settlementNo) { export async function uploadFile(file, settlementNo) {
const params = new FormData(); const params = new FormData();
params.append('file', file); params.append('file', file);
...@@ -91,9 +78,14 @@ export async function docQuery(settlementNo) { ...@@ -91,9 +78,14 @@ export async function docQuery(settlementNo) {
} }
return []; return [];
} }
export async function qiniuToken() {
const data = await request.get('/upload/getToken', { export async function uploadPic(params) {
prefix: config.opapiHost, const data = await request.post('/api/kdsp/settlement/invoice/img/upload', {
prefix: config.kdspApi,
data: stringify(_.omitBy(params, v => !v)),
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
}); });
localStorage.set('qiniuToken', data.uptoken); return data;
} }
...@@ -5,13 +5,16 @@ ...@@ -5,13 +5,16 @@
} }
} }
} }
.logBtn { .fileBtn {
display: block; display: block;
margin: auto; margin: 10px auto;
} }
.imgWrap { .imgWrap {
display: flex; display: flex;
justify-content: space-around; flex-wrap: wrap;
justify-content: flex-start;
max-height: 300px;
overflow: auto;
} }
.tab { .tab {
min-height: 400px; min-height: 400px;
......
import React, { createRef, useState } from 'react'; import React, { useRef, useState, useEffect } from 'react';
import { Modal, Button, Tabs, Upload, notification, Icon } from 'antd'; import { Modal, Button, Tabs, Upload, notification, Icon } from 'antd';
import styles from '../style.less'; import styles from '../style.less';
import { uploadFile } from '../service'; import { uploadFile, uploadPic } from '../service';
import UploadC from '../../components/upload'; import UploadC from '../../components/upload';
const { Dragger } = Upload; const { Dragger } = Upload;
...@@ -10,20 +10,45 @@ const { TabPane } = Tabs; ...@@ -10,20 +10,45 @@ const { TabPane } = Tabs;
export default props => { export default props => {
const { visible, settlementNo } = props; const { visible, settlementNo } = props;
const [tabValue, setTabValue] = useState('1'); const [tabValue, setTabValue] = useState('1');
const picUpload = createRef(); const [fileList, setFileList] = useState([]);
const picUpload = useRef();
const uploadProps = { const uploadProps = {
name: 'file', name: 'file',
async customRequest(info) { async customRequest({ file, onSuccess }) {
const result = await uploadFile(info.file, settlementNo); const result = await uploadFile(file, settlementNo);
if (result.businessCode === '0000') { if (result.businessCode === '0000') {
notification.success({ message: '导入成功' }); notification.success({ message: '导入成功' });
onSuccess(file);
setFileList([...fileList, file]);
} }
}, },
accept: '.xlsx', accept: '.xlsx',
showUploadList: false, showUploadList: {
showRemoveIcon: false,
},
maxCount: 1,
fileList,
};
const initPicUpload = () => {
if (picUpload?.current?.clearFileList) {
picUpload.current.clearFileList();
}
}; };
const uploadFn = () => { useEffect(() => {
initPicUpload();
setFileList([]);
}, [visible]);
const uploadFn = async () => {
// 上传图片的接口 // 上传图片的接口
const upLoadFileList = picUpload?.current?.getFileList?.();
const data = await uploadPic({
imgUrl: upLoadFileList.join(','),
settlementNo,
});
if (data.code === '0000') {
notification.success({ message: '上传成功' });
initPicUpload();
}
}; };
const changeTab = tabV => { const changeTab = tabV => {
setTabValue(tabV); setTabValue(tabV);
...@@ -48,9 +73,6 @@ export default props => { ...@@ -48,9 +73,6 @@ export default props => {
确定上传 确定上传
</Button> </Button>
)} )}
{/* <Button type="primary" onClick={props.onCancel}>
关闭
</Button> */}
</Modal> </Modal>
); );
}; };
import request from '@/utils/request';
import config from '../../config/env.config';
export async function qiniuToken() {
const data = await request.get('/upload/getToken', {
prefix: config.opapiHost,
});
return data?.uptoken;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment