Commit 51bb4004 authored by 前端-钟卫鹏's avatar 前端-钟卫鹏
parents 4aa8f5c1 2e1f3cb9
...@@ -251,6 +251,12 @@ const HandlingRoute = { ...@@ -251,6 +251,12 @@ const HandlingRoute = {
icon: 'smile', icon: 'smile',
component: '@/pages/handling/assign/processStock', component: '@/pages/handling/assign/processStock',
}, },
{
path: '/memberCenter/handling/confirm/pendingDelivered/detail',
name: 'pendingDeliveredDetail',
icon: 'smile',
component: '@/pages/handling/assign/detail',
},
// 确认生产通知单 -> 待确认回单生产通知单 // 确认生产通知单 -> 待确认回单生产通知单
{ {
path: '/memberCenter/handling/confirm/pendingReceipt', path: '/memberCenter/handling/confirm/pendingReceipt',
......
...@@ -485,6 +485,7 @@ export default { ...@@ -485,6 +485,7 @@ export default {
'menu.handling.confirm.processingInvoiceTobeAddDetail': '待新增加工发货单详情', 'menu.handling.confirm.processingInvoiceTobeAddDetail': '待新增加工发货单详情',
'menu.handling.confirm.pendingAddLogistics': '待新增物流单', 'menu.handling.confirm.pendingAddLogistics': '待新增物流单',
'menu.handling.confirm.pendingDelivered': '待发货生产通知单', 'menu.handling.confirm.pendingDelivered': '待发货生产通知单',
'menu.handling.confirm.pendingDeliveredDetail': '待发货生产通知到单详情',
'menu.handling.confirm.pendingReceipt': '待确认回单生产通知单', 'menu.handling.confirm.pendingReceipt': '待确认回单生产通知单',
'menu.handling.confirm.createProcessInvoice': '新建加工发货单', 'menu.handling.confirm.createProcessInvoice': '新建加工发货单',
'menu.handling.confirm.createLogisticsOrder': '新建物流单', 'menu.handling.confirm.createLogisticsOrder': '新建物流单',
......
...@@ -15,17 +15,15 @@ const ExchangePrConfirmBackVerify: React.FC = () => { ...@@ -15,17 +15,15 @@ const ExchangePrConfirmBackVerify: React.FC = () => {
return; return;
} }
setSubmitLoading(true); setSubmitLoading(true);
// PublicApi.postPayCreditHandleVerifyStepOne({ PublicApi.postAsReplaceGoodsConfirmAllReplaceGoodsReceipt({
// applyId: id, dataId: id,
// isPass: values.agree, }).then(res => {
// opinion: values.reason, if (res.code === 1000) {
// }).then(res => { history.goBack();
// if (res.code === 1000) { }
// history.goBack(); }).finally(() => {
// } setSubmitLoading(false);
// }).finally(() => { });
// setSubmitLoading(false);
// });
}; };
return ( return (
......
...@@ -17,17 +17,15 @@ const ExchangePrDeliverVerify: React.FC = () => { ...@@ -17,17 +17,15 @@ const ExchangePrDeliverVerify: React.FC = () => {
return; return;
} }
setSubmitLoading(true); setSubmitLoading(true);
// PublicApi.postPayCreditHandleVerifyStepOne({ PublicApi.postAsReplaceGoodsConfirmReplaceDeliveryGoods({
// applyId: id, dataId: id,
// isPass: values.agree, }).then(res => {
// opinion: values.reason, if (res.code === 1000) {
// }).then(res => { history.goBack();
// if (res.code === 1000) { }
// history.goBack(); }).finally(() => {
// } setSubmitLoading(false);
// }).finally(() => { });
// setSubmitLoading(false);
// });
}; };
const handleVisible = flag => { const handleVisible = flag => {
......
...@@ -17,17 +17,15 @@ const ExchangePrReceivedVerify: React.FC = () => { ...@@ -17,17 +17,15 @@ const ExchangePrReceivedVerify: React.FC = () => {
return; return;
} }
setSubmitLoading(true); setSubmitLoading(true);
// PublicApi.postPayCreditHandleVerifyStepOne({ PublicApi.postAsReplaceGoodsConfirmReturnReceiveGoods({
// applyId: id, dataId: id,
// isPass: values.agree, }).then(res => {
// opinion: values.reason, if (res.code === 1000) {
// }).then(res => { history.goBack();
// if (res.code === 1000) { }
// history.goBack(); }).finally(() => {
// } setSubmitLoading(false);
// }).finally(() => { });
// setSubmitLoading(false);
// });
}; };
const handleVisible = flag => { const handleVisible = flag => {
......
...@@ -227,7 +227,7 @@ export const pnoReceiveDeliverDetailDOListColumns = [ ...@@ -227,7 +227,7 @@ export const pnoReceiveDeliverDetailDOListColumns = [
}, },
{ {
title: 'ID', title: 'ID',
dataIndex: 'orderId' dataIndex: 'productId'
}, },
{ {
title: '商品名称', title: '商品名称',
......
...@@ -4,7 +4,6 @@ import { history } from 'umi'; ...@@ -4,7 +4,6 @@ import { history } from 'umi';
import AvatarWrap from '@/components/AvatarWrap'; import AvatarWrap from '@/components/AvatarWrap';
import { PageHeader, Descriptions, Card, Tabs, Row, Col, Button, Badge, Table } from 'antd'; import { PageHeader, Descriptions, Card, Tabs, Row, Col, Button, Badge, Table } from 'antd';
import Circulation from '../../components/Circulation'; import Circulation from '../../components/Circulation';
import WrapTable from '../../components/WrapTable';
import OtherRequirement from '../../components/OtherRequirement'; import OtherRequirement from '../../components/OtherRequirement';
import Appendix from '../../components/Appendix'; import Appendix from '../../components/Appendix';
import { usePageStatus } from '@/hooks/usePageStatus' import { usePageStatus } from '@/hooks/usePageStatus'
...@@ -28,10 +27,12 @@ import { ...@@ -28,10 +27,12 @@ import {
CONFIRM_PENDING_FIRST_DETAIL, CONFIRM_PENDING_FIRST_DETAIL,
CONFIRM_PENDING_SECOND_DETAIL, CONFIRM_PENDING_SECOND_DETAIL,
CONFIRM_PENDING_CONFIRM_DETAIL, CONFIRM_PENDING_CONFIRM_DETAIL,
PENDING_DELIVERD_PATH,
SUPPLIER_DETAIL_INNER_STATUS_COLOR, SUPPLIER_DETAIL_INNER_STATUS_COLOR,
CONFIRM_DETAIL_INNER_STATUS_COLOR, CONFIRM_DETAIL_INNER_STATUS_COLOR,
SUPPLIER_OUTER_STATUS_COLOR SUPPLIER_OUTER_STATUS_COLOR
} from '../../common'; } from '../../common';
import DeliverGood from '../../components/DeliverGood';
// 下面的地址需要抽离出来, 还有以下的相同的path // 下面的地址需要抽离出来, 还有以下的相同的path
const SERVICE_MAP = { const SERVICE_MAP = {
...@@ -46,7 +47,8 @@ const SERVICE_MAP = { ...@@ -46,7 +47,8 @@ const SERVICE_MAP = {
[`${CONFIRM_PENDING_FIRST_DETAIL}`]: PublicApi.getEnhanceProcessToBeFirstExamDetails, [`${CONFIRM_PENDING_FIRST_DETAIL}`]: PublicApi.getEnhanceProcessToBeFirstExamDetails,
[`${CONFIRM_PENDING_SECOND_DETAIL}`]: PublicApi.getEnhanceProcessToBeSecondExamDetails, [`${CONFIRM_PENDING_SECOND_DETAIL}`]: PublicApi.getEnhanceProcessToBeSecondExamDetails,
[`${CONFIRM_PENDING_CONFIRM_DETAIL}`]: PublicApi.getEnhanceProcessToBeConfirmDetails, [`${CONFIRM_PENDING_CONFIRM_DETAIL}`]: PublicApi.getEnhanceProcessToBeConfirmDetails,
'/memberCenter/handling/confirm/processingInvoiceTobeAdd/detail': PublicApi.getEnhanceProcessToBeAddDeliveryDetails, [`${PENDING_DELIVERD_PATH}/detail`]: PublicApi.getEnhanceProcessToBeDeliveryDetails
// '/memberCenter/handling/confirm/processingInvoiceTobeAdd/detail': PublicApi.getEnhanceProcessToBeAddDeliveryDetails,
} }
/** /**
...@@ -74,15 +76,19 @@ const Detail: React.FC<{}> = () => { ...@@ -74,15 +76,19 @@ const Detail: React.FC<{}> = () => {
const [deliverAddressOption, setDeliverAddressOption] = useState([]); const [deliverAddressOption, setDeliverAddressOption] = useState([]);
const [activeAddress, setActiveAddress] = useState<string | null>(null) const [activeAddress, setActiveAddress] = useState<string | null>(null)
const getInfo = () => {
const service = SERVICE_MAP[pathname];
service && service({id: id})
.then(({data, code}) => {
if(code === 1000) {
setInfo(data);
}
})
}
useEffect(() => { useEffect(() => {
if(id) { if(id) {
const service = SERVICE_MAP[pathname]; getInfo();
service && service({id: id})
.then(({data, code}) => {
if(code === 1000) {
setInfo(data);
}
})
} }
}, [id]); }, [id]);
...@@ -147,12 +153,9 @@ const Detail: React.FC<{}> = () => { ...@@ -147,12 +153,9 @@ const Detail: React.FC<{}> = () => {
}) })
} }
/** const postService = (service, params) => {
* 待提交生产通知单,提交生产通知到哪
*/
const submit = () => {
setLoading(true) setLoading(true)
PublicApi.postEnhanceSupplierToBeSubmitSubmit({id: id}) service(params)
.then(({data, code}) => { .then(({data, code}) => {
if(code === 1000) { if(code === 1000) {
history.go(-1); history.go(-1);
...@@ -162,7 +165,22 @@ const Detail: React.FC<{}> = () => { ...@@ -162,7 +165,22 @@ const Detail: React.FC<{}> = () => {
}) })
} }
const renderExtra = () => { /**
* 待提交生产通知单,提交生产通知单
*/
const submit = () => {
postService(PublicApi.postEnhanceSupplierToBeSubmitSubmit, {id: id});
}
/**
* 指派生产通知单,提交
* /enhance/supplier/toBeAdd/submitExam
*/
const toNext = () => {
postService(PublicApi.postEnhanceSupplierToBeAddSubmitExam, {id: id});
}
const renderExtra = useCallback(() => {
const ExamineComponent = ( const ExamineComponent = (
<ExamineModal onOk={examOnOk} modalType={"basic"}> <ExamineModal onOk={examOnOk} modalType={"basic"}>
...@@ -170,16 +188,43 @@ const Detail: React.FC<{}> = () => { ...@@ -170,16 +188,43 @@ const Detail: React.FC<{}> = () => {
</ExamineModal> </ExamineModal>
) )
const SubmitBtn = <Button loading={loading} icon={<FormOutlined />} onClick={submit} type="primary"> 提交通知单</Button> const SubmitBtn = <Button loading={loading} icon={<FormOutlined />} onClick={submit} type="primary"> 提交通知单</Button>
const NextBtn = <Button loading={loading} onClick={toNext}>提交</Button>
const COMPONENT_MAP = { const COMPONENT_MAP = {
// 待新增生产通知单有提交按钮
[`${ASSIGN_TO_BE_ADD_QUERY_DETAIL}`]: NextBtn,
[`${ASSIGN_PENDING_SUBMIT_DETAIL}`]: SubmitBtn, [`${ASSIGN_PENDING_SUBMIT_DETAIL}`]: SubmitBtn,
[`${ASSIGN_PENDING_FIRST_DETAIL}`]: ExamineComponent, [`${ASSIGN_PENDING_FIRST_DETAIL}`]: ExamineComponent,
[`${ASSIGN_PENDING_SECOND_DETAIL}`]: ExamineComponent, [`${ASSIGN_PENDING_SECOND_DETAIL}`]: ExamineComponent,
[`${CONFIRM_PENDING_SUBMIT_DETAIL}`]: ExamineComponent, [`${CONFIRM_PENDING_SUBMIT_DETAIL}`]: ExamineComponent,
[`${CONFIRM_PENDING_FIRST_DETAIL}`]: ExamineComponent, [`${CONFIRM_PENDING_FIRST_DETAIL}`]: ExamineComponent,
[`${CONFIRM_PENDING_SECOND_DETAIL}`]: ExamineComponent, [`${CONFIRM_PENDING_SECOND_DETAIL}`]: ExamineComponent,
[`${CONFIRM_PENDING_CONFIRM_DETAIL}`]: ExamineComponent [`${CONFIRM_PENDING_CONFIRM_DETAIL}`]: ExamineComponent,
// [`${PENDING_DELIVERD_PATH}/detail`]: DeliverGoodComponent
} }
return (COMPONENT_MAP[pathname] || null) return (COMPONENT_MAP[pathname] || null)
}, [])
const handleConfirm = (status, params) => {
/**
* 这里的5 是指外部状态(outerStatus)为5,1指的是(activeData.deliverStatus)为1,
* 1 可以是 deliverStatus, 也可以是receiveStatus 和 receiptStatus
*/
const SERVICE_MAP = {
'5_1': PublicApi.postEnhanceProcessToBeDeliveryConfirmDelivery,
'7_1': PublicApi.postEnhanceSupplierToBeReceiveConfirmReceive,
'8_1': PublicApi.postEnhanceProcessToBeConfirmReceiptConfirmReceipt
}
const service = SERVICE_MAP[status];
if(service) {
service(params)
.then((data, code) => {
if(code === 1000) {
// console.log(data);
getInfo()
}
})
}
} }
return ( return (
...@@ -229,6 +274,16 @@ const Detail: React.FC<{}> = () => { ...@@ -229,6 +274,16 @@ const Detail: React.FC<{}> = () => {
{ {
renderExtra() renderExtra()
} }
{
// 这里手工发货需要某个字段值去判断
pathname === (PENDING_DELIVERD_PATH + "/detail")
? (
<DeliverGood mode="view">
<Button loading={loading} type="primary" >手工发货</Button>
</DeliverGood>
)
: null
}
</Col> </Col>
</Row> </Row>
</PageHeader> </PageHeader>
...@@ -246,12 +301,15 @@ const Detail: React.FC<{}> = () => { ...@@ -246,12 +301,15 @@ const Detail: React.FC<{}> = () => {
</Card> </Card>
</div> </div>
{/* 这里全部是走 非手工发货,当有手工发货按钮是,此时下面收发货明细隐藏 */}
<div style={{marginTop: '20px', display: info.pnoReceiveDeliverDetailDOList?.length > 0 ? 'block' : 'none'}}> <div style={{marginTop: '20px', display: info.pnoReceiveDeliverDetailDOList?.length > 0 ? 'block' : 'none'}}>
<ReceiptDeliveryDetails <ReceiptDeliveryDetails
statisticsColumn={receiveColumns} statisticsColumn={receiveColumns}
statisticsData={info.details} statisticsData={info.details}
pnoReceiveDeliverDetailDOList={info.pnoReceiveDeliverDetailDOList} pnoReceiveDeliverDetailDOList={info.pnoReceiveDeliverDetailDOList}
pnoReceiveDeliverDetailColumns={pnoReceiveDeliverDetailDOListColumns} pnoReceiveDeliverDetailColumns={pnoReceiveDeliverDetailDOListColumns}
outerStatus={info.outerStatus}
confirm={handleConfirm}
/> />
</div> </div>
<div style={{marginTop: '20px'}}> <div style={{marginTop: '20px'}}>
...@@ -285,13 +343,15 @@ const Detail: React.FC<{}> = () => { ...@@ -285,13 +343,15 @@ const Detail: React.FC<{}> = () => {
<Card bodyStyle={{padding: '10px 24px 24px 24px'}}> <Card bodyStyle={{padding: '10px 24px 24px 24px'}}>
<Tabs> <Tabs>
<TabPane tab="外部流转记录" key="1"> <TabPane tab="外部流转记录" key="1">
<WrapTable <Table
rowKey={"id"}
columns={outerWorkflowRecordsColumn} columns={outerWorkflowRecordsColumn}
dataSource={info.outerWorkflowRecordsList} dataSource={info.outerWorkflowRecordsList}
/> />
</TabPane> </TabPane>
<TabPane tab="内部流转记录" key="2"> <TabPane tab="内部流转记录" key="2">
<WrapTable <Table
rowKey={"id"}
columns={innerWorkFlowRecordColumn} columns={innerWorkFlowRecordColumn}
dataSource={info.innerWorkflowRecordsList} dataSource={info.innerWorkflowRecordsList}
/> />
......
...@@ -14,28 +14,29 @@ import { ColumnsType } from 'antd/es/table'; ...@@ -14,28 +14,29 @@ import { ColumnsType } from 'antd/es/table';
import { timeRange } from '@/utils'; import { timeRange } from '@/utils';
import { Link, history } from 'umi' import { Link, history } from 'umi'
import { DOC_TYPE_PROCESS_INVOICE, DEPENDENT_DOC_PRODUCTION } from '@/constants'; import { DOC_TYPE_PROCESS_INVOICE, DEPENDENT_DOC_PRODUCTION } from '@/constants';
import {
PROCESS_TITLE,
PENDING_ADD_PROCESS_PATH,
PROCESSING_INVOICE_TO_BE_ADD_PATH,
PENDING_ADD_LOGISTICS_PATH,
PENDING_DELIVERD_PATH,
PENDING_RECEIPT_PATH,
ASSIGN_PENDING_RECEIVE,
} from '../../common';
const formActions = createFormActions(); const formActions = createFormActions();
const ADD_PROCESS_PATH = '/memberCenter/tranactionAbility/stockSellStorage/bills/add'; const ADD_PROCESS_PATH = '/memberCenter/tranactionAbility/stockSellStorage/bills/add';
const ADD_DELIVERY_PATH = '/memberCenter/tranactionAbility/stockSellStorage/bills/add'; const ADD_DELIVERY_PATH = '/memberCenter/tranactionAbility/stockSellStorage/bills/add';
const ADD_LOGISTICS_PATH = '/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList/add'; const ADD_LOGISTICS_PATH = '/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList/add';
const TITLE = {
'/memberCenter/handling/assign/pendingAddProcessing': "待新建加工入库单",
'/memberCenter/handling/confirm/processingInvoiceTobeAdd': "待新增加工发货单",
'/memberCenter/handling/confirm/pendingAddLogistics': "待新增物流单",
'/memberCenter/handling/confirm/pendingDelivered': "待发货生产通知单",
'/memberCenter/handling/confirm/pendingReceipt': "待确认回单生产通知单",
'/memberCenter/handling/assign/pendingReceive': "待确认收货生产通知单",
}
const SERVICE_MAPS = { const SERVICE_MAPS = {
'/memberCenter/handling/assign/pendingAddProcessing': PublicApi.getEnhanceSupplierToBeAddStorageList, [PENDING_ADD_PROCESS_PATH]: PublicApi.getEnhanceSupplierToBeAddStorageList,
'/memberCenter/handling/confirm/processingInvoiceTobeAdd': PublicApi.getEnhanceProcessToBeAddDeliveryList, [PROCESSING_INVOICE_TO_BE_ADD_PATH]: PublicApi.getEnhanceProcessToBeAddDeliveryList,
'/memberCenter/handling/confirm/pendingAddLogistics': PublicApi.getEnhanceProcessToBeAddLogisticsList, [PENDING_ADD_LOGISTICS_PATH]: PublicApi.getEnhanceProcessToBeAddLogisticsList,
'/memberCenter/handling/confirm/pendingDelivered': PublicApi.getEnhanceSupplierToBeReceiveList, ///enhance/process/toBeDelivery/list
'/memberCenter/handling/confirm/pendingReceipt': PublicApi.getEnhanceProcessToBeConfirmReceiptList, [PENDING_DELIVERD_PATH]: PublicApi.getEnhanceProcessToBeDeliveryList,
'/memberCenter/handling/assign/pendingReceive': PublicApi.getEnhanceSupplierToBeReceiveList [PENDING_RECEIPT_PATH]: PublicApi.getEnhanceProcessToBeConfirmReceiptList,
[ASSIGN_PENDING_RECEIVE]: PublicApi.getEnhanceSupplierToBeReceiveList
} }
enum ExamType { enum ExamType {
...@@ -43,7 +44,6 @@ enum ExamType { ...@@ -43,7 +44,6 @@ enum ExamType {
warehouseReceipt = 'warehouseReceipt', // 加工入库单 warehouseReceipt = 'warehouseReceipt', // 加工入库单
} }
const processStock: React.FC<{}> = () => { const processStock: React.FC<{}> = () => {
const ref = useRef<any>({}); const ref = useRef<any>({});
const pathname = history.location.pathname; const pathname = history.location.pathname;
...@@ -84,7 +84,7 @@ const processStock: React.FC<{}> = () => { ...@@ -84,7 +84,7 @@ const processStock: React.FC<{}> = () => {
}, },
{ title: '发货批次', dataIndex: 'deliveryBatch'}, { title: '发货批次', dataIndex: 'deliveryBatch'},
{ {
title: '入库单号', title: () => pathname == PENDING_ADD_PROCESS_PATH ? '入库单号' : '发货单号',
dataIndex: 'deliveryNo', dataIndex: 'deliveryNo',
render: (text) => { render: (text) => {
if(!text) { if(!text) {
...@@ -141,7 +141,8 @@ const processStock: React.FC<{}> = () => { ...@@ -141,7 +141,8 @@ const processStock: React.FC<{}> = () => {
), ),
'待新增物流单': <Link to={`${ADD_LOGISTICS_PATH}`}>新增</Link>, '待新增物流单': <Link to={`${ADD_LOGISTICS_PATH}`}>新增</Link>,
'待确认物流单': <a>查看</a>, '待确认物流单': <a>查看</a>,
'待收货通知单': <Link to={'/memberCenter/handling/assign/pendingReceive/detail'}>收货</Link> '待收货通知单': <Link to={`${ASSIGN_PENDING_RECEIVE}/detail`}>收货</Link>,
'待确认发货': <Link to={`${PENDING_DELIVERD_PATH}/detail?id=${record.id}`}>发货</Link>
} }
return MAP[record.innerStatusName] return MAP[record.innerStatusName]
} }
...@@ -205,7 +206,7 @@ const processStock: React.FC<{}> = () => { ...@@ -205,7 +206,7 @@ const processStock: React.FC<{}> = () => {
return ( return (
<PageHeaderWrapper <PageHeaderWrapper
title={TITLE[pathname]} title={PROCESS_TITLE[pathname]}
> >
<Card> <Card>
<StandardTable <StandardTable
......
...@@ -29,10 +29,14 @@ export const ASSIGN_TO_BE_ADD_QUERY = '/memberCenter/handling/assign/tobeAddQuer ...@@ -29,10 +29,14 @@ export const ASSIGN_TO_BE_ADD_QUERY = '/memberCenter/handling/assign/tobeAddQuer
export const ASSIGN_PENDING_FIRST = '/memberCenter/handling/assign/pendingFirst'; export const ASSIGN_PENDING_FIRST = '/memberCenter/handling/assign/pendingFirst';
export const ASSIGN_PENDING_SECOND = '/memberCenter/handling/assign/pendingSecond'; export const ASSIGN_PENDING_SECOND = '/memberCenter/handling/assign/pendingSecond';
export const ASSIGN_PENDING_SUBMIT = '/memberCenter/handling/assign/pendingSubmit'; export const ASSIGN_PENDING_SUBMIT = '/memberCenter/handling/assign/pendingSubmit';
/**
* 指派生产通知单->待收货生产通知单
*/
export const ASSIGN_PENDING_RECEIVE = '/memberCenter/handling/assign/pendingReceive'; export const ASSIGN_PENDING_RECEIVE = '/memberCenter/handling/assign/pendingReceive';
/** /**
* 确认生产通知单 * 确认生产通知单MENU -> 生产通知单查询, 待提交生产通知单,待审核(一级), 待审核(二级),待确认生产通知单
*/ */
export const CONFIRM_QUERY = '/memberCenter/handling/confirm/query'; export const CONFIRM_QUERY = '/memberCenter/handling/confirm/query';
export const CONFIRM_PENDING_SUBMIT = '/memberCenter/handling/confirm/pendingSubmit'; export const CONFIRM_PENDING_SUBMIT = '/memberCenter/handling/confirm/pendingSubmit';
...@@ -59,7 +63,6 @@ export const CONFIRM_PENDING_SECOND_DETAIL = CONFIRM_PENDING_SECOND + DETAIL; ...@@ -59,7 +63,6 @@ export const CONFIRM_PENDING_SECOND_DETAIL = CONFIRM_PENDING_SECOND + DETAIL;
export const CONFIRM_PENDING_CONFIRM_DETAIL = CONFIRM_PENDING_CONFIRM + DETAIL; export const CONFIRM_PENDING_CONFIRM_DETAIL = CONFIRM_PENDING_CONFIRM + DETAIL;
/** /**
* 指派生产通知单-生产通知单查询页 * 指派生产通知单-生产通知单查询页
*/ */
...@@ -101,31 +104,26 @@ export const PENDING_RECEIVE_SCHEMA = "noticeNo" ...@@ -101,31 +104,26 @@ export const PENDING_RECEIVE_SCHEMA = "noticeNo"
* 下面设置各个 path 常量 * 下面设置各个 path 常量
*/ */
export const QUERY_PATH = '/query';
const QUERY_TITLE = '生产通知单查询'; const QUERY_TITLE = '生产通知单查询';
/** /**
* 待新增生产通知单 * 待新增生产通知单
*/ */
export const TO_BE_ADD_QUERY_PATH = '/tobeAddQuery';
const TO_BE_ADD_QUERY_TITLE = '待新增生产通知单'; const TO_BE_ADD_QUERY_TITLE = '待新增生产通知单';
/** /**
* 带审核生产通知单(一级) * 带审核生产通知单(一级)
*/ */
export const PENDING_FIRST = '/pendingFirst';
const PENDING_FIRST_TITLE = '待审核通知单(一级)'; const PENDING_FIRST_TITLE = '待审核通知单(一级)';
/** /**
* 待审核通知单(二级) * 待审核通知单(二级)
*/ */
export const PENDING_SECOND = '/pendingSecond';
const PENDING_SECOND_TITLE = '待审核通知单(二级)'; const PENDING_SECOND_TITLE = '待审核通知单(二级)';
/** /**
* 待审核生产通知单 * 待审核生产通知单
*/ */
export const PENDING_SUBMIT = '/pendingSubmit';
const PENDING_SUBMIT_TITLE = '待提交生产通知单'; const PENDING_SUBMIT_TITLE = '待提交生产通知单';
/** /**
...@@ -134,35 +132,26 @@ const PENDING_SUBMIT_TITLE = '待提交生产通知单'; ...@@ -134,35 +132,26 @@ const PENDING_SUBMIT_TITLE = '待提交生产通知单';
export const PENDING_RECEIVE = '/pendingReceive'; export const PENDING_RECEIVE = '/pendingReceive';
const PENDING_RECEIVE_TITLE = '待收货生产通知单'; const PENDING_RECEIVE_TITLE = '待收货生产通知单';
export const TITLE_MAPS = {
[QUERY_PATH]: QUERY_TITLE,
[TO_BE_ADD_QUERY_PATH]: TO_BE_ADD_QUERY_TITLE,
[PENDING_FIRST]: PENDING_FIRST_TITLE,
[PENDING_SECOND]: PENDING_SECOND_TITLE,
[PENDING_SUBMIT]: PENDING_SUBMIT_TITLE,
[PENDING_RECEIVE]: PENDING_RECEIVE_TITLE
}
// 根据 lastTypeParams, 获取对应的高级筛选 name export const ASSINGN_TITLE_MAPS = {
export const FILTER_NAMES = { [ASSIGN_QUERY]: QUERY_TITLE,
[QUERY_PATH]: QUERY_SEARCH_NAME, [ASSIGN_TO_BE_ADD_QUERY]: TO_BE_ADD_QUERY_TITLE,
[TO_BE_ADD_QUERY_PATH]: TO_BE_ADD_QUERY_SEARCH_NAME, [ASSIGN_PENDING_FIRST]: PENDING_FIRST_TITLE,
[PENDING_FIRST]: PENDING_FIRST_AND_SECOND_NOTICE, [ASSIGN_PENDING_SECOND]: PENDING_SECOND_TITLE,
[PENDING_SECOND]: PENDING_FIRST_AND_SECOND_NOTICE, [ASSIGN_PENDING_SUBMIT]: PENDING_SUBMIT_TITLE,
[PENDING_SUBMIT]: PENDING_TO_SUBMIT,
[PENDING_RECEIVE]: PENDING_RECEIVE_SCHEMA,
"/pendingAddProcessing": PENDING_ADD_PROCESS,
} }
export const DETAIL_PATH = {
[QUERY_PATH]: ASSIGN_QUERY_DETAIL,
[TO_BE_ADD_QUERY_PATH]: ASSIGN_TO_BE_ADD_QUERY_DETAIL, // export const DETAIL_PATH = {
[PENDING_FIRST]: ASSIGN_PENDING_FIRST_DETAIL, // [QUERY_PATH]: ASSIGN_QUERY_DETAIL,
[PENDING_SECOND]: ASSIGN_PENDING_SECOND_DETAIL, // [TO_BE_ADD_QUERY_PATH]: ASSIGN_TO_BE_ADD_QUERY_DETAIL,
[PENDING_SUBMIT]: ASSIGN_PENDING_SUBMIT, // [PENDING_FIRST]: ASSIGN_PENDING_FIRST_DETAIL,
[PENDING_RECEIVE]: ASSIGN_PENDING_RECEIVE_DETAIL, // [PENDING_SECOND]: ASSIGN_PENDING_SECOND_DETAIL,
} // [PENDING_SUBMIT]: ASSIGN_PENDING_SUBMIT,
// [PENDING_RECEIVE]: ASSIGN_PENDING_RECEIVE_DETAIL,
// }
export const INNER_STATUS_BADGE_COLOR = { export const INNER_STATUS_BADGE_COLOR = {
"1": "default", "1": "default",
...@@ -181,6 +170,7 @@ export const SUPPLIER_INNER_STATUS_COLOR = { ...@@ -181,6 +170,7 @@ export const SUPPLIER_INNER_STATUS_COLOR = {
"1": "default", "1": "default",
"2": "warning", "2": "warning",
"3": "processing", "3": "processing",
'4': 'processing',
"5": "success", "5": "success",
"9": "error", "9": "error",
} }
...@@ -226,7 +216,6 @@ export const CONFIRM_DETAIL_INNER_STATUS_COLOR = [ ...@@ -226,7 +216,6 @@ export const CONFIRM_DETAIL_INNER_STATUS_COLOR = [
/** /**
* 指派生产通知单 -> 列表页 -> 外部状态 * 指派生产通知单 -> 列表页 -> 外部状态
*/ */
export const SUPPLIER_OUTER_STATUS_COLOR = [ export const SUPPLIER_OUTER_STATUS_COLOR = [
"default", "default",
"default", "default",
...@@ -234,4 +223,82 @@ export const SUPPLIER_OUTER_STATUS_COLOR = [ ...@@ -234,4 +223,82 @@ export const SUPPLIER_OUTER_STATUS_COLOR = [
"warning", "warning",
"danger", "danger",
"success" "success"
] ]
\ No newline at end of file
/**
* 待新增加工入库单
*/
export const PENDING_ADD_PROCESS_PATH = '/memberCenter/handling/assign/pendingAddProcessing';
/**
* 待新增加工发货单
*/
export const PROCESSING_INVOICE_TO_BE_ADD_PATH = '/memberCenter/handling/confirm/processingInvoiceTobeAdd';
/**
* 待新增物流单
*/
export const PENDING_ADD_LOGISTICS_PATH = '/memberCenter/handling/confirm/pendingAddLogistics';
/**
* 待发货生产通知单
*/
export const PENDING_DELIVERD_PATH = '/memberCenter/handling/confirm/pendingDelivered';
/**
* 待确认回单生产通知单
*/
export const PENDING_RECEIPT_PATH = '/memberCenter/handling/confirm/pendingReceipt';
/**
* 待加工发货单, 待加工入库单,待新增物流单,待发货生产通知单,待确认回单生产通知单, 待确认收货生产通知单
* 以上几种单据标题,因为共用一个页面,需要根据链接去判断
*/
export const PROCESS_TITLE = {
[PENDING_ADD_PROCESS_PATH]: "待新建加工入库单",
[PROCESSING_INVOICE_TO_BE_ADD_PATH]: "待新增加工发货单",
[PENDING_ADD_LOGISTICS_PATH]: "待新增物流单",
[PENDING_DELIVERD_PATH]: "待发货生产通知单",
[PENDING_RECEIPT_PATH]: "待确认回单生产通知单",
[ASSIGN_PENDING_RECEIVE]: "待确认收货生产通知单",
}
/**
* 收发货铭心 内部状态, 用发货状态,收货状态,回单状态去判断内部状态
* 因为上面三种情况 1:代表待确认 2,表示已确认收发货,回单,
*/
export const DELIEVER_AND_RECEIVE_INNER_STATUS_TEXT = [
"",
"待确认发货",
"已确认发货",
"待确认收货",
"已确认收货",
"待确认回单",
"已确认回单"
]
export const DELIEVER_AND_RECEIVE_INNER_BTN_TEXT = [
"",
"确认发货",
"确认发货",
"确认收货",
"确认收货",
"确认回单",
"确认回单"
]
export const DELIEVER_AND_RECEIVE_INNER_STATUS = {
'5_1': 1,
'5_2': 2,
'7_1': 3,
'7_2': 4,
'8_1': 5,
'8_2': 6
}
.row {
margin-bottom: 24px;
font-size: 12px;
&:last-child {
margin-bottom: 0;
}
.label {
color: #909399;
}
}
\ No newline at end of file
import React, { useState, useCallback } from 'react';
import { Button, Modal, DatePicker, Row, Col } from 'antd';
import NiceForm from '@/components/NiceForm';
import { createAsyncFormActions } from '@formily/antd';
import { PublicApi } from '@/services/api';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import styles from './index.less';
import { Link } from 'umi'
const formActions = createAsyncFormActions();
interface Iprops {
children: React.ReactNode,
mode: 'view' | 'edit'
}
const schema = {
type: 'object',
properties: {
layout: {
type: "object",
"x-component": "mega-layout",
"x-component-props": {
"labelAlign": "top",
"full": true
},
properties: {
address: {
type: 'string',
"title": "发货地址",
enum: [],
"x-rules": [
{
required: true,
message: '请选择发货地址'
}
]
},
time: {
type: 'time',
title: '发货时间',
"x-component": 'DatePicker',
"x-rules": [
{
required: true,
message: '请选择发货时间'
}
]
},
no: {
type: 'string',
title: '发货单号',
"x-rules": [
{
required: true,
message: '请填写发货单号'
},
{
limitByte: true, // 自定义校验规则
maxByte: 20,
}
]
},
company: {
type: 'string',
title: '物流公司',
enum: [],
"x-rules": [
{
required: true,
message: '请选择物流公司'
}
]
}
}
}
}
}
const DeliverGood: React.FC<Iprops> = (props) => {
const { mode,} = props;
const [visible, setVisible] = useState(false);
const handleOk = () => {
if(mode === 'edit') {
formActions.submit()
}
}
const handleCancel = () => {
setVisible(false);
}
const handleSubmit = (value) => {
setVisible(false);
}
const fetchDelieverAddress = useCallback(async () => {
const { data, code }= await PublicApi.getLogisticsShipperAddressPage({current: '1', pageSize: '999'});
if(code === 1000) {
return data.data.map((item) => {
return {
label: item.fullAddress + " / " + item.shipperName + " / " + item.phone,
value: item.id
}
})
}
return []
}, [])
const fetchCompany = useCallback(async() => {
// /logistics/select/listCompany
const { data, code } = await PublicApi.getLogisticsSelectListCompany({cooperateType: '2'});
if(code === 1000) {
return data.map((item) => {
return {
label: item.name,
value: item.id
}
})
}
return []
}, [])
return (
<div>
<div onClick={() => setVisible(true)}>
{
props.children
}
</div>
<Modal
visible={visible}
title="发货处理"
onOk={handleOk}
onCancel={handleCancel}
>
{
mode === 'edit'
? <NiceForm
actions={formActions}
components={{DatePicker}}
onSubmit={handleSubmit}
effects={($, actions) => {
useAsyncSelect("address", fetchDelieverAddress);
useAsyncSelect("company", fetchCompany)
}}
schema={schema}
/>
: <div>
<Row className={styles.row}>
<Col className={styles.label} span={4}>发货地址:</Col>
<Col>广东省广州市海珠区新港东路1068号中州中心北塔6楼</Col>
</Row>
<Row className={styles.row}>
<Col className={styles.label} span={4}>发货时间:</Col>
<Col>2020-05-20 08:00</Col>
</Row>
<Row className={styles.row}>
<Col className={styles.label} span={4}>物流单号:</Col>
<Col><Link to={'/'}>WL0954548</Link></Col>
</Row>
<Row className={styles.row}>
<Col className={styles.label} span={4}>物流公司:</Col>
<Col>顺丰</Col>
</Row>
</div>
}
</Modal>
</div>
)
}
export default DeliverGood
\ No newline at end of file
...@@ -53,7 +53,7 @@ const DeliveryInfomation: React.FC<Iprops> = (props) => { ...@@ -53,7 +53,7 @@ const DeliveryInfomation: React.FC<Iprops> = (props) => {
props.editDeliverAddress props.editDeliverAddress
? <Col span={9}> ? <Col span={9}>
<Row style={{marginBottom: '20px'}}> <Row style={{marginBottom: '20px'}}>
<Col span={5}>发货地址</Col> <Col span={5}>{props.deliveryType == 2 ? '自提地址' : '发货地址' }</Col>
<Col span={19}> <Col span={19}>
<Select style={{width: '100%'}} value={props.activeAddress}> <Select style={{width: '100%'}} value={props.activeAddress}>
{ {
...@@ -65,14 +65,13 @@ const DeliveryInfomation: React.FC<Iprops> = (props) => { ...@@ -65,14 +65,13 @@ const DeliveryInfomation: React.FC<Iprops> = (props) => {
) )
}) })
} }
{/* <Option value={"1"}>test</Option> */}
</Select> </Select>
</Col> </Col>
</Row> </Row>
</Col> </Col>
: <Col span={9} style={!props.deliveryUserName ? {display: 'none'} : {}}> : <Col span={9} style={!props.deliveryUserName ? {display: 'none'} : {}}>
<Row style={{marginBottom: '20px'}}> <Row style={{marginBottom: '20px'}}>
<Col span={5}>发货地址</Col> <Col span={5}>{props.deliveryType == 2 ? '自提地址' : '发货地址' }</Col>
<Col>{props.deliveryUserTel} / {props.deliveryUserName}</Col> <Col>{props.deliveryUserTel} / {props.deliveryUserName}</Col>
</Row> </Row>
<Row> <Row>
......
/**
* 指派生产通知单-生产通知单查询页
*/
export const QUERY_SEARCH_NAME = "noticeNo";
/**
* 指派生产通知单-待新增生产通知单列表页
*/
export const TO_BE_ADD_QUERY_SEARCH_NAME = "noticeNo";
/**
* 指派生产通知单-待审核生产通知单(一级)
* 指派生产通知单-待审核生产通知单(二级)
*/
export const PENDING_FIRST_AND_SECOND_NOTICE = "noticeNo";
/**
* 指派生产通知单-待提交生产通知单
*/
export const PENDING_TO_SUBMIT = "noticeNo";
/**
* 指派生产通知单-待新增加工入库单
*/
export const PENDING_ADD_PROCESS = "summary"
/**
* 指派生产通知单-待收货生产通知单
*/
export const PENDING_RECEIVE_SCHEMA = "noticeNo"
/**
* 下面设置各个 path 常量
*/
export const QUERY_PATH = '/query';
const QUERY_TITLE = '生产通知单查询';
/**
* 待新增生产通知单
*/
export const TO_BE_ADD_QUERY_PATH = '/tobeAddQuery';
const TO_BE_ADD_QUERY_TITLE = '待新增生产通知单';
/**
* 带审核生产通知单(一级)
*/
export const PENDING_FIRST = '/pendingFirst';
const PENDING_FIRST_TITLE = '待审核通知单(一级)';
/**
* 待审核通知单(二级)
*/
export const PENDING_SECOND = '/pendingSecond';
const PENDING_SECOND_TITLE = '待审核通知单(二级)';
/**
* 待审核生产通知单
*/
export const PENDING_SUBMIT = '/pendingSubmit';
const PENDING_SUBMIT_TITLE = '待提交生产通知单';
/**
* 待收货生产通知单
*/
export const PENDING_RECEIVE = '/pendingReceive';
const PENDING_RECEIVE_TITLE = '待收货生产通知单';
export const TITLE_MAPS = {
[QUERY_PATH]: QUERY_TITLE,
[TO_BE_ADD_QUERY_PATH]: TO_BE_ADD_QUERY_TITLE,
[PENDING_FIRST]: PENDING_FIRST_TITLE,
[PENDING_SECOND]: PENDING_SECOND_TITLE,
[PENDING_SUBMIT]: PENDING_SUBMIT_TITLE,
[PENDING_RECEIVE]: PENDING_RECEIVE_TITLE
}
export const INNER_STATUS_BADGE_COLOR = {
"1": "default",
"2": "warning",
"3": "processing",
"4": "success",
"5": "error"
}
// 根据 lastTypeParams, 获取对应的高级筛选 name
export const FILTER_NAMES = {
[QUERY_PATH]: QUERY_SEARCH_NAME,
[TO_BE_ADD_QUERY_PATH]: TO_BE_ADD_QUERY_SEARCH_NAME,
[PENDING_FIRST]: PENDING_FIRST_AND_SECOND_NOTICE,
[PENDING_SECOND]: PENDING_FIRST_AND_SECOND_NOTICE,
[PENDING_SUBMIT]: PENDING_TO_SUBMIT,
[PENDING_RECEIVE]: PENDING_RECEIVE_SCHEMA,
"/pendingAddProcessing": PENDING_ADD_PROCESS,
}
export const DETAIL_PATH = {
[QUERY_PATH]: '/memberCenter/handling/assign/query/detail',
[TO_BE_ADD_QUERY_PATH]: '/memberCenter/handling/assign/tobeAddQuery/detail',
[PENDING_FIRST]: '/memberCenter/handling/assign/pendingFirst/detail',
[PENDING_SECOND]: '/memberCenter/handling/assign/pendingSecond/detail',
[PENDING_SUBMIT]: '/memberCenter/handling/assign/pendingSubmit/detail',
[PENDING_RECEIVE]: '/memberCenter/handling/assign/pendingReceive/detail',
}
\ No newline at end of file
import { ISchema } from '@formily/antd'; import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const'; import { FORM_FILTER_PATH } from '@/formSchema/const';
import { QUERY_SEARCH_NAME, TO_BE_ADD_QUERY_SEARCH_NAME, PENDING_FIRST_AND_SECOND_NOTICE } from './contants'; // import { QUERY_SEARCH_NAME, TO_BE_ADD_QUERY_SEARCH_NAME, PENDING_FIRST_AND_SECOND_NOTICE } from './contants';
import { docTime } from '../../common'; import { docTime } from '../../common';
/** /**
...@@ -14,7 +14,7 @@ export const querySchema: ISchema = { ...@@ -14,7 +14,7 @@ export const querySchema: ISchema = {
type: 'object', type: 'object',
'x-component': 'mega-layout', 'x-component': 'mega-layout',
properties: { properties: {
[QUERY_SEARCH_NAME]: { noticeNo: {
type: 'string', type: 'string',
'x-component': 'Search', 'x-component': 'Search',
'x-component-props': { 'x-component-props': {
...@@ -108,7 +108,7 @@ export const tobeAddQuerySchema: ISchema = { ...@@ -108,7 +108,7 @@ export const tobeAddQuerySchema: ISchema = {
children: '{{controllerBtns}}', children: '{{controllerBtns}}',
}, },
}, },
[TO_BE_ADD_QUERY_SEARCH_NAME]: { noticeNo: {
type: 'string', type: 'string',
'x-component': 'Search', 'x-component': 'Search',
'x-component-props': { 'x-component-props': {
...@@ -202,7 +202,7 @@ export const pendingFirstQuerySchema: ISchema = { ...@@ -202,7 +202,7 @@ export const pendingFirstQuerySchema: ISchema = {
children: '{{batchUpdateBtn}}', children: '{{batchUpdateBtn}}',
}, },
}, },
[PENDING_FIRST_AND_SECOND_NOTICE]: { noticeNo: {
type: 'string', type: 'string',
'x-component': 'Search', 'x-component': 'Search',
'x-component-props': { 'x-component-props': {
......
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { Card, Tabs, Table, Radio, Row, Col } from 'antd'; import { Card, Tabs, Table, Radio, Row, Col, Popconfirm } from 'antd';
import _groupBy from 'lodash/groupBy';
import styles from './index.less'; import styles from './index.less';
import classname from 'classnames';
import moment from 'moment'; import moment from 'moment';
import { DELIEVER_AND_RECEIVE_INNER_STATUS, DELIEVER_AND_RECEIVE_INNER_STATUS_TEXT, DELIEVER_AND_RECEIVE_INNER_BTN_TEXT } from '../../common';
import { PublicApi } from '@/services/api';
import { FlagFilled } from '@ant-design/icons';
const TabPane = Tabs.TabPane; const TabPane = Tabs.TabPane;
const format = 'YYYY-MM-DD HH:mm:ss'; const format = 'YYYY-MM-DD HH:mm:ss';
const TEXT_MAP = {
"deliverStatus_1": 1,
"deliverStatus_2": 2,
"receiveStatus_1": 3,
"receiveStatus_2": 4,
"receiptStatus_1": 5,
"receiptStatus_2": 6
}
const ReceiptDeliveryDetails = (props) => { const ReceiptDeliveryDetails = (props) => {
const { statisticsColumn, statisticsData, pnoReceiveDeliverDetailDOList = [], pnoReceiveDeliverDetailColumns } = props; const { statisticsColumn, statisticsData, pnoReceiveDeliverDetailDOList = [], pnoReceiveDeliverDetailColumns, outerStatus } = props;
const [activeBatch, setActiveBatch] = useState(0); const [activeBatch, setActiveBatch] = useState(0);
const [activeData, setActiveData] = useState<any>({}); const [activeData, setActiveData] = useState<any>({});
const [currentTarget, setCurrentTarget] = useState("deliverStatus");
useEffect(() => { useEffect(() => {
if(pnoReceiveDeliverDetailDOList && pnoReceiveDeliverDetailDOList.length > 0) { if(pnoReceiveDeliverDetailDOList && pnoReceiveDeliverDetailDOList.length > 0) {
...@@ -23,6 +34,29 @@ const ReceiptDeliveryDetails = (props) => { ...@@ -23,6 +34,29 @@ const ReceiptDeliveryDetails = (props) => {
setActiveBatch(e.target.value) setActiveBatch(e.target.value)
setActiveData(pnoReceiveDeliverDetailDOList[e.target.value]) setActiveData(pnoReceiveDeliverDetailDOList[e.target.value])
} }
const confirm = (params, type) => {
props.handleConfirm(params, type);
}
useEffect(() => {
// 小于等于5 取deliverStatus, 小于等于7, 取,receiveStatus, 大于7取receiptStatus
const range = [5, 7, 8];
const value = ["deliverStatus", "receiveStatus", "receiptStatus"];
let flag = false;
for(let i = 0; i < range.length; i++) {
if( outerStatus == range[i]) {
setCurrentTarget(value[i]);
flag = true;
break;
}
}
// if(!flag) {
// setCurrentTarget("receiptStatus");
// }
}, [outerStatus])
return ( return (
<Card bodyStyle={{padding: '10px 24px 24px 24px'}}> <Card bodyStyle={{padding: '10px 24px 24px 24px'}}>
<Tabs> <Tabs>
...@@ -48,7 +82,7 @@ const ReceiptDeliveryDetails = (props) => { ...@@ -48,7 +82,7 @@ const ReceiptDeliveryDetails = (props) => {
<Col span={6}> <Col span={6}>
<div className={styles.detailItem}> <div className={styles.detailItem}>
<span className={styles.title}>发货单号</span> <span className={styles.title}>发货单号</span>
<a className={classname(styles.value)}>{activeData.deliveryNo}</a> <a className={styles.value}>{activeData.deliveryNo}</a>
</div> </div>
<div> <div>
<span className={styles.title}>发货时间</span> <span className={styles.title}>发货时间</span>
...@@ -78,13 +112,28 @@ const ReceiptDeliveryDetails = (props) => { ...@@ -78,13 +112,28 @@ const ReceiptDeliveryDetails = (props) => {
<Col span={4} className={styles.status}> <Col span={4} className={styles.status}>
<div> <div>
<span className={styles.title}>内部状态</span> <span className={styles.title}>内部状态</span>
<span className={styles.value}>{activeData.deliverStatus}</span> <span className={styles.value}>{
DELIEVER_AND_RECEIVE_INNER_STATUS_TEXT[TEXT_MAP[`${currentTarget}_${activeData[currentTarget]}`]]
}</span>
</div> </div>
</Col> </Col>
<Col span={2} className={styles.action}> <Col span={2} className={styles.action}>
<div> <Popconfirm
确认回单 title={`是否${DELIEVER_AND_RECEIVE_INNER_BTN_TEXT[TEXT_MAP[`${currentTarget}_${activeData[currentTarget]}`]]}`}
</div> onConfirm={() => confirm(
{
produceNoticeOrderId: activeData.produceNoticeOrderId,
pnoReceiveDeliverDetailId: activeData.id
},
`${outerStatus}_${activeData[currentTarget]}`
)
}
okText="是"
cancelText="否"
>
<a href="#">{DELIEVER_AND_RECEIVE_INNER_BTN_TEXT[TEXT_MAP[`${outerStatus}_${activeData[currentTarget]}`]]}</a>
</Popconfirm>
</Col> </Col>
</Row> </Row>
</div> </div>
......
import React from 'react'
import { Table } from 'antd'
import moment from 'moment';
import DrawerProcessDetail from '../ProcessDetail/DrawerProcessDetail';
interface Iprops {
dataSource: any[],
columns?: any[]
}
const WrapTable: React.FC<Iprops> = (props) => {
const dataSource = props.dataSource || []
return (
<Table
columns={props.columns || []}
rowKey={"id"}
dataSource={dataSource}
/>
)
}
export default WrapTable
\ No newline at end of file
const BASIC_PATH = '/memberCenter/handling/confirm'
// 生产通知单查询,确认生产通知单
export const PATH = `${BASIC_PATH}/query`
// 待提交审核生产通知单
export const PENDING_VIEW_PATH = `${BASIC_PATH}/pendingSubmit`
// 待提交审核生产通知单(一级)
export const PENDING_FIRST_VIEW_PATH = `${BASIC_PATH}/pendingFirst`
// 待提交审核生产通知单(二级)
export const PENDING_SECOND_VIEW_PATH = `${BASIC_PATH}/pendingSecond`
// 待确认生产通知单
export const PENDING_CONFIRM_PATH = `${BASIC_PATH}/pendingConfirm`
// 待新增加工发货单 ProcessingInvoiceTobeAdd
export const PROCESS_INVOICE_TO_BE_ADD_PATH = `${BASIC_PATH}/processingInvoiceTobeAdd`
// 待新增物流单 pendingAddLogistics
export const PENDING_ADD_LOGISTICS_PATH = `${BASIC_PATH}/pendingAddLogistics`;
// 待收货生产通知单 ${BASIC_PATH}/pendingDelivered
export const PENDING_DELIVERED_PATH = `${BASIC_PATH}/pendingDelivered`;
// 待确认回单生产通知单 pendingReceipt
export const PENDING_RECEIPT_PATH = `${BASIC_PATH}/pendingReceipt`;
...@@ -10,57 +10,57 @@ import { createFormActions } from '@formily/antd'; ...@@ -10,57 +10,57 @@ import { createFormActions } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const'; import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect'; import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { ColumnsType } from 'antd/es/table'; import { ColumnsType } from 'antd/es/table';
import { DownOutlined, DeleteOutlined } from '@ant-design/icons';
import { history } from 'umi'; import { history } from 'umi';
import { querySchema, basicSchema, pendingFirstQuerySchema } from './schema'; import { querySchema, basicSchema, pendingFirstQuerySchema } from './schema';
import { import {
PATH, CONFIRM_QUERY,
PENDING_VIEW_PATH, CONFIRM_PENDING_SUBMIT,
PENDING_FIRST_VIEW_PATH, CONFIRM_PENDING_FIRST,
PENDING_SECOND_VIEW_PATH, CONFIRM_PENDING_SECOND,
PENDING_CONFIRM_PATH, CONFIRM_PENDING_CONFIRM,
PROCESS_INVOICE_TO_BE_ADD_PATH, //以上代表路径 SUPPLIER_INNER_STATUS_COLOR,
// PENDING_ADD_LOGISTICS_PATH, SUPPLIER_OUTER_STATUS_COLOR
// PENDING_DELIVERED_PATH, } from '../../common'
// PENDING_RECEIPT_PATH,
} from './contants';
import { timeRange } from '@/utils'; import { timeRange } from '@/utils';
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'; import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
import moment from 'moment'; import moment from 'moment';
import { Link } from 'umi' import { Link } from 'umi'
import StatusTag from '@/components/StatusTag'; import StatusTag from '@/components/StatusTag';
import ExamineModal from '../../components/ExamineModal';
const formActions = createFormActions(); const formActions = createFormActions();
// 根据 lastTypeParams, 获取相对应的schema /**
* 该页面是 确认生产通知单5个页面公用的
* 生产通知单查询,
* 待提交生产生产通知单,
* 待审核(一级),
* 待审核(二级),
* 待确认生产通知单
* 根据他们的菜单路径获取schema, 获取列表页的service, 以及根据pathname跳到各自的详情页
*
*/
// 根据 菜单路径, 获取相对应的schema
export const SCHEMAS = { export const SCHEMAS = {
[PATH]: querySchema, [CONFIRM_QUERY]: querySchema,
[PENDING_VIEW_PATH]: basicSchema, // 待新增生产通知 [CONFIRM_PENDING_SUBMIT]: basicSchema, // 待新增生产通知
[PENDING_FIRST_VIEW_PATH]: pendingFirstQuerySchema, [CONFIRM_PENDING_FIRST]: pendingFirstQuerySchema,
[PENDING_SECOND_VIEW_PATH]: pendingFirstQuerySchema, [CONFIRM_PENDING_SECOND]: pendingFirstQuerySchema,
[PENDING_CONFIRM_PATH]: basicSchema, // 带审核生产通知单 [CONFIRM_PENDING_CONFIRM]: basicSchema, // 带审核生产通知单
[PROCESS_INVOICE_TO_BE_ADD_PATH]: basicSchema,
// [PENDING_ADD_LOGISTICS_PATH]: basicSchema,
// [PENDING_DELIVERED_PATH]: basicSchema,
// [PENDING_RECEIPT_PATH]: basicSchema
} }
console.log(basicSchema);
// 根据 path, 得到对应的列表页 service // 根据 path, 得到对应的列表页 service
const SERVICES = { const SERVICES = {
[PATH]: PublicApi.getEnhanceProcessAllList, [CONFIRM_QUERY]: PublicApi.getEnhanceProcessAllList,
[PENDING_VIEW_PATH]: PublicApi.getEnhanceProcessToBeSubmitExamList, [CONFIRM_PENDING_SUBMIT]: PublicApi.getEnhanceProcessToBeSubmitExamList,
[PENDING_FIRST_VIEW_PATH]: PublicApi.getEnhanceProcessToBeFirstExamList, [CONFIRM_PENDING_FIRST]: PublicApi.getEnhanceProcessToBeFirstExamList,
[PENDING_SECOND_VIEW_PATH]: PublicApi.getEnhanceProcessToBeSecondExamList, [CONFIRM_PENDING_SECOND]: PublicApi.getEnhanceProcessToBeSecondExamList,
[PENDING_CONFIRM_PATH]: PublicApi.getEnhanceProcessToBeConfirmList, [CONFIRM_PENDING_CONFIRM]: PublicApi.getEnhanceProcessToBeConfirmList,
// [PROCESS_INVOICE_TO_BE_ADD_PATH]: PublicApi.getEnhanceProcessToBeAddDeliveryList,
// [PENDING_ADD_LOGISTICS_PATH]: PublicApi.getEnhanceProcessToBeAddLogisticsList,
// [PENDING_RECEIPT_PATH]: PublicApi.getEnhanceProcessToBeConfirmReceiptList
} }
const Query: React.FC<{}> = (props) => { const Query: React.FC<{}> = (props) => {
const pathname = history.location.pathname; const pathname = history.location.pathname;
const [selectRow, selectRowFns] = useRowSelectionTable({ customKey: 'id' }); const [selectRow, selectRowFns] = useRowSelectionTable({ customKey: 'id' });
const [batchLoading, setBatchLoading] = useState(false)
const ref = useRef<any>({}); const ref = useRef<any>({});
const fetchData = useCallback(async (params) => { const fetchData = useCallback(async (params) => {
...@@ -104,8 +104,8 @@ const Query: React.FC<{}> = (props) => { ...@@ -104,8 +104,8 @@ const Query: React.FC<{}> = (props) => {
{ {
title: '外部状态', title: '外部状态',
dataIndex: 'outerStatusName', dataIndex: 'outerStatusName',
render: (text) => { render: (text, record: any) => {
return <StatusTag title={text} type="success"></StatusTag> return <StatusTag title={text} type={SUPPLIER_OUTER_STATUS_COLOR[record.outerStatus]}></StatusTag>
} }
}, },
{ {
...@@ -113,7 +113,7 @@ const Query: React.FC<{}> = (props) => { ...@@ -113,7 +113,7 @@ const Query: React.FC<{}> = (props) => {
dataIndex: 'innerStatusName', dataIndex: 'innerStatusName',
render: (text, record: any) => { render: (text, record: any) => {
return ( return (
<Badge status={"success"} text={text}></Badge> <Badge status={SUPPLIER_INNER_STATUS_COLOR[record.processInnerStatus] || 'default'} text={text}></Badge>
) )
} }
} }
...@@ -126,22 +126,10 @@ const Query: React.FC<{}> = (props) => { ...@@ -126,22 +126,10 @@ const Query: React.FC<{}> = (props) => {
const url = pathname + "/detail"; const url = pathname + "/detail";
console.log(url); console.log(url);
const actionMap = { const actionMap = {
[PENDING_VIEW_PATH]: <Link to={`${url}?id=${record.id}`}>提交审核</Link>, [CONFIRM_PENDING_SUBMIT]: <Link to={`${url}?id=${record.id}`}>提交审核</Link>,
[PENDING_FIRST_VIEW_PATH]: <Link to={`${url}?id=${record.id}`}>审核</Link>, [CONFIRM_PENDING_FIRST]: <Link to={`${url}?id=${record.id}`}>审核</Link>,
[PENDING_SECOND_VIEW_PATH]: <Link to={`${url}?id=${record.id}`}>审核</Link>, [CONFIRM_PENDING_SECOND]: <Link to={`${url}?id=${record.id}`}>审核</Link>,
[PENDING_CONFIRM_PATH]: <Link to={`${url}?id=${record.id}`}>确认通知单</Link>, [CONFIRM_PENDING_CONFIRM]: <Link to={`${url}?id=${record.id}`}>确认通知单</Link>,
// [PROCESS_INVOICE_TO_BE_ADD_PATH]: (
// record.status == 0
// ? <Link to={`/memberCenter/tranactionAbility/stockSellStorage/bills/add`}>新增加工发货单</Link>
// : <a>确认审核</a>
// ),
// [PENDING_ADD_LOGISTICS_PATH]: (
// record.status == 0
// ? <Link to={`/memberCenter/handling/confirm/createLogisticsOrder`}>新增物流单</Link>
// : <Link to={`/memberCenter/handling/confirm/createLogisticsOrder`}>查看物流单</Link>
// ),
// [PENDING_DELIVERED_PATH]: <Link to={`${url}?id=${record.id}`}>发货</Link>,
// [PENDING_RECEIPT_PATH]: <Link to={`${url}?id=${record.id}`}>确认回单</Link>
} }
return ( return (
<Space> <Space>
...@@ -157,7 +145,7 @@ const Query: React.FC<{}> = (props) => { ...@@ -157,7 +145,7 @@ const Query: React.FC<{}> = (props) => {
const batchUpdateBtn = () => ( const batchUpdateBtn = () => (
<div> <div>
<Button onClick={() => handleSubmitToReviewOrDelete()}> <Button loading={batchLoading} onClick={() => handleSubmitToReviewOrDelete()}>
批量审核通过 批量审核通过
</Button> </Button>
</div> </div>
...@@ -185,15 +173,17 @@ const Query: React.FC<{}> = (props) => { ...@@ -185,15 +173,17 @@ const Query: React.FC<{}> = (props) => {
return ; return ;
} }
const BATCH_UPDATE_SERVICE = { const BATCH_UPDATE_SERVICE = {
[PENDING_FIRST_VIEW_PATH]: PublicApi.postEnhanceProcessToBeFirstExamBatchExamPass, [CONFIRM_PENDING_FIRST]: PublicApi.postEnhanceProcessToBeFirstExamBatchExamPass,
[PENDING_SECOND_VIEW_PATH]: PublicApi.postEnhanceProcessToBeSecondExamBatchExamPass, [CONFIRM_PENDING_SECOND]: PublicApi.postEnhanceProcessToBeSecondExamBatchExamPass,
} }
const service = BATCH_UPDATE_SERVICE[pathname]; const service = BATCH_UPDATE_SERVICE[pathname];
if(service) { if(service) {
setBatchLoading(true);
service({ service({
idList: selectRowFns.selectedRowKeys, idList: selectRowFns.selectedRowKeys,
}).then(({data, code}) => { }).then(({data, code}) => {
setBatchLoading(false);
if(code === 1000) { if(code === 1000) {
formActions.submit(); formActions.submit();
} }
...@@ -227,7 +217,7 @@ const Query: React.FC<{}> = (props) => { ...@@ -227,7 +217,7 @@ const Query: React.FC<{}> = (props) => {
rowKey: 'id', rowKey: 'id',
rowSelection: selectRow rowSelection: selectRow
}} }}
columns={pathname == PATH ? columns : hasActionColumn} columns={pathname == CONFIRM_QUERY ? columns : hasActionColumn}
currentRef={ref} currentRef={ref}
fetchTableData={(params: any) => fetchData(params)} fetchTableData={(params: any) => fetchData(params)}
controlRender={ controlRender={
......
...@@ -178,7 +178,7 @@ const Recommand: React.FC<RecommandPropsType> = (props) => { ...@@ -178,7 +178,7 @@ const Recommand: React.FC<RecommandPropsType> = (props) => {
link = `${GlobalConfig.ichannelRootRoute}/commodity/detail?id=${item.id}&channelId=${btoa(JSON.stringify({ memberId }))}` link = `${GlobalConfig.ichannelRootRoute}/commodity/detail?id=${item.id}&channelId=${btoa(JSON.stringify({ memberId }))}`
break break
default: default:
link = `/shop/commodity/detail?id=${item.id}&shopId=${btoa(JSON.stringify({ memberId: item.memberId }))}` link = `/shop/commodity/detail?id=${item.id}&shopId=${btoa(JSON.stringify({ shopId: item.storeId, memberId: item.memberId }))}`
break break
} }
return link return link
......
...@@ -157,7 +157,7 @@ const MallIndex: React.FC<MallIndexPropsType> = (props) => { ...@@ -157,7 +157,7 @@ const MallIndex: React.FC<MallIndexPropsType> = (props) => {
} }
<FindMore /> <FindMore />
<Information {...props} /> <Information {...props} />
</div > </div>
) )
} }
......
...@@ -57,12 +57,17 @@ const LXShopLayout: React.FC<LXMallLayoutPropsType> = (props) => { ...@@ -57,12 +57,17 @@ const LXShopLayout: React.FC<LXMallLayoutPropsType> = (props) => {
useEffect(() => { useEffect(() => {
if (query.memberId) { if (query.memberId) {
fetchShopInfo(query.memberId) fetchShopInfo(query.memberId, query.roleId, query.shopId)
} }
}, [query]) }, [query])
const fetchShopInfo = (memberId) => { const fetchShopInfo = (memberId, roleId, storeId) => {
PublicApi.getTemplateShopFindShop({ memberId }).then(res => { const param: any = {
memberId,
roleId,
storeId
}
PublicApi.getTemplateShopFindShop(param).then(res => {
if (res.code === 1000) { if (res.code === 1000) {
setShopInfo(res.data) setShopInfo(res.data)
} }
...@@ -86,7 +91,7 @@ const LXShopLayout: React.FC<LXMallLayoutPropsType> = (props) => { ...@@ -86,7 +91,7 @@ const LXShopLayout: React.FC<LXMallLayoutPropsType> = (props) => {
const menuData = basicInfo.menuData ? basicInfo.menuData.filter(item => !item.redirect) : [] const menuData = basicInfo.menuData ? basicInfo.menuData.filter(item => !item.redirect) : []
const handleUpdate = () => { const handleUpdate = () => {
fetchShopInfo(query.memberId) fetchShopInfo(query.memberId, query.roleId, query.shopId)
} }
return ( return (
......
...@@ -169,9 +169,7 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -169,9 +169,7 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
defaultCheckedList: item.orderList.map(item => item.id) defaultCheckedList: item.orderList.map(item => item.id)
}) })
}) })
console.log(result)
setOrderList(result) setOrderList(result)
// !initChecked && setCheckedList(result.map(item => item.id))
} }
const onCheckAllChange = (e: any) => { const onCheckAllChange = (e: any) => {
...@@ -240,7 +238,7 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -240,7 +238,7 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
* @param id * @param id
*/ */
const handleCountChange = (count: number, id: number, type: string) => { const handleCountChange = (count: number, id: number, type: string) => {
handleChangeFinishCount(count, id) handleChangeFinishCount(count, id)
if(type === 'click' || type === 'blur') { if(type === 'click' || type === 'blur') {
if (countState) { if (countState) {
countState = false countState = false
...@@ -271,14 +269,13 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -271,14 +269,13 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
}) })
} }
} }
}
const handleBlur = (count: number, id: number) => {
console.log(countState, count, "handleBlur")
} }
/**
* 修改商品购买数量
* @param count
* @param id
*/
const handleChangeFinishCount = (count, id) => { const handleChangeFinishCount = (count, id) => {
const result = orderList.map(item => { const result = orderList.map(item => {
item.orderList = item.orderList.map(childItem => { item.orderList = item.orderList.map(childItem => {
...@@ -456,6 +453,10 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -456,6 +453,10 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
}) })
} }
/**
* 获取支付方式
* @param memberId
*/
const getPayWayListByMemberId = (memberId: number) => { const getPayWayListByMemberId = (memberId: number) => {
return new Promise((resolve) => { return new Promise((resolve) => {
if (!memberId) { if (!memberId) {
...@@ -530,13 +531,19 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -530,13 +531,19 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
const buyOrderlist = [] const buyOrderlist = []
const selectOrderList = selectItem.orderList.filter(item => selectItem.checkedList.includes(item.id)) const selectOrderList = selectItem.orderList.filter(item => selectItem.checkedList.includes(item.id))
let commonLogistics = {} let commonLogistics = {}
let hasLogistics = false
let logisticsInfo = {}
setConfirmLoading(true) setConfirmLoading(true)
const purchaseIds = [] const purchaseIds = []
for (const item of selectOrderList) { for (const item of selectOrderList) {
purchaseIds.push(item.id) purchaseIds.push(item.id)
productIds.push(item.commodityUnitPrice.id) productIds.push(item.commodityUnitPrice.id)
commonLogistics = item.commodityUnitPrice.commodity.logistics commonLogistics = item.commodityUnitPrice.commodity.logistics
if(item.commodityUnitPrice.commodity.logistics.deliveryType === 1) {
hasLogistics = true
logisticsInfo = item.commodityUnitPrice.commodity.logistics
}
const buyCommodityInfo: any = { const buyCommodityInfo: any = {
id: item.commodityUnitPrice.id, id: item.commodityUnitPrice.id,
purchaseId: item.id, purchaseId: item.id,
...@@ -553,6 +560,7 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -553,6 +560,7 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
attribute: item.commodityUnitPrice.attributeAndValueList, attribute: item.commodityUnitPrice.attributeAndValueList,
stockCount: item.stockCount || 0 stockCount: item.stockCount || 0
} }
if (item.commodityUnitPrice.commodity.isMemberPrice) { if (item.commodityUnitPrice.commodity.isMemberPrice) {
buyCommodityInfo.memberDiscount = await getMemberCredit(item.commodityUnitPrice.commodity.memberId, item.commodityUnitPrice.commodity.memberRoleId) buyCommodityInfo.memberDiscount = await getMemberCredit(item.commodityUnitPrice.commodity.memberId, item.commodityUnitPrice.commodity.memberRoleId)
} }
...@@ -564,7 +572,7 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -564,7 +572,7 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
purchaseOrder: true, // 是否进货单下单 purchaseOrder: true, // 是否进货单下单
idList: purchaseIds, idList: purchaseIds,
productType: (layoutType === LAYOUT_TYPE.channel || layoutType === LAYOUT_TYPE.ichannel) ? 2 : 1, productType: (layoutType === LAYOUT_TYPE.channel || layoutType === LAYOUT_TYPE.ichannel) ? 2 : 1,
logistics: commonLogistics, logistics: hasLogistics ? logisticsInfo : commonLogistics,
supplyMembersName: selectItem.shopname, supplyMembersName: selectItem.shopname,
supplyMembersId: selectItem.memberId, supplyMembersId: selectItem.memberId,
supplyMembersRoleId: selectItem.memberRoleId, supplyMembersRoleId: selectItem.memberRoleId,
......
...@@ -11,6 +11,7 @@ import { ...@@ -11,6 +11,7 @@ import {
import { import {
QuestionCircleOutlined, QuestionCircleOutlined,
} from '@ant-design/icons'; } from '@ant-design/icons';
import { isJSONStr } from '@/utils';
import PolymericTable from '@/components/PolymericTable'; import PolymericTable from '@/components/PolymericTable';
import { EditableColumns } from '@/components/PolymericTable/interface'; import { EditableColumns } from '@/components/PolymericTable/interface';
import { Pie } from '@/components/Charts'; import { Pie } from '@/components/Charts';
...@@ -116,17 +117,17 @@ export interface ComplaintProps { ...@@ -116,17 +117,17 @@ export interface ComplaintProps {
interface SincerityInfoProps { interface SincerityInfoProps {
basicInfo?: BasicInfo; basicInfo?: BasicInfo;
salesEstimateSum?: EstimateSum; salesEstimateSum?: EstimateSum;
/* /**
交易评论历史记录 交易评论历史记录
*/ */
fetchSalesList?: (params: FetchParams) => Promise<{ data: SalesProps[] , totalCount: number }>; fetchSalesList?: (params: FetchParams) => Promise<{ data: SalesProps[] , totalCount: number }>;
afterEstimateSum?: EstimateSum; afterEstimateSum?: EstimateSum;
/* /**
售后评论历史记录 售后评论历史记录
*/ */
fetchAfterList?: (params: FetchParams) => Promise<{ data: SalesProps[] , totalCount: number }>; fetchAfterList?: (params: FetchParams) => Promise<{ data: SalesProps[] , totalCount: number }>;
complaintSum?: ComplaintSum; complaintSum?: ComplaintSum;
/* /**
投诉历史记录 投诉历史记录
*/ */
fetchComplaintList?: (params: FetchParams) => Promise<{ data: ComplaintProps[] , totalCount: number }>; fetchComplaintList?: (params: FetchParams) => Promise<{ data: ComplaintProps[] , totalCount: number }>;
...@@ -277,11 +278,17 @@ const SincerityInfo: React.FC<SincerityInfoProps> = ({ ...@@ -277,11 +278,17 @@ const SincerityInfo: React.FC<SincerityInfoProps> = ({
title: '评价内容', title: '评价内容',
dataIndex: 'comment', dataIndex: 'comment',
align: 'center', align: 'center',
ellipsis: true,
}, },
{ {
title: '交易商品', title: '交易商品',
dataIndex: 'product', dataIndex: 'product',
align: 'center', align: 'center',
ellipsis: true,
render: text => {
const product = isJSONStr(text) || {};
return product.productName || '';
},
}, },
{ {
title: '评价方', title: '评价方',
......
...@@ -21,8 +21,16 @@ const MemberBasicInfo: React.FC<MemberBasicInfoProps> = ({ ...@@ -21,8 +21,16 @@ const MemberBasicInfo: React.FC<MemberBasicInfoProps> = ({
}} }}
> >
<AuditProcess <AuditProcess
outerVerifyCurrent={memberMaintainInfo?.currentOuterStep} outerVerifyCurrent={
innerVerifyCurrent={memberMaintainInfo?.currentInnerStep} memberMaintainInfo && memberMaintainInfo.currentOuterStep > 0 ?
memberMaintainInfo.currentOuterStep - 1 :
0
}
innerVerifyCurrent={
memberMaintainInfo && memberMaintainInfo.currentInnerStep > 0 ?
memberMaintainInfo.currentInnerStep -1 :
0
}
outerVerifySteps={memberMaintainInfo?.outerVerifySteps} outerVerifySteps={memberMaintainInfo?.outerVerifySteps}
innerVerifySteps={memberMaintainInfo?.innerVerifySteps} innerVerifySteps={memberMaintainInfo?.innerVerifySteps}
/> />
......
...@@ -198,6 +198,16 @@ const DetailInfo: React.FC<DetailInfoProps> = ({ ...@@ -198,6 +198,16 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
<AuditProcess <AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps} outerVerifySteps={memberInfo?.outerVerifySteps}
innerVerifySteps={memberInfo?.innerVerifySteps} innerVerifySteps={memberInfo?.innerVerifySteps}
outerVerifyCurrent={
memberInfo && memberInfo.currentOuterStep > 0 ?
memberInfo.currentOuterStep - 1 :
0
}
innerVerifyCurrent={
memberInfo && memberInfo.currentInnerStep > 0 ?
memberInfo.currentInnerStep -1 :
0
}
/> />
</div> </div>
......
...@@ -199,6 +199,16 @@ const DetailInfo: React.FC<DetailInfoProps> = ({ ...@@ -199,6 +199,16 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
<AuditProcess <AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps} outerVerifySteps={memberInfo?.outerVerifySteps}
innerVerifySteps={memberInfo?.innerVerifySteps} innerVerifySteps={memberInfo?.innerVerifySteps}
outerVerifyCurrent={
memberInfo && memberInfo.currentOuterStep > 0 ?
memberInfo.currentOuterStep - 1 :
0
}
innerVerifyCurrent={
memberInfo && memberInfo.currentInnerStep > 0 ?
memberInfo.currentInnerStep -1 :
0
}
/> />
</div> </div>
......
...@@ -214,6 +214,16 @@ const DetailInfo: React.FC<DetailInfoProps> = ({ ...@@ -214,6 +214,16 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
<AuditProcess <AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps} outerVerifySteps={memberInfo?.outerVerifySteps}
innerVerifySteps={memberInfo?.innerVerifySteps} innerVerifySteps={memberInfo?.innerVerifySteps}
outerVerifyCurrent={
memberInfo && memberInfo.currentOuterStep > 0 ?
memberInfo.currentOuterStep - 1 :
0
}
innerVerifyCurrent={
memberInfo && memberInfo.currentInnerStep > 0 ?
memberInfo.currentInnerStep -1 :
0
}
/> />
</div> </div>
......
...@@ -285,6 +285,16 @@ const DetailInfo: React.FC<DetailInfoProps> = ({ ...@@ -285,6 +285,16 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
<AuditProcess <AuditProcess
outerVerifySteps={memberInfo?.outerVerifySteps} outerVerifySteps={memberInfo?.outerVerifySteps}
innerVerifySteps={memberInfo?.innerVerifySteps} innerVerifySteps={memberInfo?.innerVerifySteps}
outerVerifyCurrent={
memberInfo && memberInfo.currentOuterStep > 0 ?
memberInfo.currentOuterStep - 1 :
0
}
innerVerifyCurrent={
memberInfo && memberInfo.currentInnerStep > 0 ?
memberInfo.currentInnerStep -1 :
0
}
/> />
</div> </div>
......
...@@ -22,7 +22,15 @@ const MemberBasicInfo: React.FC<MemberBasicInfoProps> = ({ ...@@ -22,7 +22,15 @@ const MemberBasicInfo: React.FC<MemberBasicInfoProps> = ({
marginBottom: 24, marginBottom: 24,
}} }}
> >
<Steps style={{ marginTop: 30 }} progressDot current={memberMaintainInfo?.currentOuterStep}> <Steps
style={{ marginTop: 30 }}
progressDot
current={
memberMaintainInfo && memberMaintainInfo.currentOuterStep > 0 ?
memberMaintainInfo.currentOuterStep - 1 :
0
}
>
{memberMaintainInfo.outerVerifySteps ? memberMaintainInfo.outerVerifySteps.map((item, index) => ( {memberMaintainInfo.outerVerifySteps ? memberMaintainInfo.outerVerifySteps.map((item, index) => (
<Steps.Step key={index} title={item.roleName} description={item.stepName} /> <Steps.Step key={index} title={item.roleName} description={item.stepName} />
)) : null} )) : null}
......
...@@ -231,7 +231,6 @@ const ShopInfo: React.FC<ShopInfoPropsType> = (props) => { ...@@ -231,7 +231,6 @@ const ShopInfo: React.FC<ShopInfoPropsType> = (props) => {
const getMallItemAndSetUrl = (mallId) => { const getMallItemAndSetUrl = (mallId) => {
let result = "" let result = ""
console.log(mallId, allMallList, "mallId")
const mallItem = allMallList.filter(item => item.id === mallId)[0] const mallItem = allMallList.filter(item => item.id === mallId)[0]
if (!mallItem) { if (!mallItem) {
return "" return ""
...@@ -244,10 +243,10 @@ const ShopInfo: React.FC<ShopInfoPropsType> = (props) => { ...@@ -244,10 +243,10 @@ const ShopInfo: React.FC<ShopInfoPropsType> = (props) => {
switch (mallItem.type) { switch (mallItem.type) {
case 1: case 1:
result = `${newSiteUrl}/shop?shopId=${btoa(JSON.stringify({ shopId: shopInfo.id, memberId: shopInfo.memberId }))}` result = `${newSiteUrl}/shop?shopId=${btoa(JSON.stringify({ shopId: shopInfo.id, memberId: shopInfo.memberId, roleId: shopInfo.roleId }))}`
break break
case 2: case 2:
result = `${newSiteUrl}/shop/pointsMall?shopId=${btoa(JSON.stringify({ shopId: shopInfo.id, memberId: shopInfo.memberId }))}` result = `${newSiteUrl}/shop/pointsMall?shopId=${btoa(JSON.stringify({ shopId: shopInfo.id, memberId: shopInfo.memberId, roleId: shopInfo.roleId }))}`
break break
default: default:
result = "" result = ""
......
...@@ -34,6 +34,7 @@ const BasicInfo: React.FC<queryProps> = (props) => { ...@@ -34,6 +34,7 @@ const BasicInfo: React.FC<queryProps> = (props) => {
const [visibleChannelMember, setVisibleChannelMember] = useState(false); const [visibleChannelMember, setVisibleChannelMember] = useState(false);
const [memberName, setmemberName] = useState<any>(); const [memberName, setmemberName] = useState<any>();
const [memberId, setmemberId] = useState<any>(); const [memberId, setmemberId] = useState<any>();
const [roleId, setroleId] = useState<any>();
const [memberRowSelection, memberRowCtl] = useRowSelectionTable({ customKey: 'memberId', type: 'radio' }); const [memberRowSelection, memberRowCtl] = useRowSelectionTable({ customKey: 'memberId', type: 'radio' });
const handleOkAddMember = () => { const handleOkAddMember = () => {
setVisibleChannelMember(false) setVisibleChannelMember(false)
...@@ -42,6 +43,7 @@ const BasicInfo: React.FC<queryProps> = (props) => { ...@@ -42,6 +43,7 @@ const BasicInfo: React.FC<queryProps> = (props) => {
memberId: memberRowCtl.selectRow[0].memberId memberId: memberRowCtl.selectRow[0].memberId
} }
setmemberId(memberRowCtl.selectRow[0].memberId) setmemberId(memberRowCtl.selectRow[0].memberId)
setroleId(memberRowCtl.selectRow[0].roleId)
setmemberName(memberRowCtl.selectRow[0].name); setmemberName(memberRowCtl.selectRow[0].name);
getMemberList(memberInfo); // 回传给父级 getMemberList(memberInfo); // 回传给父级
} }
...@@ -141,6 +143,7 @@ const BasicInfo: React.FC<queryProps> = (props) => { ...@@ -141,6 +143,7 @@ const BasicInfo: React.FC<queryProps> = (props) => {
}) })
setmemberName(editData.memberName) setmemberName(editData.memberName)
setmemberId(editData.memberId) setmemberId(editData.memberId)
setroleId(editData.roleId)
} }
}, [editData]) }, [editData])
...@@ -157,7 +160,7 @@ const BasicInfo: React.FC<queryProps> = (props) => { ...@@ -157,7 +160,7 @@ const BasicInfo: React.FC<queryProps> = (props) => {
</Form.Item> </Form.Item>
<Form.Item label='被询价会员' name='memberId' rules={[{ required: true, message: '请选择被询价会员' }]}> <Form.Item label='被询价会员' name='memberId' rules={[{ required: true, message: '请选择被询价会员' }]}>
<Search disabled={type === 3} value={memberName ? memberName : undefined} readOnly enterButton={<><LinkOutlined /> 选择</>} onSearch={()=>setVisibleChannelMember(true)} /> <Search disabled={type === 3} value={memberName ? memberName : undefined} readOnly enterButton={<><LinkOutlined /> 选择</>} onSearch={()=>setVisibleChannelMember(true)} />
{memberName && <Button type='link' onClick={() => window.open(`/shop?shopId=${btoa(JSON.stringify({memberId}))}`)}>查看会员详情</Button>} {memberName && <Button type='link' onClick={() => window.open(`/shop?shopId=${btoa(JSON.stringify({memberId, roleId}))}`)}>查看会员详情</Button>}
</Form.Item> </Form.Item>
<Form.Item label='询价单号' name='orderNumber'> <Form.Item label='询价单号' name='orderNumber'>
<span>{(Object.keys(editData).length > 0 && editData.inquiryListNo) ? editData.inquiryListNo : '-'}</span> <span>{(Object.keys(editData).length > 0 && editData.inquiryListNo) ? editData.inquiryListNo : '-'}</span>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-09-16 15:16:47 * @Date: 2020-09-16 15:16:47
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-25 17:25:55 * @LastEditTime: 2020-11-26 11:10:39
* @Description: 联动逻辑相关 * @Description: 联动逻辑相关
*/ */
import { Modal } from 'antd'; import { Modal } from 'antd';
...@@ -598,8 +598,7 @@ export const useBusinessEffects = (context, actions) => { ...@@ -598,8 +598,7 @@ export const useBusinessEffects = (context, actions) => {
onFieldInputChange$('invoicesDetailsRequests.*.product').subscribe(fieldState => { onFieldInputChange$('invoicesDetailsRequests.*.product').subscribe(fieldState => {
const { name, originAsyncData, value } = fieldState; const { name, originAsyncData, value } = fieldState;
const current = originAsyncData.find(item => item.productId === value); const current = originAsyncData.find(item => item.productId === value);
const invoicesTypeIdVal = getFieldValue('invoicesTypeId');
console.log('current', current)
// 取消选择 // 取消选择
if (!value) { if (!value) {
...@@ -679,14 +678,6 @@ export const useBusinessEffects = (context, actions) => { ...@@ -679,14 +678,6 @@ export const useBusinessEffects = (context, actions) => {
); );
setFieldState( setFieldState(
FormPath.transform(name, /\d/, $1 => { FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.productCount`
}),
state => {
state.value = current.purchaseCount;
}
);
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.amount` return `invoicesDetailsRequests.${$1}.amount`
}), }),
state => { state => {
...@@ -694,6 +685,57 @@ export const useBusinessEffects = (context, actions) => { ...@@ -694,6 +685,57 @@ export const useBusinessEffects = (context, actions) => {
} }
); );
switch (invoicesTypeIdVal) {
// 采购入库单、销售发货单
case DOC_TYPE_PURCHASE_RECEIPT:
case DOC_TYPE_SALES_INVOICE: {
// 设置单据数量,取采购数量
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.productCount`
}),
state => {
state.value = current.purchaseCount;
}
);
break;
}
// 加工入库单、加工发货单
case DOC_TYPE_PROCESS_RECEIPT:
case DOC_TYPE_PROCESS_INVOICE: {
// 设置单据数量,取加工数量
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.productCount`
}),
state => {
state.value = current.processNum;
}
);
break;
}
// 退货发货单、退货入库单
case DOC_TYPE_RETURN_INVOICE:
case DOC_TYPE_RETURN_RECEIPT: {
break;
}
// 换货发货单、换货入库单
case DOC_TYPE_EXCHANGE_INVOICE:
case DOC_TYPE_EXCHANGE_RECEIPT: {
break;
}
default: {
break;
}
}
// 额外的数据 // 额外的数据
setFieldState( setFieldState(
FormPath.transform(name, /\d/, $1 => { FormPath.transform(name, /\d/, $1 => {
...@@ -750,6 +792,7 @@ export const useBusinessEffects = (context, actions) => { ...@@ -750,6 +792,7 @@ export const useBusinessEffects = (context, actions) => {
// 关联明细 商品数量 联动计算商品金额 // 关联明细 商品数量 联动计算商品金额
onFieldInputChange$('invoicesDetailsRequests.*.productCount').subscribe(fieldState => { onFieldInputChange$('invoicesDetailsRequests.*.productCount').subscribe(fieldState => {
const { name, value } = fieldState; const { name, value } = fieldState;
const invoicesTypeIdVal = getFieldValue('invoicesTypeId');
const originAsyncData = getFieldState( const originAsyncData = getFieldState(
FormPath.transform(name, /\d/, $1 => { FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.product` return `invoicesDetailsRequests.${$1}.product`
...@@ -764,18 +807,61 @@ export const useBusinessEffects = (context, actions) => { ...@@ -764,18 +807,61 @@ export const useBusinessEffects = (context, actions) => {
); );
const current = originAsyncData ? originAsyncData.find(item => item.productId === goodId) : null; const current = originAsyncData ? originAsyncData.find(item => item.productId === goodId) : null;
console.log('current', current)
if (!current) { if (!current) {
return; return;
} }
if (+value > current.purchaseCount) { switch (invoicesTypeIdVal) {
Modal.destroyAll(); // 采购入库单、销售发货单
Modal.confirm({ case DOC_TYPE_PURCHASE_RECEIPT:
title: '提示', case DOC_TYPE_SALES_INVOICE: {
content: '单据数量已超过商品数量', if (+value > current.purchaseCount) {
okText: '确认', Modal.destroyAll();
cancelText: '取消', Modal.confirm({
}); title: '提示',
content: '单据数量已超过商品数量',
okText: '确认',
cancelText: '取消',
});
}
break;
}
// 加工入库单、加工发货单
case DOC_TYPE_PROCESS_RECEIPT:
case DOC_TYPE_PROCESS_INVOICE: {
if (+value > current.processNum) {
Modal.destroyAll();
Modal.confirm({
title: '提示',
content: '单据数量已超过加工数量',
okText: '确认',
cancelText: '取消',
});
}
break;
}
// 退货发货单、退货入库单
case DOC_TYPE_RETURN_INVOICE:
case DOC_TYPE_RETURN_RECEIPT: {
break;
}
// 换货发货单、换货入库单
case DOC_TYPE_EXCHANGE_INVOICE:
case DOC_TYPE_EXCHANGE_RECEIPT: {
break;
}
default: {
break;
}
} }
setFieldState( setFieldState(
......
...@@ -10,11 +10,13 @@ import { SaveOutlined, PlusOutlined } from '@ant-design/icons'; ...@@ -10,11 +10,13 @@ import { SaveOutlined, PlusOutlined } from '@ant-design/icons';
import { createFormActions, FormEffectHooks } from '@formily/antd'; import { createFormActions, FormEffectHooks } from '@formily/antd';
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'; import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
import { PublicApi } from '@/services/api'; import { PublicApi } from '@/services/api';
import { useLinkageUtils } from '@/utils/formEffectUtils';
import ReutrnEle from '@/components/ReturnEle'; import ReutrnEle from '@/components/ReturnEle';
import NiceForm from '@/components/NiceForm'; import NiceForm from '@/components/NiceForm';
import ModalTable from '@/components/ModalTable'; import ModalTable from '@/components/ModalTable';
import Search from '@/components/NiceForm/components/Search'; import Search from '@/components/NiceForm/components/Search';
import Submit from '@/components/NiceForm/components/Submit'; import Submit from '@/components/NiceForm/components/Submit';
import SearchSelect from '@/components/NiceForm/components/SearchSelect';
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 { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
...@@ -42,6 +44,7 @@ import { createEffects } from './effects'; ...@@ -42,6 +44,7 @@ import { createEffects } from './effects';
const addSchemaAction = createFormActions(); const addSchemaAction = createFormActions();
const { const {
onFormInputChange$, onFormInputChange$,
onFormInit$,
} = FormEffectHooks; } = FormEffectHooks;
interface BillsFormProps { interface BillsFormProps {
...@@ -97,6 +100,28 @@ const BillsForm: React.FC<BillsFormProps> = ({ ...@@ -97,6 +100,28 @@ const BillsForm: React.FC<BillsFormProps> = ({
}, },
] ]
// 获取品牌
const fetchBrand = async (name = '') => {
const res = await PublicApi.getProductSelectGetSelectBrand({
name,
});
if (res.code === 1000) {
return res.data;
}
return [];
}
// 获取会员品类
const fetchCustomerCategory = async (name = '') => {
const res = await PublicApi.getProductSelectGetSelectCustomerCategory({
name,
});
if (res.code === 1000) {
return res.data;
}
return [];
}
// 获取单据详情 // 获取单据详情
const getBillInfo = () => { const getBillInfo = () => {
if (!id) { if (!id) {
...@@ -874,14 +899,46 @@ const BillsForm: React.FC<BillsFormProps> = ({ ...@@ -874,14 +899,46 @@ const BillsForm: React.FC<BillsFormProps> = ({
components: { components: {
Search, Search,
Submit, Submit,
SearchSelect,
}, },
effects: ($, actions) => { effects: ($, actions) => {
const linkage = useLinkageUtils();
useStateFilterSearchLinkageEffect( useStateFilterSearchLinkageEffect(
$, $,
actions, actions,
'name', 'name',
FORM_FILTER_PATH, FORM_FILTER_PATH,
); );
useAsyncSelect('brandId', fetchBrand, ['name', 'id']);
useAsyncSelect('customerCategoryId', fetchCustomerCategory, ['name', 'id']);
onFormInit$().subscribe(() => {
// 初始化远程检索逻辑
linkage.componentProps('customerCategoryId', {
onSearch: async value => {
linkage.loading('customerCategoryId');
const dataSource = await fetchCustomerCategory(value);
linkage.enum('customerCategoryId', dataSource.map(item => ({
label: item.name,
value: item.id,
})));
linkage.loaded('customerCategoryId');
},
});
// 初始化远程检索逻辑
linkage.componentProps('brandId', {
onSearch: async value => {
linkage.loading('brandId');
const dataSource = await fetchCustomerCategory(value);
linkage.enum('brandId', dataSource.map(item => ({
label: item.name,
value: item.id,
})));
linkage.loaded('brandId');
},
});
});
}, },
inline: false, inline: false,
} }
......
...@@ -779,24 +779,24 @@ export const goodsSearchSchema: ISchema = { ...@@ -779,24 +779,24 @@ export const goodsSearchSchema: ISchema = {
}, },
customerCategoryId: { customerCategoryId: {
type: 'string', type: 'string',
'x-component': 'SearchSelect', enum: [],
'x-component-props': { 'x-component-props': {
placeholder: '品类', placeholder: '品类',
fetchSearch: PublicApi.getProductSelectGetSelectCustomerCategory, showSearch: true,
style: { defaultActiveFirstOption: false,
width: '100%', showArrow: true,
} filterOption: false,
}, },
}, },
brandId: { brandId: {
type: 'string', type: 'string',
'x-component': 'SearchSelect', enum: [],
'x-component-props': { 'x-component-props': {
placeholder: '品牌', placeholder: '品牌',
fetchSearch: PublicApi.getProductSelectGetSelectBrand, showSearch: true,
style: { defaultActiveFirstOption: false,
width: '100%', showArrow: true,
} filterOption: false,
}, },
}, },
submit: { submit: {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-09-23 17:00:24 * @Date: 2020-09-23 17:00:24
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-27 16:59:38 * @LastEditTime: 2020-11-26 14:52:22
* @Description: * @Description:
*/ */
import { ISchema } from '@formily/antd'; import { ISchema } from '@formily/antd';
...@@ -64,7 +64,7 @@ export const evaluateSchema: ISchema = { ...@@ -64,7 +64,7 @@ export const evaluateSchema: ISchema = {
}, },
}, },
picture: { picture: {
type: 'string', type: 'array',
title: '图片', title: '图片',
'x-component': 'Upload', 'x-component': 'Upload',
'x-component-props': { 'x-component-props': {
......
...@@ -443,7 +443,9 @@ export interface FileData { ...@@ -443,7 +443,9 @@ export interface FileData {
url: string; url: string;
}; };
// 初始化 Upload 数据 /**
* 初始化 Upload 数据
*/
export function normalizeFiledata(url: string): FileData export function normalizeFiledata(url: string): FileData
export function normalizeFiledata(url: any): any { export function normalizeFiledata(url: any): any {
if (!url) { if (!url) {
......
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