system-copyright-react/src/route/agent/AgentCorrection.tsx
2024-03-28 19:35:54 +08:00

211 lines
7.4 KiB
TypeScript

import './agent-correction.css'
import {Link, useParams} from "react-router-dom";
import {
Breadcrumb,
message,
Spin,
Table,
TableProps,
Upload,
} from "antd";
import {useEffect, useState} from "react";
import {DownloadOutlined, UploadOutlined} from '@ant-design/icons';
import {DevUserId, get, put, uploadFileUrl} from "../../util/AjaxUtils.ts";
import {IListPage} from "../../interfaces/listpage/IListPage.ts";
import useMessage from "antd/es/message/useMessage";
type TableDataType = {
creator: string;
gmtCreate: string;
isMaterial: number;
isUpload: number;
materialAmendAttr: string;
materialAmendExplain: string;
materialAmendFile: string;
materialAmendType: string;
orderId: string;
orderMaterialAmendId: string;
orderNumber: string;
}
export default function AgentCorrection() {
const pathParams = useParams();
const [messageApi, contextHolder] = useMessage();
const [isLoading, setIsLoading] = useState(false);
const [isConfirmLoading, setIsConfirmLoading] = useState(false);
const [page, setPage] = useState(1);
const [total, setTotal] = useState(0);
const [dataArray, setDataArray] = useState<TableDataType[]>([]);
const [uploadSignFileId, setUploadSignFileId] = useState('');
const domHeight = window.innerHeight - 180;
const columns: TableProps<TableDataType>['columns'] = [
{
title: '资料类型',
dataIndex: 'materialAmendType',
key: 'materialAmendType',
align: 'center',
width: 200,
render: (value) => {
if(value === 'OM_FILE') {
return '操作手册';
}
if(value === 'CODE_FILE') {
return '源代码';
}
if(value === 'Af_File') {
return '申请表';
}
if(value === 'OTHER') {
return '其他';
}
return '错误'
}
},
{
title: '说明',
dataIndex: 'materialAmendExplain',
key: 'materialAmendExplain',
align: 'center',
},
{
title: '创建时间',
dataIndex: 'gmtCreate',
key: 'gmtCreate',
align: 'center',
width: 180
},
{
title: '附件',
dataIndex: 'materialAmendAttr',
key: 'materialAmendAttr',
align: 'center',
width: 100,
render: (value) => {
return <a href={value} download><DownloadOutlined /> </a>
}
},
{
title: '补正资料',
dataIndex: 'materialAmendFile',
key: 'materialAmendFile',
align: 'center',
width: 100,
render: (value) => {
if(!value) {
return '-';
}
return <a href={value} download><DownloadOutlined /> </a>
}
},
{
title: '操作',
dataIndex: 'option',
key: 'option',
align: 'center',
width: 120,
render: (_value, record) => {
if(record.materialAmendFile) {
return '-';
}
return (
<Upload name="file"
action={uploadFileUrl()}
headers={{'X-USER-ID': DevUserId}}
maxCount={1}
showUploadList={false}
onChange={
(info) => {
if (info.file.status !== 'uploading') {
console.log(info.file, info.fileList);
}
if (info.file.status === 'done') {
message.success('上传成功');
info.fileList.splice(0);
put<any>({
messageApi,
url: 'api/agent/order/correction/update',
body: {
orderMaterialAmendId: record.orderMaterialAmendId,
fileId : info.file.response.data.fileId
},
onBefore() {
setIsConfirmLoading(true);
},
onSuccess() {
messageApi.success('提交成功')
getData();
},
onFinally() {
setIsConfirmLoading(false);
}
})
} else if (info.file.status === 'error') {
message.error('上传失败');
}
}
}
onRemove={() => {
setUploadSignFileId('');
}}
>
<a href="/#" onClick={(e)=>{
e.preventDefault();
}}><UploadOutlined /> {uploadSignFileId ? '重新上传' : '上传'}</a>
</Upload>
)
}
},
];
const getData = () => {
get<IListPage<TableDataType>>({
messageApi,
url: `/api/agent/order/correction/listpage/order-id/${pathParams.orderId}`,
onBefore() {
setIsLoading(true)
},
onSuccess({data}) {
setDataArray([
...data.rows
])
setPage(data.page);
setTotal(data.total);
},
onFinally() {
setIsLoading(false)
}
})
}
useEffect(() => {
getData();
}, [page])
return (
<>
<Breadcrumb
items={[
{title: <Link to="/?type=agent"></Link>},
{title: '补正列表'},
]}
/>
<div className="correction-container" style={{height: `${domHeight}px`}}>
<Spin tip="加载中..." spinning={isLoading}>
<Table columns={columns} dataSource={dataArray} rowKey="orderMaterialAmendId" scroll={{y: domHeight - 105}} bordered pagination={{
current: page,
pageSize: 20,
total: total,
onChange: (page) => {
setPage(page);
}
}}/>
</Spin>
</div>
<Spin tip="正在提交..." spinning={isConfirmLoading} fullscreen/>
{contextHolder}
</>
)
}