feat: invoice 迁移zustand

feature/price_manager
Lei OT 1 year ago
parent b62bba8587
commit 30012ae37e

@ -1,6 +1,6 @@
import { makeAutoObservable, runInAction } from "mobx";
import { fetchJSON, postForm } from "@/utils/request";
import { prepareUrl, isNotEmpty } from "@/utils/commons";
import { prepareUrl, isNotEmpty, objectMapper } from "@/utils/commons";
import { HT_HOST } from "@/config";
import { json } from "react-router-dom";
import * as config from "@/config";
@ -9,6 +9,53 @@ import dayjs from "dayjs";
import { create } from 'zustand';
import { devtools } from 'zustand/middleware';
export const fetchInvoiceDetail = async (VEI_SN, GMD_SN, GRI_SN) => {
const { errcode, ...json } = await fetchJSON(`${HT_HOST}/service-cusservice/PTGetZDDetail`, { VEI_SN, GMD_SN, GRI_SN, LGC: 1, Bill: 1 });
return errcode !== 0 ? {} : { invoiceGroupInfo: json.GroupInfo[0], invoiceProductList: json.ProductList, invoiceCurrencyList: json.CurrencyList, invoiceZDDetail: json.ZDDetail };
};
export const getInvoicekImages = async (VEI_SN, GRI_SN) => {
const { errcode, result, ...json } = await fetchJSON(`${HT_HOST}/service-fileServer/ListFile`, { VEI_SN, GRI_SN, FilePathName: 'invoice' });
return errcode !== 0 ? [] : result.map((data, index) => {
return {
uid: -index, //用负数,防止添加删除的时候错误
name: data.file_name,
status: "done",
url: data.file_url,
};
});
};
export const postEditInvoiceDetail = async (LMI_SN, GMD_SN, Currency, Cost, PayDate, Pic, Memo) => {
const postbody = { LMI_SN, GMD_SN, Currency, Cost, PayDate, Pic, Memo };
const formData = new FormData();
Object.keys(postbody).forEach((key) => {
formData.append(key, postbody[key]);
});
const res = await postForm(`${HT_HOST}/service-cusservice/EditSupplierFK`, formData);
return res;
};
export const postAddInvoice = async (LMI_SN, VEI_SN, GRI_SN, Currency, Cost, PayDate, Pic, Memo) => {
const postbody = { LMI_SN, VEI_SN, GRI_SN, Currency, Cost, PayDate, Pic, Memo };
const formData = new FormData();
Object.keys(postbody).forEach((key) => {
formData.append(key, postbody[key]);
});
const res = await postForm(`${HT_HOST}/service-cusservice/AddSupplierFK`, formData);
return res;
};
export const getInvoicePaid = async (VEI_SN, GroupNo, DateStart, DateEnd) => {
const { errcode, Result } = await fetchJSON(`${HT_HOST}/service-Cooperate/Cooperate/GetInvoicePaid`, {VEI_SN, GroupNo, DateStart, DateEnd});
return errcode !== 0 ? [] : (Result || []).map((data, index) => ({ ...data, key: data.fl_id, }));
};
export const fetchInvoicePaidDetail = async (VEI_SN, FLID) => {
const { errcode, Result } = await fetchJSON(`${HT_HOST}/service-Cooperate/Cooperate/GetInvoicePaidDetail`, { VEI_SN, fl_id: FLID });
return errcode !== 0 ? [] : (Result || []).map((data, index) => ({ ...data, key: data.fl2_id, }));
};
const initialState = {
invoiceList: [], //账单列表
invoicekImages: [], //图片列表
@ -30,7 +77,62 @@ const useInvoiceStore = create(
...initialState,
reset: () => set(initialState),
setLoading: (loading) => set(() => ({ loading })),
setInvoiceList: (invoiceList) => set(() => ({ invoiceList })),
setInvoicePaid: (invoicePaid) => set(() => ({ invoicePaid })),
async fetchInvoiceList(VEI_SN, GroupNo, DateStart, DateEnd,OrderType){
const { setLoading, setInvoiceList } = get();
setLoading(true);
const searchParams = {
VEI_SN,
GroupNo,
DateStart,
DateEnd,
OrderType: 0,
TimeType: 0,
limitmarket: '',
mddgroup: '',
SecuryGroup: '',
TotalNum: 0,
PageSize: 2000,
PageIndex: 1,
PayState: OrderType,
};
const { errcode, Result } = await fetchJSON(`${HT_HOST}/service-cusservice/PTSearchGMBPageList`, searchParams);
const _result = errcode !== 0 ? [] : (Result || []).map((data, index) => {
return {
key: data.GMDSN,
gmd_gri_sn: data.GMD_GRI_SN,
gmd_vei_sn: data.GMD_VEI_SN,
GetGDate: data.GetGDate,
GMD_FillWorkers_SN: data.GMD_FillWorkers_SN,
GMD_FWks_LastEditTime: data.GMD_FWks_LastEditTime,
GMD_VerifyUser_SN: data.GMD_VerifyUser_SN,
GMD_Dealed: data.GMD_Dealed,
GMD_VRequestVerify: data.GMD_VRequestVerify,
LeftGDate: data.LeftGDate,
GMD_FillWorkers_Name: data.GMD_FillWorkers_Name,
GroupName: data.GroupName,
AllMoney: data.AllMoney,
PersonNum: data.PersonNum,
GMD_Currency: data.GMD_Currency,
VName: data.VName,
FKState: data.FKState,
};
});
setInvoiceList(_result);
setLoading(false);
},
async fetchInvoicePaid(VEI_SN, GroupNo, DateStart, DateEnd){
const { setLoading, setInvoicePaid } = get();
setLoading(true);
const res = await getInvoicePaid(VEI_SN, GroupNo, DateStart, DateEnd);
setInvoicePaid(res);
setLoading(false);
},
}))
);
@ -121,9 +223,9 @@ export class Invoice {
});
}
fetchInvoiceDetail(VEI_SN, GMDSN, GSN) {
fetchInvoiceDetail(GMDSN, GSN) {
const fetchUrl = prepareUrl(HT_HOST + "/service-cusservice/PTGetZDDetail")
.append("VEI_SN", VEI_SN)
.append("VEI_SN", this.root.authStore.login.travelAgencyId)
.append("GRI_SN", GSN)
.append("GMD_SN", GMDSN)
.append("LGC", 1)
@ -227,10 +329,10 @@ export class Invoice {
});
}
postEditInvoiceDetail(LMI_SN, GMD_SN, Currency, Cost, PayDate, Pic, Memo) {
postEditInvoiceDetail(GMD_SN, Currency, Cost, PayDate, Pic, Memo) {
let postUrl = HT_HOST + "/service-cusservice/EditSupplierFK";
let formData = new FormData();
formData.append("LMI_SN", LMI_SN);
formData.append("LMI_SN", this.root.authStore.login.userId);
formData.append("GMD_SN", GMD_SN);
formData.append("Currency", Currency);
formData.append("Cost", Cost);
@ -245,11 +347,11 @@ export class Invoice {
});
}
postAddInvoice(LMI_SN, VEI_SN, GRI_SN, Currency, Cost, PayDate, Pic, Memo) {
postAddInvoice(GRI_SN, Currency, Cost, PayDate, Pic, Memo) {
let postUrl = HT_HOST + "/service-cusservice/AddSupplierFK";
let formData = new FormData();
formData.append("LMI_SN", LMI_SN);
formData.append("VEI_SN", VEI_SN);
formData.append("LMI_SN", this.root.authStore.login.userId);
formData.append("VEI_SN", this.root.authStore.login.travelAgencyId);
formData.append("GRI_SN", GRI_SN);
formData.append("Currency", Currency);
formData.append("Cost", Cost);

@ -1,11 +1,9 @@
import { makeAutoObservable } from "mobx";
import { Auth } from "./Auth";
import {Invoice} from "./Invoice";
class Root {
constructor() {
this.authStore = new Auth(this);
this.invoiceStore = new Invoice(this);
makeAutoObservable(this);
}

@ -1,14 +1,13 @@
import { useParams, useNavigate, NavLink } from "react-router-dom";
import { useEffect, useState, useRef } from "react";
import { observer } from "mobx-react";
import { toJS, runInAction } from "mobx";
import { Row, Col, Space, Button, Typography, Card, Form, Upload, Input, Divider, DatePicker, Select, App, Descriptions, Image, Steps } from "antd";
import { useStore } from "@/stores/StoreContext.js";
import { PlusOutlined, AuditOutlined, SmileOutlined, SolutionOutlined, EditOutlined } from "@ant-design/icons";
import { useParams, useNavigate } from "react-router-dom";
import { useEffect, useState } from "react";
import { Row, Col, Space, Button, Typography, Card, Form, Upload, Input, Divider, DatePicker, Select, App, Descriptions, Image } from "antd";
import { PlusOutlined } from "@ant-design/icons";
import { isNotEmpty } from "@/utils/commons";
import * as config from "@/config";
import dayjs from "dayjs";
import useAuthStore from '@/stores/Auth';
import useInvoiceStore, { fetchInvoiceDetail, postEditInvoiceDetail, postAddInvoice } from '@/stores/Invoice';
import { removeFeedbackImages } from '@/stores/Feedback';
import BackBtn from '@/components/BackBtn';
const { Title,Text } = Typography;
@ -17,11 +16,9 @@ const { TextArea } = Input;
function Detail() {
const navigate = useNavigate();
const { GMDSN, GSN } = useParams();
const { invoiceStore, } = useStore();
const [userId, travelAgencyId, token] = useAuthStore((state) => [state.loginUser.userId,state.loginUser.travelAgencyId, state.loginUser.token]);
const { invoicekImages, invoiceGroupInfo, invoiceProductList, invoiceCurrencyList, invoiceZDDetail } = invoiceStore;
const [userId, travelAgencyId, token] = useAuthStore((state) => [state.loginUser.userId, state.loginUser.travelAgencyId, state.loginUser.token]);
// const { invoiceStore, authStore } = useStore();
// const { invoiceGroupInfo, invoiceProductList, invoiceCurrencyList, invoiceZDDetail } = invoiceStore;
const [form] = Form.useForm();
const [dataLoading, setDataLoading] = useState(false);
const [edited, setEdited] = useState(true); //
@ -30,6 +27,14 @@ function Detail() {
const [invoicePicList, setInvoicePicList] = useState([]);
const [invoiceZDDetail, setInvoiceZDDetail] = useState([]);
const [invoiceCurrencyList, setInvoiceCurrencyList] = useState([]);
const [invoiceProductList, setInvoiceProductList] = useState([]);
const [invoiceGroupInfo, setInvoiceGroupInfo] = useState({});
const [invoiceFormData, setInvoiceFormData] = useState({});
const [invoicekImages, setInvoicekImages] = useState([]);
useEffect(() => {
console.info("Detail.useEffect: " + GMDSN + "/" + GSN);
defaultShow();
@ -37,19 +42,23 @@ function Detail() {
function defaultShow() {
setDataLoading(true);
invoiceStore
.fetchInvoiceDetail(travelAgencyId, GMDSN, GSN)
fetchInvoiceDetail(travelAgencyId, GMDSN, GSN)
.then(json => {
let ZDDetail = json.ZDDetail;
setInvoiceZDDetail(json.invoiceZDDetail);
setInvoiceGroupInfo(json.invoiceGroupInfo);
setInvoiceProductList(json.invoiceProductList);
setInvoiceCurrencyList(json.invoiceCurrencyList);
let ZDDetail = json.invoiceZDDetail;
if (isNotEmpty(ZDDetail)) {
let arrLen = ZDDetail.length;
const formData = ZDDetail.map((data, index) => {
if (data.GMD_Dealed == false && arrLen == index + 1) {
//
runInAction(() => {
invoiceStore.invoiceFormData = { info_money: data.GMD_Cost, info_Currency: data.GMD_Currency, info_date: isNotEmpty(data.GMD_PayDate) ? dayjs(data.GMD_PayDate) : "", info_gmdsn: data.GMD_SN };
});
return { info_money: data.GMD_Cost, info_Currency: data.GMD_Currency, info_date: isNotEmpty(data.GMD_PayDate) ? dayjs(data.GMD_PayDate) : "", info_gmdsn: data.GMD_SN };
const _formData = { info_money: data.GMD_Cost, info_Currency: data.GMD_Currency, info_date: isNotEmpty(data.GMD_PayDate) ? dayjs(data.GMD_PayDate) : "", info_gmdsn: data.GMD_SN };
setInvoiceFormData(_formData);
return _formData;
}
});
@ -73,9 +82,7 @@ function Detail() {
});
}
if (data.GMD_Dealed == false && arrLen == index + 1) {
runInAction(() => {
invoiceStore.invoicekImages = picList;
});
setInvoicekImages(picList);
}
return picList;
});
@ -95,7 +102,7 @@ function Detail() {
});
}
const fileList = toJS(invoicekImages);
const fileList = (invoicekImages);
//
let arrimg = [];
if (isNotEmpty(fileList)) {
@ -111,15 +118,13 @@ function Detail() {
info_date: isNotEmpty(values["info_date"]) ? values["info_date"].format("YYYY-MM") : null,
info_images: JSON.stringify(arrimg),
};
console.log("Success:", fieldVaule);
// console.log("Success:", fieldVaule);
//
if (fieldVaule) {
invoiceStore.postEditInvoiceDetail(userId, fieldVaule.info_gmdsn, fieldVaule.info_Currency, fieldVaule.info_money, fieldVaule.info_date, fieldVaule.info_images, "").then(data => {
console.log(data);
runInAction(() => {
postEditInvoiceDetail(userId, fieldVaule.info_gmdsn, fieldVaule.info_Currency, fieldVaule.info_money, fieldVaule.info_date, fieldVaule.info_images, "").then(data => {
// console.log(data);
let param = { info_money: fieldVaule.info_money, info_Currency: fieldVaule.info_Currency, info_date: fieldVaule.info_date };
invoiceStore.invoiceFormData = param;
});
setInvoiceFormData(param);
if (data.errcode == 0) {
setEdited(true);
notification.success({
@ -142,14 +147,12 @@ function Detail() {
}
return file;
});
runInAction(() => {
invoiceStore.invoicekImages = newFileList;
});
setInvoicekImages(newFileList);
};
const handRemove = info => {
console.log(info);
invoiceStore.removeFeedbackImages(info.url);
removeFeedbackImages(info.url);
return true;
};
@ -167,8 +170,7 @@ function Detail() {
}
function addInvoice() {
invoiceStore
.postAddInvoice(userId, travelAgencyId, GSN, "", 0, "", "[]", "")
postAddInvoice(userId, travelAgencyId, GSN, "", 0, "", "[]", "")
.then(data => {})
.finally(() => {
defaultShow();
@ -194,6 +196,21 @@ function Detail() {
}
}
const invoiceStatus = (FKState) => {
switch (FKState - 1) {
case 1:
return 'Submitted';
case 2:
return 'Travel Advisor';
case 3:
return 'Finance Dept';
case 4:
return 'Paid';
default:
return '';
}
};
//
function bindSubmitForm() {
if (isNotEmpty(invoiceZDDetail)) {
@ -211,7 +228,7 @@ function Detail() {
<Descriptions.Item label="Amount">{data.GMD_Cost}</Descriptions.Item>
<Descriptions.Item label="Currency">{data.GMD_Currency}</Descriptions.Item>
<Descriptions.Item label="Due Dat">{data.GMD_PayDate}</Descriptions.Item>
<Descriptions.Item label="Status">{invoiceStore.invoiceStatus(data.FKState)}</Descriptions.Item>
<Descriptions.Item label="Status">{invoiceStatus(data.FKState)}</Descriptions.Item>
</Descriptions>
</Col>
<Col span={12}>
@ -348,4 +365,4 @@ function Detail() {
);
}
export default observer(Detail);
export default (Detail);

@ -1,30 +1,21 @@
import { NavLink, useNavigate } from "react-router-dom";
import { useEffect, useState } from "react";
import { observer } from "mobx-react";
import { useState } from "react";
import { toJS } from "mobx";
import { Row, Col, Space, Button, Table, Input, DatePicker, Typography, App, Steps ,Select } from "antd";
import { useStore } from "@/stores/StoreContext.js";
import * as config from "@/config";
import { Row, Col, Space, Button, Table, App, Steps } from "antd";
import { formatDate, isNotEmpty } from "@/utils/commons";
import { AuditOutlined, SmileOutlined, SolutionOutlined, EditOutlined } from "@ant-design/icons";
import useAuthStore from '@/stores/Auth';
import usePresets from '@/hooks/usePresets';
import SearchForm from '@/components/SearchForm';
import dayjs from 'dayjs';
import useAuthStore from '@/stores/Auth';
import useInvoiceStore from '@/stores/Invoice';
const { Title } = Typography;
function Index() {
const { authStore, invoiceStore } = useStore();
const { invoiceList, search_date_start, search_date_end } = invoiceStore;
const [travelAgencyId ] = useAuthStore((state) => [state.loginUser.travelAgencyId]);
const [groupNo, onGroupNoChange] = useState("");
const [OrderType, onOrderTypeChange] = useState(0); //
const [travelAgencyId, ] = useAuthStore((state) => [state.loginUser.travelAgencyId]);
const [invoiceList, fetchInvoiceList] = useInvoiceStore((state) => [state.invoiceList, state.fetchInvoiceList]);
const navigate = useNavigate();
const { notification } = App.useApp();
const showTotal = total => `Total ${invoiceList.length} items`;
const showTotal = total => `Total ${total} items`;
const invoiceListColumns = [
{
@ -82,36 +73,34 @@ function Index() {
return (
<Space direction="vertical" style={{ width: "100%" }}>
<Row gutter={16}>
<Col flex="auto">
<SearchForm
initialValue={{
dates: [dayjs().subtract(2, 'M').startOf('M'), dayjs().endOf('M')],
}}
fieldsConfig={{
shows: ['referenceNo', 'invoiceStatus', 'dates'],
fieldProps: {
referenceNo: { col: 5},
invoiceStatus: { col: 4},
dates: { col: 10 },
},
}}
onSubmit={(err, formVal, filedsVal) => {
// fetchInvoiceList(travelAgencyId, formVal.referenceNo, formVal.startdate, formVal.enddate, formVal.invoiceStatus);
invoiceStore.fetchInvoiceList(travelAgencyId, formVal.referenceNo, formVal.startdate, formVal.enddate, formVal.invoiceStatus)
}}
/>
</Col>
<Col md={24} lg={4} xxl={4}>
<Button icon={<AuditOutlined />} onClick={() => navigate(`/invoice/detail/0/338787`)}>
Misc. Invoice
</Button>
<Button icon={<AuditOutlined />} onClick={() => navigate(`/invoice/paid`)}>
Bank statement
</Button>
</Col>
</Row>
<Row gutter={16}>
<Col flex="auto">
<SearchForm
initialValue={{
dates: [dayjs().subtract(2, 'M').startOf('M'), dayjs().endOf('M')],
}}
fieldsConfig={{
shows: ['referenceNo', 'invoiceStatus', 'dates'],
fieldProps: {
referenceNo: { col: 5 },
invoiceStatus: { col: 4},
dates: { col: 10 },
},
}}
onSubmit={(err, formVal, filedsVal) => {
fetchInvoiceList(travelAgencyId, formVal.referenceNo, formVal.startdate, formVal.enddate, formVal.invoiceStatus);
}}
/>
</Col>
<Col md={24} lg={4} xxl={4}>
<Button icon={<AuditOutlined />} onClick={() => navigate(`/invoice/detail/0/338787`)}>
Misc. Invoice
</Button>
<Button icon={<AuditOutlined />} onClick={() => navigate(`/invoice/paid`)}>
Bank statement
</Button>
</Col>
</Row>
<Row>
<Col md={24} lg={24} xxl={24}>
<Table bordered pagination={{ defaultPageSize: 20, showTotal: showTotal }} columns={invoiceListColumns} dataSource={toJS(invoiceList)} />
@ -121,5 +110,5 @@ function Index() {
);
}
export default observer(Index);
export default (Index);
//value={[search_date_start, search_date_end]} 20230803 zp

@ -1,28 +1,21 @@
import { NavLink, useNavigate } 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, Image } from 'antd';
import { useStore } from '@/stores/StoreContext.js';
import * as config from '@/config';
import { useEffect } from 'react';
import { Row, Col, Space, Table, Image } from 'antd';
import { formatDate, isNotEmpty } from '@/utils/commons';
import usePresets from '@/hooks/usePresets';
import SearchForm from '@/components/SearchForm';
import useAuthStore from '@/stores/Auth';
import dayjs from 'dayjs';
import BackBtn from '@/components/BackBtn';
const { Title } = Typography;
import useInvoiceStore from '@/stores/Invoice';
function Paid() {
const { invoiceStore } = useStore();
const { invoicePaid, search_date_start, search_date_end } = invoiceStore;
const [travelAgencyId] = useAuthStore((state) => [state.loginUser.travelAgencyId]);
const [invoicePaid, fetchInvoicePaid] = useInvoiceStore((state) => [state.invoicePaid, state.fetchInvoicePaid]);
const navigate = useNavigate();
const showTotal = (total) => `Total ${total} items`;
useEffect(() => {
invoiceStore.fetchInvoicePaid(travelAgencyId, '', '', '');
fetchInvoicePaid(travelAgencyId, '', '', '');
}, []);
const invoicePaidColumns = [
{
@ -84,7 +77,7 @@ function Paid() {
},
}}
onSubmit={(err, formVal, filedsVal) => {
invoiceStore.fetchInvoicePaid(travelAgencyId, formVal.referenceNo, formVal.startdate, formVal.enddate);
fetchInvoicePaid(travelAgencyId, formVal.referenceNo, formVal.startdate, formVal.enddate);
}}
/>
</Col>
@ -94,11 +87,11 @@ function Paid() {
</Row>
<Row>
<Col md={24} lg={24} xxl={24}>
<Table bordered columns={invoicePaidColumns} dataSource={toJS(invoicePaid)} />
<Table bordered columns={invoicePaidColumns} dataSource={(invoicePaid)} />
</Col>
</Row>
</Space>
);
}
export default observer(Paid);
export default (Paid);

@ -1,69 +1,63 @@
import { NavLink, useNavigate ,useParams} from "react-router-dom";
import { useEffect, useState } from "react";
import { observer } from "mobx-react";
import { toJS } from "mobx";
import { Row, Col, Space, Button, Table, Typography } from "antd";
import { useStore } from "@/stores/StoreContext.js";
import * as config from "@/config";
import { formatDate, isNotEmpty } from "@/utils/commons";
import { useNavigate, useParams } from 'react-router-dom';
import { useEffect, useState } from 'react';
import { Row, Col, Space, Table, Typography } from 'antd';
import { formatDate, isNotEmpty } from '@/utils/commons';
import useAuthStore from '@/stores/Auth';
import BackBtn from '@/components/BackBtn';
import { fetchInvoicePaidDetail } from '@/stores/Invoice';
const { Title } = Typography;
function PaidDetail(){
const navigate = useNavigate();
const { invoiceStore } = useStore();
const { invoicePaidDetail } = invoiceStore;
const [travelAgencyId] = useAuthStore((state) => [state.loginUser.travelAgencyId]);
const { flid } = useParams();
function PaidDetail() {
const navigate = useNavigate();
const [travelAgencyId] = useAuthStore((state) => [state.loginUser.travelAgencyId]);
const { flid } = useParams();
useEffect(() => {
invoiceStore.fetchInvoicePaidDetail(travelAgencyId,flid);
const [invoicePaidDetail, setInvoicePaidDetail] = useState([]);
useEffect(() => {
fetchInvoicePaidDetail(travelAgencyId, flid).then(res => setInvoicePaidDetail(res));
}, [flid]);
},[flid]);
const invoicePaidColumns = [
{
title: 'Ref.NO',
dataIndex: 'fl2_GroupName',
key: 'fl2_GroupName',
},
{
title: 'Arrival date',
key: 'fl2_ArriveDate',
dataIndex: 'fl2_ArriveDate',
render: (text, record) => (isNotEmpty(text) ? formatDate(new Date(text)) : ''),
},
{
title: 'Payment amount',
key: 'fl2_price',
dataIndex: 'fl2_price',
},
{
title: 'Currency',
key: 'fl2_memo',
dataIndex: 'fl2_memo',
},
];
const invoicePaidColumns = [
{
title: "Ref.NO",
dataIndex: "fl2_GroupName",
key: "fl2_GroupName",
},
{
title: "Arrival date",
key: "fl2_ArriveDate",
dataIndex: "fl2_ArriveDate",
render: (text, record) => (isNotEmpty(text) ? formatDate(new Date(text)) : ""),
},
{
title: "Payment amount",
key: "fl2_price",
dataIndex: "fl2_price",
},
{
title: "Currency",
key: "fl2_memo",
dataIndex: "fl2_memo",
},
];
return (
<Space direction="vertical" style={{ width: "100%" }}>
<Row gutter={16}>
<Col span={20}>
</Col>
<Col span={4}>
<BackBtn />
</Col>
</Row>
<Title level={3}></Title>
<Row>
<Col md={24} lg={24} xxl={24}>
<Table bordered columns={invoicePaidColumns} dataSource={toJS(invoicePaidDetail)} />
</Col>
</Row>
</Space>
);
return (
<Space direction='vertical' style={{ width: '100%' }}>
<Row gutter={16}>
<Col span={20}></Col>
<Col span={4}>
<BackBtn />
</Col>
</Row>
<Title level={3}></Title>
<Row>
<Col md={24} lg={24} xxl={24}>
<Table bordered columns={invoicePaidColumns} dataSource={invoicePaidDetail} />
</Col>
</Row>
</Space>
);
}
export default observer(PaidDetail);
export default PaidDetail;

Loading…
Cancel
Save