Commit f9a29d58 authored by 前端-钟卫鹏's avatar 前端-钟卫鹏
parents ebe93517 1842bf1d
import React, { useEffect, useState, useMemo, useRef } from 'react'; import React, { useEffect, useState, useMemo, useRef } from 'react';
import { Form, Button, Row, Col, Input, Table, message } from 'antd'; import { Form, Button, Row, Col, Input, InputNumber, Table, message } from 'antd';
import { ColumnType } from 'antd/lib/table/interface'; import { ColumnType } from 'antd/lib/table/interface';
import { CheckCircleOutlined, PlusOutlined } from '@ant-design/icons'; import { CheckCircleOutlined, PlusOutlined } from '@ant-design/icons';
import { getIntl, history, Prompt } from 'umi'; import { getIntl, history, Prompt } from 'umi';
...@@ -155,7 +155,7 @@ const Add = () => { ...@@ -155,7 +155,7 @@ const Add = () => {
let _dataSource = [...tabelSource]; let _dataSource = [...tabelSource];
const _i = _dataSource.findIndex((item) => item.productId === record.productId); const _i = _dataSource.findIndex((item) => item.productId === record.productId);
let _item = { ..._dataSource[_i] }; let _item = { ..._dataSource[_i] };
_item.currentReconciliationQuantity = _val; _item.currentReconciliationQuantity = Number(_val);
_item.currentMoney = _val * Number(record.price); _item.currentMoney = _val * Number(record.price);
_dataSource[_i] = _item; _dataSource[_i] = _item;
setTabelSource(_dataSource); setTabelSource(_dataSource);
...@@ -251,10 +251,15 @@ const Add = () => { ...@@ -251,10 +251,15 @@ const Add = () => {
name={`currentReconciliationQuantity_${record.orderNo}_${record.productId}`} name={`currentReconciliationQuantity_${record.orderNo}_${record.productId}`}
style={{ margin: 0 }} style={{ margin: 0 }}
rules={[ rules={[
{ required: true, message: intl.formatMessage({ id: 'balance.qingshuruduizhangshuliang' }) } { required: true, message: intl.formatMessage({ id: 'balance.qingshuruduizhangshuliang' }) },
{
validator: (_, value) => {
return value > record.reconciliationQuantity ? Promise.reject(new Error('不能大于待对账数量')) : Promise.resolve()
}
},
]} ]}
> >
<Input type='number' max={record.reconciliationQuantity} value={record.currentReconciliationQuantity} onChange={(e) => { _changeNumbers(record, e.target.value) }} addonBefore="¥" /> <Input type='number' max={record.reconciliationQuantity} value={record.currentReconciliationQuantity} onChange={(e) => { _changeNumbers(record, e.target.value) }} />
</Form.Item> </Form.Item>
) : text ) : text
) )
......
...@@ -243,12 +243,15 @@ const SearchDetail = () => { ...@@ -243,12 +243,15 @@ const SearchDetail = () => {
case 'readyConfirm': case 'readyConfirm':
return <Button type='primary' icon={<CheckCircleOutlined />} onClick={() => { setModalVisible(true) }}>确认对账单</Button> return <Button type='primary' icon={<CheckCircleOutlined />} onClick={() => { setModalVisible(true) }}>确认对账单</Button>
case 'readyPay': case 'readyPay':
<Popconfirm title={intl.formatMessage({ id: 'balance.quedingyaotijiaoma' })} okText={intl.formatMessage({ id: 'balance.shi' })} cancelText={intl.formatMessage({ id: 'balance.fou' })}> return (
<Button type='primary' icon={<CheckCircleOutlined />}> <Popconfirm title={intl.formatMessage({ id: 'balance.quedingyaotijiaoma' })} okText={intl.formatMessage({ id: 'balance.shi' })} cancelText={intl.formatMessage({ id: 'balance.fou' })}>
{intl.formatMessage({ id: 'balance.tijiao' })} <Button type='primary' icon={<CheckCircleOutlined />}>
</Button> {intl.formatMessage({ id: 'balance.tijiao' })}
</Popconfirm> </Button>
break; </Popconfirm>
)
default:
return null
} }
} }
......
...@@ -78,7 +78,7 @@ const ReadyPay: React.FC = () => { ...@@ -78,7 +78,7 @@ const ReadyPay: React.FC = () => {
title: intl.formatMessage({ id: 'balance.caozuo' }), title: intl.formatMessage({ id: 'balance.caozuo' }),
key: 'operate', key: 'operate',
dataIndex: 'operate', dataIndex: 'operate',
render: (text: any, record: any) => <Link to={`readyPay/detail?id=${record.reconciliationId}&no=${text}`}>{intl.formatMessage({ id: 'balance.qingkuan' })}</Link> render: (text: any, record: any) => <Link to={`readyPay/detail?id=${record.reconciliationId}&no=${record.reconciliationNo}`}>{intl.formatMessage({ id: 'balance.qingkuan' })}</Link>
}]; }];
return ( return (
......
import React, { useRef, useState } from 'react';
import { Drawer, Button } from 'antd';
import { ColumnType } from 'antd/lib/table/interface';
import StandardTable from '@/components/StandardTable';
import { createFormActions } from '@formily/antd'
// import { getSettleAccountsBusinessReconciliationToReconciliationList } from '@/services/SettleV2Api'
import Submit from '@/components/NiceForm/components/Submit'
import NiceForm from '@/components/NiceForm'
import { getIntl } from 'umi';
interface MemberDrawerProps {
visible: boolean,
onClose?: () => void,
}
const intl = getIntl();
const formActions = createFormActions();
const MemberDrawer: React.FC<MemberDrawerProps> = (props: MemberDrawerProps) => {
const { visible, onClose } = props;
const ref = useRef<any>({})
const [selectedRowKeys, setSelectedRowKeys] = useState<any>([])
const loadingTableData = async (params) => {
const _params = { ...params }
const { data } = await getSettleAccountsBusinessReconciliationToReconciliationList(_params)
return data;
}
const columns: ColumnType<any>[] = [{
title: '会员Id',
key: 'memberId',
dataIndex: 'memberId',
}, {
title: '会员名称',
key: 'memberName',
dataIndex: 'memberName',
}, {
title: '会员类型',
key: 'memberType',
dataIndex: 'memberType',
}, {
title: '会员角色',
key: 'memberRole',
dataIndex: 'memberRole',
}, {
title: '会员等级',
key: 'memberLevel',
dataIndex: 'memberLevel',
}];
const handleSelectChange = (record, selected, selectedRow, nativeEvent) => {
setSelectedRowKeys([record.id]);
};
return (
<Drawer
title={'选择会员'}
placement={'right'}
onClose={onClose}
visible={visible}
key={'right'}
width={'50%'}
footer={
<div style={{ textAlign: 'right' }}>
<Button onClick={onClose} style={{ marginRight: 8 }}>
{intl.formatMessage({ id: 'balance.quxiao' })}
</Button>
<Button onClick={onClose} type="primary">
{'确定'}
</Button>
</div>
}
>
<StandardTable
keepAlive={false}
// fetchTableData={params => loadingTableData(params)}
columns={columns}
currentRef={ref}
rowKey="id"
rowSelection={{
type: 'radio',
selectedRowKeys: selectedRowKeys,
onSelect: handleSelectChange,
}}
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => ref.current.reload(values)}
schema={{
type: 'object',
properties: {
mageLayout: {
type: 'object',
'x-component': 'mega-layout',
"x-component-props": {
grid: true
},
properties: {
memberName: {
type: 'string',
"x-component": 'Search',
'x-component-props': {
placeholder: '请输入会员名称',
align: 'flex-start',
},
},
}
}
}
}}
components={{
Submit,
}}
/>
}
/>
</Drawer>
);
}
export default MemberDrawer;
...@@ -5,18 +5,21 @@ import StandardTable from '@/components/StandardTable'; ...@@ -5,18 +5,21 @@ import StandardTable from '@/components/StandardTable';
import { PageHeaderWrapper } from '@ant-design/pro-layout' import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch' import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const' import { FORM_FILTER_PATH } from '@/formSchema/const'
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import Submit from '@/components/NiceForm/components/Submit' import Submit from '@/components/NiceForm/components/Submit'
import NiceForm from '@/components/NiceForm' import NiceForm from '@/components/NiceForm'
import StatusTag from '@/components/StatusTag'; import StatusTag from '@/components/StatusTag';
import { formatTimeString } from '@/utils' import { formatTimeString } from '@/utils'
import { priceFormat } from '@/utils/numberFomat' import { priceFormat } from '@/utils/numberFomat'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'; import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
import { getSettleAccountsBusinessApplyAmountBuyerApplyAmountList, getSettleAccountsBusinessApplyAmountItemApplyAmountStatus } from '@/services/SettleV2Api'
import { createFormActions } from '@formily/antd' import { createFormActions } from '@formily/antd'
import { getIntl } from 'umi'; import { getIntl, Link } from 'umi';
import { fetchOptions } from '../../common';
const intl = getIntl(); const intl = getIntl();
const { Link, Text } = Typography; const { Text } = Typography;
// 请款单查询 // 请款单查询
...@@ -24,65 +27,72 @@ const formActions = createFormActions(); ...@@ -24,65 +27,72 @@ const formActions = createFormActions();
const Search: React.FC = () => { const Search: React.FC = () => {
const ref = useRef<any>({}) const ref = useRef<any>({})
// const loadingTableData = (params) => { const loadingTableData = async (params) => {
// const { data } = await getPurchaseRequisitionPage(params) const _params = { ...params };
// return data if (params.createTimeStart) {
// } _params.createTimeStart = formatTimeString(Number(params.createTimeStart), 'YYYY-MM-DD');
}
if (params.createTimeEnd) {
_params.createTimeEnd = formatTimeString(Number(params.createTimeEnd), 'YYYY-MM-DD');
}
const { data } = await getSettleAccountsBusinessApplyAmountBuyerApplyAmountList(_params)
return data
}
const columns: ColumnType<any>[] = [{ const columns: ColumnType<any>[] = [{
title: intl.formatMessage({id: 'balance.qingkuandanhao'}), title: intl.formatMessage({ id: 'balance.qingkuandanhao' }),
key: 'orderNo', key: 'applyNo',
dataIndex: 'orderNo', dataIndex: 'applyNo',
render: (text: any, record: any) => ( render: (text: any, record: any) => (
<Link>{text}</Link> <Link to={`search/preivew?id=${record.id}&no=${text}`}>{text}</Link>
) )
}, { }, {
title: intl.formatMessage({id: 'balance.danjuzhaiyao'}), title: intl.formatMessage({ id: 'balance.danjuzhaiyao' }),
key: 'details', key: 'applyAbstract',
dataIndex: 'details', dataIndex: 'applyAbstract',
render: (text: any, record: any) => ( render: (text: any, record: any) => (
<Space direction='vertical' style={{ width: 300 }}> <Space direction='vertical' style={{ width: 300 }}>
<Text type='secondary'>{text}</Text> <Text type='secondary'>{text}</Text>
</Space> </Space>
) )
}, { }, {
title: intl.formatMessage({id: 'balance.qingkuanleixing'}), title: intl.formatMessage({ id: 'balance.qingkuanleixing' }),
key: 'type', key: 'applyType',
dataIndex: 'type', dataIndex: 'applyType',
}, { }, {
title: intl.formatMessage({id: 'balance.qingkuanfang'}), title: intl.formatMessage({ id: 'balance.qingkuanfang' }),
key: 'payee', key: 'payee',
dataIndex: 'payee', dataIndex: 'payee',
}, { }, {
title: intl.formatMessage({id: 'balance.qingkuanjine'}), title: intl.formatMessage({ id: 'balance.qingkuanjine' }),
key: 'total', key: 'applyAmount',
dataIndex: 'total', dataIndex: 'applyAmount',
render: (text: any, record: any) => ${priceFormat(text)}`, render: (text: any, record: any) => ${priceFormat(text)}`,
width: 180 width: 180
}, { }, {
title: intl.formatMessage({id: 'balance.yujifukuanriqi'}), title: intl.formatMessage({ id: 'balance.yujifukuanriqi' }),
key: 'payTime', key: 'expectPayTime',
dataIndex: 'payTime', dataIndex: 'expectPayTime',
render: (text: any, record: any) => formatTimeString(text, 'YYYY-MM-DD HH:mm'), render: (text: any, record: any) => formatTimeString(text, 'YYYY-MM-DD HH:mm'),
width: 180 width: 180
}, { }, {
title: intl.formatMessage({id: 'balance.danjushijian'}), title: intl.formatMessage({ id: 'balance.danjushijian' }),
key: 'createTime', key: 'createTime',
dataIndex: 'createTime', dataIndex: 'createTime',
render: (text: any, record: any) => formatTimeString(text, 'YYYY-MM-DD HH:mm'), render: (text: any, record: any) => formatTimeString(text, 'YYYY-MM-DD HH:mm'),
width: 180 width: 180
}, { }, {
title: intl.formatMessage({id: 'balance.waibuzhuangtai'}), title: intl.formatMessage({ id: 'balance.waibuzhuangtai' }),
key: 'externalState', key: 'status',
dataIndex: 'externalState', dataIndex: 'status',
render: (text: any, record: any) => <StatusTag type='default' title={record.externalStateName} /> render: (text: any, record: any) => <StatusTag type='default' title={record.status} />
}]; }];
return ( return (
<PageHeaderWrapper> <PageHeaderWrapper>
<Card> <Card>
<StandardTable <StandardTable
// fetchTableData={params => loadingTableData(params)} fetchTableData={params => loadingTableData(params)}
columns={columns} columns={columns}
currentRef={ref} currentRef={ref}
rowKey="id" rowKey="id"
...@@ -94,9 +104,13 @@ const Search: React.FC = () => { ...@@ -94,9 +104,13 @@ const Search: React.FC = () => {
useStateFilterSearchLinkageEffect( useStateFilterSearchLinkageEffect(
$, $,
actions, actions,
'orderNo', 'applyNo',
FORM_FILTER_PATH, FORM_FILTER_PATH,
) )
useAsyncSelect(
'status',
fetchOptions(getSettleAccountsBusinessApplyAmountItemApplyAmountStatus),
);
}} }}
schema={{ schema={{
type: 'object', type: 'object',
...@@ -108,12 +122,13 @@ const Search: React.FC = () => { ...@@ -108,12 +122,13 @@ const Search: React.FC = () => {
grid: true grid: true
}, },
properties: { properties: {
orderNo: { applyNo: {
type: 'string', type: 'string',
"x-component": 'Search', "x-component": 'Search',
'x-component-props': { 'x-component-props': {
placeholder: intl.formatMessage({id: 'balance.qingshuruqingkuandanhao'}), placeholder: intl.formatMessage({ id: 'balance.qingshuruqingkuandanhao' }),
align: 'flex-start', align: 'flex-start',
allowClear: true,
}, },
}, },
} }
...@@ -131,42 +146,41 @@ const Search: React.FC = () => { ...@@ -131,42 +146,41 @@ const Search: React.FC = () => {
}, },
}, },
properties: { properties: {
"digest": { "applyAbstract": {
type: 'string', type: 'string',
'x-component-props': { 'x-component-props': {
placeholder: intl.formatMessage({id: 'balance.qingshuruqingkuandanzhaiyao'}), placeholder: intl.formatMessage({ id: 'balance.qingshuruqingkuandanzhaiyao' }),
allowClear: true,
} }
}, },
"innerStatus": { "status": {
type: 'string', type: 'string',
"x-component-props": { "x-component-props": {
placeholder: intl.formatMessage({id: 'balance.qingxuanzezhuangtai'}) placeholder: intl.formatMessage({ id: 'balance.qingxuanzezhuangtai' }),
allowClear: true,
}, },
enum: [ enum: []
{ label: intl.formatMessage({id: 'balance.suoyou'}), value: '' },
{ label: intl.formatMessage({id: 'balance.daitijiao'}), value: 1 },
{ label: intl.formatMessage({id: 'balance.yitijiao'}), value: 2 },
{ label: intl.formatMessage({id: 'balance.yifukuan'}), value: 3 },
]
}, },
"[startDate,endDate]": { "[createTimeStart,createTimeEnd]": {
type: 'string', type: 'string',
"x-component": "dateSelect", "x-component": "dateSelect",
"x-component-props": { "x-component-props": {
placeholder: intl.formatMessage({id: 'balance.danjushijianquanbu'}), placeholder: intl.formatMessage({ id: 'balance.danjushijianquanbu' }),
allowClear: true,
} }
}, },
"[startPayDate,endPayDate]": { "[expectPayTimeStart,expectPayTimeEnd]": {
type: 'string', type: 'string',
"x-component": "daterange", "x-component": "daterange",
"x-component-props": { "x-component-props": {
placeholder: [intl.formatMessage({id: 'balance.yujifukuankaishishijian'}), intl.formatMessage({id: 'balance.yujifukuanjieshushijian'})], placeholder: [intl.formatMessage({ id: 'balance.yujifukuankaishishijian' }), intl.formatMessage({ id: 'balance.yujifukuanjieshushijian' })],
allowClear: true,
} }
}, },
submit: { submit: {
'x-component': 'Submit', 'x-component': 'Submit',
'x-component-props': { 'x-component-props': {
children: intl.formatMessage({id: 'balance.chaxun'}), children: intl.formatMessage({ id: 'balance.chaxun' }),
}, },
}, },
}, },
......
...@@ -242,7 +242,7 @@ function useGetLayout() { ...@@ -242,7 +242,7 @@ function useGetLayout() {
const props = _row.key === 'top' ? { const props = _row.key === 'top' ? {
imageUrl: currentProps.imageUrl imageUrl: currentProps.imageUrl
} : { } : {
visible: currentProps.visible || true, visible: currentProps.visible ?? true,
theme: currentProps.theme || 0, theme: currentProps.theme || 0,
title: currentProps.title, title: currentProps.title,
}; };
......
...@@ -91,9 +91,11 @@ const columns: ColumnsType<GetMarketingAdornMerchantActivityListAdornResponseDet ...@@ -91,9 +91,11 @@ const columns: ColumnsType<GetMarketingAdornMerchantActivityListAdornResponseDet
title: `${intl.formatMessage({ id: 'activePage.Activityprice' })}`, title: `${intl.formatMessage({ id: 'activePage.Activityprice' })}`,
dataIndex: 'activityPrice', dataIndex: 'activityPrice',
render: (_text, _record) => { render: (_text, _record) => {
// const activityId = _record.activityId;
// const target = _record.activityList.find((_item: any) => _item.id === activityId)
return ( return (
<div className={styles.priceInfo}> <div className={styles.priceInfo}>
<span>{_record.activityPrice}</span> <span>{_record.activityPrice || _record?.plummetPrice || _record.deductionPrice || 0}</span>
<span className={styles.unit}>({_record.unit})</span> <span className={styles.unit}>({_record.unit})</span>
</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