Commit fcbffffd authored by Bill's avatar Bill

结算能力对接应付账款,应收账款

parent 932096bb
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
<<<<<<< HEAD <<<<<<< HEAD
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
* @LastEditTime: 2020-10-26 18:20:31 * @LastEditTime: 2020-10-26 18:20:31
======= =======
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
...@@ -16,6 +17,9 @@ ...@@ -16,6 +17,9 @@
======= =======
* @LastEditTime: 2020-10-23 16:07:53 * @LastEditTime: 2020-10-23 16:07:53
>>>>>>> b7a56747... 结算能力-结算规则配置接口对接完成,剩余部分等接口 >>>>>>> b7a56747... 结算能力-结算规则配置接口对接完成,剩余部分等接口
=======
* @LastEditTime: 2020-10-26 11:36:19
>>>>>>> 38b99535... 结算能力对接应付账款,应收账款
*/ */
export default { export default {
...@@ -521,7 +525,7 @@ export default { ...@@ -521,7 +525,7 @@ export default {
'menu.balance.accountsPayable.logisticsDetail': '物流通知单结算明细', 'menu.balance.accountsPayable.logisticsDetail': '物流通知单结算明细',
'menu.balance.accountsPayable.productNoticeSettlementDetail': '生产通知单结算明细', 'menu.balance.accountsPayable.productNoticeSettlementDetail': '生产通知单结算明细',
'menu.balance.accountsReceivable': '应收账款结算', 'menu.balance.accountsReceivable': '应收账款结算',
'menu.balance.accountsReceivable.settlementList': '应账款结算', 'menu.balance.accountsReceivable.settlementList': '应账款结算',
'menu.balance.accountsReceivable.logisticsDetail': '物流通知单结算明细', 'menu.balance.accountsReceivable.logisticsDetail': '物流通知单结算明细',
'menu.balance.accountsReceivable.productNoticeSettlementDetail': '生产通知单结算明细', 'menu.balance.accountsReceivable.productNoticeSettlementDetail': '生产通知单结算明细',
'menu.balance.accountsReceivable.invoice': '开票管理', 'menu.balance.accountsReceivable.invoice': '开票管理',
......
...@@ -14,18 +14,25 @@ import { StandardTable } from 'god'; ...@@ -14,18 +14,25 @@ import { StandardTable } from 'god';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'; import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect'; import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { schema } from './schema'; import { schema } from './schema';
import ModalContainer from '../../components/ModalContainer'; import StatusTag from '../../components/StatusTag';
import ConfirmAccount from '../../components/ConfirmAccount'; import StatusActions from '../../components/StatusActions';
import Voucher from '../../components/Voucher'; import { PublicApi } from '@/services/api';
const formActions = createFormActions(); const formActions = createFormActions();
const SettlementList = () => { const SettlementList = () => {
const ref = useRef<any>({}) const ref = useRef<any>({})
const fetchListData = async (params) => { const fetchListData = async (params) => {
const searchParams = {
orderType: 0,
status: 0,
...params,
}
// /settle/accounts/member/settlement/pagePayableSettlement
const { data } = await PublicApi.getSettleAccountsMemberSettlementPagePayableSettlement(searchParams);
return { return {
data: [{id: 1}], totalCount: 1,
totalCount: 1 data: [{id: 1, status: 2}]
} }
} }
const columns = [ const columns = [
...@@ -42,7 +49,7 @@ const SettlementList = () => { ...@@ -42,7 +49,7 @@ const SettlementList = () => {
title: '结算状态', dataIndex: 'status', title: '结算状态', dataIndex: 'status',
render: (text, record) => { render: (text, record) => {
return ( return (
<Tag>待对账</Tag> <StatusTag status={record.status} />
) )
} }
}, },
...@@ -50,48 +57,47 @@ const SettlementList = () => { ...@@ -50,48 +57,47 @@ const SettlementList = () => {
title: '操作', title: '操作',
render: (text, record) => { render: (text, record) => {
return ( return (
<> <StatusActions
status={record.status}
<ModalContainer> handleReconciledComfirm={handleConfirm}
{ handleComfirmInCompletePayment={handleComfirmInCompletePayment}
({visible, show, cancel}) => { handleComfirmCompletePayment={handleComfirmCompletePayment}
return ( />
<>
<Modal width={548} title="查看付款凭证" onCancel={cancel} visible={visible} footer={null}>
<Voucher />
</Modal>
<div onClick={show}>查看付款凭证</div>
</>
)
}
}
</ModalContainer>
<ModalContainer>
{
({visible, show, cancel}) => {
return (
<>
<Modal width={548} title="确认付款凭证" onCancel={cancel} visible={visible}
footer={(
<Space>
<Button>取消</Button>
<Button>确认</Button>
</Space>
)}
>
<Voucher />
</Modal>
<div onClick={show}>确认付款凭证</div>
</>
)
}
}
</ModalContainer>
</>
) )
} }
} }
] ]
/**
* 确认对账
* @param cancel 关闭回调函数
*/
const handleConfirm = (params: any) => {
console.log(123)
params.onCancel();
}
const handleComfirmInCompletePayment = (params: any) => {
console.log(params);
params.onCancel()
}
const handleComfirmCompletePayment = (params: any) => {
params.onCancel();
}
/**
* 搜索
*/
const handleSearch = (values) => {
console.log(values);
const format = 'YYYY-MM-DD'
const startTime = values.startTime?.format(format);
const endTime = values.endTime?.format(format);
console.log(startTime, endTime);
ref.current.reload({startTime, endTime});
}
return ( return (
<PageHeaderWrapper> <PageHeaderWrapper>
<Card> <Card>
...@@ -115,7 +121,7 @@ const SettlementList = () => { ...@@ -115,7 +121,7 @@ const SettlementList = () => {
// ); // );
}} }}
schema={schema} schema={schema}
onSubmit={values => ref.current.reload(values)} onSubmit={handleSearch}
/> />
} }
/> />
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Description: 积分结算详情页 * @Description: 积分结算详情页
*/ */
import React, { useRef } from 'react'; import React, { useRef, useEffect, useState } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout' import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Card, PageHeader, Descriptions, Button} from 'antd'; import { Card, PageHeader, Descriptions, Button} from 'antd';
import { history } from 'umi'; import { history } from 'umi';
...@@ -16,7 +16,9 @@ import { StandardTable } from 'god'; ...@@ -16,7 +16,9 @@ import { StandardTable } from 'god';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'; import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect'; import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { detailSchema } from './schema' import { detailSchema } from './schema'
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import StatusTag from '../../components/StatusTag';
const formActions = createFormActions(); const formActions = createFormActions();
const columns = [ const columns = [
...@@ -32,12 +34,44 @@ const columns = [ ...@@ -32,12 +34,44 @@ const columns = [
{title: '结算金额', dataIndex: 'payPrice'}, {title: '结算金额', dataIndex: 'payPrice'},
] ]
interface infoType {
id: number, // 会员结算id
settlementNo: string, // 结算单号
settlementDate: string, // 结算日期
settlementWayName: string, // 结算方式名称
settlementName: string, // 结算方
payName: string, // 付款方
orderTypeName: string, // 结算单据类型名称
totalCount: number, // 总单数
amount: number, // 结算金额
statusName: string // 结算状态名称
}
const logisticsDetail: React.FC = () => { const logisticsDetail: React.FC = () => {
const ref = useRef<any>({}); const ref = useRef<any>({});
const [infoDetail, setInfoDetail] = useState<infoType>(null);
const { id, preview } = usePageStatus();
const fetchListData = async (params) => { const fetchListData = async (params) => {
return {} console.log(id);
// const { data } = await PublicApi.getSettleAccountsMemberSettlementGetPayableDetail({id})
return {
totalCount: 0,
data: []
}
} }
useEffect(() => {
if(id) {
// 获取详情
async function fetchDetail() {
const { data } = await PublicApi.getSettleAccountsMemberSettlementGetPayableDetail({id})
setInfoDetail(data);
}
fetchDetail();
}
}, [id])
return ( return (
<PageHeaderWrapper <PageHeaderWrapper
title={ title={
...@@ -49,7 +83,7 @@ const logisticsDetail: React.FC = () => { ...@@ -49,7 +83,7 @@ const logisticsDetail: React.FC = () => {
<AvatarWrap <AvatarWrap
info={{ info={{
aloneTxt: '单', aloneTxt: '单',
name: "通知单号:" name: "结算单号:"
}} }}
extra={( extra={(
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{"TPTY12"}</span> <span style={{ fontSize: 12, fontWeight: 'normal' }}>{"TPTY12"}</span>
...@@ -63,12 +97,12 @@ const logisticsDetail: React.FC = () => { ...@@ -63,12 +97,12 @@ const logisticsDetail: React.FC = () => {
padding: '0 32px', padding: '0 32px',
}} }}
> >
<Descriptions.Item label="通知单摘要">{"进口头层黄牛皮荔枝纹"}</Descriptions.Item> <Descriptions.Item label="结算日期">{infoDetail?.settlementDate}</Descriptions.Item>
<Descriptions.Item label="供应会员:">{"广州白马皮具交易中心"}</Descriptions.Item> <Descriptions.Item label="结算单数:">{infoDetail?.totalCount}</Descriptions.Item>
<Descriptions.Item label="单据时间:">{"2020-09-09 12:58:25"}</Descriptions.Item> <Descriptions.Item label="结算金额:">{infoDetail?.amount}</Descriptions.Item>
<Descriptions.Item label="通知单来源:">{"订单加工"}</Descriptions.Item> <Descriptions.Item label="结算方:">{infoDetail?.settlementName}</Descriptions.Item>
<Descriptions.Item label="外部状态:">{"以完成通知单"}</Descriptions.Item> <Descriptions.Item label="结算方式:">{infoDetail?.settlementWayName}</Descriptions.Item>
<Descriptions.Item label="内部状态:">{"审核通过"}</Descriptions.Item> <Descriptions.Item label="外部状态:">{infoDetail?.statusName}</Descriptions.Item>
</Descriptions> </Descriptions>
</PageHeader> </PageHeader>
</> </>
......
...@@ -4,18 +4,20 @@ ...@@ -4,18 +4,20 @@
* @Description: 积分结算详情页 * @Description: 积分结算详情页
*/ */
import React, { useRef } from 'react'; import React, { useRef, useState, useEffect } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout' import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Card, PageHeader, Descriptions, Button} from 'antd'; import { Card, PageHeader, Descriptions, Button} from 'antd';
import { history } from 'umi'; import { history } from 'umi';
import AvatarWrap from '@/components/AvatarWrap'; import AvatarWrap from '@/components/AvatarWrap';
import NiceForm from '@/components/NiceForm'; import NiceForm from '@/components/NiceForm';
import { FORM_FILTER_PATH } from '@/formSchema/const'; import { FORM_FILTER_PATH } from '@/formSchema/const';
import { ISchema, createFormActions } from '@formily/antd'; import { createFormActions } from '@formily/antd';
import { StandardTable } from 'god'; import { StandardTable } from 'god';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'; import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect'; import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { detailSchema } from './schema' import { detailSchema } from './schema'
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
const formActions = createFormActions(); const formActions = createFormActions();
...@@ -32,12 +34,39 @@ const columns = [ ...@@ -32,12 +34,39 @@ const columns = [
{title: '结算金额', dataIndex: 'payPrice'}, {title: '结算金额', dataIndex: 'payPrice'},
] ]
interface infoType {
id: number, // 会员结算id
settlementNo: string, // 结算单号
settlementDate: string, // 结算日期
settlementWayName: string, // 结算方式名称
settlementName: string, // 结算方
payName: string, // 付款方
orderTypeName: string, // 结算单据类型名称
totalCount: number, // 总单数
amount: number, // 结算金额
statusName: string // 结算状态名称
}
const ProductNoticeSettlementDetail: React.FC = () => { const ProductNoticeSettlementDetail: React.FC = () => {
const ref = useRef<any>({}); const ref = useRef<any>({});
const [infoDetail, setInfoDetail] = useState<infoType>(null);
const { id, preview } = usePageStatus();
const fetchListData = async (params) => { const fetchListData = async (params) => {
return {} return {}
} }
useEffect(() => {
if(id) {
// 获取详情
async function fetchDetail() {
const { data } = await PublicApi.getSettleAccountsMemberSettlementGetPayableDetail({id})
setInfoDetail(data);
}
fetchDetail();
}
}, [id])
return ( return (
<PageHeaderWrapper <PageHeaderWrapper
title={ title={
...@@ -63,12 +92,12 @@ const ProductNoticeSettlementDetail: React.FC = () => { ...@@ -63,12 +92,12 @@ const ProductNoticeSettlementDetail: React.FC = () => {
padding: '0 32px', padding: '0 32px',
}} }}
> >
<Descriptions.Item label="通知单摘要">{"进口头层黄牛皮荔枝纹"}</Descriptions.Item> <Descriptions.Item label="结算日期">{infoDetail?.settlementDate}</Descriptions.Item>
<Descriptions.Item label="供应会员:">{"广州白马皮具交易中心"}</Descriptions.Item> <Descriptions.Item label="结算单数:">{infoDetail?.totalCount}</Descriptions.Item>
<Descriptions.Item label="单据时间:">{"2020-09-09 12:58:25"}</Descriptions.Item> <Descriptions.Item label="结算金额:">{infoDetail?.amount}</Descriptions.Item>
<Descriptions.Item label="通知单来源:">{"订单加工"}</Descriptions.Item> <Descriptions.Item label="结算方:">{infoDetail?.settlementName}</Descriptions.Item>
<Descriptions.Item label="外部状态:">{"以完成通知单"}</Descriptions.Item> <Descriptions.Item label="结算方式:">{infoDetail?.settlementWayName}</Descriptions.Item>
<Descriptions.Item label="内部状态:">{"审核通过"}</Descriptions.Item> <Descriptions.Item label="外部状态:">{infoDetail?.statusName}</Descriptions.Item>
</Descriptions> </Descriptions>
</PageHeader> </PageHeader>
</> </>
......
...@@ -58,15 +58,15 @@ export const schema: ISchema = { ...@@ -58,15 +58,15 @@ export const schema: ISchema = {
allowClear: true, allowClear: true,
}, },
}, },
// submit: { submit: {
// 'x-component': 'Submit', 'x-component': 'Submit',
// 'x-mega-props': { 'x-mega-props': {
// span: 1, span: 1,
// }, },
// 'x-component-props': { 'x-component-props': {
// children: '查询', children: '查询',
// }, },
// }, },
}, },
}, },
}, },
......
...@@ -6,28 +6,31 @@ ...@@ -6,28 +6,31 @@
import React, { useRef } from 'react'; import React, { useRef } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout' import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Card, Button, Modal, DatePicker, Tag, Space } from 'antd'; import { Card, DatePicker} from 'antd';
import NiceForm from '@/components/NiceForm'; import NiceForm from '@/components/NiceForm';
import { FORM_FILTER_PATH } from '@/formSchema/const'; import { FORM_FILTER_PATH } from '@/formSchema/const';
import { ISchema, createFormActions } from '@formily/antd'; import { createFormActions } from '@formily/antd';
import { StandardTable } from 'god'; import { StandardTable } from 'god';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'; import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect'; import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { schema } from './schema'; import { schema } from './schema';
import ModalContainer from '../../components/ModalContainer'; import { PublicApi } from '@/services/api';
import ConfirmAccount from '../../components/ConfirmAccount'; import StatusActions from '../../components/StatusActions';
import Voucher from '../../components/Voucher'; import StatusTag from '../../components/StatusTag';
const formActions = createFormActions(); const formActions = createFormActions();
const SettlementList = () => { const SettlementList = () => {
const ref = useRef<any>({}) const ref = useRef<any>({})
const fetchListData = async (params) => { const fetchListData = async (params) => {
return { const searchParams = {
data: [{id: 1}], orderType: 0,
totalCount: 1 status: 0,
...params,
} }
// /settle/accounts/member/settlement/pagePayableSettlement
const { data } = await PublicApi.getSettleAccountsMemberSettlementPageReceivableSettlement(searchParams);
return data
} }
const columns = [ const columns = [
{title: '结算单号', dataIndex: 'num'}, {title: '结算单号', dataIndex: 'num'},
...@@ -43,7 +46,7 @@ const SettlementList = () => { ...@@ -43,7 +46,7 @@ const SettlementList = () => {
title: '结算状态', dataIndex: 'status', title: '结算状态', dataIndex: 'status',
render: (text, record) => { render: (text, record) => {
return ( return (
<Tag>待对账</Tag> <StatusTag status={record.status || 1} />
) )
} }
}, },
...@@ -51,70 +54,33 @@ const SettlementList = () => { ...@@ -51,70 +54,33 @@ const SettlementList = () => {
title: '操作', title: '操作',
render: (text, record) => { render: (text, record) => {
return ( return (
<> <StatusActions
<ModalContainer> status={record.status || 3}
{ handleReconciledComfirm={handleConfirm}
({visible, show, cancel}) => { handleComfirmInCompletePayment={handleComfirmInCompletePayment}
return ( handleComfirmCompletePayment={handleComfirmCompletePayment}
<> />
<Modal width={400} title="确认对账完成" visible={visible} onCancel={cancel} onOk={() => handleConfirm(cancel)}>
<ConfirmAccount />
</Modal>
<div onClick={show}>确认对账完成</div>
</>
)
}
}
</ModalContainer>
<ModalContainer>
{
({visible, show, cancel}) => {
return (
<>
<Modal width={548} title="查看付款凭证" onCancel={cancel} visible={visible} footer={null}>
<Voucher />
</Modal>
<div onClick={show}>查看付款凭证</div>
</>
)
}
}
</ModalContainer>
<ModalContainer>
{
({visible, show, cancel}) => {
return (
<>
<Modal width={548} title="确认付款凭证" onCancel={cancel} visible={visible}
footer={(
<Space>
<Button>取消</Button>
<Button>确认未到款</Button>
<Button>确认到款</Button>
</Space>
)}
>
<Voucher />
</Modal>
<div onClick={show}>确认付款凭证</div>
</>
)
}
}
</ModalContainer>
</>
) )
} }
} }
] ]
/** /**
* 确认对账 * 确认对账
* @param cancel 关闭回调函数 * @param cancel 关闭回调函数
*/ */
const handleConfirm = (cancel) => { const handleConfirm = (params: any) => {
console.log(123) console.log(123)
cancel(); params.onCancel();
}
const handleComfirmInCompletePayment = (params: any) => {
console.log(params);
params.onCancel()
}
const handleComfirmCompletePayment = (params: any) => {
params.onCancel();
} }
return ( return (
<PageHeaderWrapper> <PageHeaderWrapper>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Description: 积分结算详情页 * @Description: 积分结算详情页
*/ */
import React, { useRef } from 'react'; import React, { useRef, useEffect, useState } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout' import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Card, PageHeader, Descriptions, Button} from 'antd'; import { Card, PageHeader, Descriptions, Button} from 'antd';
import { history } from 'umi'; import { history } from 'umi';
...@@ -16,7 +16,9 @@ import { StandardTable } from 'god'; ...@@ -16,7 +16,9 @@ import { StandardTable } from 'god';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'; import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect'; import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { detailSchema } from './schema' import { detailSchema } from './schema'
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import StatusTag from '../../components/StatusTag';
const formActions = createFormActions(); const formActions = createFormActions();
const columns = [ const columns = [
...@@ -32,13 +34,44 @@ const columns = [ ...@@ -32,13 +34,44 @@ const columns = [
{title: '结算金额', dataIndex: 'payPrice'}, {title: '结算金额', dataIndex: 'payPrice'},
] ]
interface infoType {
id: number, // 会员结算id
settlementNo: string, // 结算单号
settlementDate: string, // 结算日期
settlementWayName: string, // 结算方式名称
settlementName: string, // 结算方
payName: string, // 付款方
orderTypeName: string, // 结算单据类型名称
totalCount: number, // 总单数
amount: number, // 结算金额
statusName: string // 结算状态名称
}
const logisticsDetail: React.FC = () => { const logisticsDetail: React.FC = () => {
const ref = useRef<any>({}); const ref = useRef<any>({});
const [infoDetail, setInfoDetail] = useState<infoType>(null);
const { id, preview } = usePageStatus();
const fetchListData = async (params) => { const fetchListData = async (params) => {
return {} console.log(id);
// const { data } = await PublicApi.getSettleAccountsMemberSettlementGetPayableDetail({id})
return {
totalCount: 0,
data: []
}
} }
useEffect(() => {
if(id) {
// 获取详情
async function fetchDetail() {
const { data } = await PublicApi.getSettleAccountsMemberSettlementGetPayableDetail({id})
setInfoDetail(data);
}
fetchDetail();
}
}, [id])
return ( return (
<PageHeaderWrapper <PageHeaderWrapper
title={ title={
...@@ -50,7 +83,7 @@ const logisticsDetail: React.FC = () => { ...@@ -50,7 +83,7 @@ const logisticsDetail: React.FC = () => {
<AvatarWrap <AvatarWrap
info={{ info={{
aloneTxt: '单', aloneTxt: '单',
name: "结算单号:" name: "结算单号"
}} }}
extra={( extra={(
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{"TPTY12"}</span> <span style={{ fontSize: 12, fontWeight: 'normal' }}>{"TPTY12"}</span>
...@@ -64,12 +97,12 @@ const logisticsDetail: React.FC = () => { ...@@ -64,12 +97,12 @@ const logisticsDetail: React.FC = () => {
padding: '0 32px', padding: '0 32px',
}} }}
> >
<Descriptions.Item label="通知单摘要">{"进口头层黄牛皮荔枝纹"}</Descriptions.Item> <Descriptions.Item label="结算日期">{infoDetail?.settlementDate}</Descriptions.Item>
<Descriptions.Item label="供应会员:">{"广州白马皮具交易中心"}</Descriptions.Item> <Descriptions.Item label="结算单数:">{infoDetail?.totalCount}</Descriptions.Item>
<Descriptions.Item label="单据时间:">{"2020-09-09 12:58:25"}</Descriptions.Item> <Descriptions.Item label="结算金额:">{infoDetail?.amount}</Descriptions.Item>
<Descriptions.Item label="通知单来源:">{"订单加工"}</Descriptions.Item> <Descriptions.Item label="结算方:">{infoDetail?.settlementName}</Descriptions.Item>
<Descriptions.Item label="外部状态:">{"以完成通知单"}</Descriptions.Item> <Descriptions.Item label="结算方式:">{infoDetail?.settlementWayName}</Descriptions.Item>
<Descriptions.Item label="内部状态:">{"审核通过"}</Descriptions.Item> <Descriptions.Item label="外部状态:">{infoDetail?.statusName}</Descriptions.Item>
</Descriptions> </Descriptions>
</PageHeader> </PageHeader>
</> </>
......
...@@ -4,19 +4,23 @@ ...@@ -4,19 +4,23 @@
* @Description: 积分结算详情页 * @Description: 积分结算详情页
*/ */
import React, { useRef } from 'react'; import React, { useRef, useState, useEffect } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout' import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Card, PageHeader, Descriptions, Button} from 'antd'; import { Card, PageHeader, Descriptions, Button} from 'antd';
import { history } from 'umi'; import { history } from 'umi';
import AvatarWrap from '@/components/AvatarWrap'; import AvatarWrap from '@/components/AvatarWrap';
import NiceForm from '@/components/NiceForm'; import NiceForm from '@/components/NiceForm';
import { FORM_FILTER_PATH } from '@/formSchema/const'; import { FORM_FILTER_PATH } from '@/formSchema/const';
import { ISchema, createFormActions } from '@formily/antd'; import { createFormActions } from '@formily/antd';
import { StandardTable } from 'god'; import { StandardTable } from 'god';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'; import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect'; import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { detailSchema } from './schema' import { detailSchema } from './schema'
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
const formActions = createFormActions(); const formActions = createFormActions();
const columns = [ const columns = [
{title: '单据号', dataIndex: 'no'}, {title: '单据号', dataIndex: 'no'},
{title: '单据摘要', dataIndex: 'desc'}, {title: '单据摘要', dataIndex: 'desc'},
...@@ -30,14 +34,39 @@ const columns = [ ...@@ -30,14 +34,39 @@ const columns = [
{title: '结算金额', dataIndex: 'payPrice'}, {title: '结算金额', dataIndex: 'payPrice'},
] ]
interface infoType {
id: number, // 会员结算id
settlementNo: string, // 结算单号
settlementDate: string, // 结算日期
settlementWayName: string, // 结算方式名称
settlementName: string, // 结算方
payName: string, // 付款方
orderTypeName: string, // 结算单据类型名称
totalCount: number, // 总单数
amount: number, // 结算金额
statusName: string // 结算状态名称
}
const ProductNoticeSettlementDetail: React.FC = () => { const ProductNoticeSettlementDetail: React.FC = () => {
const ref = useRef<any>({}); const ref = useRef<any>({});
const [infoDetail, setInfoDetail] = useState<infoType>(null);
const { id, preview } = usePageStatus();
const fetchListData = async (params) => { const fetchListData = async (params) => {
return {} return {}
} }
useEffect(() => {
if(id) {
// 获取详情
async function fetchDetail() {
const { data } = await PublicApi.getSettleAccountsMemberSettlementGetPayableDetail({id})
setInfoDetail(data);
}
fetchDetail();
}
}, [id])
return ( return (
<PageHeaderWrapper <PageHeaderWrapper
title={ title={
...@@ -48,6 +77,7 @@ const ProductNoticeSettlementDetail: React.FC = () => { ...@@ -48,6 +77,7 @@ const ProductNoticeSettlementDetail: React.FC = () => {
title={ title={
<AvatarWrap <AvatarWrap
info={{ info={{
aloneTxt: '单',
name: "通知单号:" name: "通知单号:"
}} }}
extra={( extra={(
...@@ -62,12 +92,12 @@ const ProductNoticeSettlementDetail: React.FC = () => { ...@@ -62,12 +92,12 @@ const ProductNoticeSettlementDetail: React.FC = () => {
padding: '0 32px', padding: '0 32px',
}} }}
> >
<Descriptions.Item label="通知单摘要">{"进口头层黄牛皮荔枝纹"}</Descriptions.Item> <Descriptions.Item label="结算日期">{infoDetail?.settlementDate}</Descriptions.Item>
<Descriptions.Item label="供应会员:">{"广州白马皮具交易中心"}</Descriptions.Item> <Descriptions.Item label="结算单数:">{infoDetail?.totalCount}</Descriptions.Item>
<Descriptions.Item label="单据时间:">{"2020-09-09 12:58:25"}</Descriptions.Item> <Descriptions.Item label="结算金额:">{infoDetail?.amount}</Descriptions.Item>
<Descriptions.Item label="通知单来源:">{"订单加工"}</Descriptions.Item> <Descriptions.Item label="结算方:">{infoDetail?.settlementName}</Descriptions.Item>
<Descriptions.Item label="外部状态:">{"以完成通知单"}</Descriptions.Item> <Descriptions.Item label="结算方式:">{infoDetail?.settlementWayName}</Descriptions.Item>
<Descriptions.Item label="内部状态:">{"审核通过"}</Descriptions.Item> <Descriptions.Item label="外部状态:">{infoDetail?.statusName}</Descriptions.Item>
</Descriptions> </Descriptions>
</PageHeader> </PageHeader>
</> </>
......
/*
* @Author: Bill
* @Date: 2020-10-26 15:05:03
* @Description: 结算能力公共类型集合
*/
/**
* 上传凭证类型
*/
export interface VoucherFileProps {
/**
* 文件名
*/
name: string,
/**
* 文件路径
*/
proveUrl: string
}
\ No newline at end of file
...@@ -10,6 +10,7 @@ import ConfirmAccount from '../../components/ConfirmAccount'; ...@@ -10,6 +10,7 @@ import ConfirmAccount from '../../components/ConfirmAccount';
import Voucher from '../../components/Voucher'; import Voucher from '../../components/Voucher';
import { StatusEnum, TO_BE_RECONCILED, TO_BE_PAY, TO_BE_COLLECTED, COMPLETED } from '../../components/StatusTag'; import { StatusEnum, TO_BE_RECONCILED, TO_BE_PAY, TO_BE_COLLECTED, COMPLETED } from '../../components/StatusTag';
import styles from './index.less'; import styles from './index.less';
import UploadPayVoucher from '../../components/UploadPayVoucher';
interface Iprops { interface Iprops {
status: StatusEnum, status: StatusEnum,
...@@ -87,7 +88,7 @@ const ViewPaymentVoucher: React.FC = (props) => { ...@@ -87,7 +88,7 @@ const ViewPaymentVoucher: React.FC = (props) => {
return ( return (
<> <>
<Modal width={548} title="查看付款凭证" onCancel={cancel} visible={visible} footer={null}> <Modal width={548} title="查看付款凭证" onCancel={cancel} visible={visible} footer={null}>
<Voucher /> <Voucher files={[]} />
</Modal> </Modal>
<div className={styles.modalBtn} onClick={show}>查看付款凭证</div> <div className={styles.modalBtn} onClick={show}>查看付款凭证</div>
</> </>
...@@ -98,10 +99,43 @@ const ViewPaymentVoucher: React.FC = (props) => { ...@@ -98,10 +99,43 @@ const ViewPaymentVoucher: React.FC = (props) => {
) )
} }
// 待付款 状态 上传付款凭证
const UploadVoucher: React.FC = (props) => {
return (
<ModalContainer>
{
({visible, show, cancel}) => {
return (
<>
<Modal
width={548}
title="上传付款凭证"
onCancel={cancel}
visible={visible}
footer={(
<Space>
<Button onClick={cancel}>取消</Button>
<Button
type={"primary"}
>确认</Button>
</Space>
)}
>
<UploadPayVoucher fileList={[{name: '123', proveUrl: ''}]} />
</Modal>
<div className={styles.modalBtn} onClick={show}>上传付款凭证</div>
</>
)
}
}
</ModalContainer>
)
}
// 待对账时显示确认对账, 待付款 什么都不显示, 代收款显示确认付款凭证, 以完成显示 查看付款凭证 // 待对账时显示确认对账, 待付款 什么都不显示, 代收款显示确认付款凭证, 以完成显示 查看付款凭证
const ChildrenComponent = { const ChildrenComponent = {
[TO_BE_RECONCILED]: ConfirmAccountComponent, [TO_BE_RECONCILED]: ConfirmAccountComponent,
[TO_BE_PAY]: null, [TO_BE_PAY]: UploadVoucher,
[TO_BE_COLLECTED]: ConfirmCollected, [TO_BE_COLLECTED]: ConfirmCollected,
[COMPLETED]: ViewPaymentVoucher [COMPLETED]: ViewPaymentVoucher
} }
......
.container {
.formItem {
display: flex;
flex-direction: row;
align-items: center;
font-size: 12px;
margin-bottom: 24px;
.label {
margin-right: 20px;
color: #909399;
width: 70px;
}
}
.voucherText {
color: #909399;
font-size: 14px;
}
.upload {
margin-top: 16px;
.tips {
margin-top: 12px;
font-size: 12px;
color: #909399;
}
}
}
\ No newline at end of file
...@@ -4,26 +4,99 @@ ...@@ -4,26 +4,99 @@
* @Description: 上传付款凭证 * @Description: 上传付款凭证
*/ */
import React from 'react'; import React, { useState, useEffect } from 'react';
import Voucher from '../Voucher'; import Voucher from '../Voucher';
import styles from './index.less';
import { Upload, Button, message } from 'antd';
import { UploadOutlined } from '@ant-design/icons'
import { UploadFile, UploadChangeParam } from 'antd/lib/upload/interface';
import { UPLOAD_TYPE } from '@/constants'
import { VoucherFileProps } from '../../common/type';
interface Iprops {
fileList: VoucherFileProps[],
}
const UploadPayVoucher: React.FC<Iprops> = (props) => {
const [fileList, setFileList] = useState([]);
const [loading, setLoading] = useState(false);
// 进来设置fileList
useEffect(() => {
setFileList(props.fileList)
}, [props.fileList])
/***
* 上传前检查
*/
const fileMaxSize = 200;
const beforeUpload = (file: UploadFile) => {
const isSizeLimit = file.size / 1024 < fileMaxSize;
if (!isSizeLimit) {
message.error(`上传文件大小不超过${fileMaxSize}K!`);
}
return isSizeLimit;
}
/**
* 上传配置
*/
const uploadProps = {
name: 'file',
action: '/api/file/file/upload',
headers: {},
data: {
fileType: UPLOAD_TYPE, // 指定类型是本地还是线上,
},
disabled: loading,
showUploadList: false,
onChange(info: UploadChangeParam) {
if (info.file.status === 'uploading') {
setLoading(true)
return;
}
if (info.file.status === 'done') {
// 图片回显
const { code, data } = info.file.response
if (code === 1000) {
console.log('upload success')
// onChange(data)
const temp = [...fileList];
const filename = info.file.name
temp.push({
name: filename,
proveUrl: data
})
setFileList(temp);
}
setLoading(false)
}
},
beforeUpload
};
const UploadPayVoucher = () => {
return ( return (
<div> <div className={styles.container}>
<div> <div className={styles.formItem}>
<span>账户名称</span> <span className={styles.label}>账户名称</span>
<span>温州市隆昌皮具有限公司</span> <span className={styles.value}>温州市隆昌皮具有限公司</span>
</div>
<div className={styles.formItem}>
<span className={styles.label}>银行账号</span>
<span className={styles.value}>3214 454646 145 46 1231</span>
</div> </div>
<div> <div className={styles.formItem}>
<span>银行账号</span> <span className={styles.label}>开户行</span>
<span>3214 454646 145 46 1231</span> <span className={styles.value}>中国建设银行广州市分行营业部</span>
</div> </div>
<div> <p className={styles.voucherText}>上传支付凭证</p>
<span>开户行</span> <Voucher files={fileList} />
<span>中国建设银行广州市分行营业部</span> <div className={styles.upload}>
<Upload {...uploadProps}>
<Button icon={<UploadOutlined />}>上传凭证</Button>
<p className={styles.tips}>单个凭证文件大小不能超过200K</p>
</Upload>
</div> </div>
<h1>上传支付凭证</h1>
<Voucher />
</div> </div>
) )
} }
......
...@@ -23,5 +23,10 @@ ...@@ -23,5 +23,10 @@
.view { .view {
margin-left: auto; margin-left: auto;
cursor: pointer;
}
.text {
cursor: pointer;
} }
} }
\ No newline at end of file
...@@ -7,17 +7,33 @@ ...@@ -7,17 +7,33 @@
import React from 'react'; import React from 'react';
import styles from './index.less' import styles from './index.less'
import image_icon from '@/assets/imgs/image_icon.png'; import image_icon from '@/assets/imgs/image_icon.png';
import { VoucherFileProps } from '../../common/type';
const Voucher = () => { interface Iprops {
files: VoucherFileProps[]
}
const Voucher: React.FC<Iprops> = (props) => {
const { files = [] } = props;
return ( return (
<div className={styles.container}> <>
{/* <div></div>/ */} {
<div className={styles.image}> files.map((item: VoucherFileProps) => {
<img src={image_icon} className={styles.icon} /> return (
</div> <div className={styles.container}>
<div className={styles.text}>20187878.jpg</div> {/* <div></div>/ */}
<div className={styles.view}>预览</div> <div className={styles.image}>
</div> <img src={image_icon} className={styles.icon} />
</div>
<div className={styles.text}>
<a href={item.proveUrl} target={"_blank"}>{item.name}</a>
</div>
<div className={styles.view}>预览</div>
</div>
)
})
}
</>
) )
} }
......
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