Commit a11cf210 authored by XieZhiXiong's avatar XieZhiXiong
parents 03c15027 00636f79
......@@ -7,7 +7,7 @@
/*
* @Author: Bill
* @Date: 2020-10-12 09:45:20
* @LastEditTime: 2020-10-23 16:08:13
* @LastEditTime: 2020-10-27 14:53:56
* @Description: 加工能力路由
*/
......@@ -133,14 +133,16 @@ const HandlingRoute = {
path: '/memberCenter/balance/accountsPayable/settlementList/logisticsDetail',
name: 'logisticsDetail',
icon: 'smile',
component: '@/pages/balance/accountsPayable/settlementList/logisticsDetail'
component: '@/pages/balance/accountsPayable/settlementList/logisticsDetail',
hideInMenu: true,
},
// 应付账款管理 -> 生产通知单结算明细
{
path: '/memberCenter/balance/accountsPayable/settlementList/productNoticeSettlementDetail',
name: 'productNoticeSettlementDetail',
icon: 'smile',
component: '@/pages/balance/accountsPayable/settlementList/productNoticeSettlementDetail'
component: '@/pages/balance/accountsPayable/settlementList/productNoticeSettlementDetail',
hideInMenu: true,
}
]
},
......@@ -162,14 +164,16 @@ const HandlingRoute = {
path: '/memberCenter/balance/accountsReceivable/settlementList/logisticsDetail',
name: 'logisticsDetail',
icon: 'smile',
component: '@/pages/balance/accountsReceivable/settlementList/logisticsDetail'
component: '@/pages/balance/accountsReceivable/settlementList/logisticsDetail',
hideInMenu: true,
},
// 应收账款管理 -> 生产通知单结算明细
{
path: '/memberCenter/balance/accountsReceivable/settlementList/productNoticeSettlementDetail',
name: 'productNoticeSettlementDetail',
icon: 'smile',
component: '@/pages/balance/accountsReceivable/settlementList/productNoticeSettlementDetail'
component: '@/pages/balance/accountsReceivable/settlementList/productNoticeSettlementDetail',
hideInMenu: true,
},
// 应收账款管理 -> 开票管理
{
......
......@@ -219,6 +219,8 @@ export default {
'menu.tranactionAbility.stockSellStorage.inventory': '库存',
'menu.tranactionAbility.transactionRules': '交易规则',
'menu.tranactionAbility.addRule': '新建交易规则',
'menu.tranactionAbility.editRule': '编辑交易规则',
'menu.tranactionAbility.ruleDetail': '交易规则详情',
// 需求发布 2020-10-26修改
'menu.tranactionAbility.enquirySubmit': '需求发布',
......
import { GetProductGoodsGetGoodsListResponseDetail, GetProductCommodityGetCommodityResponse } from '@/services';
import { GetProductGoodsGetGoodsListResponseDetail, GetProductCommodityGetCommodityResponse } from '@/services/ProductApi';
export interface IBasicFormParam {
brandId: number;
......@@ -65,6 +65,7 @@ export interface IProductModule {
productAttributeAndImageParams: any[]; //价格属性包含图片的传输数据
areaOption: any[]; // 省市数据
currentPageInStore: IPage;
tabClickItem: any[];
setAttributeLists(lists: any[]): void;
setProductName(name: string): void;
......@@ -79,4 +80,5 @@ export interface IProductModule {
setAreaOption(datas: any[]): void;
setProductInfoByEdit(data: GetProductCommodityGetCommodityResponse): void;
setCurrentPageInStore(data: IPage): void;
setTabClickItem(data: any): void;
}
......@@ -23,6 +23,7 @@ const GetCaptchaCode = (props) => {
setTime((prev) => prev - 1)
}, 1000)
} else if(time == 0) {
!!props.callback && props.callback()
clearInterval(ref.current)
}
}, [time])
......
......@@ -6,10 +6,10 @@
import React, { useRef } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Card, Button, DatePicker, Modal, Tag, Space } from 'antd';
import { Card, DatePicker} from 'antd';
import NiceForm from '@/components/NiceForm';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { ISchema, createFormActions } from '@formily/antd';
import { createFormActions } from '@formily/antd';
import { StandardTable } from 'god';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
......@@ -17,37 +17,67 @@ import { schema } from './schema';
import StatusTag from '../../components/StatusTag';
import StatusActions from '../../components/StatusActions';
import { PublicApi } from '@/services/api';
import EyePreview from '@/components/EyePreview';
import { Moment } from 'moment';
const formActions = createFormActions();
interface SearchParams {
settlementName?: string,
payName?: string,
isSettlement: number,
startTime?: Moment,
endTime?: Moment,
orderType?: number,
status?: number,
current: number,
pageSize: number,
}
const SettlementList = () => {
const ref = useRef<any>({})
const fetchListData = async (params) => {
const searchParams = {
orderType: 0,
status: 0,
...params,
orderType: params.orderType || 0,
status: params.status || 0,
}
// /settle/accounts/member/settlement/pagePayableSettlement
const { data } = await PublicApi.getSettleAccountsMemberSettlementPagePayableSettlement(searchParams);
return {
totalCount: 1,
data: [{id: 1, status: 2}]
}
return data
}
const columns = [
{title: '结算单号', dataIndex: 'num'},
{title: '结算日期', dataIndex: 'num'},
{title: '结算方式', dataIndex: 'num'},
{title: '总单数', dataIndex: 'num'},
{title: '代收金额', dataIndex: 'num'},
{title: '佣金', dataIndex: 'num'},
{title: '结算金额', dataIndex: 'num'},
{title: '结算日期', dataIndex: 'num'},
{title: '支付方式', dataIndex: 'payMethod'},
{
title: '结算状态', dataIndex: 'status',
title: '结算单号',
dataIndex: 'settlementNo',
render: (text, record) => {
const prefix = `/memberCenter/balance/accountsPayable/settlementList/`;
const url = record.orderType === 1 ? `logisticsDetail` : `productNoticeSettlementDetail`;
return (
<EyePreview url={`${prefix}${url}?id=${record.id}`} >
{record.settlementNo}
</EyePreview>
)
}
},
{title: '结算日期', dataIndex: 'settlementDate'},
{title: '结算方式', dataIndex: 'settlementWayName'},
{title: '结算方', dataIndex: 'settlementName'},
{title: '结算单据', dataIndex: 'orderTypeName'},
{title: '总单数', dataIndex: 'totalCount'},
{title: '结算金额', dataIndex: 'amount'},
{title: '结算时间', dataIndex: 'settlementTime'},
{title: '支付方式', dataIndex: 'payWayName'},
{
title: '结算状态', dataIndex: 'status',
filters: [
{ text: '待对账', value: 1 },
{ text: '待付款', value: 2 },
{ text: '待收款', value: 3 },
{ text: '以完成', value: 4 },
],
onFilter: (value: number, record: any) => record.status == value,
render: (text: string, record: any) => {
return (
<StatusTag status={record.status} />
)
......@@ -55,13 +85,18 @@ const SettlementList = () => {
},
{
title: '操作',
render: (text, record) => {
render: (text: string, record: any) => {
return (
<StatusActions
status={record.status}
handleReconciledComfirm={handleConfirm}
handleComfirmInCompletePayment={handleComfirmInCompletePayment}
handleComfirmCompletePayment={handleComfirmCompletePayment}
status={record.status <= 2 ? record.status : 4 }
id={record.id}
excludes={[1, 3]}
settlementId={record.settlementID || 1}
handleUpload={handleUploadVoucher}
type={1}
// handleReconciledComfirm={handleConfirm}
// handleComfirmInCompletePayment={handleComfirmInCompletePayment}
// handleComfirmCompletePayment={handleComfirmCompletePayment}
/>
)
}
......@@ -69,33 +104,39 @@ const SettlementList = () => {
]
/**
* 确认对账
* @param cancel 关闭回调函数
* 上传凭证
* @param params
*/
const handleConfirm = (params: any) => {
console.log(123)
params.onCancel();
}
const handleComfirmInCompletePayment = (params: any) => {
const handleUploadVoucher = (params: any) => {
console.log(params);
params.onCancel()
///settle/accounts/member/settlement/pay
PublicApi.postSettleAccountsMemberSettlementPay({id: params.id, proveList: params.fileList})
.then((data) => {
if(data.code === 1000) {
formActions.submit();
params.onCancel()
}
})
}
const handleComfirmCompletePayment = (params: any) => {
params.onCancel();
}
// const handleComfirmInCompletePayment = (params: any) => {
// console.log(params);
// params.onCancel()
// }
// const handleComfirmCompletePayment = (params: any) => {
// params.onCancel();
// }
/**
* 搜索
*/
const handleSearch = (values) => {
console.log(values);
const handleSearch = (values: SearchParams) => {
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});
ref.current.reload({...values, startTime, endTime});
}
return (
......@@ -114,7 +155,7 @@ const SettlementList = () => {
components={{DatePicker}}
expressionScope={{}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.name', FORM_FILTER_PATH);
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.settlementName', FORM_FILTER_PATH);
// useAsyncInitSelect(
// ['innerStatus', 'outerStatus'],
// fetchSelectOptions,
......
......@@ -6,33 +6,22 @@
import React, { useRef, useEffect, useState } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Card, PageHeader, Descriptions, Button} from 'antd';
import { Card, PageHeader, Descriptions, Button, DatePicker} from 'antd';
import { history } from 'umi';
import AvatarWrap from '@/components/AvatarWrap';
import NiceForm from '@/components/NiceForm';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { ISchema, createFormActions } from '@formily/antd';
import { createFormActions } from '@formily/antd';
import { StandardTable } from 'god';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { detailSchema } from './schema'
import { logisticsDetailSchema } from './schema'
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import StatusTag from '../../components/StatusTag';
const formActions = createFormActions();
const columns = [
{title: '单据号', dataIndex: 'no'},
{title: '单据摘要', dataIndex: 'desc'},
{title: '单据类型', dataIndex: 'type'},
{title: '单据时间', dataIndex: 'time'},
{title: '总箱数', dataIndex: 'box'},
{title: '总重量', dataIndex: 'weight'},
{title: '总体积', dataIndex: 'volumn'},
{title: '接单金额', dataIndex: 'price'},
{title: '支付时间', dataIndex: 'payTime'},
{title: '结算金额', dataIndex: 'payPrice'},
]
const RangePicker = DatePicker.RangePicker
const formActions = createFormActions();
interface infoType {
id: number, // 会员结算id
......@@ -47,18 +36,32 @@ interface infoType {
statusName: string // 结算状态名称
}
const columns = [
{title: '单据号', dataIndex: 'orderNo'},
{title: '单据摘要', dataIndex: 'orderAbstract'},
{title: '单据类型', dataIndex: 'orderTypeName'},
{title: '单据时间', dataIndex: 'orderTime'},
{title: '总箱数', dataIndex: 'totalCarton'},
{title: '总重量', dataIndex: 'totalWeight'},
{title: '总体积', dataIndex: 'totalVolume'},
{title: '接单金额', dataIndex: 'orderAmount'},
{title: '接单时间', dataIndex: 'acceptOrderTime'},
{title: '结算金额', dataIndex: 'settlementAmount'},
]
const logisticsDetail: React.FC = () => {
const ref = useRef<any>({});
const [infoDetail, setInfoDetail] = useState<infoType>(null);
const { id, preview } = usePageStatus();
const fetchListData = async (params) => {
console.log(id);
// const { data } = await PublicApi.getSettleAccountsMemberSettlementGetPayableDetail({id})
return {
totalCount: 0,
data: []
const postData = {
settlementId: id,
...params
}
///settle/accounts/member/settlement/pagePayableLogisticsSettlement
const { data } = await PublicApi.getSettleAccountsMemberSettlementPagePayableLogisticsSettlement(postData)
return data
}
useEffect(() => {
......@@ -72,6 +75,17 @@ const logisticsDetail: React.FC = () => {
}
}, [id])
/**
* 搜索
*/
const handleSearch = (values) => {
console.log(values);
const format = 'YYYY-MM-DD'
const startTime = values.startTime?.format(format);
const endTime = values.endTime?.format(format);
ref.current.reload({...values, startTime, endTime});
}
return (
<PageHeaderWrapper
title={
......@@ -86,7 +100,7 @@ const logisticsDetail: React.FC = () => {
name: "结算单号:"
}}
extra={(
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{"TPTY12"}</span>
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{infoDetail?.settlementNo}</span>
)}
/>
}
......@@ -118,6 +132,7 @@ const logisticsDetail: React.FC = () => {
fetchTableData={(params: any) => fetchListData(params)}
controlRender={
<NiceForm
components={{RangePicker}}
actions={formActions}
expressionScope={{
exportBtn: (
......@@ -127,14 +142,14 @@ const logisticsDetail: React.FC = () => {
)
}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.topLayout.search', FORM_FILTER_PATH);
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.topLayout.orderNo', FORM_FILTER_PATH);
// useAsyncInitSelect(
// ['innerStatus', 'outerStatus'],
// fetchSelectOptions,
// );
}}
schema={detailSchema}
onSubmit={values => ref.current.reload(values)}
schema={logisticsDetailSchema}
onSubmit={handleSearch}
/>
}
/>
......
......@@ -6,7 +6,7 @@
import React, { useRef, useState, useEffect } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Card, PageHeader, Descriptions, Button} from 'antd';
import { Card, PageHeader, Descriptions, Button, DatePicker} from 'antd';
import { history } from 'umi';
import AvatarWrap from '@/components/AvatarWrap';
import NiceForm from '@/components/NiceForm';
......@@ -18,6 +18,7 @@ import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { detailSchema } from './schema'
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
const RangePicker = DatePicker.RangePicker;
const formActions = createFormActions();
......@@ -53,7 +54,12 @@ const ProductNoticeSettlementDetail: React.FC = () => {
const { id, preview } = usePageStatus();
const fetchListData = async (params) => {
return {}
const postData = {
settlementId: id,
...params
}
const { data } = await PublicApi.getSettleAccountsMemberSettlementPagePayableProductionNoticeSettlement(postData)
return data
}
useEffect(() => {
......@@ -67,6 +73,20 @@ const ProductNoticeSettlementDetail: React.FC = () => {
}
}, [id])
/**
* 搜索
*/
const handleSearch = (values) => {
console.log(values);
const format = 'YYYY-MM-DD'
const startTime = values.startTime?.format(format);
const endTime = values.endTime?.format(format);
const receiveStartTime = values.receiveStartTime?.format(format);
const receiveEndTime = values.receiveEndTime?.format(format);
ref.current.reload({...values, startTime, endTime, receiveStartTime, receiveEndTime});
}
return (
<PageHeaderWrapper
title={
......@@ -78,10 +98,10 @@ const ProductNoticeSettlementDetail: React.FC = () => {
<AvatarWrap
info={{
aloneTxt: '单',
name: "通知单号:"
name: "结算单号:"
}}
extra={(
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{"TPTY12"}</span>
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{infoDetail?.settlementNo}</span>
)}
/>
}
......@@ -114,6 +134,7 @@ const ProductNoticeSettlementDetail: React.FC = () => {
controlRender={
<NiceForm
actions={formActions}
components={{RangePicker}}
expressionScope={{
exportBtn: (
<div>
......@@ -122,14 +143,14 @@ const ProductNoticeSettlementDetail: React.FC = () => {
)
}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.topLayout.search', FORM_FILTER_PATH);
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.topLayout.orderNo', FORM_FILTER_PATH);
// useAsyncInitSelect(
// ['innerStatus', 'outerStatus'],
// fetchSelectOptions,
// );
}}
schema={detailSchema}
onSubmit={values => ref.current.reload(values)}
onSubmit={handleSearch}
/>
}
/>
......
......@@ -17,11 +17,11 @@ export const schema: ISchema = {
type: 'object',
'x-component': 'mega-layout',
properties: {
name: {
settlementName: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
placeholder: '搜索(结算方)',
align: 'flex-left',
// tip: '输入通知单号、通知单摘要进行搜索',
},
......@@ -52,12 +52,32 @@ export const schema: ISchema = {
},
status: {
type: 'string',
enum: [],
enum: [
{ label: '结算状态(所有)', value: 0 },
{ label: '待对账', value: 1 },
{ label: '待付款', value: 2 },
{ label: '代收款', value: 3 },
{ label: '完成', value: 4 },
],
default: 0,
'x-component-props': {
placeholder: '结算状态(全部)',
allowClear: true,
},
},
orderType: {
type: 'string',
enum: [
{ label: '结算单据(所有)', value: 0 },
{ label: '生产通知单', value: 1 },
{ label: '物流单', value: 2 },
],
default: 0,
'x-component-props': {
placeholder: '结算单据(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
......@@ -100,11 +120,11 @@ export const detailSchema: ISchema = {
children: '{{exportBtn}}',
},
},
search: {
orderNo: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
placeholder: '搜索(单据号)',
},
},
},
......@@ -118,35 +138,117 @@ export const detailSchema: ISchema = {
},
},
properties: {
orderTime: {
orderAbstract: {
type: 'string',
enum: [],
'x-component-props': {
placeholder: '下单时间(全部)',
allowClear: true,
placeholder: '单据摘要'
}
},
"[startTime, endTime]": {
type: 'array',
'x-component': 'RangePicker',
'x-component-props': {
showTime: false,
allowClear: true,
placeholder: ["单据时间(开始时间)", "单据时间(结束时间)"]
},
},
payTime: {
"[receiveStartTime, receiveEndTime]": {
type: 'array',
'x-component': 'RangePicker',
'x-component-props': {
showTime: false,
allowClear: true,
placeholder: ["收货时间(开始时间)", "收货时间(结束时间)"]
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
/**
* 应付账款结算--物流单结算明细
*/
export const logisticsDetailSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
topLayout: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
grid: true,
},
properties: {
ctl: {
type: 'object',
'x-component': 'Children',
'x-component-props': {
children: '{{exportBtn}}',
},
},
orderNo: {
type: 'string',
enum: [],
'x-component': 'Search',
'x-component-props': {
placeholder: '支付时间(全部)',
allowClear: true,
placeholder: '搜索(单据号)',
},
},
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
colStyle: {
marginLeft: 20,
},
},
properties: {
orderAbstract: {
type: 'string',
'x-component-props': {
placeholder: '单据摘要'
}
},
"[startTime, endTime]": {
type: 'array',
'x-component': 'RangePicker',
'x-component-props': {
showTime: false,
allowClear: true,
placeholder: ["单据时间(开始时间)", "单据时间(结束时间)"]
},
},
// submit: {
// 'x-component': 'Submit',
// 'x-mega-props': {
// span: 1,
// },
// 'x-component-props': {
// children: '查询',
// },
// },
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
};
......@@ -17,6 +17,7 @@ import { schema } from './schema';
import { PublicApi } from '@/services/api';
import StatusActions from '../../components/StatusActions';
import StatusTag from '../../components/StatusTag';
import EyePreview from '@/components/EyePreview';
const formActions = createFormActions();
......@@ -24,26 +25,45 @@ const SettlementList = () => {
const ref = useRef<any>({})
const fetchListData = async (params) => {
const searchParams = {
orderType: 0,
status: 0,
...params,
orderType: params.orderType || 0,
status: params.status || 0,
}
// /settle/accounts/member/settlement/pagePayableSettlement
const { data } = await PublicApi.getSettleAccountsMemberSettlementPageReceivableSettlement(searchParams);
return data
}
const columns = [
{title: '结算单号', dataIndex: 'num'},
{title: '结算日期', dataIndex: 'num'},
{title: '结算方式', dataIndex: 'num'},
{title: '总单数', dataIndex: 'num'},
{title: '代收金额', dataIndex: 'num'},
{title: '佣金', dataIndex: 'num'},
{title: '结算金额', dataIndex: 'num'},
{title: '结算日期', dataIndex: 'num'},
{title: '支付方式', dataIndex: 'payMethod'},
{
title: '结算单号',
dataIndex: 'settlementNo',
render: (text, record) => {
const prefix = `/memberCenter/balance/accountsReceivable/settlementList/`;
const url = record.orderTypeName === '物流单' ? `logisticsDetail` : `productNoticeSettlementDetail`;
return (
<EyePreview url={`${prefix}${url}?id=${record.id}`} >
{record.settlementNo}
</EyePreview>
)
}
},
{title: '结算日期', dataIndex: 'settlementDate'},
{title: '结算方式', dataIndex: 'settlementWayName'},
{title: '付款方', dataIndex: 'payName'},
{title: '结算单据', dataIndex: 'orderTypeName'},
{title: '总单数', dataIndex: 'totalCount'},
{title: '结算金额', dataIndex: 'amount'},
{title: '结算时间', dataIndex: 'settlementTime'},
{title: '支付方式', dataIndex: 'payWayName'},
{
title: '结算状态', dataIndex: 'status',
filters: [
{ text: '待对账', value: 1 },
{ text: '待付款', value: 2 },
{ text: '待收款', value: 3 },
{ text: '以完成', value: 4 },
],
onFilter: (value: number, record: any) => record.status == value,
render: (text, record) => {
return (
<StatusTag status={record.status || 1} />
......@@ -55,7 +75,11 @@ const SettlementList = () => {
render: (text, record) => {
return (
<StatusActions
status={record.status || 3}
excludes={[2]}
// {...record}
id={record.id}
type={2}
status={record.status}
handleReconciledComfirm={handleConfirm}
handleComfirmInCompletePayment={handleComfirmInCompletePayment}
handleComfirmCompletePayment={handleComfirmCompletePayment}
......@@ -67,21 +91,49 @@ const SettlementList = () => {
/**
* 确认对账
* @param cancel 关闭回调函数
* @param {cancel: function, id: number} cancel 为关闭回调函数
*/
const handleConfirm = (params: any) => {
console.log(123)
params.onCancel();
PublicApi.postSettleAccountsMemberSettlementConfirmAccountComplete({settlementId: params.id})
.then((data) => {
if(data.code === 1000) {
params.onCancel();
formActions.submit();
}
})
}
/**
* 确认未到款
* @param params
*/
const handleComfirmInCompletePayment = (params: any) => {
console.log(params);
params.onCancel()
}
/**
* 确认到款
* @param {onCancel:function, id: number, status: number}
*/
const handleComfirmCompletePayment = (params: any) => {
params.onCancel();
PublicApi.postSettleAccountsMemberSettlementConfirmPayProve({id: params.id, status: params.id})
.then((data) => {
if(data.code === 1000) {
params.onCancel();
}
})
}
/**
* 搜索
*/
const handleSearch = (values: any) => {
const format = 'YYYY-MM-DD'
const startTime = values.startTime?.format(format);
const endTime = values.endTime?.format(format);
ref.current.reload({...values, startTime, endTime});
}
return (
<PageHeaderWrapper>
<Card>
......@@ -98,14 +150,14 @@ const SettlementList = () => {
actions={formActions}
expressionScope={{}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.name', FORM_FILTER_PATH);
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.payName', FORM_FILTER_PATH);
// useAsyncInitSelect(
// ['innerStatus', 'outerStatus'],
// fetchSelectOptions,
// );
}}
schema={schema}
onSubmit={values => ref.current.reload(values)}
onSubmit={handleSearch}
/>
}
/>
......
......@@ -6,7 +6,7 @@
import React, { useRef, useEffect, useState } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Card, PageHeader, Descriptions, Button} from 'antd';
import { Card, PageHeader, Descriptions, Button, DatePicker} from 'antd';
import { history } from 'umi';
import AvatarWrap from '@/components/AvatarWrap';
import NiceForm from '@/components/NiceForm';
......@@ -15,10 +15,12 @@ import { ISchema, createFormActions } from '@formily/antd';
import { StandardTable } from 'god';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { detailSchema } from './schema'
import { logisticsDetailSchema } from './schema'
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import StatusTag from '../../components/StatusTag';
const RangePicker = DatePicker.RangePicker;
const formActions = createFormActions();
const columns = [
......@@ -53,25 +55,35 @@ const logisticsDetail: React.FC = () => {
const { id, preview } = usePageStatus();
const fetchListData = async (params) => {
console.log(id);
// const { data } = await PublicApi.getSettleAccountsMemberSettlementGetPayableDetail({id})
return {
totalCount: 0,
data: []
const postData = {
settlementId: id,
...params
}
const { data } = await PublicApi.getSettleAccountsMemberSettlementPageReceivableLogisticsSettlement(postData)
return data
}
useEffect(() => {
if(id) {
// 获取详情
async function fetchDetail() {
const { data } = await PublicApi.getSettleAccountsMemberSettlementGetPayableDetail({id})
const { data } = await PublicApi.getSettleAccountsMemberSettlementGetReceivableDetail({id})
setInfoDetail(data);
}
fetchDetail();
}
}, [id])
/**
* 搜索
*/
const handleSearch = (values) => {
const format = 'YYYY-MM-DD'
const startTime = values.startTime?.format(format);
const endTime = values.endTime?.format(format);
ref.current.reload({...values, startTime, endTime});
}
return (
<PageHeaderWrapper
title={
......@@ -86,7 +98,7 @@ const logisticsDetail: React.FC = () => {
name: "结算单号:"
}}
extra={(
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{"TPTY12"}</span>
<span style={{ fontSize: 12 }}>{infoDetail?.settlementNo}</span>
)}
/>
}
......@@ -118,6 +130,7 @@ const logisticsDetail: React.FC = () => {
fetchTableData={(params: any) => fetchListData(params)}
controlRender={
<NiceForm
components={{RangePicker}}
actions={formActions}
expressionScope={{
exportBtn: (
......@@ -127,14 +140,14 @@ const logisticsDetail: React.FC = () => {
)
}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.topLayout.search', FORM_FILTER_PATH);
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.topLayout.orderNo', FORM_FILTER_PATH);
// useAsyncInitSelect(
// ['innerStatus', 'outerStatus'],
// fetchSelectOptions,
// );
}}
schema={detailSchema}
onSubmit={values => ref.current.reload(values)}
schema={logisticsDetailSchema}
onSubmit={handleSearch}
/>
}
/>
......
......@@ -6,7 +6,7 @@
import React, { useRef, useState, useEffect } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Card, PageHeader, Descriptions, Button} from 'antd';
import { Card, PageHeader, Descriptions, Button, DatePicker} from 'antd';
import { history } from 'umi';
import AvatarWrap from '@/components/AvatarWrap';
import NiceForm from '@/components/NiceForm';
......@@ -19,19 +19,20 @@ import { detailSchema } from './schema'
import { usePageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
const RangePicker = DatePicker.RangePicker;
const formActions = createFormActions();
const columns = [
{title: '单据号', dataIndex: 'no'},
{title: '单据摘要', dataIndex: 'desc'},
{title: '单据类型', dataIndex: 'type'},
{title: '单据时间', dataIndex: 'time'},
{title: '单据总额', dataIndex: 'total'},
{title: '单据号', dataIndex: 'orderNo'},
{title: '单据摘要', dataIndex: 'orderAbstract'},
{title: '单据类型', dataIndex: 'orderTypeName'},
{title: '单据时间', dataIndex: 'orderTime'},
{title: '单据总额', dataIndex: 'orderAmount'},
{title: '收货批次', dataIndex: 'batch'},
{title: '收货时间', dataIndex: 'receiveTime'},
{title: '收货数量', dataIndex: 'receiveCount'},
{title: '加工单价', dataIndex: 'unitPrice'},
{title: '结算金额', dataIndex: 'payPrice'},
{title: '收货数量', dataIndex: 'receiveTime'},
{title: '加工单价', dataIndex: 'processPrice'},
{title: '结算金额', dataIndex: 'settlementAmount'},
]
interface infoType {
......@@ -53,20 +54,39 @@ const ProductNoticeSettlementDetail: React.FC = () => {
const { id, preview } = usePageStatus();
const fetchListData = async (params) => {
return {}
const postData = {
settlementId: id,
...params
}
// /settle/accounts/member/settlement/pageReceivableProductionNoticeSettlement
const { data } = await PublicApi.getSettleAccountsMemberSettlementPageReceivableProductionNoticeSettlement(postData)
return data
}
useEffect(() => {
if(id) {
// 获取详情
async function fetchDetail() {
const { data } = await PublicApi.getSettleAccountsMemberSettlementGetPayableDetail({id})
const { data } = await PublicApi.getSettleAccountsMemberSettlementGetReceivableDetail({id})
setInfoDetail(data);
}
fetchDetail();
}
}, [id])
/**
* 搜索
*/
const handleSearch = (values) => {
console.log(values);
const format = 'YYYY-MM-DD'
const startTime = values.startTime?.format(format);
const endTime = values.endTime?.format(format);
const receiveStartTime = values.receiveStartTime?.format(format);
const receiveEndTime = values.receiveEndTime?.format(format);
ref.current.reload({...values, startTime, endTime, receiveStartTime, receiveEndTime});
}
return (
<PageHeaderWrapper
title={
......@@ -78,10 +98,10 @@ const ProductNoticeSettlementDetail: React.FC = () => {
<AvatarWrap
info={{
aloneTxt: '单',
name: "通知单号:"
name: "结算单号:"
}}
extra={(
<span style={{ fontSize: 12, fontWeight: 'normal' }}>{"TPTY12"}</span>
<span style={{ fontSize: 12 }}>{infoDetail?.settlementNo}</span>
)}
/>
}
......@@ -106,13 +126,14 @@ const ProductNoticeSettlementDetail: React.FC = () => {
<Card>
<StandardTable
tableProps={{
rowKey: 'id',
rowKey: (record) => `${record.orderNo}-${record.batch}`,
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
controlRender={
<NiceForm
components={{RangePicker}}
actions={formActions}
expressionScope={{
exportBtn: (
......@@ -122,14 +143,14 @@ const ProductNoticeSettlementDetail: React.FC = () => {
)
}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.topLayout.search', FORM_FILTER_PATH);
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.topLayout.orderNo', FORM_FILTER_PATH);
// useAsyncInitSelect(
// ['innerStatus', 'outerStatus'],
// fetchSelectOptions,
// );
}}
schema={detailSchema}
onSubmit={values => ref.current.reload(values)}
onSubmit={handleSearch}
/>
}
/>
......
......@@ -17,13 +17,13 @@ export const schema: ISchema = {
type: 'object',
'x-component': 'mega-layout',
properties: {
name: {
payName: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
placeholder: '搜索(付款方)',
align: 'flex-left',
tip: '输入通知单号、通知单摘要进行搜索',
// tip: '输入通知单号、通知单摘要进行搜索',
},
},
[FORM_FILTER_PATH]: {
......@@ -52,21 +52,41 @@ export const schema: ISchema = {
},
status: {
type: 'string',
enum: [],
enum: [
{ label: '结算状态(所有)', value: 0 },
{ label: '待对账', value: 1 },
{ label: '待付款', value: 2 },
{ label: '代收款', value: 3 },
{ label: '完成', value: 4 },
],
default: 0,
'x-component-props': {
placeholder: '结算状态(全部)',
allowClear: true,
},
},
// submit: {
// 'x-component': 'Submit',
// 'x-mega-props': {
// span: 1,
// },
// 'x-component-props': {
// children: '查询',
// },
// },
orderType: {
type: 'string',
enum: [
{ label: '结算单据(所有)', value: 0 },
{ label: '生产通知单', value: 1 },
{ label: '物流单', value: 2 },
],
default: 0,
'x-component-props': {
placeholder: '结算单据(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
......@@ -75,7 +95,7 @@ export const schema: ISchema = {
};
/**
* 应收账款管理--物流单结算明细详情, 生产通知单结算明细
* 应收账款管理- 生产通知单结算明细
*/
export const detailSchema: ISchema = {
......@@ -99,11 +119,11 @@ export const detailSchema: ISchema = {
children: '{{exportBtn}}',
},
},
search: {
orderNo: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
placeholder: '搜索(单据号)',
},
},
},
......@@ -117,35 +137,117 @@ export const detailSchema: ISchema = {
},
},
properties: {
orderTime: {
orderAbstract: {
type: 'string',
enum: [],
'x-component-props': {
placeholder: '下单时间(全部)',
allowClear: true,
placeholder: '单据摘要'
}
},
"[startTime, endTime]": {
type: 'array',
'x-component': 'RangePicker',
'x-component-props': {
showTime: false,
allowClear: true,
placeholder: ["单据时间(开始时间)", "单据时间(结束时间)"]
},
},
"[receiveStartTime, receiveEndTime]": {
type: 'array',
'x-component': 'RangePicker',
'x-component-props': {
showTime: false,
allowClear: true,
placeholder: ["收货时间(开始时间)", "收货时间(结束时间)"]
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
payTime: {
},
},
},
},
},
};
/**
* 应付账款结算--物流单结算明细
*/
export const logisticsDetailSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
topLayout: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
grid: true,
},
properties: {
ctl: {
type: 'object',
'x-component': 'Children',
'x-component-props': {
children: '{{exportBtn}}',
},
},
orderNo: {
type: 'string',
enum: [],
'x-component': 'Search',
'x-component-props': {
placeholder: '支付时间(全部)',
allowClear: true,
placeholder: '搜索(单据号)',
},
},
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
colStyle: {
marginLeft: 20,
},
},
properties: {
orderAbstract: {
type: 'string',
'x-component-props': {
placeholder: '单据摘要'
}
},
"[startTime, endTime]": {
type: 'array',
'x-component': 'RangePicker',
'x-component-props': {
showTime: false,
allowClear: true,
placeholder: ["单据时间(开始时间)", "单据时间(结束时间)"]
},
},
// submit: {
// 'x-component': 'Submit',
// 'x-mega-props': {
// span: 1,
// },
// 'x-component-props': {
// children: '查询',
// },
// },
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
};
......@@ -6,17 +6,30 @@
import React from 'react';
const ConfirmAccount = () => {
interface Iprops {
/**
* 结算日期
*/
settlementDate: string,
/**
* 付款方
*/
payName: string
}
const ConfirmAccount: React.FC<Iprops> = (props) => {
const { settlementDate, payName } = props
return (
<div>
<h3 style={{margin: 0}}>是否确认以下对账已完成?</h3>
<div style={{margin: '24px 0'}}>
<span style={{color: '#909399', width: '60px', display: 'inline-block'}}>结算日期:</span>
<span>2020-08-25</span>
<span>{settlementDate}</span>
</div>
<div>
<span style={{color: '#909399', width: '60px', display: 'inline-block'}}>付款方:</span>
<span>平台</span>
<span>{payName}</span>
</div>
</div>
)
......
......@@ -3,7 +3,7 @@
* @Date: 2020-10-23 17:24:23
* @Description: 结算能力列表操作
*/
import React from 'react';
import React, { useState, useEffect } from 'react';
import ModalContainer from '../ModalContainer';
import { Modal, Space, Button } from 'antd';
import ConfirmAccount from '../../components/ConfirmAccount';
......@@ -11,16 +11,25 @@ import Voucher from '../../components/Voucher';
import { StatusEnum, TO_BE_RECONCILED, TO_BE_PAY, TO_BE_COLLECTED, COMPLETED } from '../../components/StatusTag';
import styles from './index.less';
import UploadPayVoucher from '../../components/UploadPayVoucher';
import { PublicApi } from '@/services/api';
interface Iprops {
status: StatusEnum,
id: number, // 应付,应收账款id
settlementDate?: string, // 结算日期
settlementId?: number, // 结算方id
payName?: string, //付款方
excludes: number[], // 排除数组,比如当应付的时候,只留下查看凭证跟付款, 应收账款的时候保留三个
type?: number, // 1 -> 应付账款结算 2-> 应收账款结算, 用于判断 查看付款凭证
handleReconciledComfirm?: (params: any) => void // 对账确定回调
handleComfirmInCompletePayment?: (params: any) => void, // 确认未到款回调
handleComfirmCompletePayment?: (params:any) => void, //确认到款回调
handleUpload?: (params: any) => void, // 上传凭证
}
// 显示确认对账
const ConfirmAccountComponent: React.FC<Iprops> = (props) => {
const { settlementDate, payName } = props;
return (
<ModalContainer>
{
......@@ -32,9 +41,9 @@ const ConfirmAccountComponent: React.FC<Iprops> = (props) => {
title="确认对账完成"
visible={visible}
onCancel={cancel}
onOk={() => props.handleReconciledComfirm({onCancel: cancel})}
onOk={() => props.handleReconciledComfirm({onCancel: cancel, id: props.id})}
>
<ConfirmAccount />
<ConfirmAccount settlementDate={settlementDate} payName={payName} />
</Modal>
<div className={styles.modalBtn} onClick={show}>确认对账完成</div>
</>
......@@ -59,16 +68,16 @@ const ConfirmCollected = (props) => {
<Button onClick={cancel}>取消</Button>
<Button
danger
onClick={() => props.handleComfirmInCompletePayment({onCancel: cancel})}
onClick={() => props.handleComfirmInCompletePayment({onCancel: cancel, status: 0, id: props.id})}
>确认未到款</Button>
<Button
type={"primary"}
onClick={() => props.handleComfirmCompletePayment({onCancel: cancel})}
onClick={() => props.handleComfirmCompletePayment({onCancel: cancel, status: 1, id: props.id})}
>确认到款</Button>
</Space>
)}
>
<Voucher />
<WrapVoucher id={props.id} type={props.type} />
</Modal>
<div className={styles.modalBtn} onClick={show}>确认付款凭证</div>
</>
......@@ -79,8 +88,31 @@ const ConfirmCollected = (props) => {
)
}
const WrapVoucher = ({ id, type}) => {
const [files, setFiles] = useState([]);
console.log(id);
useEffect(() => {
if(id) {
const service = type == 1
? PublicApi.getSettleAccountsMemberSettlementGetPayablePayProve
: PublicApi.getSettleAccountsMemberSettlementGetReceivablePayProve
service({id}).then((data) => {
if(data.code == 1000) {
setFiles(data.data)
}
})
}
}, [id])
return (
<Voucher files={files} />
)
}
// 显示查看付款凭证
const ViewPaymentVoucher: React.FC = (props) => {
const ViewPaymentVoucher = (props) => {
return (
<ModalContainer>
{
......@@ -88,7 +120,7 @@ const ViewPaymentVoucher: React.FC = (props) => {
return (
<>
<Modal width={548} title="查看付款凭证" onCancel={cancel} visible={visible} footer={null}>
<Voucher files={[]} />
<WrapVoucher id={props.id} type={props.type} />
</Modal>
<div className={styles.modalBtn} onClick={show}>查看付款凭证</div>
</>
......@@ -99,8 +131,25 @@ const ViewPaymentVoucher: React.FC = (props) => {
)
}
interface UploadVocherProps {
settlementId: number,
id: number
handleUpload: (params: any) => void
}
interface FileType {
name: string,
proveUrl: string
}
// 待付款 状态 上传付款凭证
const UploadVoucher: React.FC = (props) => {
const UploadVoucher: React.FC<UploadVocherProps> = (props) => {
const { settlementId } = props;
const [fileList, setFileList] = useState<FileType[]>([]);
const getFileList = (list: FileType[]) => {
setFileList(list);
}
return (
<ModalContainer>
{
......@@ -117,11 +166,12 @@ const UploadVoucher: React.FC = (props) => {
<Button onClick={cancel}>取消</Button>
<Button
type={"primary"}
onClick={() => props.handleUpload({onCancel: cancel, id: props.id, fileList: fileList})}
>确认</Button>
</Space>
)}
>
<UploadPayVoucher fileList={[{name: '123', proveUrl: ''}]} />
<UploadPayVoucher id={settlementId} getFileList={getFileList} />
</Modal>
<div className={styles.modalBtn} onClick={show}>上传付款凭证</div>
</>
......@@ -141,8 +191,8 @@ const ChildrenComponent = {
}
const StatusActions: React.FC<Iprops> = (props: Iprops) => {
const { status } = props;
const Component = ChildrenComponent[status];
const { status, excludes = [] } = props;
const Component = excludes.includes(status) ? null : ChildrenComponent[status];
return (
<>
{Component && <Component {...props} />}
......
......@@ -12,19 +12,43 @@ import { UploadOutlined } from '@ant-design/icons'
import { UploadFile, UploadChangeParam } from 'antd/lib/upload/interface';
import { UPLOAD_TYPE } from '@/constants'
import { VoucherFileProps } from '../../common/type';
import { PublicApi } from '@/services/api';
interface Iprops {
fileList: VoucherFileProps[],
fileList?: VoucherFileProps[],
id: number, // 结算方id
getFileList: (params: any[]) => void
}
interface AccountInfo {
bankAccount: string,
name: string,
bankDeposit: string
}
const UploadPayVoucher: React.FC<Iprops> = (props) => {
const [fileList, setFileList] = useState([]);
const [loading, setLoading] = useState(false);
const [accountInfo, setAccountInfo] = useState<AccountInfo>(null)
// 进来设置fileList
// useEffect(() => {
// setFileList(props.fileList)
// }, [props.fileList])
/**
* 获取账户名称等
*/
useEffect(() => {
setFileList(props.fileList)
}, [props.fileList])
async function getAccountInfo() {
///settle/accounts/corporate/account/config
const { data, code } = await PublicApi.getSettleAccountsCorporateAccountConfig({memberId: props.id.toString()});
if(code == 1000) {
setAccountInfo(data);
}
}
getAccountInfo()
}, [props.id])
/***
* 上传前检查
......@@ -67,6 +91,7 @@ const UploadPayVoucher: React.FC<Iprops> = (props) => {
proveUrl: data
})
setFileList(temp);
props.getFileList(temp)
}
setLoading(false)
}
......@@ -78,15 +103,15 @@ const UploadPayVoucher: React.FC<Iprops> = (props) => {
<div className={styles.container}>
<div className={styles.formItem}>
<span className={styles.label}>账户名称</span>
<span className={styles.value}>温州市隆昌皮具有限公司</span>
<span className={styles.value}>{accountInfo?.name}</span>
</div>
<div className={styles.formItem}>
<span className={styles.label}>银行账号</span>
<span className={styles.value}>3214 454646 145 46 1231</span>
<span className={styles.value}>{accountInfo?.bankAccount}</span>
</div>
<div className={styles.formItem}>
<span className={styles.label}>开户行</span>
<span className={styles.value}>中国建设银行广州市分行营业部</span>
<span className={styles.value}>{accountInfo?.bankDeposit}</span>
</div>
<p className={styles.voucherText}>上传支付凭证</p>
<Voucher files={fileList} />
......
......@@ -15,12 +15,13 @@ interface Iprops {
const Voucher: React.FC<Iprops> = (props) => {
const { files = [] } = props;
console.log(files);
return (
<>
{
files.map((item: VoucherFileProps) => {
files.map((item: VoucherFileProps, key: number) => {
return (
<div className={styles.container}>
<div className={styles.container} key={key}>
{/* <div></div>/ */}
<div className={styles.image}>
<img src={image_icon} className={styles.icon} />
......@@ -28,7 +29,9 @@ const Voucher: React.FC<Iprops> = (props) => {
<div className={styles.text}>
<a href={item.proveUrl} target={"_blank"}>{item.name}</a>
</div>
<div className={styles.view}>预览</div>
<div className={styles.view}>
<a href={item.proveUrl} target={"_blank"}>预览</a>
</div>
</div>
)
})
......
......@@ -50,7 +50,8 @@ const AddProducts: React.FC<{}> = (props) => {
isAllAttributePic,
productInfoByEdit,
selectCategoryId,
clearPartData
clearPartData,
setTabClickItem
} = ProductStore
useEffect(() => {
......@@ -161,7 +162,7 @@ const AddProducts: React.FC<{}> = (props) => {
// 移除描述中的[]
let _productDescription = { ...productDescription }
for(let i in _productDescription){
if(_productDescription[i].length === 0){
if(_productDescription[i]?.length === 0){
delete _productDescription[i]
}
}
......@@ -304,13 +305,12 @@ const AddProducts: React.FC<{}> = (props) => {
}
console.log(e, 'e')
}).catch(error => {
console.log(error, '_error')
setIsDisableSaveBtn(false)
if (error.messge)
message.error(error.message)
else
message.error(error.errorFields[0].errors.toString())
console.log(error, '_error')
})
} catch (e) {
setIsDisableSaveBtn(false)
......@@ -330,6 +330,8 @@ const AddProducts: React.FC<{}> = (props) => {
const callback = (key: any) => {
setClickTabIndex([...clickTabIndex, key])
// 点击项存入store 用于后续编辑步骤判断 是直接点击进去某个子模块还是已经进入子模块 从而采用缓存数据还是采用接口返回的编辑数据
setTabClickItem([...clickTabIndex, key])
}
return (<PageHeaderWrapper
......
......@@ -69,6 +69,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
getPriceAttributeFormParamsByEdit,
selectCategoryId,
productAttributeAndImageParams,
tabClickItem
} = ProductStore
_tableDataSource = useMemo(() => tableDataSource, [tableDataSource]) // 保持最新值
......@@ -193,7 +194,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
let { _attributeNameArr, _attributeValueArr, _temp_attributeObjArr, _temp_attributeValObjArr } = needObject
// console.log(_priceAttribute, _attributeNameArr, _attributeValueArr, _temp_attributeObjArr, _temp_attributeValObjArr, selectedGoods, '---constructimg---') // 编辑直接进入价格设置 都为空数组
console.log(_priceAttribute, _attributeNameArr, _attributeValueArr, _temp_attributeObjArr, _temp_attributeValObjArr, selectedGoods, '---constructimg---') // 编辑直接进入价格设置 都为空数组
if(selectedGoods.length>0){ // 编辑情况下 select货品列表可能会采用接口数据
_col.push({
......@@ -211,32 +212,34 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
</Select>
</>
})
}else if(history.location.query?.id){ // 此时没有货品并且处于编辑状态 取接口返回的数据
let _goods: any[] = Object.values(productInfoByEdit.unitPriceAndPicList.map(_ => _.goods))
if(_goods.indexOf(null)===-1){
let goodsInApi : any = Object.values(_goods.reduce((item, next)=>{
item[next.id] = next
return item
},{}))
if(goodsInApi.length > 0){ // *9.12*
_col.push({
title: '对应货品',
dataIndex: '对应货品',
key: '对应货品',
width: 360,
render: (text: any, record: any) => <>
<Select style={{width:'100%'}} defaultValue={text} onChange={(v)=> {tableSelelctChange(v, record) }}>
{
goodsInApi.map(_item => (
<Option key={_item.id} value={_item.id}>{_item.code}/{_item.name}/{_item.type}/¥{_item.costPrice}</Option>
))
}
</Select>
</>
})
}
}
}
/** 注释原因:编辑时操作货品 没有更新价格属性表格中的货品选项 */
// else if(history.location.query?.id){ // 此时没有货品并且处于编辑状态 取接口返回的数据
// let _goods: any[] = Object.values(productInfoByEdit.unitPriceAndPicList.map(_ => _.goods))
// if(_goods.indexOf(null)===-1){
// let goodsInApi : any = Object.values(_goods.reduce((item, next)=>{
// item[next.id] = next
// return item
// },{}))
// if(goodsInApi.length > 0){
// _col.push({
// title: '对应货品',
// dataIndex: '对应货品',
// key: '对应货品',
// width: 360,
// render: (text: any, record: any) => <>
// <Select style={{width:'100%'}} defaultValue={text} onChange={(v)=> {tableSelelctChange(v, record) }}>
// {
// goodsInApi.map(_item => (
// <Option key={_item.id} value={_item.id}>{_item.code}/{_item.name}/{_item.type}/¥{_item.costPrice}</Option>
// ))
// }
// </Select>
// </>
// })
// }
// }
// }
if(_attributeNameArr?.length>0){
_attributeNameArr.map( _attr => {
......@@ -276,7 +279,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
setColumns(_col)
// 生成表格data
// 生成表格dataSource
let combineArray = SKUCombine(_attributeValueArr)
setCombineAttributeArray(combineArray)
setAttributeObjArr(_temp_attributeObjArr)
......@@ -292,8 +295,12 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
}) : _tempObj[_attributeNameArr[i]||_attributeNameArr[0]] = _rowArr // 当一项变动的时候 找_attributeNameArr可能会找不到 找不到的情况下置为索引0的那项
if(history.location.query?.id){
// 编辑的时候,先指定数据中的货品id,如果是重新组合的不存在id就使用选择的货品中的第一个,如果没有置为0;同理,不存在单价就置为{}
// _tempObj['对应货品'] = selectedGoods.length > 0 ? selectedGoods[0].id : 0
_tempObj['对应货品'] = productInfoByEdit.unitPriceAndPicList[i]?.goods?.id || selectedGoods[0]?.id || 0
_tempObj['单价'] = productInfoByEdit.unitPriceAndPicList[i]?.unitPrice || {}
console.log(_tableDataSource, '编辑构建table数据的时候')
console.log(tabClickItem, 'store中的点项')
// 通过store中的点击项可以判断当前表格的数据是采用接口返回的全局编辑数据还是子模块的局部缓存数据
}else{
_tempObj['对应货品'] = selectedGoods.length > 0 ? selectedGoods[0].id : 0
_tempObj['单价'] = {}
......@@ -307,7 +314,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
_tempObj['单价'] = productInfoByEdit?.unitPriceAndPicList[0]?.unitPrice || {}
_tableData.push(_tempObj)
}
// console.log(_tableData, '_tableData') // 只有一项 变动情况下表格数据的key获取不到
console.log(_tableData, '_tableData') // 只有一项 变动情况下表格数据的key获取不到
_tableDataSource = _tableData
// 有前面tab变动引起的二次构建 需要清空价格数据
if(updateFlag.current){
......@@ -450,7 +457,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
}
_tableDataSource = newTabeData
setTableDataSource(_tableDataSource)
// console.log(_tableDataSource, curretSetPriceRow, v, isBatchSetting, 'setPriceOk')
console.log(_tableDataSource, curretSetPriceRow, v, isBatchSetting, 'setPriceOk')
})
}
......
......@@ -340,9 +340,16 @@ const company: React.FC<parmas> = (props) => {
<Button loading={loading} onClick={handleSubmitAllSetting} type="primary" style={{ marginTop: 32, marginBottom: 16, marginRight: 24 }}>
保存
</Button>
<Button onClick={handleCancel} style={{ marginTop: 32, marginBottom: 16 }}>
取消
</Button>
<Popconfirm
title="未保存,是否确定执行这个操作?"
onConfirm={handleCancel}
okText="是"
cancelText="否"
>
<Button style={{ marginTop: 32, marginBottom: 16 }}>
取消
</Button>
</Popconfirm>
</Col>
</Row>
</Col>
......
import React, { useState, useEffect, useRef } from 'react'
import { Card, Space, Button, } from 'antd'
import { history } from 'umi'
import { Card, Space, Button, Modal, message } from 'antd'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { StandardTable } from 'god'
import { ColumnType } from 'antd/lib/table/interface'
......@@ -9,17 +10,20 @@ import { createFormActions, FormEffectHooks } from '@formily/antd'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { searchSchema } from './schema'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import { PlusOutlined } from '@ant-design/icons'
import EyePreview from '@/components/EyePreview'
import { DatePicker } from '@formily/antd-components'
import StatusTag from '@/components/StatusTag'
import { accountStatusMap, memberStatusMap } from '../../constant'
import { statusMap } from '../../constant'
import moment from 'moment'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { ExclamationCircleOutlined } from '@ant-design/icons'
const { confirm } = Modal
const formActions = createFormActions();
const CheckWithdraw: React.FC<{}> = () => {
const ref = useRef<any>({})
const [withdrawRowSelection, withdrawRowCtl] = useRowSelectionTable()
const columns: ColumnType<any>[] = [
{
......@@ -28,7 +32,7 @@ const CheckWithdraw: React.FC<{}> = () => {
key: 'memberAssetAccount',
className: 'commonPickColor',
render: (text, record) => <EyePreview
url={`/memberCenter/payandSettle/amountAccountManage/memberAccountManage/detail?id=${record.id}`}
url={`/memberCenter/payandSettle/amountAccountManage/memberAccountManage/detail?id=${record.memberAssetAccount.id}`}
>
{text}
</EyePreview>
......@@ -45,8 +49,9 @@ const CheckWithdraw: React.FC<{}> = () => {
},
{
title: '提现金额(元)',
dataIndex: 'memberRoleName',
key: 'memberRoleName',
dataIndex: 'tradeMoney',
key: 'tradeMoney',
render: (t, r) => t.toFixed(2)
},
{
title: '提现申请时间',
......@@ -55,10 +60,10 @@ const CheckWithdraw: React.FC<{}> = () => {
render: (t, r) => moment(t).format('YYYY-MM-DD HH:mm:ss')
},
{
title: '会员状态',
dataIndex: 'memberStatus',
key: 'memberStatus',
render: (t, r) => (<StatusTag title={memberStatusMap[t]['title']} type={memberStatusMap[t]['type']} />)
title: '状态',
dataIndex: 'status',
key: 'status',
render: (t, r) => (<StatusTag title={statusMap[t]['title']} type={statusMap[t]['type']} />)
},
{
title: '操作',
......@@ -78,11 +83,34 @@ const CheckWithdraw: React.FC<{}> = () => {
}
const clickUp = (r: any) => {
console.log('通过')
let params = {
tradeCode: r.tradeCode,
id: r.memberAssetAccount.id,
amount: r.tradeMoney
}
history.push(`/memberCenter/payandSettle/amountAccountManage/checkWithdraw/detail?detailinfo=${btoa(JSON.stringify(params))}`)
}
const handleBatchCheck = () => {
console.log('批量通过')
if(withdrawRowCtl.selectedRowKeys.length > 0){
confirm({
title: '确定要执行批量审核操作?',
icon: <ExclamationCircleOutlined />,
onOk() {
PublicApi.postPayMemberAssetAccountBatchCheck({ idList: withdrawRowCtl.selectedRowKeys }).then(res => {
ref.current.reload()
})
},
okType: 'danger',
onCancel() {
console.log('Cancel');
},
okText: '确定',
cancelText: '取消'
})
}else{
message.error('请先选择对应项目进行操作!')
}
}
const controllerBtns = (
......@@ -100,6 +128,7 @@ const CheckWithdraw: React.FC<{}> = () => {
columns={columns}
currentRef={ref}
tableProps={{ rowKey: "id" }}
rowSelection={withdrawRowSelection}
fetchTableData={(params: any) => fetchData(params)}
controlRender={
<NiceForm
......
......@@ -14,7 +14,7 @@ import EyePreview from '@/components/EyePreview'
import { DatePicker } from '@formily/antd-components'
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect'
import StatusTag from '@/components/StatusTag'
import { accountStatusMap, memberStatusMap } from '../../constant'
import { accountMemberType, accountStatusMap, memberStatusMap } from '../../constant'
import LevelBrand from '@/pages/member/components/LevelBrand'
import { validatorByte } from '@/utils/regExp'
import { GetPayMemberAssetAccountGetMemberAssetAccountListResponseDetail } from '@/services/PayApi'
......@@ -44,8 +44,9 @@ const AccountLists: React.FC<{}> = () => {
},
{
title: '会员类型',
dataIndex: 'memberTypeName',
key: 'memberTypeName',
dataIndex: 'memberType',
key: 'memberType',
render: (t, r) => accountMemberType[t]
},
{
title: '会员角色',
......
......@@ -8,7 +8,7 @@ import StatusTag from '@/components/StatusTag'
import cx from 'classnames'
import moment from 'moment'
import { ColumnType } from 'antd/lib/table/interface'
import { memberStatusMap, moveStatusMap, statusMap } from '../../constant'
import { memberStatusMap, moveStatusMap, operationMap, statusMap } from '../../constant'
import { SettingOutlined, StopOutlined } from '@ant-design/icons'
import { validatorByte } from '@/utils/regExp'
import { PublicApi } from '@/services/api'
......@@ -79,11 +79,13 @@ const AccountDetail: React.FC<{}> = () => {
title: '交易金额(元)',
dataIndex: 'tradeMoney',
key: 'tradeMoney',
render: (t, r) => `${operationMap[r.operation]['operator']} ${t.toFixed(2)}`
},
{
title: '交易项目',
dataIndex: 'operation',
key: 'operation',
render: (t, r) => operationMap[t]['title']
},
{
title: '状态',
......
......@@ -47,6 +47,7 @@ const PaymentWithdraw: React.FC<{}> = () => {
title: '提现金额(元)',
dataIndex: 'memberRoleName',
key: 'memberRoleName',
render: (t, r) => `¥${t.toFixed(2)}`
},
{
title: '提现申请时间',
......@@ -71,7 +72,7 @@ const PaymentWithdraw: React.FC<{}> = () => {
console.log(params)
return new Promise((resolve, reject) => {
let obj = { ...params }
PublicApi.getPayMemberAssetAccountGetCheckCashOutList(obj).then(res => {
PublicApi.getPayMemberAssetAccountGetPayCashOutList(obj).then(res => {
resolve(res.data)
})
})
......
......@@ -78,12 +78,13 @@ const AccountDetail: React.FC<{}> = () => {
title: '交易金额(元)',
dataIndex: 'tradeMoney',
key: 'tradeMoney',
render: (t, r) => `${operationMap[r.operation]['operator']} ${t.toFixed(2)}`
},
{
title: '交易项目',
dataIndex: 'operation',
key: 'operation',
render: (t, r) => operationMap[t]
render: (t, r) => operationMap[t]['title']
},
{
title: '状态',
......@@ -107,8 +108,8 @@ const AccountDetail: React.FC<{}> = () => {
},
{
title: '操作角色',
dataIndex: 'parentMemberRoleName',
key: 'parentMemberRoleName',
dataIndex: ['memberAssetAccount','parentMemberRoleName'],
key: 'id',
},
{
title: '状态',
......@@ -138,7 +139,6 @@ const AccountDetail: React.FC<{}> = () => {
];
const handleConfirm = () => {
setIsBtnLoading(true)
schemaActions.submit()
}
......@@ -148,6 +148,7 @@ const AccountDetail: React.FC<{}> = () => {
const handleSubmit = (value) => {
// 提交重置
setIsBtnLoading(true)
let parasm = {
memberAssetAccountId: pageId,
money: Number(value.money),
......@@ -188,7 +189,7 @@ const AccountDetail: React.FC<{}> = () => {
</div>
<div className={styles['repayment-end']}>
<span className={styles['repayment-time']}>
{details?.memberName}
{details?.parentMemberName}
</span>
</div>
</div>
......
......@@ -31,7 +31,7 @@ const AccountDetail: React.FC<{}> = () => {
let res = await PublicApi.getPayAssetAccountGetAssetAccount({id})
const { code, data } = res
setDetails(data)
if(code === 1000){
if(code === 1000) {
let bankRes = await PublicApi.getSettleAccountsCorporateAccountConfig({memberId: data.memberId + ''})
setBankDetail(bankRes.data)
}
......@@ -62,12 +62,13 @@ const AccountDetail: React.FC<{}> = () => {
title: '交易金额(元)',
dataIndex: 'tradeMoney',
key: 'tradeMoney',
render: (t, r) => `${operationMap[r.operation]['operator']} ${t.toFixed(2)}`
},
{
title: '交易项目',
dataIndex: 'operation',
key: 'operation',
render: (t, r) => operationMap[t]
render: (t, r) => operationMap[t]['title']
},
{
title: '状态',
......
......@@ -41,20 +41,20 @@
font-weight: 500;
}
&-input {
display: block;
width: 180px;
line-height: 40px;
padding: 8px 0;
font-size: 32px;
font-weight: 500;
color: #fff;
background: none;
border-top: none;
border-right: none;
border-left: none;
border-image: initial;
outline: none;
border-bottom: 1px solid #fff;
display: block !important;
width: 180px !important;
line-height: 40px !important;
padding: 8px 0 !important;
font-size: 32px !important;
font-weight: 500 !important;
color: #fff !important;
background: none !important;
border-top: none !important;
border-right: none !important;
border-left: none !important;
border-image: initial !important;
outline: none !important;
border-bottom: 1px solid #fff !important;
}
}
......
......@@ -12,7 +12,7 @@ import { FORM_FILTER_PATH } from '@/formSchema/const'
import EyePreview from '@/components/EyePreview'
import { DatePicker } from '@formily/antd-components'
import StatusTag from '@/components/StatusTag'
import { accountStatusMap, memberStatusMap, memberLevelTypeMap } from '../../constant'
import { accountStatusMap, memberStatusMap, memberLevelTypeMap, accountMemberType } from '../../constant'
import LevelBrand from '@/pages/member/components/LevelBrand'
const formActions = createFormActions();
......@@ -23,8 +23,8 @@ const AccountLists: React.FC<{}> = () => {
const columns: ColumnType<any>[] = [
{
title: '账户归属',
dataIndex: 'memberName',
key: 'memberName',
dataIndex: 'parentMemberName',
key: 'parentMemberName',
className: 'commonPickColor',
render: (text, record) => <EyePreview
url={`/memberCenter/payandSettle/capitalAccounts/accountLists/detail?id=${record.id}`}
......@@ -34,8 +34,9 @@ const AccountLists: React.FC<{}> = () => {
},
{
title: '会员类型',
dataIndex: 'memberTypeName',
key: 'memberTypeName',
dataIndex: 'memberType',
key: 'memberType',
render: (t, r) => accountMemberType[t]
},
{
title: '会员角色',
......
......@@ -130,9 +130,17 @@ export const memberLevelTypeMap = {
// 操作项目
export const operationMap = {
'1': '账户充值',
'2': '账户提现',
'3': '订单支付',
'4': '订单退款',
'5': '订单返利'
'1': {title: '账户充值', operator: '+'},
'2': {title: '账户提现', operator: '-'},
'3': {title: '订单支付', operator: '-'},
'4': {title: '订单退款', operator: '+'},
'5': {title: '订单返利', operator: '+'}
}
// 会员类型
export const accountMemberType = {
'1': '企业会员',
'2': '企业个人会员',
'3': '渠道会员',
'4': '渠道个人会员',
}
\ No newline at end of file
......@@ -50,11 +50,15 @@ const AddRepository:React.FC<{}> = (props) => {
backIcon={<ReutrnEle description="返回"/>}
className='addRepository'
title={pageStatus === PageStatus.PREVIEW ? '查看仓位' : '新增仓位'}
extra={[
<Button key="1" onClick={() => addSchemaAction.submit()} type="primary" icon={<SaveOutlined />}>
保存
</Button>,
]}
extra={(
pageStatus !== PageStatus.PREVIEW
? (
<Button key="1" onClick={() => addSchemaAction.submit()} type="primary" icon={<SaveOutlined />}>
保存
</Button>
)
: null
)}
>
<Card className=''>
<PositionSetting addSchemaAction={addSchemaAction} schema={repositDetailSchema} formSubmit={formSubmit}/>
......
......@@ -21,7 +21,8 @@ import Search from '@/components/NiceForm/components/Search'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import Submit from '@/components/NiceForm/components/Submit'
import { SHOP_TYPES, MALL_TYPE } from '@/constants';
import shop from '@/pages/lxMall/shop'
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
export interface PositionSettingProps {
addSchemaAction: ISchemaFormActions,
......@@ -80,17 +81,17 @@ const PositionSetting:React.FC<PositionSettingProps> = (props) => {
useEffect(() => {
// 拿到所有的角色等级, 根据shopType, 商品的类容重新拿
async function getMemberLevel() {
const response = await PublicApi.getMemberManagePageitems();
const response = await PublicApi.getMemberManagePageitems({roleTypeEnum: '2'});
const { levels = [], memberTypes = [], roles = [] } = response.data;
const allLevels = all.concat(transferLabelToValue(levels, "levelTag", "level"));
const allMemberTypes = all.concat(transferLabelToValue(memberTypes, "memberTypeName", "memberTypeId"))
// const allRoles = all.concat(transferLabelToValue(roles, "roleName", "roleId"))
const allRoles = all.concat(transferLabelToValue(roles, "roleName", "roleId"))
setMemberFilter((state) => {
return {
...state,
level: allLevels,
// role: allRoles,
role: allRoles,
type: allMemberTypes
}
})
......@@ -105,16 +106,11 @@ const PositionSetting:React.FC<PositionSettingProps> = (props) => {
const { data } = await PublicApi.getWarehouseFreightSpaceDetails({id: id});
if(data.isAllMemberShare === 0) {
const res = await getBindingMember({id: id.toString(), current: '1', pageSize: '10'});
addSchemaAction.setFieldState('isAllMemberShare', (state) => {
state.value = 0
})
addSchemaAction.setFieldState('applyMember', (state) => {
state.value = res.data
})
setMembersLength(res.totalCount);
setInitialValue({...data, applyMember: res.data});
} else {
setInitialValue(data)
}
console.log(data)
setInitialValue(data);
}
if(id != '') {
getInitValue();
......@@ -374,15 +370,15 @@ const PositionSetting:React.FC<PositionSettingProps> = (props) => {
}
},
// roleId: {
// type: 'string',
// "x-component": 'Select',
// "x-component-props": {
// options: membersFilterState.role,
// style: {width: '180px'},
// placeholder: '请选择会员角色'
// }
// },
roleId: {
type: 'string',
"x-component": 'Select',
"x-component-props": {
options: membersFilterState.role,
style: {width: '180px'},
placeholder: '请选择会员角色'
}
},
submit: {
"x-component": 'Submit',
"x-mega-props": {
......
......@@ -72,6 +72,7 @@ export const enquirySearchexternalState = (text:any) => {
/****** *********************** 报价单 ************************** */
//内部
// 内部状态:1.新增需求单 2.审核需求单一级 3.审核需求单二级 4.提交需求单 5.完成 6.审核不通过 7.取消报价单
export const enquiryOfferSearchInteriorState = (text:any) => {
let component: ReactNode = null;
text === 1 ? component = <Badge status='default' text="新增报价单" />:
......@@ -94,6 +95,7 @@ export const enquiryOfferSearchexternalState = (text:any) => {
// text === 5 ? component = <Badge status='success' text="完成" />:
// text === 6 ? component = <Badge status='error' text="审核不通过" />:
// component = <Badge status="default" text="取消报价单" />
// 外部状态:1.提交需求单 2.审核需求单 3.提交报价单 4.确认报价单 5.完成 6.审核不通过 7.取消报价单
text === 1 ? component = <span style={statuStyle.default}>待提交需求单</span>:
text === 2 ? component = <span style={statuStyle.default}>审核需求单</span>:
text === 3 ? component = <span style={statuStyle.confirm}>待提交报价单</span>:
......
......@@ -16,6 +16,7 @@ class ProductStore implements IProductModule {
@observable public productDescription: IDecsParams;
@observable public isAllAttributePic: boolean = true; // 是否所有属性共用
@observable public currentPageInStore: IPage = { current: null, pageSize: null }; // 页码相关
@observable public tabClickItem: any[] = []; // tab标签页点击项
/** 计算操作 **/
// 加工接口返回的数据,用户编辑回显数据
......@@ -193,6 +194,10 @@ class ProductStore implements IProductModule {
this.currentPageInStore = data
}
@action.bound
public setTabClickItem(data: any) {
this.tabClickItem = data
}
}
......
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