Merge remote-tracking branch 'origin/main'
commit
d2ec511675
|
@ -197,10 +197,12 @@ class Subpage extends React.Component<any, any> {
|
||||||
|
|
||||||
closeDetail = () => {
|
closeDetail = () => {
|
||||||
this.setState({detailedReimbursement: undefined})
|
this.setState({detailedReimbursement: undefined})
|
||||||
|
this.tableAction.current?.reload()
|
||||||
}
|
}
|
||||||
|
|
||||||
showDetail(reimbursementId: number) {
|
showDetail(reimbursementId: number) {
|
||||||
axiosInstance.get("common/reimbursement/" + reimbursementId).then((response) => {
|
axiosInstance.get("common/reimbursement/" + reimbursementId).then((response) => {
|
||||||
|
console.log(response.data)
|
||||||
this.setState({detailedReimbursement: response.data})
|
this.setState({detailedReimbursement: response.data})
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
openNotification("拉取报销单详情失败")
|
openNotification("拉取报销单详情失败")
|
||||||
|
@ -224,7 +226,7 @@ class Subpage extends React.Component<any, any> {
|
||||||
amount: value.reimbursementInvoiceAmount + value.reimbursementAdditionalAmount,
|
amount: value.reimbursementInvoiceAmount + value.reimbursementAdditionalAmount,
|
||||||
invoiceAmount: value.reimbursementInvoiceAmount,
|
invoiceAmount: value.reimbursementInvoiceAmount,
|
||||||
additionalAmount: value.reimbursementAdditionalAmount,
|
additionalAmount: value.reimbursementAdditionalAmount,
|
||||||
status: value.reimbursementStatus % 6,
|
status: value.reimbursementStatus % 7,
|
||||||
departmentId: value.reimbursementSubmitDepartment.departmentId,
|
departmentId: value.reimbursementSubmitDepartment.departmentId,
|
||||||
submitDateTime: Date.parse(value.reimbursementSubmitTime),
|
submitDateTime: Date.parse(value.reimbursementSubmitTime),
|
||||||
detail: "查看详情",
|
detail: "查看详情",
|
||||||
|
@ -243,7 +245,7 @@ class Subpage extends React.Component<any, any> {
|
||||||
amount: value[i].reimbursementInvoiceAmount + value[i].reimbursementAdditionalAmount,
|
amount: value[i].reimbursementInvoiceAmount + value[i].reimbursementAdditionalAmount,
|
||||||
invoiceAmount: value[i].reimbursementInvoiceAmount,
|
invoiceAmount: value[i].reimbursementInvoiceAmount,
|
||||||
additionalAmount: value[i].reimbursementAdditionalAmount,
|
additionalAmount: value[i].reimbursementAdditionalAmount,
|
||||||
status: value[i].reimbursementStatus % 6,
|
status: value[i].reimbursementStatus % 7,
|
||||||
departmentId: value[i].reimbursementSubmitDepartment.departmentId,
|
departmentId: value[i].reimbursementSubmitDepartment.departmentId,
|
||||||
submitDateTime: Date.parse(value[i].reimbursementSubmitTime),
|
submitDateTime: Date.parse(value[i].reimbursementSubmitTime),
|
||||||
detail: "查看详情",
|
detail: "查看详情",
|
||||||
|
@ -339,7 +341,7 @@ class Subpage extends React.Component<any, any> {
|
||||||
<>
|
<>
|
||||||
<ReimbursementDetail reimbursement={this.state.detailedReimbursement}
|
<ReimbursementDetail reimbursement={this.state.detailedReimbursement}
|
||||||
closeDetail={this.closeDetail}
|
closeDetail={this.closeDetail}
|
||||||
accessLevel={1}
|
accessLevel={0}
|
||||||
/>
|
/>
|
||||||
<ProTable<TableListItem>
|
<ProTable<TableListItem>
|
||||||
actionRef={this.tableAction}
|
actionRef={this.tableAction}
|
||||||
|
|
|
@ -1,10 +1,31 @@
|
||||||
import React, {ReactNode} from "react";
|
import React, {ReactNode} from "react";
|
||||||
import {Button, Checkbox, Col, Descriptions, Modal, Popconfirm, Popover, Row, StepProps, Steps, Tag} from "antd";
|
import {
|
||||||
|
Button, Radio,
|
||||||
|
Col,
|
||||||
|
Descriptions,
|
||||||
|
Modal,
|
||||||
|
Popconfirm,
|
||||||
|
Popover,
|
||||||
|
Row,
|
||||||
|
Select,
|
||||||
|
StepProps,
|
||||||
|
Steps,
|
||||||
|
Tag
|
||||||
|
} from "antd";
|
||||||
import TextArea from "antd/es/input/TextArea";
|
import TextArea from "antd/es/input/TextArea";
|
||||||
import {ApprovalProcess, Invoice, ReimbursementDetailModal} from "../../../models/ReimbursementDetailModal";
|
import {ApprovalProcess, Invoice, ReimbursementDetailModal} from "../../../models/ReimbursementDetailModal";
|
||||||
import dayjs, {Dayjs} from "dayjs";
|
import dayjs, {Dayjs} from "dayjs";
|
||||||
import {ExclamationCircleOutlined} from "@ant-design/icons";
|
import {ExclamationCircleOutlined} from "@ant-design/icons";
|
||||||
import displayInvoicesList from "./component/tempComponent";
|
import displayInvoicesList from "./component/tempComponent";
|
||||||
|
import {
|
||||||
|
CheckCircleOutlined,
|
||||||
|
ClockCircleOutlined,
|
||||||
|
CloseCircleOutlined,
|
||||||
|
MinusCircleOutlined,
|
||||||
|
SyncOutlined,
|
||||||
|
} from '@ant-design/icons';
|
||||||
|
import axiosInstance from "../../../utils/axiosInstance";
|
||||||
|
import {openNotification} from "./utils";
|
||||||
|
|
||||||
const statusEnum = {
|
const statusEnum = {
|
||||||
0: {text: '已报销', status: 'Success'},
|
0: {text: '已报销', status: 'Success'},
|
||||||
|
@ -77,7 +98,7 @@ function displayRawInfo(reimbursement: ReimbursementDetailModal | undefined | nu
|
||||||
</>)
|
</>)
|
||||||
}
|
}
|
||||||
|
|
||||||
function displaySteps(reimbursement: ReimbursementDetailModal | undefined | null, onApprove:boolean) {
|
function displaySteps(reimbursement: ReimbursementDetailModal | undefined | null, onApprove: boolean) {
|
||||||
if (reimbursement == undefined)
|
if (reimbursement == undefined)
|
||||||
return null;
|
return null;
|
||||||
let currentStep = 0;
|
let currentStep = 0;
|
||||||
|
@ -91,16 +112,16 @@ function displaySteps(reimbursement: ReimbursementDetailModal | undefined | null
|
||||||
if (approvalSteps == null)
|
if (approvalSteps == null)
|
||||||
approvalSteps = []
|
approvalSteps = []
|
||||||
for (let i = 0; i < approvalSteps.length; i++) {
|
for (let i = 0; i < approvalSteps.length; i++) {
|
||||||
if (approvalSteps[i].approvalResult === i) {
|
if (approvalSteps[i].approvalResult === i + 1) {
|
||||||
let description: string | ReactNode = approvalSteps[i].approvalStaff.staffName + "】" + "审批通过";
|
let description: string | ReactNode = "【" + approvalSteps[i].approvalStaff.staffName + "】" + "审批通过";
|
||||||
if (approvalSteps[i].approvalOpinion != null && approvalSteps[i].approvalOpinion !== "") {
|
if (approvalSteps[i].approvalOpinion != null && approvalSteps[i].approvalOpinion !== "") {
|
||||||
description = (<>{approvalSteps[i].approvalStaff.staffName + "】" + "审批通过"}<Popover
|
description = (<>{"【" + approvalSteps[i].approvalStaff.staffName + "】" + "审批通过"}<Popover
|
||||||
content={approvalSteps[i].approvalOpinion}><ExclamationCircleOutlined
|
content={approvalSteps[i].approvalOpinion}><ExclamationCircleOutlined
|
||||||
style={{marginLeft: 5}}/></Popover></>)
|
style={{marginLeft: 5}}/></Popover></>)
|
||||||
}
|
}
|
||||||
items.push({
|
items.push({
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
title: statusEnum2[i - 1] + "审批",
|
title: statusEnum2[i] + "审批",
|
||||||
status: 'finish',
|
status: 'finish',
|
||||||
subTitle: approvalSteps[i].approvalTime.replace("T", " "),
|
subTitle: approvalSteps[i].approvalTime.replace("T", " "),
|
||||||
description: description
|
description: description
|
||||||
|
@ -112,7 +133,7 @@ function displaySteps(reimbursement: ReimbursementDetailModal | undefined | null
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
title: statusEnum2[approvalSteps.length] + "审批",
|
title: statusEnum2[approvalSteps.length] + "审批",
|
||||||
status: 'process',
|
status: 'process',
|
||||||
subTitle: onApprove?"请您审批":"审批中",
|
subTitle: onApprove ? "请您审核" : "审核中",
|
||||||
description: "",
|
description: "",
|
||||||
})
|
})
|
||||||
currentStep = items.length - 2;
|
currentStep = items.length - 2;
|
||||||
|
@ -211,14 +232,24 @@ class ReimbursementDetail extends React.Component<any, any> {
|
||||||
}
|
}
|
||||||
|
|
||||||
approve = () => {
|
approve = () => {
|
||||||
//TODO: approve
|
let params = {approvalOpinion: this.state.approvalOpinion}
|
||||||
console.log("approve");
|
axiosInstance.put("approval/" + this.state.reimbursement.reimbursementId.toString() + "/"+(this.state.approvalChecked?"1":"0"), params).then((res) => {
|
||||||
|
openNotification("审核成功");
|
||||||
this.props.closeDetail();
|
this.props.closeDetail();
|
||||||
|
}).catch((err) => {
|
||||||
|
openNotification(err.response.data.msg==null?"操作失败,请稍后重试":err.response.data.msg);
|
||||||
|
console.log(err);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
terminate = () => {
|
terminate = () => {
|
||||||
//TODO: terminate
|
let params = {approvalOpinion: ""}
|
||||||
console.log("terminate");
|
axiosInstance.put("approval/" + this.state.reimbursement.reimbursementId.toString() + "/-1", params).then((res) => {
|
||||||
|
openNotification("已终止申请");
|
||||||
this.props.closeDetail();
|
this.props.closeDetail();
|
||||||
|
}).catch((err) => {
|
||||||
|
openNotification(err.response.data.msg==null?"操作失败,请稍后重试":err.response.data.msg);
|
||||||
|
console.log(err);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
getSubmitButton = () => {
|
getSubmitButton = () => {
|
||||||
if (this.state.reimbursement === undefined || this.state.reimbursement.reimbursementStatus === 0
|
if (this.state.reimbursement === undefined || this.state.reimbursement.reimbursementStatus === 0
|
||||||
|
@ -245,7 +276,7 @@ class ReimbursementDetail extends React.Component<any, any> {
|
||||||
okText="确定"
|
okText="确定"
|
||||||
cancelText="取消"
|
cancelText="取消"
|
||||||
>
|
>
|
||||||
<Button type="primary" danger>驳回报销</Button>
|
<Button type="primary" danger>驳回申请</Button>
|
||||||
</Popconfirm>)
|
</Popconfirm>)
|
||||||
} else if (this.props.accessLevel === 0) {
|
} else if (this.props.accessLevel === 0) {
|
||||||
return (
|
return (
|
||||||
|
@ -264,22 +295,24 @@ class ReimbursementDetail extends React.Component<any, any> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
checkerMenu = () => {
|
checkerMenu = () => {
|
||||||
if (this.props.accessLevel === 1) {
|
if (this.props.accessLevel === 1 && this.state.reimbursement != undefined &&
|
||||||
|
this.state.reimbursement.reimbursementStatus >= 1 && this.state.reimbursement.reimbursementStatus <= 4) {
|
||||||
return (<>
|
return (<>
|
||||||
<TextArea autoSize={{minRows:2}} placeholder="审批意见" value={this.state.approvalOpinion} onChange={(e) => {
|
<Row>
|
||||||
|
<TextArea autoSize={{minRows: 2}} placeholder="审批意见" value={this.state.approvalOpinion}
|
||||||
|
onChange={(e) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
approvalOpinion: e.target.value,
|
approvalOpinion: e.target.value,
|
||||||
})
|
})
|
||||||
}}/>
|
}}/>
|
||||||
<Row>
|
</Row>
|
||||||
<Col span={18}/>
|
<Row style={{marginTop:15}}>
|
||||||
<Col span={6}>
|
<Radio.Group buttonStyle="solid" style={{width:'100%'}} defaultValue={true} onChange={(value) => {
|
||||||
<Checkbox style={{whiteSpace:"nowrap"}} checked={this.state.approvalChecked} onChange={(e) => {
|
this.setState({approvalChecked: value.target.value})
|
||||||
this.setState({
|
}}>
|
||||||
approvalChecked: e.target.checked,
|
<Radio.Button value={true} checked={true} style={{width:'50%',textAlign:"center"}}>通过</Radio.Button>
|
||||||
})
|
<Radio.Button value={false} style={{width:'50%',textAlign:"center"}}>不通过</Radio.Button>
|
||||||
}}>批准</Checkbox>
|
</Radio.Group>
|
||||||
</Col>
|
|
||||||
</Row>
|
</Row>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
@ -287,14 +320,34 @@ class ReimbursementDetail extends React.Component<any, any> {
|
||||||
return <></>
|
return <></>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
getTag = () => {
|
||||||
|
if (this.state.reimbursement == undefined)
|
||||||
|
return <></>
|
||||||
|
if (this.state.reimbursement.reimbursementStatus === 0)
|
||||||
|
return (<Tag icon={<CheckCircleOutlined/>} color="success" style={{marginLeft: 20, scale: "1.1"}}>
|
||||||
|
单号:{this.state.reimbursement.reimbursementId}
|
||||||
|
</Tag>)
|
||||||
|
else if (this.state.reimbursement.reimbursementStatus >= 5) {
|
||||||
|
return (
|
||||||
|
<Tag icon={<CloseCircleOutlined/>} color="error" style={{marginLeft: 20, scale: "1.1"}}>
|
||||||
|
单号:{this.state.reimbursement.reimbursementId}
|
||||||
|
</Tag>
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
return (
|
||||||
|
<Tag icon={<ClockCircleOutlined/>} color="processing" style={{marginLeft: 20, scale: "1.1"}}>
|
||||||
|
单号:{this.state.reimbursement.reimbursementId}
|
||||||
|
</Tag>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
title={<>报销单详情<Tag
|
title={<>报销单详情{this.getTag()}</>}
|
||||||
style={{marginLeft: 20}}>{"单号:"}{this.state.reimbursement?.reimbursementId}</Tag></>}
|
|
||||||
onCancel={this.cancel} open={this.state.open}
|
onCancel={this.cancel} open={this.state.open}
|
||||||
width={900}
|
width={1000}
|
||||||
destroyOnClose={true}
|
destroyOnClose={true}
|
||||||
footer={[
|
footer={[
|
||||||
this.getSubmitButton(),
|
this.getSubmitButton(),
|
||||||
|
@ -306,7 +359,7 @@ class ReimbursementDetail extends React.Component<any, any> {
|
||||||
{displayRawInfo(this.state.reimbursement)}
|
{displayRawInfo(this.state.reimbursement)}
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={9}>
|
<Col span={9}>
|
||||||
{displaySteps(this.state.reimbursement,this.props.accessLevel===1)}
|
{displaySteps(this.state.reimbursement, this.props.accessLevel === 1)}
|
||||||
<Row style={{marginTop: 50}}>
|
<Row style={{marginTop: 50}}>
|
||||||
<Col span={20}>
|
<Col span={20}>
|
||||||
{this.checkerMenu()}
|
{this.checkerMenu()}
|
||||||
|
|
Loading…
Reference in New Issue