账单列表90%,账单详细页50%

release
赵鹏 2 years ago
parent 902c8a41eb
commit 8a75f1b4a0

@ -53,7 +53,7 @@ const router = createBrowserRouter([
{ path: "feedback/:GRI_SN", element: <FeedbackDetail />},
{ path: "notice", element: <NoticeIndex />},
{ path: "invoice",element:<InvoiceIndex />},
{ path: "invoice/detial/:GMDSN/:GSN",element:<InvoiceDetail />},
{ path: "invoice/detail/:GMDSN/:GSN",element:<InvoiceDetail />},
]
},
{

@ -2,6 +2,7 @@ import { makeAutoObservable,runInAction } from "mobx";
import { fetchJSON } from "@/utils/request";
import { prepareUrl,isNotEmpty } from '@/utils/commons';
import { HT_HOST } from "@/config";
import { json } from "react-router-dom";
class Invoice {
constructor(root) {
@ -10,6 +11,9 @@ class Invoice {
}
invoiceList = []; //账单列表
invoicekImages = []; //图片列表
invoiceGroupInfo= {}; //账单详细
invocieProductList=[];//账单细项
@ -54,11 +58,15 @@ class Invoice {
GroupName : data.GroupName,
AllMoney : data.AllMoney,
PersonNum : data.PersonNum,
VName : data.VName
VName : data.VName,
FKState:data.FKState
}
});
this.invoicePage.total = json.Result[0].TotalCount;
}else{
this.invoiceList=[];
this.invoicePage.total=0;
}
}else{
@ -73,6 +81,55 @@ class Invoice {
}
fetchInvoiceDetail(GMDSN,GSN){
const fetchUrl = prepareUrl(HT_HOST + '/service-cusservice/PTGetZDDetail')
.append('VEI_SN', '628') //this.root.authStore.login.travelAgencyId
.append('GRI_SN',GSN)
.append('GMD_SN',GMDSN)
.append('LGC',1)
.append('Bill',1)
.build();
return fetchJSON(fetchUrl)
.then(json=>{
runInAction(()=>{
if(json.errcode==0){
this.invoiceGroupInfo = json.GroupInfo[0];
this.invocieProductList = json.ProductList;
}else{
throw new Error(json.errmsg + ': ' + json.errcode);
}
})
});
}
//获取供应商提交的图片
getInvoicekImages(VEI_SN, GRI_SN) {
let url = `/service-fileServer/ListFile`;
url += `?GRI_SN=${GRI_SN}&VEI_SN=${VEI_SN}`;
fetch(config.HT_HOST + url)
.then(response => response.json())
.then(json => {
console.log(json);
runInAction(() => {
this.feedbackImages = json.result.map((data, index) => {
return {
uid: -index, //用负数,防止添加删除的时候错误
name: data.file_name,
status: "done",
url: data.file_url,
};
});
});
})
.catch(error => {
console.log("fetch data failed", error);
});
}
invoicePage = {
current:1,
size:10,

@ -1,18 +1,152 @@
import { useParams, useNavigate } from "react-router-dom";
import { useEffect, useState } from "react";
import { observer } from "mobx-react";
import { toJS, runInAction } from "mobx";
import { Row, Col, Space, Button, Typography,Card,Form,Upload ,Input,Divider} from "antd";
import { useStore } from "@/stores/StoreContext.js";
import { PlusOutlined } from "@ant-design/icons";
import * as config from "@/config";
const { Title } = Typography;
function Detail() {
const navigate = useNavigate();
const {GMDSN,GSN} = useParams();
const { invoiceStore, authStore } = useStore();
const { invoicekImages ,invoiceGroupInfo,invocieProductList} = invoiceStore;
const [form] = Form.useForm();
const [dataLoading, setDataLoading] = useState(false);
useEffect(() => {
console.info("Detail.useEffect: " + GMDSN+"/"+GSN);
setDataLoading(true);
invoiceStore.fetchInvoiceDetail(GMDSN,GSN)
.catch(ex => {
notification.error({
message: `Notification`,
description: ex.message,
placement: 'top',
duration: 4,
});
})
.finally(() => {
setDataLoading(false);
});
},[GMDSN,GSN]);
const fileList = toJS(invoicekImages);
const onFinish = values => {
console.log("Success:", values);
if (values) {
alert(values);
}
};
const handleChange = info => {
console.log(info);
let newFileList = [...info.fileList];
newFileList = newFileList.map(file => {
if (file.response && file.response.result) {
file.url = file.response.result.file_url;
}
return file;
});
runInAction(() => {
invoiceStore.invoicekImages = newFileList;
});
};
const handRemove = info => {
console.log(info);
invoiceStore.removeFeedbackImages(info.url);
return true;
};
return (
<Space direction="vertical" style={{ width: "100%" }}>
<Row gutter={16}>
<Col span={20}>
<Title level={4}>Reference Number: {invoiceGroupInfo.VGroupInfo}</Title>
</Col>
<Col span={4}>
<Button type="link" onClick={() => navigate("/invoice")}>
Back
</Button>
</Col>
</Row>
<Title level={5}>基础信息</Title>
<Row gutter={16} style={{ backgroundColor:"#f6f7f9",width:"100%",padding:"20px 40px"}} >
<Col span={8}>
<Card title="组 团" bordered={false}>
<p>CHINA HIGHLIGHTS</p>
</Card>
</Col>
<Col span={8}>
<Card title="组团人" bordered={false}>
<p>{invoiceGroupInfo.WLFirstName} {invoiceGroupInfo.WLLastName} &nbsp;&nbsp; Email: {invoiceGroupInfo.WLEmail}</p>
</Card>
</Col>
<Col span={8}>
<Card title="客人国籍" bordered={false}>
<p>{invoiceGroupInfo.County}</p>
</Card>
</Col>
</Row>
<Title level={5}>报账信息</Title>
<Row gutter={16} style={{ backgroundColor:"#f6f7f9",width:"100%",padding:"20px 40px"}} >
<Col span={4}></Col>
<Col span={18}>
<Form name="invoice_submit" onFinish={onFinish} labelCol={{ span: 5 }} form={form}>
<Divider orientation="left">上传照片</Divider>
<Form.Item>
<Upload
name="ghhfile"
accept="image/*"
multiple={true}
action={config.HT_HOST + `/service-fileServer/FileUpload?GRI_SN=${GSN}&VEI_SN=${authStore.login.travelAgencyId}`}
fileList={fileList}
listType="picture-card"
onChange={handleChange}
onRemove={handRemove}>
<div>
<PlusOutlined />
<div style={{ marginTop: 8 }}>Click to Upload</div>
</div>
</Upload>
</Form.Item>
<Divider orientation="left">提交信息</Divider>
<Form.Item>
<Input addonBefore="报账总额:" defaultValue="0.00" />
</Form.Item>
<Form.Item>
<Input addonBefore="币种选择:" defaultValue="0.00" />
</Form.Item>
<Form.Item
name="info_content"
rules={[
{
required: true,
message: "Please input your messages!",
},
]}
>
<Input addonBefore="付款日期:" defaultValue="0.00" />
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit">
Submit
</Button>
</Form.Item>
</Form>
</Col>
<Col span={4}></Col>
</Row>
</Space>
);

@ -2,10 +2,11 @@ import { NavLink } from "react-router-dom";
import { useEffect, useState } from "react";
import { observer } from "mobx-react";
import { toJS } from "mobx";
import { Row, Col, Space, Button, Table, Input, DatePicker,Typography,App } from "antd";
import { Row, Col, Space, Button, Table, Input, DatePicker,Typography,App,Steps } from "antd";
import { useStore } from "@/stores/StoreContext.js";
import * as config from "@/config";
import { formatDate,isNotEmpty } from "@/utils/commons";
import { AuditOutlined, SmileOutlined, SolutionOutlined, EditOutlined } from '@ant-design/icons';
const { Title } = Typography;
@ -24,7 +25,6 @@ function Index() {
title: '团名',
dataIndex: 'GroupName',
key: 'GroupName',
//render: (text, record) => <NavLink to={`/reservation/${record.reservationId}`}>{text}</NavLink>,
},
{
title: '离团时间',
@ -65,21 +65,49 @@ function Index() {
},
{
title: 'Action',
// key: 'action',
// render: actionRender
key: 'action',
render:(text, record) => <NavLink to={`/invoice/detail/${record.key}/${record.gmd_gri_sn}`}>Details</NavLink>,
}
];
function BillStatus(text,record){
if (record.GMD_Dealed){
return "已审核";
}else if (record.GMDFillworkers_SN<1){
return "未填写";
}else if (record.VRequestVerify){
return "未审核";
}else{
return "未提交";
}
// if (record.GMD_Dealed){
// return "";
// }else if (record.GMDFillworkers_SN<1){
// return "";
// }else if (record.VRequestVerify){
// return "";
// }else{
// return "";
// }
let FKState = record.FKState-1
return <Steps
current={FKState}
initial={1}
items={[
{
title: '提交',
//status: 'finish',
icon: <EditOutlined />,
},
{
title: '顾问',
// status: 'finish',
icon: <SolutionOutlined />,
},
{
title: '财务',
//status: 'process',
icon: <AuditOutlined />,
},
{
title: 'Done',
//status: 'wait',
icon: <SmileOutlined />,
},
]}
/>
}
const onSearchClick = (current = 1) => {
@ -110,7 +138,7 @@ function Index() {
<Space direction="horizontal">
Date
<DatePicker.RangePicker
allowClear={true}
allowClear={false}
inputReadOnly={true}
placeholder={['Start', 'End']}
onChange={(date, dateRange) => { onDateRangeChange(dateRange) }}

Loading…
Cancel
Save