Commit 2e352cf4 authored by Bill's avatar Bill

refactor: 重构加工高能力

parent af3fccf0
......@@ -129,8 +129,9 @@ const HandlingRoute = {
path: '/memberCenter/handling/assign/pendingAddProcessing/detail',
name: '待新增加工入库单',
icon: 'smile',
component: '@/pages/handling/assign/detail',
hideInMenu: true
component: '@/pages/handling/assign/tobeAddStock/detail',
hideInMenu: true,
noMargin: true,
},
// 指派生产通知单 -> 待收货生产通知单
{
......@@ -144,8 +145,9 @@ const HandlingRoute = {
path: '/memberCenter/handling/assign/pendingReceive/detail',
name: '待收货生产通知单',
icon: 'smile',
component: '@/pages/handling/assign/detail',
component: '@/pages/handling/assign/tobeReceive/detail',
hideInMenu: true,
noMargin: true,
},
]
......@@ -290,8 +292,10 @@ const HandlingRoute = {
path: '/memberCenter/handling/confirm/pendingReceipt/detail',
name: '待确认回单生产通知单',
icon: 'smile',
component: '@/pages/handling/assign/detail',
component: '@/pages/handling/confirm/pendingReceipt/detail',
hideInMenu: true,
noMargin: true,
},
]
}
......
......@@ -30,8 +30,117 @@ export const ADD_LOGISTICS = 24
*/
export const EDIT_LOGISTICS = -8
/**
* @特殊
* datail 当 outerTaskType 为 29的时候是手工发胡
*/
export const isManualDelivery = 29;
/**
* supplier
* 待新增加工入库单
*/
export const TO_BE_ADD_STORAGE = 22;
/**
* supplier
* 待审核加工入库单
*/
export const TO_BE_EXAM_STORAGE = 23
/**
* supplierInnerStatus
*/
export const SUPPLIER_INNER_STATUS = {
1: '待提交审核',
2: '待审核(一级)',
3: '待审核(二级)',
4: '待提交',
5: '已提交',
11: '审核不通过(一级)',
12: '审核不通过(二级)',
21: '已完成',
[TO_BE_ADD_STORAGE]: '待新增加工入库单',
[TO_BE_EXAM_STORAGE]: '待审核加工入库单',
24: '待确认收货',
25: '已确认收货',
26: '已终止'
}
const PROCESS_INNER_STATUS = {
/**
* 加工企业内部状态 processINnerstatus
*/
export const PROCESS_INNER_STATUS = {
1: '待提交审核',
2: '待审核(一级)',
3: '待审核(二级)',
4: '待确认',
5: '已确认(接受)',
11: '提交审核不通过',
12: '审核不通过(一级)',
13: '审核不同通过(二级)',
21: '已完成',
[PENDING_ADD_PROCESS_DELIVERY]: "待新增加工发货单",
[PENDING_VERIFY_PROCESS_DELIVERY]: "待审核加工发货单"
[PENDING_VERIFY_PROCESS_DELIVERY]: "待审核加工发货单",
24: '待新增物流单',
25: '待确认物流单',
26: '待确认发货',
27: '已确认发货',
28: '待确认回单',
29: '已确认(不接受)',
30: '不接受物流单',
31: '已中止'
}
/**
* 总的内部状态
* status
*/
export const STATUS = {
1: '待提交审核',
2: '待审核(一级)',
3: '待审核(二级)',
4: '待提交',
5: '待提交审核',
6: '待审核(一级)',
7: '待审核(二级)',
8: '待确认',
9: '接受申请通知单',
10: '待新增加工发货单',
11: '待审核加工发货单',
12: '待新增物流单',
13: '待确认物流单',
14: '待确认发货',
15: '待新增加工入库单',
16: '待审核加工入库单',
17: '待确认发货',
18: '待确认回单',
19: '完成',
21: '审核不通过(一级)',
22: '审核不通过(二级)',
23: '提交审核不通过',
24: '审核不通过(一级)',
25: '审核不通过(二级)',
26: '不接受申请通知单',
27: '不接受物流单',
28: '中止',
}
/**
* outerStatus
*/
export const COMPLETE = 9
export const OUTER_STATUS = {
1: '待提交',
2: '待确认',
3: '待新增加工发货单',
4: '待新增物流单',
5: '代发货',
6: '待新增加工入库单',
7: '待收货',
8: '待确认回单',
[COMPLETE]: '已完成',
21: '不接受',
22: '已中止'
}
......@@ -38,6 +38,7 @@ import {
} from '../../common';
import DeliverGood from '../../components/DeliverGood';
/**
* @v2废弃
* 进入详情页,根据不同的pathname 获取他们的service,
* Assign 指的是指派通知单, comfirm 是确认通知单
*/
......
import React, { useEffect, useMemo, useState } from 'react';
import { Spin, Card, Table, Button, Drawer } from 'antd';
import AnchorPage from '@/layouts/AnchorPage';
import CustomizeColumn from '@/components/CustomizeColumn';
import AuditProcess from '@/components/AuditProcess';
import theme from '../../../../../config/lingxi.theme.config';
import useGetAnchorHeader from '../../common/hooks/useGetAnchorHeader';
import useInitialValue from '../../common/hooks/useInitialValue';
import { useBasicInfoColumnInDetail } from '../../common/hooks/useCommonsInDetail';
import { PublicApi } from '@/services/api';
import { GetEnhanceSupplierToBeAddDetailsResponse } from '@/services/EnhanceApi';
import { usePageStatus } from '@/hooks/usePageStatus';
import { findLastIndexFlowState } from '@/utils';
import useColumnWithFilter from '../../common/hooks/useColumnWithFilter';
import { columns as orderColumns, productColumn } from '../../common/columns/detailNoticeInfoColumns';
import MellowCard from '@/components/MellowCard';
import DeliveryInfo from '../../components/DeliveryInfo';
import FlowRecords from '@/components/FlowRecords';
import { innerFlowColumns, outerWorkflowRecordsColumn } from '../../common/columns/recordFlowColumns'
import MachiningDetail, { DataPropsType } from '../../components/MachiningDetail';
import useViewProcessInfo from '../../common/hooks/useViewProcessInfo';
const Info = () => {
const { id } = usePageStatus();
const { visible, toggle, handleViewDetail, processDataProps } = useViewProcessInfo();
const anchorColumn = useGetAnchorHeader({blackList: []})
const { loading, initialValue }= useInitialValue<GetEnhanceSupplierToBeAddDetailsResponse, { id: string }>(PublicApi.getEnhanceSupplierToBeAddStorageDetails, { id: id.toString() })
const { basicInfoColumn, payInfoColumns, cacheOtherInfo, annexInfo} = useBasicInfoColumnInDetail({initialValue})
const defaultColumns = initialValue?.source === 1 ? orderColumns : productColumn;
const outerWorkflowRecordsList = initialValue?.outerWorkflowRecordsList || [];
const innerWorkflowRecordsList = initialValue?.innerWorkflowRecordsList || [];
const { columns } = useColumnWithFilter(defaultColumns, [
{
title: '操作',
render: (text, record) => {
return <a onClick={() => handleViewDetail(record)}>查看加工明细</a>
}
}
]);
const handleSubmit = async () => {
const { data, code } = await PublicApi.postEnhanceSupplierToBeAddStorageExam({
id: id,
});
if (code === 1000) {
history.back();
}
}
const cacheStyle = useMemo(() => ({ margin: `${theme["@margin-md"]} 0` }), [])
return (
<Spin spinning={loading}>
<AnchorPage
title={initialValue?.processName}
anchors={anchorColumn}
extra={
<Button onClick={handleSubmit} type="primary">提交</Button>
}
>
<AuditProcess
outerVerifySteps={
initialValue && initialValue.outerTaskList ?
initialValue.outerTaskList.map(item => ({
step: item.step,
stepName: item.taskName,
roleName: item.roleName,
status: item.isExecute ? 'finish' : 'wait',
})) :
[]
}
outerVerifyCurrent={findLastIndexFlowState(initialValue?.outerTaskList)}
innerVerifySteps={
initialValue && initialValue.innerTaskList ?
initialValue.innerTaskList.map(item => ({
step: item.step,
stepName: item.taskName,
roleName: item.roleName,
status: item.isExecute ? 'finish' : 'wait',
})) :
[]
}
innerVerifyCurrent={findLastIndexFlowState(initialValue?.innerTaskList)}
id="progress"
/>
<div style={cacheStyle} id="basicInfo" >
<CustomizeColumn data={basicInfoColumn} title="基本信息" column={3} />
</div>
{/* 通知单明细 */}
<div style={cacheStyle} id="noticeDetails">
<MellowCard title="通知单明细">
<Table rowKey={"id"} dataSource={initialValue?.details} columns={columns}/>
</MellowCard>
</div>
<div style={cacheStyle} id="deliveryDetail">
<DeliveryInfo source={initialValue?.source as 1 | 2} statisticsDataSource={initialValue?.details} infoDataSource={initialValue?.pnoReceiveDeliverDetailDOList} />
</div>
<div style={cacheStyle}>
<CustomizeColumn id="payInfo" data={payInfoColumns} title="交付信息" column={3} />
</div>
<div style={cacheStyle}>
<CustomizeColumn id="otherRequire" data={cacheOtherInfo} title="其他要求" column={3} />
</div>
<div style={cacheStyle}>
<CustomizeColumn id="annex" data={annexInfo} title="附件" column={3} />
</div>
<div id="record">
<FlowRecords
outerRowkey="id"
innerRowkey="id"
outerColumns={outerWorkflowRecordsColumn}
innerColumns={innerFlowColumns}
outerDataSource={outerWorkflowRecordsList}
innerDataSource={innerWorkflowRecordsList}
/>
</div>
</AnchorPage>
<MachiningDetail visible={visible} dataProps={processDataProps} onClose={() => toggle(false)}/>
</Spin>
)
}
export default Info
import React, { useCallback, useEffect, useRef, useState } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { Space, Card, Button } from 'antd';
import { Space, Card, Button, Popconfirm } from 'antd';
import { querySchema } from '../../common/schemas/query';
import { StandardTable } from 'god';
import NiceForm from '@/components/NiceForm';
......@@ -16,6 +16,7 @@ import useFetchFilterData, { FilterResType } from '../../common/hooks/useFetchFi
import useColumnWithFilter from '../../common/hooks/useColumnWithFilter';
import { Link, useRouteMatch } from 'umi'
import { DEPENDENT_DOC_PRODUCTION, DOC_TYPE_PROCESS_INVOICE, DOC_TYPE_PROCESS_RECEIPT } from '@/constants';
import { TO_BE_ADD_STORAGE, TO_BE_EXAM_STORAGE } from '@/constants/handling';
const formActions = createFormActions();
const queryColumns = setColumnsByLinks({
......@@ -35,17 +36,42 @@ const AllQuery = () => {
render: (text, record) => {
return (
<Space>
<Link
to={`${ADD_PROCESS_PATH}?relevanceInvoicesId=${record.id}&invoicesTypeId=${DOC_TYPE_PROCESS_RECEIPT}&relevanceInvoices=${DEPENDENT_DOC_PRODUCTION}`}
>
新增加工入库单
</Link>
{
record.supplierInnerStatus === TO_BE_EXAM_STORAGE && (
<Popconfirm
title={`是否确认审核入库单号为${record.deliveryNo}的加工入库单?`}
placement="left"
okText="确定"
cancelText="取消"
onConfirm={() => handleExam({id: record.id})}
>
<a>审核</a>
</Popconfirm>
)
}
{
record.supplierInnerStatus === TO_BE_ADD_STORAGE && (
<Link
to={`${ADD_PROCESS_PATH}?relevanceInvoicesId=${record.id}&invoicesTypeId=${DOC_TYPE_PROCESS_RECEIPT}&relevanceInvoices=${DEPENDENT_DOC_PRODUCTION}`}
>
新增加工入库单
</Link>
)
}
</Space>
)
}
}
], filterRes);
const handleExam = async (params: { id: number }) => {
const { code, } = await PublicApi.postEnhanceSupplierToBeAddStorageExam(params);
if (code === 1000) {
formActions.submit()
}
}
const handleSearch = useCallback((values: any) => {
const searchData = onFormatSearchData(values)
......
.container {
display: flex;
flex-direction: column;
.row {
margin-bottom: 24px;
.label {
color: "#909399";
width: 120px;
font-size: 12px;
}
}
}
import React from 'react';
import { Modal } from 'antd';
import styles from './index.less';
interface Iprops {
dataSource: {
address: string,
deliveryTime: string,
logisticsNo: string,
company: string
},
visible: boolean,
onClose?: () => void,
onConfirm?: () => void,
}
const ConfirmReceive: React.FC<Iprops> = (props: Iprops) => {
const { dataSource, visible, onClose, onConfirm } = props;
const rowList = [
{
title: '发货地址',
dataIndex: 'address'
},
{
title: '发货地址',
dataIndex: 'deliveryTime'
},
{
title: '发货单号',
dataIndex: 'logisticsNo',
render: (text, record) => {
return (
<a >{record.logisticsNo}</a>
)
}
},
{
title: '发货地址',
dataIndex: 'company'
}
]
return (
<Modal
title="确认收货"
visible={visible}
onCancel={onClose}
onOk={onConfirm}
>
<div className={styles.container}>
{
rowList.map((_item) => {
return (
<div className={styles.row}>
<span className={styles.label}>{_item.title}</span>
<span style={styles.value}>
{
_item.render && _item.render(dataSource[_item.dataIndex], dataSource) || dataSource[_item.dataIndex]
}
</span>
</div>
)
})
}
</div>
</Modal>
)
}
export default ConfirmReceive
import React, { useEffect, useMemo, useState } from 'react';
import { Spin, Card, Table, Button, Drawer } from 'antd';
import AnchorPage from '@/layouts/AnchorPage';
import CustomizeColumn from '@/components/CustomizeColumn';
import AuditProcess from '@/components/AuditProcess';
import theme from '../../../../../config/lingxi.theme.config';
import useGetAnchorHeader from '../../common/hooks/useGetAnchorHeader';
import useInitialValue from '../../common/hooks/useInitialValue';
import { useBasicInfoColumnInDetail } from '../../common/hooks/useCommonsInDetail';
import { PublicApi } from '@/services/api';
import { GetEnhanceProcessToBeDeliveryDetailsResponse } from '@/services/EnhanceApi';
import { usePageStatus } from '@/hooks/usePageStatus';
import { findLastIndexFlowState } from '@/utils';
import useColumnWithFilter from '../../common/hooks/useColumnWithFilter';
import { columns as orderColumns, productColumn } from '../../common/columns/detailNoticeInfoColumns';
import MellowCard from '@/components/MellowCard';
import DeliveryInfo from '../../components/DeliveryInfo';
import FlowRecords from '@/components/FlowRecords';
import { innerFlowColumns, outerWorkflowRecordsColumn } from '../../common/columns/recordFlowColumns'
import MachiningDetail, { DataPropsType } from '../../components/MachiningDetail';
import useModal from '@/pages/member/memberEvaluate/hooks/useModal';
// import ExamVerify, { SubmitDataTypes } from '@/components/ExamVerify';
// import StopModal, { SubmitDataTypes } from './components/StopModal';
// import DeliveryHandle, { SubmitDataTypes } from './components/DeliveryHandle';
import useViewProcessInfo from '../../common/hooks/useViewProcessInfo';
import { isManualDelivery } from '@/constants/handling';
import moment from 'moment';
import ConfirmReceive from './components/ConfirmReceive';
const Info = () => {
const { id } = usePageStatus();
const { visible, toggle, handleViewDetail, processDataProps } = useViewProcessInfo();
const { visible: examVisible, toggle: examToggle } = useModal();
const anchorColumn = useGetAnchorHeader({blackList: []})
const { loading, initialValue, refresh }= useInitialValue<GetEnhanceProcessToBeDeliveryDetailsResponse, { id: string }>(PublicApi.getEnhanceProcessToBeDeliveryDetails, { id: id.toString() })
const { basicInfoColumn, payInfoColumns, cacheOtherInfo, annexInfo} = useBasicInfoColumnInDetail({initialValue})
const defaultColumns = initialValue?.source === 1 ? orderColumns : productColumn;
const outerWorkflowRecordsList = initialValue?.outerWorkflowRecordsList || [];
const innerWorkflowRecordsList = initialValue?.innerWorkflowRecordsList || [];
const [manualLoading, setManualLoading] = useState<boolean>(false);
const manualDataProps = useMemo(() => {
return {
address: initialValue?.manualDeliver?.deliveryAddress,
deliveryTime: moment(initialValue?.manualDeliver?.deliveryTime).format('YYYY-MM-DD'),
logisticsNo: initialValue?.manualDeliver?.deliveryNo,
company: initialValue?.manualDeliver?.logisticsName
}
}, [initialValue])
const { columns } = useColumnWithFilter(defaultColumns, [
{
title: '操作',
render: (text, record) => {
return <a onClick={() => handleViewDetail(record)}>查看加工明细</a>
}
}
]);
const handleOnConfirm = async (currentInnerStatus: "2_1_1", params: { produceNoticeOrderId: number, pnoReceiveDeliverDetailId: number }) => {
const SERVICE_MAP = {
'2_1_1': PublicApi.postEnhanceSupplierToBeReceiveConfirmReceive,
}
if (!SERVICE_MAP[currentInnerStatus]) {
return;
}
// setLoading(true)
const { code, data } = await SERVICE_MAP[currentInnerStatus](params);
// setLoading(false)
if (code === 1000) {
refresh({id: id});
}
}
const handleOnReceive = async () => {
setManualLoading(true)
const { data, code } = await PublicApi.postEnhanceSupplierToBeReceiveManualReceive({id: id});
setManualLoading(false)
if (code === 1000) {
refresh({id: id});
}
}
const cacheStyle = useMemo(() => ({ margin: `${theme["@margin-md"]} 0` }), [])
return (
<Spin spinning={loading}>
<AnchorPage
title={initialValue?.processName}
anchors={anchorColumn}
extra={
initialValue?.outerTaskType === isManualDelivery && (
<Button loading={manualLoading} onClick={() => examToggle(true)} type="primary">确认手工发货</Button>
) || null
}
>
<AuditProcess
outerVerifySteps={
initialValue && initialValue.outerTaskList ?
initialValue.outerTaskList.map(item => ({
step: item.step,
stepName: item.taskName,
roleName: item.roleName,
status: item.isExecute ? 'finish' : 'wait',
})) :
[]
}
outerVerifyCurrent={findLastIndexFlowState(initialValue?.outerTaskList)}
innerVerifySteps={
initialValue && initialValue.innerTaskList ?
initialValue.innerTaskList.map(item => ({
step: item.step,
stepName: item.taskName,
roleName: item.roleName,
status: item.isExecute ? 'finish' : 'wait',
})) :
[]
}
innerVerifyCurrent={findLastIndexFlowState(initialValue?.innerTaskList)}
id="progress"
/>
<div style={cacheStyle} id="basicInfo" >
<CustomizeColumn data={basicInfoColumn} title="基本信息" column={3} />
</div>
{/* 通知单明细 */}
<div style={cacheStyle} id="noticeDetails">
<MellowCard title="通知单明细">
<Table rowKey={"id"} dataSource={initialValue?.details} columns={columns}/>
</MellowCard>
</div>
<div style={cacheStyle} id="deliveryDetail">
<DeliveryInfo
source={initialValue?.source as 1 | 2}
statisticsDataSource={initialValue?.details}
infoDataSource={initialValue?.pnoReceiveDeliverDetailDOList}
onConfirm={handleOnConfirm}
mode="receive"
panelKey="info"
/>
</div>
<div style={cacheStyle}>
<CustomizeColumn id="payInfo" data={payInfoColumns} title="交付信息" column={3} />
</div>
<div style={cacheStyle}>
<CustomizeColumn id="otherRequire" data={cacheOtherInfo} title="其他要求" column={3} />
</div>
<div style={cacheStyle}>
<CustomizeColumn id="annex" data={annexInfo} title="附件" column={3} />
</div>
<div id="record">
<FlowRecords
outerRowkey="id"
innerRowkey="id"
outerColumns={outerWorkflowRecordsColumn}
innerColumns={innerFlowColumns}
outerDataSource={outerWorkflowRecordsList}
innerDataSource={innerWorkflowRecordsList}
/>
</div>
</AnchorPage>
<MachiningDetail visible={visible} dataProps={processDataProps} onClose={() => toggle(false)}/>
<ConfirmReceive
dataSource={manualDataProps}
visible={examVisible}
onClose={() => examToggle(false)}
onConfirm={handleOnReceive}
/>
</Spin>
)
}
export default Info
......@@ -71,9 +71,12 @@ const commonColumns: ColumnsType<any> = [
dataIndex: 'batch',
render: (text: any, record: any) => {
const id: number = record.deliveryId;
if(record.deliveryBatch === 0) {
return
}
return (
// <EyePreview url={`${url}?id=${id}`} >{record[`${type}No`]}</EyePreview>
<div>
<div style={{display: 'flex', flexDirection: 'column'}}>
<span>{record.deliveryBatch}批次</span>
<EyePreview url={`${links['delivery']}?id=${id}`} >{record[`deliveryNo`]}</EyePreview>
</div>
......
......@@ -31,8 +31,9 @@ const commonColumns: ColumnsType<any> = [
title: '内部状态',
dataIndex: 'innerStatus',
render: (text, record: any) => {
const offset = record.supplierInnerStatus % 12
return (
<Badge color={innerStatusColor[record.supplierInnerStatus]} text={record.innerStatusName}></Badge>
<Badge color={innerStatusColor[offset]} text={record.innerStatusName}></Badge>
)
}
}
......
......@@ -3,6 +3,9 @@ import { ColumnsType } from 'antd/es/table';
import moment from 'moment';
import { Badge } from 'antd';
import EyePreview from '@/components/EyePreview';
import { innerStatusColor, outerStatusType } from '../colors';
import StatusTag from '@/components/StatusTag';
import { Link } from 'umi';
const commonColumns: ColumnsType<any> = [
{
......@@ -19,17 +22,20 @@ const commonColumns: ColumnsType<any> = [
{
title: '外部状态',
dataIndex: 'outerStatus',
// render: (text, record: any) => {
// return <StatusTag title={text} type={SUPPLIER_OUTER_STATUS_COLOR[record.outerStatus]}></StatusTag>
// }
render: (text, record: any) => {
const offset = record.outerStatus % 5;
return <StatusTag title={record.outerStatusName} type={outerStatusType[offset] as 'success'}></StatusTag>
}
},
{
title: '内部状态',
dataIndex: 'innerStatus',
render: (text, record: any) => {
const offset = record.supplierInnerStatus % 12
return (
<Badge status={"success"} text={text}></Badge>
)
<Badge text={record.innerStatusName} color={innerStatusColor[offset]}></Badge>
// record.innerStatusName
)
}
}
]
......@@ -50,7 +56,7 @@ const setColumnsByLinks = (links: { [key: string]: string }) => {
render: (text, record) => {
return (
<div style={{ display: 'flex', flexDirection: 'column', }}>
<EyePreview url={`${links['detail']}?id=${record.id}`}>{text}</EyePreview>
<EyePreview url={`${links['detail']}?id=${record.id}`}>{record.noticeNo}</EyePreview>
<span style={{ marginTop: '8px' }}>{record.summary}</span>
</div>
)
......@@ -64,9 +70,14 @@ const setColumnsByLinks = (links: { [key: string]: string }) => {
const id: number = isStorage ? record.storageId : record.deliveryId;
return (
// <EyePreview url={`${url}?id=${id}`} >{record[`${type}No`]}</EyePreview>
<div>
<div style={{display: 'flex', flexDirection: 'column'}}>
<span>{record.deliveryBatch}批次</span>
<EyePreview url={`${links[type]}?id=${id}`} >{record[`${type}No`]}</EyePreview>
{
id && (
<Link to={`${links[type]}?id=${id}`}>{record[`${type}No`]}</Link>
)
}
{/* <EyePreview url={`${links[type]}?id=${id}`} >{record[`${type}No`]}</EyePreview> */}
</div>
)
}
......
......@@ -105,11 +105,11 @@ export const useBasicInfoColumnInDetail = <T extends object>(options: { initialV
return [{
title: "附件",
value: (
<div>
<div style={{display: 'flex', flexDirection: "column"}}>
{
annex.map((_item, key) => {
return (
<a key={key}>{_item.name}</a>
<a href={_item.value} style={{marginTop: '4px'}} key={key}>{_item.name}</a>
)
})
}
......
import React, { useEffect, useState } from 'react';
import React, { useCallback, useEffect, useState } from 'react';
/**
* 获取详情
......@@ -18,22 +18,28 @@ type Ires = {
message: string
}
function useInitialValue<T, P>(api: (params: P, headers?: HeadersType) => Promise<T & Ires>, params: P, headers?: HeadersType): { loading: boolean, initialValue: T} {
function useInitialValue<T, P>(api: (params: P, headers?: HeadersType) => Promise<T & Ires>, params: P, headers?: HeadersType): { loading: boolean, initialValue: T, refresh: (params: P) => void} {
const [loading, setLoading] = useState<boolean>(false);
const [initialValue, setInitialValue] = useState<null | Ires["data"]>(null);
useEffect(() => {
async function init() {
setLoading(true)
const { data, code } = await api(params, headers);
setLoading(false)
if (code === 1000) {
setInitialValue(data)
}
const fetchData = useCallback(async (params) => {
setLoading(true)
const { data, code } = await api(params);
setLoading(false)
if (code === 1000) {
setInitialValue(data)
}
init()
}, [headers])
useEffect(() => {
fetchData(params);
}, [])
return { loading, initialValue }
const refresh = useCallback((params) => {
fetchData(params)
}, [])
return { loading, initialValue, refresh }
}
export default useInitialValue
......@@ -68,17 +68,13 @@ const statisticsColumns: ColumnsType<GetEnhanceSupplierAllDetailsResponse["detai
dataIndex: 'processTotalPrice',
},
{
title: '已发货',
dataIndex: 'deliverNum'
},
{
title: '已收货/未发货',
title: '已发货/未发货',
dataIndex: 'receiveNum',
render: (text, record) => {
const descOptions = [
{
title: "已发货",
value: record.receiveNum
value: record.deliverNum
},
{
title: '未发货',
......@@ -91,13 +87,17 @@ const statisticsColumns: ColumnsType<GetEnhanceSupplierAllDetailsResponse["detai
}
},
{
title: '已收货',
dataIndex: 'receiveNum'
},
{
title: '差异数量',
dataIndex: 'differenceNum'
},
{
title: '未发货',
dataIndex: "notDeliverNum"
}
// {
// title: '未发货',
// dataIndex: "notDeliverNum"
// }
];
const productColumns = statisticsColumns.slice(1);
......
......@@ -7,12 +7,18 @@ import { Table, Button, Tabs } from 'antd';
import CustomizeColumn from '@/components/CustomizeColumn';
import { Link } from 'umi';
import moment from 'moment';
import { PublicApi } from '@/services/api';
const TabPane = Tabs.TabPane;
type infoDataSourceType = GetEnhanceSupplierAllDetailsResponse["pnoReceiveDeliverDetailDOList"]
interface Iprops {
/**
* 是否是确认生产通知单。
* 用于判断是确认发货,确认收货还是确认回单
*/
mode?: "deliver" | "receive" | "receipt",
/**
* 通知单来源: 1-订单加工 2-商品加工
*/
source: 1 | 2,
......@@ -29,12 +35,32 @@ interface Iprops {
* infoDataSource
*/
infoDataSource: infoDataSourceType,
/**
* 确认回单,确认发货,确认收货
*/
onConfirm?: (currentInnerStatus: keyof typeof ACTION_TEXT, params: { produceNoticeOrderId: number, pnoReceiveDeliverDetailId: number }) => void,
}
const format = 'YYYY-MM-DD HH:mm:ss';
/**
* isConfirm_deliverStatus_receiveStatus_receiptStatus
*/
const INNER_STATUS_TEXT = {
"1_1_1": '待确认发货',
'2_1_1': '已确认发货',
'2_2_1': '待确认回单',
'2_2_2': '已确认回单'
}
const ACTION_TEXT = {
'1_1_1': '确认发货',
'2_1_1': '确认收货',
'2_2_1': '确认回单'
}
const DeliveryInfo: React.FC<Iprops> = (props: Iprops) => {
const { statisticsDataSource, infoDataSource, source, panelKey } = props;
const { statisticsDataSource, infoDataSource, source, panelKey, mode, onConfirm } = props;
const [radioValue, setRadioValue] = useState<"statistics" | "info">(panelKey);
const statisticsColumns = useMemo(() => source === 1 ? orderColumns : productColumns, [source]);
const infoColumns = useMemo(() => source === 1 ? infoOrderColumns : infoProductColumns, [source]);
......@@ -71,12 +97,16 @@ const DeliveryInfo: React.FC<Iprops> = (props: Iprops) => {
return options;
}, [infoDataSource])
const handleRadioChange = (value: "statistics" | "info") => {
console.log(value);
setRadioValue(value);
}
const handleOnSubmit = async (currentInnerStatus: keyof typeof ACTION_TEXT, params: { produceNoticeOrderId: number, pnoReceiveDeliverDetailId: number }) => {
onConfirm?.(currentInnerStatus, params)
}
const batchColumns = useMemo(() => {
const activeData: infoDataSourceType[0] | null = infoDataSource && infoDataSource.length > 1 && infoDataSource[activeBatch - 1] || null;
const activeData: infoDataSourceType[0] | null = infoDataSource && infoDataSource.length > 0 && infoDataSource[activeBatch - 1] || null;
const currentInnerStatus = `${activeData?.deliverStatus}_${activeData?.receiveStatus}_${activeData?.receiptStatus}`;
return [
{
title: '发货单号',
......@@ -104,12 +134,19 @@ const DeliveryInfo: React.FC<Iprops> = (props: Iprops) => {
},
{
title: "内部状态",
value: '已确认回单'
},
{
title: "",
value: (
<Button>确认回单</Button>
<div style={{display: 'flex', flexDirection: 'row', justifyContent: 'space-between', width: '100%'}}>
<span>{INNER_STATUS_TEXT[currentInnerStatus] || ''}</span>
{
mode && ACTION_TEXT[currentInnerStatus] && activeData?.[`${mode}Status`] === 1 && (
<a
onClick={() => handleOnSubmit(currentInnerStatus as "1_1_1", {produceNoticeOrderId: activeData.produceNoticeOrderId, pnoReceiveDeliverDetailId: activeData.id })}
>
{ACTION_TEXT[currentInnerStatus]}
</a>
) || null
}
</div>
)
},
{
......@@ -133,7 +170,7 @@ const DeliveryInfo: React.FC<Iprops> = (props: Iprops) => {
),
}
]
} ,[infoDataSource, activeBatch])
} ,[infoDataSource, activeBatch, mode])
const handleTabOnChange = (value: string) => {
setActiveBatch(+value);
......@@ -152,15 +189,15 @@ const DeliveryInfo: React.FC<Iprops> = (props: Iprops) => {
)
}
{
radioValue === 'info' && infoDataSource.length > 0 && (
radioValue === 'info' && infoDataSource?.length > 0 && (
<div>
<Tabs defaultActiveKey="1" activeKey={activeBatch.toString()} onChange={handleTabOnChange}>
{
tabOptions.map((_item) => {
return (
<TabPane tab={`${_item}批次`} key={_item}>
<CustomizeColumn data={batchColumns} column={5} />
<Table columns={infoColumns} rowKey="id" dataSource={infoDataSource[activeBatch].pnoReceiveDeliverDetailProductBOList}></Table>
<CustomizeColumn data={batchColumns} column={4} />
<Table columns={infoColumns} rowKey={(record) => `${record.produceNoticeOrderDetailId}-${record.productId}`} dataSource={infoDataSource[activeBatch - 1]?.pnoReceiveDeliverDetailProductBOList}></Table>
</TabPane>
)
})
......@@ -174,7 +211,9 @@ const DeliveryInfo: React.FC<Iprops> = (props: Iprops) => {
}
DeliveryInfo.defaultProps = {
panelKey: 'statistics'
panelKey: 'statistics',
mode: null,
onConfirm: null
}
export default DeliveryInfo;
......@@ -29,6 +29,10 @@ import moment from 'moment';
import { Link } from 'umi'
import StatusTag from '@/components/StatusTag';
/**
* @废弃
* v2 废弃
*/
const formActions = createFormActions();
/**
* 该页面是 确认生产通知单5个页面公用的
......
......@@ -22,6 +22,9 @@ import useModal from '@/pages/member/memberEvaluate/hooks/useModal';
// import ExamVerify, { SubmitDataTypes } from '@/components/ExamVerify';
import StopModal, { SubmitDataTypes } from './components/StopModal';
import useViewProcessInfo from '../../common/hooks/useViewProcessInfo';
import moment from 'moment';
const inRangeStatus = [3, 4, 5, 6, 7, 8];
const Info = () => {
const { id } = usePageStatus();
......@@ -29,7 +32,7 @@ const Info = () => {
const { visible: examVisible, toggle: examToggle } = useModal();
const anchorColumn = useGetAnchorHeader({blackList: []})
const { loading, initialValue }= useInitialValue<GetEnhanceSupplierToBeAddDetailsResponse, { id: string }>(PublicApi.getEnhanceSupplierToBeAddDetails, { id: id.toString() })
const { loading, initialValue }= useInitialValue<GetEnhanceSupplierToBeAddDetailsResponse, { id: string }>(PublicApi.getEnhancePlatformAllDetails, { id: id.toString() })
const { basicInfoColumn, payInfoColumns, cacheOtherInfo, annexInfo} = useBasicInfoColumnInDetail({initialValue})
const defaultColumns = initialValue?.source === 1 ? orderColumns : productColumn;
const outerWorkflowRecordsList = initialValue?.outerWorkflowRecordsList || [];
......@@ -45,11 +48,9 @@ const Info = () => {
const onExamVerifySubmit = async (value: SubmitDataTypes) => {
console.log(value);
return ;
const { code, data } = await PublicApi.postEnhanceProcessAllDiscontinue({
id: id,
discontinueTime: 123,
discontinueTime: moment().valueOf(),
cause: value.reason
})
if (code === 1000) {
......@@ -64,7 +65,11 @@ const Info = () => {
title={initialValue?.processName}
anchors={anchorColumn}
extra={
<Button onClick={() => examToggle(true)} type="primary">中止生产通知单</Button>
(
inRangeStatus.includes(initialValue?.outerStatus) && (
<Button onClick={() => examToggle(true)} type="primary">中止生产通知单</Button>
)
)
}
>
<AuditProcess
......
......@@ -15,9 +15,14 @@ import useFetchFilterData, { FilterResType } from '../../common/hooks/useFetchFi
import useColumnWithFilter from '../../common/hooks/useColumnWithFilter';
import StopModal, { SubmitDataTypes } from './components/StopModal';
import useModal from '@/pages/member/memberEvaluate/hooks/useModal';
import moment from 'moment';
const formActions = createFormActions();
const queryColumns = setColumnsByLinks("/memberCenter/handling/confirm/query/detail")
/**
* 内部状态为 【已确认】 到 【已完成】 且不是 【不接受生产通知单那】
*/
const inRangeStatus = [3, 4, 5, 6, 7, 8];
const AllQuery = () => {
const ref = useRef<any>({});
......@@ -30,6 +35,9 @@ const AllQuery = () => {
title: '操作',
dataIndex: 'action',
render: (text, record) => {
if (!inRangeStatus.includes(record.outerStatus)) {
return ;
}
return (
<a onClick={() => handleShow({id: record.id})}>中止生产通知单</a>
)
......@@ -48,15 +56,13 @@ const AllQuery = () => {
}
const onExamVerifySubmit = async (value: SubmitDataTypes) => {
console.log(value);
return ;
const { code, data } = await PublicApi.postEnhanceProcessAllDiscontinue({
id: activeData,
discontinueTime: 123,
discontinueTime: moment().valueOf(),
cause: value.reason
})
if (code === 1000) {
// history.back();
toggle(false);
formActions.submit();
setActiveData(null)
}
......
......@@ -40,8 +40,11 @@ const AllQuery = () => {
<Link to={`${ADD_LOGISTICS_PATH}?createType=3&id=${record.id}`}>新增物流单</Link>
)
}
{/* @fix */}
<Link to={`/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList/edit?id=${record.logisticsOrderId}`}>编辑</Link>
{
record.processInnerStatus === EDIT_LOGISTICS && (
<Link to={`/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList/edit?id=${record.logisticsOrderId}`}>编辑</Link>
)
}
</Space>
)
}
......
......@@ -8,7 +8,7 @@ import useGetAnchorHeader from '../../common/hooks/useGetAnchorHeader';
import useInitialValue from '../../common/hooks/useInitialValue';
import { useBasicInfoColumnInDetail } from '../../common/hooks/useCommonsInDetail';
import { PublicApi } from '@/services/api';
import { GetEnhanceSupplierToBeAddDetailsResponse } from '@/services/EnhanceApi';
import { GetEnhanceProcessToBeDeliveryDetailsResponse } from '@/services/EnhanceApi';
import { usePageStatus } from '@/hooks/usePageStatus';
import { findLastIndexFlowState } from '@/utils';
import useColumnWithFilter from '../../common/hooks/useColumnWithFilter';
......@@ -23,6 +23,8 @@ import useModal from '@/pages/member/memberEvaluate/hooks/useModal';
// import StopModal, { SubmitDataTypes } from './components/StopModal';
import DeliveryHandle, { SubmitDataTypes } from './components/DeliveryHandle';
import useViewProcessInfo from '../../common/hooks/useViewProcessInfo';
import { isManualDelivery } from '@/constants/handling';
import moment from 'moment';
const Info = () => {
const { id } = usePageStatus();
......@@ -30,7 +32,7 @@ const Info = () => {
const { visible: examVisible, toggle: examToggle } = useModal();
const anchorColumn = useGetAnchorHeader({blackList: []})
const { loading, initialValue }= useInitialValue<GetEnhanceSupplierToBeAddDetailsResponse, { id: string }>(PublicApi.getEnhanceProcessToBeConfirmDetails, { id: id.toString() })
const { loading, initialValue, refresh }= useInitialValue<GetEnhanceProcessToBeDeliveryDetailsResponse, { id: string }>(PublicApi.getEnhanceProcessToBeDeliveryDetails, { id: id.toString() })
const { basicInfoColumn, payInfoColumns, cacheOtherInfo, annexInfo} = useBasicInfoColumnInDetail({initialValue})
const defaultColumns = initialValue?.source === 1 ? orderColumns : productColumn;
const outerWorkflowRecordsList = initialValue?.outerWorkflowRecordsList || [];
......@@ -48,11 +50,12 @@ const Info = () => {
]);
const handleSubmit = async (value: SubmitDataTypes) => {
const addressTarget = addressList.filter((_row) => _row.value === value.address)[0];
const { data, code } = await PublicApi.postEnhanceProcessToBeDeliveryManualDeliver({
produceNoticeOrderId: id,
manualDeliver: {
deliveryAddress: value.address + "",
deliveryTime: +value.deliveryTime,
deliveryAddress: addressTarget.address,
deliveryTime: moment(value.deliveryTime, 'YYYY-MM-DD').valueOf(),
deliveryNo: value.deliveryNo,
logisticsName: value.company + ""
}
......@@ -63,6 +66,9 @@ const Info = () => {
}
useEffect(() => {
if(initialValue?.outerTaskType !== isManualDelivery) {
return;
}
/**
* 物流时,填写发货地址
* 自提时, 填写发货地址 -> 自提地址
......@@ -80,9 +86,12 @@ const Info = () => {
setAddressList(addressData)
}
getAddress()
}, [])
}, [initialValue])
useEffect(() => {
if(initialValue?.outerTaskType !== isManualDelivery) {
return;
}
async function getCompany() {
const { data, code } = await PublicApi.getLogisticsSelectListCompany({cooperateType: '2'});
if(code !== 1000) {
......@@ -95,9 +104,24 @@ const Info = () => {
setCompanyList(companyData)
}
getCompany()
}, [])
}, [initialValue])
const handleOnConfirm = async (currentInnerStatus: any, params: { produceNoticeOrderId: number, pnoReceiveDeliverDetailId: number }) => {
const SERVICE_MAP = {
'1_1_1': PublicApi.postEnhanceProcessToBeDeliveryConfirmDelivery,
'2_1_1': PublicApi.postEnhanceSupplierToBeReceiveConfirmReceive,
'2_2_1': PublicApi.postEnhanceProcessToBeConfirmReceiptConfirmReceipt
}
if (!SERVICE_MAP[currentInnerStatus]) {
return;
}
// setLoading(true)
const { code, data } = await SERVICE_MAP[currentInnerStatus](params);
// setLoading(false)
if (code === 1000) {
refresh({id: id});
}
}
const cacheStyle = useMemo(() => ({ margin: `${theme["@margin-md"]} 0` }), [])
return (
......@@ -106,7 +130,9 @@ const Info = () => {
title={initialValue?.processName}
anchors={anchorColumn}
extra={
<Button onClick={() => examToggle(true)} type="primary">手工发货</Button>
initialValue?.outerTaskType === isManualDelivery && (
<Button onClick={() => examToggle(true)} type="primary">手工发货</Button>
) || null
}
>
<AuditProcess
......@@ -144,7 +170,14 @@ const Info = () => {
</MellowCard>
</div>
<div style={cacheStyle} id="deliveryDetail">
<DeliveryInfo source={initialValue?.source as 1 | 2} statisticsDataSource={initialValue?.details} infoDataSource={initialValue?.pnoReceiveDeliverDetailDOList} />
<DeliveryInfo
source={initialValue?.source as 1 | 2}
statisticsDataSource={initialValue?.details}
infoDataSource={initialValue?.pnoReceiveDeliverDetailDOList}
onConfirm={handleOnConfirm}
mode="deliver"
panelKey="info"
/>
</div>
<div style={cacheStyle}>
<CustomizeColumn id="payInfo" data={payInfoColumns} title="交付信息" column={3} />
......
......@@ -61,7 +61,7 @@ const Info = () => {
title={initialValue?.processName}
anchors={anchorColumn}
extra={
<Button onClick={() => examToggle(true)} type="primary">提交</Button>
<Button onClick={() => examToggle(true)} type="primary">审核</Button>
}
>
<AuditProcess
......@@ -127,6 +127,7 @@ const Info = () => {
title="审核单据"
onSubmit={handleSubmit}
onCancel={() => examToggle(false)}
showLabel={false}
/>
</Spin>
......
......@@ -61,7 +61,7 @@ const Info = () => {
title={initialValue?.processName}
anchors={anchorColumn}
extra={
<Button onClick={() => examToggle(true)} type="primary">提交</Button>
<Button onClick={() => examToggle(true)} type="primary">审核</Button>
}
>
<AuditProcess
......@@ -127,6 +127,7 @@ const Info = () => {
title="审核单据"
onSubmit={handleSubmit}
onCancel={() => examToggle(false)}
showLabel={false}
/>
</Spin>
......
import React, { useEffect, useMemo, useState } from 'react';
import { Spin, Card, Table, Button, Drawer, Space, Popconfirm } from 'antd';
import AnchorPage from '@/layouts/AnchorPage';
import CustomizeColumn from '@/components/CustomizeColumn';
import AuditProcess from '@/components/AuditProcess';
import theme from '../../../../../config/lingxi.theme.config';
import useGetAnchorHeader from '../../common/hooks/useGetAnchorHeader';
import useInitialValue from '../../common/hooks/useInitialValue';
import { useBasicInfoColumnInDetail } from '../../common/hooks/useCommonsInDetail';
import { PublicApi } from '@/services/api';
import { GetEnhanceProcessToBeDeliveryDetailsResponse } from '@/services/EnhanceApi';
import { usePageStatus } from '@/hooks/usePageStatus';
import { findLastIndexFlowState } from '@/utils';
import useColumnWithFilter from '../../common/hooks/useColumnWithFilter';
import { columns as orderColumns, productColumn } from '../../common/columns/detailNoticeInfoColumns';
import MellowCard from '@/components/MellowCard';
import DeliveryInfo from '../../components/DeliveryInfo';
import FlowRecords from '@/components/FlowRecords';
import { innerFlowColumns, outerWorkflowRecordsColumn } from '../../common/columns/recordFlowColumns'
import MachiningDetail, { DataPropsType } from '../../components/MachiningDetail';
import useModal from '@/pages/member/memberEvaluate/hooks/useModal';
import useViewProcessInfo from '../../common/hooks/useViewProcessInfo';
import { COMPLETE } from '@/constants/handling';
const Info = () => {
const { id } = usePageStatus();
const { visible, toggle, handleViewDetail, processDataProps } = useViewProcessInfo();
const anchorColumn = useGetAnchorHeader({blackList: []})
const { loading, initialValue, refresh }= useInitialValue<GetEnhanceProcessToBeDeliveryDetailsResponse, { id: string }>(PublicApi.getEnhanceProcessToBeConfirmReceiptDetails, { id: id.toString() })
const { basicInfoColumn, payInfoColumns, cacheOtherInfo, annexInfo} = useBasicInfoColumnInDetail({initialValue})
const defaultColumns = initialValue?.source === 1 ? orderColumns : productColumn;
const outerWorkflowRecordsList = initialValue?.outerWorkflowRecordsList || [];
const innerWorkflowRecordsList = initialValue?.innerWorkflowRecordsList || [];
const [submitLoading, setSubmitLoading] = useState<boolean>(false);
const confirmOrContinue = useMemo(() => {
const pnoReceiveDeliverDetailDOList = initialValue?.pnoReceiveDeliverDetailDOList || [];
const isAllCompleted = pnoReceiveDeliverDetailDOList.every((_row) => _row.receiptStatus === 2);
let flag = false;
if (isAllCompleted) {
// 未发货大于0
flag = pnoReceiveDeliverDetailDOList?.some(
(_item) => _item.pnoReceiveDeliverDetailProductBOList?.some((_v) => {
return _v.processNum - _v.deliverNum > 0
})
)
}
return {
complete: isAllCompleted,
hasSomeNoDelivery: flag
}
}, [initialValue])
console.log(confirmOrContinue);
const { columns } = useColumnWithFilter(defaultColumns, [
{
title: '操作',
render: (text, record) => {
return <a onClick={() => handleViewDetail(record)}>查看加工明细</a>
}
}
]);
const handleAllConfirmReceipt = async (flag: boolean) => {
const postData = {
produceNoticeOrderId: id,
status: flag
}
setSubmitLoading(true);
const { data, code } = await PublicApi.postEnhanceProcessToBeConfirmReceiptConfirmAllReceipt(postData);
setSubmitLoading(false);
if (code === 1000) {
refresh({id: id});
}
}
const handleOnConfirm = async (currentInnerStatus: "2_2_1", params: { produceNoticeOrderId: number, pnoReceiveDeliverDetailId: number }) => {
const SERVICE_MAP = {
'2_2_1': PublicApi.postEnhanceProcessToBeConfirmReceiptConfirmReceipt
}
if (!SERVICE_MAP[currentInnerStatus]) {
return;
}
const { code, data } = await SERVICE_MAP[currentInnerStatus](params);
if (code === 1000) {
refresh({id: id});
}
}
const renderExtra = () => {
// 如果通知单收发货明细表内部状态不全部为已确认回单,那么两个按钮隐藏
if (!confirmOrContinue.complete || initialValue?.outerStatus === 9 ) {
return;
}
return (
<Space>
{
confirmOrContinue.hasSomeNoDelivery && (
<Popconfirm title="您还有未发货的商品,是否确认全部发货都已完成?" onConfirm={() => handleAllConfirmReceipt(true)}>
<Button type="primary" >确认本单全部发货已收到回单</Button>
</Popconfirm>
) || <Button type="primary" onClick={() => handleAllConfirmReceipt(true)} >确认本单全部发货已收到回单</Button>
}
{
!confirmOrContinue.hasSomeNoDelivery && (
<Popconfirm title="您商品都已发货,是否确认还需要继续发货?" onConfirm={() => handleAllConfirmReceipt(false)}>
<Button type="primary" >继续发货</Button>
</Popconfirm>
) && <Button type="primary" onClick={() => handleAllConfirmReceipt(false)}>继续发货</Button>
}
</Space>
)
}
const cacheStyle = useMemo(() => ({ margin: `${theme["@margin-md"]} 0` }), [])
return (
<Spin spinning={loading}>
<AnchorPage
title={initialValue?.processName}
anchors={anchorColumn}
extra={
<Space>
{renderExtra()}
</Space>
}
>
<AuditProcess
outerVerifySteps={
initialValue && initialValue.outerTaskList ?
initialValue.outerTaskList.map(item => ({
step: item.step,
stepName: item.taskName,
roleName: item.roleName,
status: item.isExecute ? 'finish' : 'wait',
})) :
[]
}
outerVerifyCurrent={findLastIndexFlowState(initialValue?.outerTaskList)}
innerVerifySteps={
initialValue && initialValue.innerTaskList ?
initialValue.innerTaskList.map(item => ({
step: item.step,
stepName: item.taskName,
roleName: item.roleName,
status: item.isExecute ? 'finish' : 'wait',
})) :
[]
}
innerVerifyCurrent={findLastIndexFlowState(initialValue?.innerTaskList)}
id="progress"
/>
<div style={cacheStyle} id="basicInfo" >
<CustomizeColumn data={basicInfoColumn} title="基本信息" column={3} />
</div>
{/* 通知单明细 */}
<div style={cacheStyle} id="noticeDetails">
<MellowCard title="通知单明细">
<Table rowKey={"id"} dataSource={initialValue?.details} columns={columns}/>
</MellowCard>
</div>
<div style={cacheStyle} id="deliveryDetail">
<DeliveryInfo
source={initialValue?.source as 1 | 2}
statisticsDataSource={initialValue?.details}
infoDataSource={initialValue?.pnoReceiveDeliverDetailDOList}
onConfirm={handleOnConfirm}
mode="receipt"
panelKey="info"
/>
</div>
<div style={cacheStyle}>
<CustomizeColumn id="payInfo" data={payInfoColumns} title="交付信息" column={3} />
</div>
<div style={cacheStyle}>
<CustomizeColumn id="otherRequire" data={cacheOtherInfo} title="其他要求" column={3} />
</div>
<div style={cacheStyle}>
<CustomizeColumn id="annex" data={annexInfo} title="附件" column={3} />
</div>
<div id="record">
<FlowRecords
outerRowkey="id"
innerRowkey="id"
outerColumns={outerWorkflowRecordsColumn}
innerColumns={innerFlowColumns}
outerDataSource={outerWorkflowRecordsList}
innerDataSource={innerWorkflowRecordsList}
/>
</div>
</AnchorPage>
<MachiningDetail visible={visible} dataProps={processDataProps} onClose={() => toggle(false)}/>
{/* <DeliveryHandle
visible={examVisible}
title="手工发货"
onSubmit={handleSubmit}
onCancel={() => examToggle(false)}
addressOptions={addressList}
companyOptions={companyList}
/> */}
</Spin>
)
}
export default Info
......@@ -30,7 +30,7 @@ const Info = () => {
const { visible: examVisible, toggle: examToggle } = useModal();
const anchorColumn = useGetAnchorHeader({blackList: []})
const { loading, initialValue }= useInitialValue<GetEnhanceSupplierToBeAddDetailsResponse, { id: string }>(PublicApi.getEnhanceSupplierToBeAddDetails, { id: id.toString() })
const { loading, initialValue }= useInitialValue<GetEnhanceSupplierToBeAddDetailsResponse, { id: string }>(PublicApi.getEnhanceProcessToBeSubmitExamDetails, { id: id.toString() })
const { basicInfoColumn, payInfoColumns, cacheOtherInfo, annexInfo} = useBasicInfoColumnInDetail({initialValue})
const defaultColumns = initialValue?.source === 1 ? orderColumns : productColumn;
const outerWorkflowRecordsList = initialValue?.outerWorkflowRecordsList || [];
......
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