Commit 60eb2869 authored by 前端-钟卫鹏's avatar 前端-钟卫鹏

fix: 对接订单新接口简单流程订单查询和收发货

parent aee665ed
......@@ -2,7 +2,7 @@ import React, { useRef } from 'react'
import EyePreview from '@/components/EyePreview'
import { formatTimeString } from '@/utils'
import { PlayCircleOutlined, PoweroffOutlined } from '@ant-design/icons'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import CustomBadge from '@/pages/procurement/components/customBadge'
import { CALLFORBID_TYPE, PURCHASE_TYPE } from '@/constants/procurement'
......
......@@ -3,7 +3,7 @@ import { Row, Col } from 'antd'
import MellowCard from '@/components/MellowCard'
import { ReadyConfirmBidContext } from '@/pages/procurement/_public/bid/context';
import style from './index.less'
import CustomTag from '@/pages/procurement/components/CustomTag';
import CustomTag from '@/pages/procurement/components/customTag';
import { formatTimeString } from '@/utils';
/**
......
import React from 'react'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import { BidInOpeartTexts, BidOutOpeartTexts } from "@/constants/procurement"
import { formatTimeString } from "@/utils"
......
......@@ -4,7 +4,7 @@ import { history } from 'umi'
import EyePreview from '@/components/EyePreview'
import { PlayCircleOutlined, PoweroffOutlined } from '@ant-design/icons'
import { formatTimeString } from '@/utils'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import CustomBadge from '@/pages/procurement/components/customBadge'
import { CALLFORBID_TYPE, PURCHASE_TYPE } from '@/constants/procurement'
......
......@@ -4,7 +4,7 @@ import MellowCard from '@/components/MellowCard'
import { ReadyConfirmBidContext } from '@/pages/procurement/_public/bid/context';
import { QuestionCircleOutlined, UserOutlined } from '@ant-design/icons';
import style from './index.less'
import CustomTag from '@/pages/procurement/components/CustomTag';
import CustomTag from '@/pages/procurement/components/customTag';
import { formatTimeString } from '@/utils';
/**
......
import React, { useEffect } from 'react'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import { BidInOpeartTexts, BidOutOpeartTexts } from "@/constants/procurement"
import { formatTimeString } from "@/utils"
......
......@@ -4,7 +4,7 @@ import { history } from 'umi'
import EyePreview from '@/components/EyePreview'
import { PlayCircleOutlined, PoweroffOutlined } from '@ant-design/icons'
import { formatTimeString } from '@/utils'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import CustomBadge from '@/pages/procurement/components/customBadge'
import { CALLFORBID_TYPE, PURCHASE_TYPE } from '@/constants/procurement'
......
......@@ -4,7 +4,7 @@ import { history } from 'umi'
import EyePreview from '@/components/EyePreview'
import { formatTimeString } from '@/utils'
import { PlayCircleOutlined, PoweroffOutlined } from '@ant-design/icons'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import { CALLFORBID_TYPE, PURCHASE_TYPE } from '@/constants/procurement'
import CustomBadge from '@/pages/procurement/components/customBadge'
......
......@@ -4,7 +4,7 @@ import MellowCard from '@/components/MellowCard'
import { ReadyConfirmBidContext } from '@/pages/procurement/_public/bid/context';
import { QuestionCircleOutlined, UserOutlined } from '@ant-design/icons';
import style from './index.less'
import CustomTag from '@/pages/procurement/components/CustomTag';
import CustomTag from '@/pages/procurement/components/customTag';
import { formatTimeString } from '@/utils';
/**
......
import React, { useEffect } from 'react'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import { BidInOpeartTexts, BidOutOpeartTexts } from "@/constants/procurement"
import { formatTimeString } from "@/utils"
......
import React from 'react'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import { formatTimeString } from '@/utils'
import { FileFilled, QuestionCircleOutlined } from '@ant-design/icons'
import { Tooltip } from 'antd';
......
......@@ -5,7 +5,7 @@ import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import EyePreview from '@/components/EyePreview'
import { PlayCircleOutlined, PoweroffOutlined } from '@ant-design/icons'
import { formatTimeString } from '@/utils'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import { ExpertRectractStatus } from '@/constants/procurement'
const baseBidListColumns: any[] = [
......
......@@ -4,7 +4,7 @@ import MellowCard from '@/components/MellowCard'
import { ReadyConfirmBidContext } from '@/pages/procurement/_public/bid/context';
import { QuestionCircleOutlined, UserOutlined } from '@ant-design/icons';
import style from './index.less'
import CustomTag from '@/pages/procurement/components/CustomTag';
import CustomTag from '@/pages/procurement/components/customTag';
import { formatTimeString } from '@/utils';
/**
......
import React, { useEffect } from 'react'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import { BidInOpeartTexts, BidOutOpeartTexts } from "@/constants/procurement"
import { formatTimeString } from "@/utils"
......
......@@ -4,7 +4,7 @@ import { history } from 'umi'
import EyePreview from '@/components/EyePreview'
import { formatTimeString } from '@/utils'
import { PlayCircleOutlined, PoweroffOutlined } from '@ant-design/icons'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import { CALLFORBID_TYPE, PURCHASE_TYPE } from '@/constants/procurement'
import CustomBadge from '@/pages/procurement/components/customBadge'
......
import React, { useEffect } from 'react'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import { BidInOpeartTexts, BidInStateTexts, BidOutOpeartTexts, BidOutStateTexts } from "@/constants/procurement"
import { formatTimeString } from "@/utils"
import { ISchema } from '@formily/antd'
......
......@@ -2,7 +2,7 @@ import React, { useRef } from 'react'
import { Button } from 'antd'
import { history } from 'umi'
import EyePreview from '@/components/EyePreview'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import CustomBadge from '@/pages/procurement/components/customBadge'
import { CALLFORBID_TYPE, PURCHASE_TYPE } from '@/constants/procurement'
......
import React from 'react'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import { formatTimeString } from '@/utils'
import { FileFilled } from '@ant-design/icons'
import { ISchema } from '@formily/antd'
......
......@@ -5,7 +5,7 @@ import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import EyePreview from '@/components/EyePreview'
import { PlayCircleOutlined, PoweroffOutlined } from '@ant-design/icons'
import { formatTimeString } from '@/utils'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import CustomBadge from '@/pages/procurement/components/customBadge'
import { CALLFORBID_TYPE, PURCHASE_TYPE } from '@/constants/procurement'
......
import React, { useRef } from 'react'
import EyePreview from '@/components/EyePreview'
import { formatTimeString } from '@/utils'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
// 投标查询
export const useSelfTable = () => {
......
......@@ -4,7 +4,7 @@ import MellowCard from '@/components/MellowCard'
import { BidDetailContext } from '@/pages/procurement/_public/bid/context';
import { QuestionCircleOutlined, UserOutlined } from '@ant-design/icons';
import style from './index.less'
import CustomTag from '../CustomTag';
import CustomTag from '../customTag';
/**
* 会员参标信息
......
......@@ -3,7 +3,7 @@ import { Table, Radio } from 'antd'
import { formatTimeString } from '@/utils'
import { BidDetailContext } from '@/pages/procurement/_public/bid/context';
import MellowCard from '@/components/MellowCard'
import CustomTag from '../CustomTag';
import CustomTag from '../customTag';
import { TransferEnum } from '../transferProcess';
import style from './index.less'
import { BidInOpeartTexts, BidOutOpeartTexts } from '@/constants/procurement';
......
......@@ -3,7 +3,7 @@ import {history} from 'umi'
import { formatTimeString } from '@/utils'
import EyePreview from '@/components/EyePreview'
import { PlayCircleOutlined, PoweroffOutlined } from '@ant-design/icons'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import CustomBadge from '@/pages/procurement/components/customBadge'
import { CALLFORBID_TYPE, PURCHASE_TYPE } from '@/constants/procurement'
import { PublicApi } from '@/services/api'
......
......@@ -2,7 +2,7 @@ import React, { useRef } from 'react'
import EyePreview from '@/components/EyePreview'
import { formatTimeString } from '@/utils'
import { PlayCircleOutlined, PoweroffOutlined } from '@ant-design/icons'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import CustomBadge from '@/pages/procurement/components/customBadge'
// 招标查询
......
......@@ -4,7 +4,7 @@ import { history } from 'umi'
import EyePreview from '@/components/EyePreview'
import { formatTimeString } from '@/utils'
import { PlayCircleOutlined, PoweroffOutlined } from '@ant-design/icons'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import CustomBadge from '@/pages/procurement/components/customBadge'
import { TenderOutWorkState } from '@/constants/procurement'
......
......@@ -4,7 +4,7 @@ import { history } from 'umi'
import EyePreview from '@/components/EyePreview'
import { formatTimeString } from '@/utils'
import { PlayCircleOutlined, PoweroffOutlined } from '@ant-design/icons'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import CustomBadge from '@/pages/procurement/components/customBadge'
import { TenderOutWorkState } from '@/constants/procurement'
......
......@@ -4,7 +4,7 @@ import { Button } from 'antd'
import EyePreview from '@/components/EyePreview'
import { formatTimeString } from '@/utils'
import { PlayCircleOutlined, PoweroffOutlined } from '@ant-design/icons'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomTag from '@/pages/procurement/components/customTag'
import CustomBadge from '@/pages/procurement/components/customBadge'
import { TenderInsideWorkState, TenderOutWorkState } from '@/constants/procurement'
......
......@@ -191,7 +191,7 @@ const Repositories: React.FC<{}> = () => {
},
{
pattern: /^\d+(\.\d{1,3})?$/,
message: '税率仅限三位小数',
message: '仅限三位小数',
}
],
},
......
......@@ -3,16 +3,14 @@ import { useCallback, useState, useEffect } from 'react'
import { usePageStatus } from '@/hooks/usePageStatus'
import { PublicApi } from '@/services/api'
import { Link } from 'umi'
import { GlobalConfig } from '@/global/config'
import { orderTypeLabel } from '../constant'
import { formatTimeString } from '@/utils'
import StatusColors from '../../../components/StatusColors'
import { message } from 'antd'
import { history } from 'umi'
interface OrderDetailHookProps {
// 采购、销售
type: 'purchaseOrder' | 'saleOrder'
// 采购、销售、待收货、待确认发货
type: 'purchaseOrder' | 'saleOrder' | 'readyReceiveOrder' | 'readyConfirmDelevedOrder'
}
// 订单详情, 支持两种订单模式
......@@ -52,15 +50,34 @@ export const useOrderDetail = (options: OrderDetailHookProps) => {
reloadFormData()
}, [])
// 根据type类型 调用不同的详情接口
const getDetailsApi = (type) => {
let api = null;
switch (type) {
case 'purchaseOrder': api = PublicApi.getOrderBuyerDetail;
break;
case 'saleOrder': api = PublicApi.getOrderVendorDetail;
break;
case 'readyReceiveOrder': api = PublicApi.getOrderBuyerValidateReceiveDetail;
break;
case 'readyConfirmDelevedOrder': api = PublicApi.getOrderVendorValidateDeliveryDetail;
break;
default:
api = PublicApi.getOrderBuyerDetail;
}
return api;
}
const reloadFormData = useCallback(() => {
if (id || orderNo) {
const fn = type === 'purchaseOrder' ? PublicApi.getOrderBuyerDetail : PublicApi.getOrderVendorDetail
// const fn = type === 'purchaseOrder' ? PublicApi.getOrderBuyerDetail : PublicApi.getOrderVendorDetail
const fn = getDetailsApi(type)
// @ts-ignore
fn( id ? { orderId: id } : { orderNo }, { ctlType: "none" }).then(res => {
const { code, data, message: msg } = res
if (code === 1000) {
setFormData(data)
reloadPayList(data.vendorMemberId, data.vendorRoleId)
// reloadPayList(data.vendorMemberId, data.vendorRoleId)
} else {
message.error(msg)
}
......@@ -77,7 +94,6 @@ export const useOrderDetail = (options: OrderDetailHookProps) => {
})
}
// 需共享的状态
const formContext = {
data: formData,
......
......@@ -25,7 +25,7 @@ const OrderDeleveRecord:React.FC<OrderDeleveRecordProps> = (props) => {
const [disabled, setDisabled] = useState<boolean>(false)
const { data, reloadFormData } = useContext(OrderDetailContext)
const { orderReceivingStatisticsResponses, orderDeliveryDetailsResponses, orderModel } = data
const { deliveries, deliveryDetails, orderModel } = data
const creditsCommodity = (orderModel === 24 || orderModel === 25) // 积分或渠道积分下单模式
const outOrderCols: any[] = [
......@@ -37,9 +37,9 @@ const OrderDeleveRecord:React.FC<OrderDeleveRecordProps> = (props) => {
},
{
title: '商品名称',
dataIndex: 'productName',
dataIndex: 'name',
align: 'center',
key: 'productName',
key: 'name',
},
{
title: '品类',
......@@ -61,28 +61,28 @@ const OrderDeleveRecord:React.FC<OrderDeleveRecordProps> = (props) => {
},
{
title: creditsCommodity ? '所需积分' : '单价',
dataIndex: 'unitPrice',
dataIndex: 'price',
align: 'center',
key: 'unitPrice',
key: 'price',
},
{
title: creditsCommodity ? '兑换数量' : '采购数量',
dataIndex: 'purchaseCount',
dataIndex: 'quantity',
align: 'center',
key: 'purchaseCount',
key: 'quantity',
},
{
title: '含税',
dataIndex: 'no',
dataIndex: 'tax',
align: 'center',
key: 'no',
render: () => '是'
key: 'tax',
render: (text) => text ? '是' : '否'
},
{
title: creditsCommodity ? '所需积分小计' : '金额',
dataIndex: 'price',
dataIndex: 'amount',
align: 'center',
key: 'price',
key: 'amount',
},
{
title: '已发货',
......@@ -92,21 +92,21 @@ const OrderDeleveRecord:React.FC<OrderDeleveRecordProps> = (props) => {
},
{
title: '未发货',
dataIndex: 'notDelivered',
dataIndex: 'leftCount',
align: 'center',
key: 'notDelivered',
key: 'leftCount',
},
{
title: '已收货',
dataIndex: 'goodsReceived',
dataIndex: 'received',
align: 'center',
key: 'goodsReceived',
key: 'received',
},
{
title: '差异数量',
dataIndex: 'differenceCount',
dataIndex: 'differCount',
align: 'center',
key: 'differenceCount',
key: 'differCount',
},
]
......@@ -120,9 +120,9 @@ const OrderDeleveRecord:React.FC<OrderDeleveRecordProps> = (props) => {
},
{
title: '商品名称',
dataIndex: 'productName',
dataIndex: 'name',
align: 'center',
key: 'productName',
key: 'name',
},
{
title: '品类',
......@@ -144,36 +144,36 @@ const OrderDeleveRecord:React.FC<OrderDeleveRecordProps> = (props) => {
},
{
title: creditsCommodity ? '兑换数量' : '采购数量',
dataIndex: 'purchaseCount',
dataIndex: 'quantity',
align: 'center',
key: 'purchaseCount',
key: 'quantity',
},
{
title: '发货数量',
dataIndex: 'deliverGoodsCount',
dataIndex: 'delivered',
align: 'center',
key: 'deliverGoodsCount',
key: 'delivered',
},
{
title: '入库数量',
dataIndex: 'storageCount',
title: '已收货数量',
dataIndex: 'received',
align: 'center',
key: 'storageCount',
key: 'received',
},
{
title: '差异数量',
dataIndex: 'differenceCount',
dataIndex: 'differCount',
align: 'center',
key: 'differenceCount',
key: 'differCount',
},
]
const sideOrderCols: any[] = [
{
title: '发货批次',
dataIndex: 'deliveryBatch',
dataIndex: 'batchNo',
align: 'center',
key: 'deliveryBatch'
key: 'batchNo'
},
{
title: '发货单号',
......@@ -183,44 +183,40 @@ const OrderDeleveRecord:React.FC<OrderDeleveRecordProps> = (props) => {
},
{
title: '发货时间',
dataIndex: 'deliveryTime',
dataIndex: 'createTime',
align: 'center',
key: 'deliveryTime',
render: text => formatTimeString(text)
key: 'createTime',
},
{
title: '物流单号',
dataIndex: 'logisticsNo',
align: 'center',
key: 'logisticsNo',
// render: text => <a target="blank" href={`/memberCenter/logisticsAbility/logisticsBillSubmit/logisticsBillQuery/preview?code=${text}`}>{text}</a>
render: t => <a href={`https://www.kuaidi100.com/chaxun?nu=${t}`} target="blank">{t}</a>
},
{
title: '物流公司',
dataIndex: 'logisticsCompanyName',
dataIndex: 'company',
align: 'center',
key: 'logisticsCompanyName'
key: 'company'
},
{
title: '入库单号',
dataIndex: 'storageNo',
title: '收货单号',
dataIndex: 'receiptNo',
align: 'center',
key: 'storageNo',
render: text => <a target="blank" href={`/memberCenter/tranactionAbility/stockSellStorage/bills/detail?invoicesNo=${text}`}>{text}</a>
key: 'receiptNo',
},
{
title: '入库时间',
dataIndex: 'storageTime',
title: '收货时间',
dataIndex: 'receiptTime',
align: 'center',
key: 'storageTime',
render: text => formatTimeString(text)
key: 'receiptTime',
},
{
title: '内部状态',
dataIndex: 'interiorState',
dataIndex: 'innerStatusName',
align: 'center',
key: 'interiorState',
render: text => <StatusColors type='deliveInside' status={text}/>
key: 'innerStatusName',
},
{
title: '操作',
......@@ -228,9 +224,9 @@ const OrderDeleveRecord:React.FC<OrderDeleveRecordProps> = (props) => {
align: 'center',
key: 'ctl',
render: (text, record) => <>
{/* todo 需根据内部状态判断显示哪个按钮 */}
{ !isPreview && isReturn && !dataRef.current.includes(record.id) && record.interiorState === DeliverySideState.CONFIRM_RECEIPT_ORDER && <Button type='link' disabled={disabled} onClick={() => handleReturn(record)}>确认回单</Button> }
{ !isPreview && isReceived && !dataRef.current.includes(record.id) && record.interiorState === DeliverySideState.WAREHOUSE_ORDER && <Button type='link' disabled={disabled} onClick={() => handleConfirm(record)}>确认收货</Button> }
{ !isPreview && isReturn && !dataRef.current.includes(record.id) && <Button type='link' disabled={disabled} onClick={() => handleReturn(record)}>确认回单</Button> }
{/* { !isPreview && isReceived && !dataRef.current.includes(record.id) && <Button type='link' disabled={disabled} onClick={() => handleConfirm(record)}>确认收货</Button> } */}
{ !isPreview && isReceived && record.showReceive && <Button type='link' disabled={disabled} onClick={() => handleConfirm(record)}>确认收货</Button> }
</>
},
]
......@@ -238,11 +234,11 @@ const OrderDeleveRecord:React.FC<OrderDeleveRecordProps> = (props) => {
// 确认收货
const handleConfirm = async (record) => {
const params = {
orderId: record.orderId,
id: record.id
orderId: data.orderId,
batchNo: record.batchNo
}
setDisabled(true)
const { code } = await PublicApi.postOrderConfirmReceipt(params)
const { code } = await PublicApi.postOrderBuyerValidateReceiveConfirm(params)
if (code === 1000) {
dataRef.current.push(record.id)
reloadFormData && reloadFormData()
......@@ -272,26 +268,26 @@ const OrderDeleveRecord:React.FC<OrderDeleveRecordProps> = (props) => {
return (
<>
{
(orderReceivingStatisticsResponses?.length > 0 || orderDeliveryDetailsResponses?.length > 0) &&
(deliveries?.length > 0 || deliveryDetails?.length > 0) &&
<MellowCard style={{marginTop: 24}} bordered={false} id='deleveBox'>
<Tabs defaultActiveKey="2">
{
orderReceivingStatisticsResponses?.length > 0 && <Tabs.TabPane tab='订单收发货统计' key="1">
deliveries?.length > 0 && <Tabs.TabPane tab='订单收发货统计' key="1">
<Table
columns={outOrderCols}
dataSource={orderReceivingStatisticsResponses}
dataSource={deliveries}
pagination={false}
rowKey="productId"
/>
</Tabs.TabPane>
}
{
orderDeliveryDetailsResponses?.length > 0 && <Tabs.TabPane tab='订单收发货明细' key="2">
deliveryDetails?.length > 0 && <Tabs.TabPane tab='订单收发货明细' key="2">
<NestTable
NestColumns={[sideOrderCols, sideChildrenCols]}
rowKey='id'
childrenDataKey='orderDeliveryProducts'
dataSource={orderDeliveryDetailsResponses}
childrenDataKey='products'
dataSource={deliveryDetails}
/>
</Tabs.TabPane>
}
......
.customeFormItem {
margin: 0;
position: 'relative';
.ant-form-item-control {
.ant-form-item-explain-error {
position: absolute;
left: 0;
bottom: 0;
}
}
}
import React, { useRef, useContext } from 'react'
import { Form, Input } from 'antd';
import './index.less'
export interface ProductTableCellProps {
title: React.ReactNode;
editable: boolean;
children: React.ReactNode;
dataIndex: string;
record: any;
handleSave: (record: any) => Promise<any>;
forceEdit: boolean,
formItem: string,
formItemProps: any,
}
const EditableContext = React.createContext<any>({});
export const ProductEditableRow: React.FC<any> = ({...props }) => {
const [form] = Form.useForm();
const ctx = {
form
}
return (
<Form form={form} component={false}>
<EditableContext.Provider value={ctx}>
<tr {...props} />
</EditableContext.Provider>
</Form>
);
};
export const ProductTableCell:React.FC<ProductTableCellProps> = ({
title,
editable,
children,
dataIndex,
record,
handleSave,
forceEdit,
formItem,
formItemProps={},
...restProps
}) => {
const formItemRef = useRef<any>();
const { form } = useContext(EditableContext);
const save = async e => {
try {
const values = await form.validateFields();
handleSave({ ...record, ...values });
} catch (errInfo) {
console.log('Save failed:', errInfo);
}
};
const chooseFormItem = (type) => {
switch(type) {
case 'input': {
return <Input
style={{width: 140}}
type='number'
ref={formItemRef}
onChange={save}
{...formItemProps}
id={dataIndex + record.id}
className="delivery_amount_input"
/>
}
}
}
let childNode = children;
if (editable) {
childNode =
<Form.Item
className="customFormItem"
name={dataIndex}
initialValue={record[dataIndex] || ''}
rules={[
{
required: true,
message: `${title}必须填写`,
},
{
pattern: /^\d+(\.\d{1,3})?$/,
message: `数量仅限三位小数`,
},
{
min: 0,
message: `数量大于等于0`,
},
]}
>
{chooseFormItem(formItem)}
</Form.Item>
}
return <td {...restProps}>{childNode}</td>;
}
ProductTableCell.defaultProps = {}
export default ProductTableCell
import React, { useContext, useRef, useEffect } from 'react'
import { Modal, Button } from 'antd'
import NiceForm from '@/components/NiceForm'
import { createFormActions, ISchema } from '@formily/antd'
import ModalForm from '@/components/ModalForm'
import { history } from 'umi'
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect'
import { PublicApi } from '@/services/api'
import { useHttpRequest } from '@/hooks/useHttpRequest'
import { OrderDetailContext } from '../../_public/order/context'
import moment from 'moment'
export interface OrderHandDeleveModalProps {
currentRef: any
}
const schemaActions = createFormActions()
const schema: ISchema = {
type: 'object',
properties: {
NO_SUBMIT: {
type: 'object',
"x-component": "mega-layout",
"x-component-props": {
labelAlign: 'left',
labelCol: 6
},
properties: {
addresId: {
type: 'string',
enum: [],
title: '发货地址',
"x-rules": [
{
message: '请选择发货地址',
required: true
}
]
},
deliverTime: {
type: 'string',
"x-component": 'date',
title: '发货日期',
"x-rules": [
{
message: '请选择发货日期',
required: true
}
],
"x-mega-props": {
full: true
}
},
deliverNo: {
type: 'string',
title: '发货单号',
"x-rules": [
{
required: true,
message: '请输入发货单号'
},
{
limitByte: true,
maxByte: 20
},
]
},
logisticsCompanyId: {
type: 'string',
enum: [],
title: '物流公司',
"x-rules": [
{
message: '请选择物流公司',
required: true
}
]
},
name: {
type: 'string',
display: false
},
logisticsCompany: {
type: 'string',
display: false
}
}
}
}
}
const OrderHandDeleveModal:React.FC<OrderHandDeleveModalProps> = (props) => {
const { data } = useContext(OrderDetailContext)
const dataRef = useRef<any>({})
const handleSubmit = async (value) => {
const params = {
...value,
orderId: data.id,
deliverTime: moment(value.deliverTime).valueOf()
}
const { code } = await PublicApi.postOrderManualDelivery(params)
if (code === 1000) {
history.goBack()
}
}
const handleConfirm = () => {
schemaActions.submit()
}
return (
<ModalForm
modalTitle='手工发货'
previewPlaceholder=' '
currentRef={props.currentRef}
schema={schema}
actions={schemaActions}
onSubmit={handleSubmit}
confirm={handleConfirm}
initialValues={{
deliverTime: moment().format('YYYY-MM-DD')
}}
effects={($, actions) => {
useAsyncSelect('addresId', async () => (await PublicApi.getLogisticsSelectListShipperAddress()).data, ['fullAddress', 'id'])
useAsyncSelect('logisticsCompanyId', async () => (await PublicApi.getLogisticsSelectListCompany({cooperateType: '2'})).data, ['name', 'id'])
// 获取联动的select后续事件, 为了设置对应的name值
$('requestAsyncSelect').subscribe(({ name, payload }) => {
if (name === 'addresId') {
dataRef.current.addresId = payload
}
if (name === 'logisticsCompanyId') {
dataRef.current.logisticsCompanyId = payload
}
})
$('onFieldInputChange', 'addresId').subscribe(({value}) => {
actions.setFieldValue('name', dataRef.current.addresId.find(v => v.id === value)?.fullAddress || '')
})
$('onFieldInputChange', 'logisticsCompanyId').subscribe(({value}) => {
actions.setFieldValue('logisticsCompany', dataRef.current.logisticsCompanyId.find(v => v.id === value)?.name || '')
})
}}
/>
)
}
OrderHandDeleveModal.defaultProps = {}
export default OrderHandDeleveModal
\ No newline at end of file
import React, { useContext, useRef, useEffect, useState } from 'react'
import { Button, Drawer } from 'antd'
import NiceForm from '@/components/NiceForm'
import { createFormActions, ISchema } from '@formily/antd'
import { history } from 'umi'
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect'
import { PublicApi } from '@/services/api'
import { OrderDetailContext } from '../../_public/order/context'
import moment from 'moment'
import { useProductTable } from './model/useProductTable'
export interface OrderHandDeleveModalProps {
currentRef: any
}
const schemaActions = createFormActions()
const schema: ISchema = {
type: 'object',
properties: {
NO_SUBMIT: {
type: 'object',
"x-component": "mega-layout",
"x-component-props": {
labelAlign: 'left',
labelCol: 6,
},
properties: {
addresId: {
type: 'string',
enum: [],
title: '发货地址',
"x-rules": [
{
message: '请选择发货地址',
required: true
}
]
},
deliveryTime: {
type: 'string',
"x-component": 'date',
title: '发货日期',
"x-rules": [
{
message: '请选择发货日期',
required: true
}
],
"x-mega-props": {
full: true
}
},
logisticsNo: {
type: 'string',
title: '物流单号',
"x-rules": [
{
required: true,
message: '请输入物流单号'
},
{
limitByte: true,
maxByte: 20
},
]
},
logisticsCompanyId: {
type: 'string',
enum: [],
title: '物流公司',
"x-rules": [
{
message: '请选择物流公司',
required: true
}
]
},
products: {
type: 'array',
"x-component": 'MultTable',
"x-component-props": {
rowKey: 'productId',
columns: "{{productColumns}}",
components: "{{productComponents}}",
// expandable: "{{productChildren}}",
// pagination: { size: 'small' }
},
},
address: {
type: 'string',
display: false
},
company: {
type: 'string',
display: false
}
}
}
}
}
const OrderHandDeleveModal:React.FC<OrderHandDeleveModalProps> = (props) => {
const { data } = useContext(OrderDetailContext)
const dataRef = useRef<any>({})
const { currentRef } = props
const [visible, setVisible] = useState<boolean>(false)
const [loading, setLoading] = useState<boolean>(false)
const { productColumns, productComponents, ...sectionProps } = useProductTable(schemaActions)
useEffect(() => {
if (currentRef) {
currentRef.current = {
visible,
setVisible
}
}
}, [])
useEffect(() => {
if(visible) {
const { deliveries } = data
schemaActions.setFieldValue('products', deliveries.map(item => ({ ...item, deliveryCount: item['leftCount'] })))
}
}, [visible])
const handleSubmit = async (value) => {
setLoading(true)
const params = {
...value,
orderId: data.orderId,
deliveryTime: moment(value.deliveryTime).format('YYYY-MM-DD HH:mm:ss')
}
const { code } = await PublicApi.postOrderVendorValidateDeliveryConfirm(params)
if (code === 1000) {
history.goBack()
} else {
setLoading(false)
}
}
const handleConfirm = () => {
schemaActions.submit()
}
const onClose = () => {
setVisible(false)
schemaActions.reset()
}
const footer = (<div
style={{
textAlign: 'right',
}}
>
<Button onClick={handleConfirm} type="primary" loading={loading} style={{ marginRight: 8 }}>
确定
</Button>
<Button onClick={()=>setVisible(false)}>
取消
</Button>
</div>)
return (
<Drawer
title='手工发货'
width={1400}
bodyStyle={{ paddingLeft: 0, paddingTop: 0 }}
onClose={onClose}
visible={visible}
footer={footer}
>
<div style={{margin: '8px 16px'}}>
<NiceForm
actions={schemaActions}
schema={schema}
onSubmit={handleSubmit}
initialValues={{
deliveryTime: moment().format('YYYY-MM-DD')
}}
effects={($, actions) => {
useAsyncSelect('addresId', async () => (await PublicApi.getLogisticsSelectListShipperAddress()).data, ['fullAddress', 'id'])
useAsyncSelect('logisticsCompanyId', async () => (await PublicApi.getLogisticsSelectListCompany({cooperateType: '2'})).data, ['name', 'id'])
// 获取联动的select后续事件, 为了设置对应的name值
$('requestAsyncSelect').subscribe(({ name, payload }) => {
if (name === 'addresId') {
dataRef.current.addresId = payload
}
if (name === 'logisticsCompanyId') {
dataRef.current.logisticsCompanyId = payload
}
})
$('onFieldInputChange', 'addresId').subscribe(({value}) => {
actions.setFieldValue('address', dataRef.current.addresId.find(v => v.id === value)?.fullAddress || '')
})
$('onFieldInputChange', 'logisticsCompanyId').subscribe(({value}) => {
actions.setFieldValue('company', dataRef.current.logisticsCompanyId.find(v => v.id === value)?.name || '')
})
}}
expressionScope={{
productColumns,
productComponents
}}
/>
</div>
</Drawer>
)
}
OrderHandDeleveModal.defaultProps = {}
export default OrderHandDeleveModal
import React, { useState } from 'react'
import { ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd';
import ProductTableCell, { ProductEditableRow } from '../components/productTableCell';
// @todo 补充积分类型文案
const productColumns: any = [
{
title: '商品ID',
dataIndex: 'productId',
align: 'center',
key: 'productId'
},
{
title: '商品名称',
dataIndex: 'name',
align: 'center',
key: 'name',
},
{
title: '品类',
dataIndex: 'category',
align: 'center',
key: 'category'
},
{
title: '品牌',
dataIndex: 'brand',
align: 'center',
key: 'brand',
},
{
title: '单位',
dataIndex: 'unit',
align: 'center',
key: 'unit'
},
{
title: '单价',
dataIndex: 'price',
align: 'center',
key: 'price',
},
// {
// title: '采购数量',
// dataIndex: 'quantity',
// align: 'center',
// key: 'quantity',
// },
// {
// title: '含税',
// dataIndex: 'tax',
// align: 'center',
// key: 'tax',
// render: (text) => text ? '是' : '否'
// },
// {
// title: '金额',
// dataIndex: 'amount',
// align: 'center',
// key: 'amount',
// },
{
title: '已发货',
dataIndex: 'delivered',
align: 'center',
key: 'delivered',
},
{
title: '未发货',
dataIndex: 'leftCount',
align: 'center',
key: 'leftCount',
},
{
title: '已收货',
dataIndex: 'received',
align: 'center',
key: 'received',
},
{
title: '差异数量',
dataIndex: 'differCount',
align: 'center',
key: 'differCount',
},
{
title: '发货数量',
dataIndex: 'deliveryCount',
align: 'left',
key: 'deliveryCount',
formItem: 'input',
editable: true,
width: 140,
},
]
/**
* @param ctx schemaAction
*/
export const useProductTable = (ctx: ISchemaFormActions | ISchemaFormAsyncActions) => {
const productComponents = {
body: {
row: ProductEditableRow,
cell: ProductTableCell
}
}
const handleSave = row => {
return new Promise((resolve, reject) => {
const newData = [...ctx.getFieldValue('products')];
const index = newData.findIndex(item => row.productId === item.productId);
const item = newData[index];
newData.splice(index, 1, {
...item,
...row,
});
ctx.setFieldValue('products', newData)
resolve({item, newData})
})
};
const productMergeColumns = productColumns.map(col => {
if (!col.editable) {
return col;
}
return {
...col,
onCell: record => ({
record,
editable: ctx.getFormState().editable === false ? false : col.editable,
dataIndex: col.dataIndex,
title: col.title,
formItem: col.formItem,
formItemProps: col.formItemProps,
handleSave
}),
};
})
return {
productColumns: productMergeColumns,
productComponents,
}
}
......@@ -29,7 +29,7 @@ const OrderSaleRecord:React.FC<OrderSaleRecordProps> = (props) => {
// 用于储存已经修改过的订单id
const dataRef = useRef<any>([])
const { data, reloadFormData } = useContext(OrderDetailContext)
const { orderReceivingStatisticsResponses, orderDeliveryDetailsResponses, orderModel, externalState } = data
const { deliveries, deliveryDetails, orderModel, externalState } = data
const creditsCommodity = (orderModel === 24 || orderModel === 25) // 积分或渠道积分下单模式
const outOrderCols: any[] = [
......@@ -41,9 +41,9 @@ const OrderSaleRecord:React.FC<OrderSaleRecordProps> = (props) => {
},
{
title: '商品名称',
dataIndex: 'productName',
dataIndex: 'name',
align: 'center',
key: 'productName',
key: 'name',
},
{
title: '品类',
......@@ -65,28 +65,28 @@ const OrderSaleRecord:React.FC<OrderSaleRecordProps> = (props) => {
},
{
title: creditsCommodity ? '所需积分' : '单价',
dataIndex: 'unitPrice',
dataIndex: 'price',
align: 'center',
key: 'unitPrice',
key: 'price',
},
{
title: creditsCommodity ? '兑换数量' : '采购数量',
dataIndex: 'purchaseCount',
dataIndex: 'quantity',
align: 'center',
key: 'purchaseCount',
key: 'quantity',
},
{
title: '含税',
dataIndex: 'no',
dataIndex: 'tax',
align: 'center',
key: 'no',
render: () => '是'
key: 'tax',
render: (text) => text ? '是' : '否'
},
{
title: creditsCommodity ? '所需积分小计' : '金额',
dataIndex: 'price',
dataIndex: 'amount',
align: 'center',
key: 'price',
key: 'amount',
},
{
title: '已发货',
......@@ -96,21 +96,21 @@ const OrderSaleRecord:React.FC<OrderSaleRecordProps> = (props) => {
},
{
title: '未发货',
dataIndex: 'notDelivered',
dataIndex: 'leftCount',
align: 'center',
key: 'notDelivered',
key: 'leftCount',
},
{
title: '已收货',
dataIndex: 'goodsReceived',
dataIndex: 'received',
align: 'center',
key: 'goodsReceived',
key: 'received',
},
{
title: '差异数量',
dataIndex: 'differenceCount',
dataIndex: 'differCount',
align: 'center',
key: 'differenceCount',
key: 'differCount',
},
]
......@@ -334,26 +334,26 @@ const OrderSaleRecord:React.FC<OrderSaleRecordProps> = (props) => {
return (
<>
{
(orderReceivingStatisticsResponses?.length > 0 || orderDeliveryDetailsResponses?.length > 0) &&
(deliveries?.length > 0 || deliveryDetails?.length > 0) &&
<MellowCard style={{marginTop: 24}} bordered={false} id='deleveBox'>
<Tabs defaultActiveKey="2" animated={false}>
{
orderReceivingStatisticsResponses?.length > 0 && <Tabs.TabPane tab='订单收发货统计' key="1">
deliveries?.length > 0 && <Tabs.TabPane tab='订单收发货统计' key="1">
<Table
columns={outOrderCols}
dataSource={orderReceivingStatisticsResponses}
dataSource={deliveries}
pagination={false}
rowKey="id"
/>
</Tabs.TabPane>
}
{
orderDeliveryDetailsResponses?.length > 0 && <Tabs.TabPane tab='订单收发货明细' key="2">
deliveryDetails?.length > 0 && <Tabs.TabPane tab='订单收发货明细' key="2">
<NestTable
NestColumns={[sideOrderCols, sideChildrenCols]}
rowKey='id'
childrenDataKey='orderDeliveryProducts'
dataSource={orderDeliveryDetailsResponses}
childrenDataKey='products'
dataSource={deliveryDetails}
/>
{
externalState === 11 && !isPreview && isReturn &&
......
......@@ -92,13 +92,12 @@ const modalPriceActions = createFormActions()
// 总计金额联动框
export const MoneyTotalBox = ({ dataSource, isEditData }) => {
const { reloadFormData } = useContext(OrderDetailContext)
const { orderProductRequests = [], receiverAddressId, freight, amount, orderModel, sumPrice, type } = dataSource || {}
const { product, orderProductRequests = [], receiverAddressId, amount, orderModel, sumPrice, type } = dataSource || {}
const creditsCommodity = (orderModel === 24 || orderModel === 25) // 积分或渠道积分下单模式
const { productAmount, freight, totalAmount } = product
const modelRef = useRef<any>({})
const [freePrice, setFreePrice] = useState<number>(freight || 0)
const [sum, setSum] = useState<number>(0)
// const sum = orderProductRequests.reduce((prev, next) => prev + Number((next.money || 0)), 0)
const handleSetting = () => {
modelRef.current.setVisible(true)
}
......@@ -152,7 +151,7 @@ export const MoneyTotalBox = ({ dataSource, isEditData }) => {
return <RowStyle>
<Col span={2}>
<div>{creditsCommodity ? '合计所需积分' : '合计金额'}</div>
<div>{sum}</div>
<div>{productAmount}</div>
</Col>
<Col span={2}>
<div>运费 { isEditData && !creditsCommodity && !notShowSet && <SettingOutlined style={{marginLeft: 8}} onClick={handleSetting}/>}</div>
......@@ -160,7 +159,7 @@ export const MoneyTotalBox = ({ dataSource, isEditData }) => {
</Col>
<Col span={2}>
<div>{creditsCommodity ? '总计所需积分' : '总计金额'}</div>
<div>{amountMoney}</div>
<div>{totalAmount}</div>
</Col>
<ModalForm
modalTitle='设置运费'
......@@ -301,11 +300,10 @@ const EditableCell: React.FC<EditableCellProps> = ({
const SaleOrderProductTable:React.FC<OrderProductTableProps> = (props) => {
const { ctl, data, reloadFormData } = useContext(OrderDetailContext)
const { page_type } = usePageStatus()
const { orderProductRequests = [], orderModel } = data || {}
const { product, orderModel } = data || {}
const creditsCommodity = (orderModel === 24 || orderModel === 25) // 积分或渠道积分下单模式
// 合同下单模式
const contractOrder = (orderModel === OrderModalType.PURCHASE_ENQUIRY_CONTRACT_ORDER || orderModel === OrderModalType.PURCHASE_TENDER_CONTRACT_ORDER || orderModel === OrderModalType.PURCHASE_BIDDING_CONTRACT_ORDER)
console.log(contractOrder, 'fff')
const [warehouseVisible, setWarehouseVisible] = useState(false)
const [checkProductId, setCheckProductId] = useState(0) // 选中的商品id
const warehouseRef = useRef<any>({})
......@@ -319,41 +317,41 @@ const SaleOrderProductTable:React.FC<OrderProductTableProps> = (props) => {
}
}
const asyncGetMemberPrice = async (asyncData: any[]) => {
return await Promise.all(asyncData.filter(v => v.memberPrice === undefined).map(async v => {
const {code, data} = await PublicApi.getMemberManageUpperCreditParamGet({
parentMemberId: v.memberId,
parentMemberRoleId: v.memberRoleId
}, {ttl: 60 * 1000, useCache: true})
return code === 1000 ? { value: (data.parameter * 100) + '%', id: v.id } : { value: '', id: 0 }
}
))
}
useEffect(() => {
// 过滤 会员折扣不存在的列表
const hasPriceList = orderProductRequests.filter(v => !v.memberPrice)
if (hasPriceList.length > 0) {
asyncGetMemberPrice(hasPriceList).then((asyncData) => {
if (asyncData.length > 0) {
const newData = orderProductRequests.map((v, i) => {
if (!v.memberPrice) {
v.memberPrice = asyncData.find(j => j.id === v.id)?.value || 0
}
return v
})
ctl.setData({
...data,
orderProductRequests: newData
})
}
})
}
}, [orderProductRequests])
// const asyncGetMemberPrice = async (asyncData: any[]) => {
// return await Promise.all(asyncData.filter(v => v.memberPrice === undefined).map(async v => {
// const {code, data} = await PublicApi.getMemberManageUpperCreditParamGet({
// parentMemberId: v.memberId,
// parentMemberRoleId: v.memberRoleId
// }, {ttl: 60 * 1000, useCache: true})
// return code === 1000 ? { value: (data.parameter * 100) + '%', id: v.id } : { value: '', id: 0 }
// }
// ))
// }
// useEffect(() => {
// // 过滤 会员折扣不存在的列表
// const hasPriceList = orderProductRequests.filter(v => !v.memberPrice)
// if (hasPriceList.length > 0) {
// asyncGetMemberPrice(hasPriceList).then((asyncData) => {
// if (asyncData.length > 0) {
// const newData = orderProductRequests.map((v, i) => {
// if (!v.memberPrice) {
// v.memberPrice = asyncData.find(j => j.id === v.id)?.value || 0
// }
// return v
// })
// ctl.setData({
// ...data,
// orderProductRequests: newData
// })
// }
// })
// }
// }, [orderProductRequests])
const handleSave = row => {
const newData = [...orderProductRequests];
const newData = [...product.products];
const index = newData.findIndex(item => row.id === item.id);
const item = newData[index];
newData.splice(index, 1, {
......@@ -381,15 +379,15 @@ const SaleOrderProductTable:React.FC<OrderProductTableProps> = (props) => {
const productInfoColumns: any[] = [
{
title: 'ID',
dataIndex: 'id',
dataIndex: 'productId',
align: 'center',
key: 'id',
key: 'productId',
},
{
title: '商品名称',
dataIndex: 'productName',
dataIndex: 'name',
align: 'center',
key: 'productName',
key: 'name',
},
{
title: '品类',
......@@ -418,38 +416,39 @@ const SaleOrderProductTable:React.FC<OrderProductTableProps> = (props) => {
},
{
title: '会员折扣',
dataIndex: 'memberPrice',
dataIndex: 'discount',
align: 'center',
key: 'memberPrice',
render: (text, record) => record.isMemberPrice ? (text * 10000 / 100 + '%') : null
key: 'discount',
// render: (text, record) => record.isMemberPrice ? (text * 10000 / 100 + '%') : null
render: (text, record) => (text + '%')
},
{
title: creditsCommodity ? '兑换数量' : '采购数量',
dataIndex: 'purchaseCount',
dataIndex: 'quantity',
align: 'center',
key: 'purchaseCount'
key: 'quantity'
},
{
title: '含税',
dataIndex: 'none',
dataIndex: 'tax',
align: 'center',
key: 'none',
render: () => '是'
key: 'tax',
render: (text, record) => text ? '是' : '否'
},
{
title: creditsCommodity ? '所需积分小计' : '金额',
dataIndex: 'money',
dataIndex: 'amount',
align: 'center',
key: 'money',
key: 'amount',
},
// 接口调用
{
title: '配送方式',
dataIndex: 'logistics',
dataIndex: 'deliverType',
align: 'center',
key: 'logistics',
render: (text) => (text && text.deliveryType && text.deliveryType === 2) ?
<AddressPop pickInfo={text}>{DELIVERY_TYPE[text.deliveryType]}</AddressPop> : DELIVERY_TYPE[text?.deliveryType]
key: 'deliverType',
render: (text, record) => (text && text === 2) ?
<AddressPop pickInfo={record}>{record.deliverTypeName}</AddressPop> : record.deliverTypeName
},
{
title: '仓位库存扣减记录',
......@@ -587,7 +586,7 @@ const SaleOrderProductTable:React.FC<OrderProductTableProps> = (props) => {
<MellowCard title={contractOrder ? '订单物料' : '订单商品'} style={{marginTop: 24}} bordered={false}>
<Table
columns={ contractOrder ? materialInfo : columns}
dataSource={orderProductRequests.sort((a, b) => a.id - b.id)}
dataSource={product.products}
components={productComponents}
rowKey='id'
pagination={false}
......
......@@ -54,6 +54,23 @@ export const getSaleOrderSelectOption = () => {
return state
}
/** (采购订单审核各个页面)获取前端页面下拉框列表 */
export const getPurchaseOrderAuditPageSelectOption = () => {
const [state, setstate] = useState<any>()
useEffect(() => {
PublicApi.getOrderBuyerValidatePageItems({}).then(res => {
const { code, data } = res
if(code === 1000) {
setstate(data)
}
})
}, [])
return state
}
/** (销售订单审核各个页面)获取前端页面下拉框列表 */
export const getSaleOrderAuditPageSelectOption = () => {
const [state, setstate] = useState<any>()
......
......@@ -8,16 +8,24 @@ import { useOrderDetail } from '../../../_public/order/effects/useOrderDetail';
import OrderDetailSection from '../../../components/orderDetailSection';
import { PurchaseOrderInsideWorkState, DeliverySideState } from '@/constants/order';
import OrderHandReceivedModal from '@/pages/transaction/components/orderHandReceivedModal';
import { usePageStatus } from '@/hooks/usePageStatus';
const ReadyReceiveOrderDetail: React.FC = () => {
const { formContext, id, detailList } = useOrderDetail({type: 'purchaseOrder'})
const { formContext, id, detailList } = useOrderDetail({type: 'readyReceiveOrder'})
const approvedRef = useRef<any>({})
const { batchNo } = usePageStatus()
// 是否是手工收货
const isHeadReceipt = formContext.data && formContext.data.interiorState === PurchaseOrderInsideWorkState.HAND_RECEIPT_ORDER
// // 是否是手工收货
// const isHeadReceipt = formContext.data && formContext.data.interiorState === PurchaseOrderInsideWorkState.HAND_RECEIPT_ORDER
// // 所有收货订单都是否已经收货了
// const isShowBtn = isHeadReceipt || formContext.data?.orderDeliveryDetailsResponses?.some(v => v.interiorState === DeliverySideState.WAREHOUSE_ORDER)
// 是否发过货
// const isHeadReceipt = Number(batchNo) <= 0
const isHeadReceipt = false
// 所有收货订单都是否已经收货了
const isShowBtn = isHeadReceipt || formContext.data?.orderDeliveryDetailsResponses?.some(v => v.interiorState === DeliverySideState.WAREHOUSE_ORDER)
const handleClick = useCallback(() => {
if (isHeadReceipt) {
// 手工收货
......@@ -34,7 +42,7 @@ const ReadyReceiveOrderDetail: React.FC = () => {
<div>
<OrderDetailContext.Provider value={formContext}>
<OrderDetailHeader detailList={detailList} detailData={formContext.data} extraRight={
isShowBtn && <Button type='primary' onClick={handleClick}>
<Button type='primary' onClick={handleClick}>
{isHeadReceipt ? '手工收货' : '去确认收货'}
</Button>
} />
......
......@@ -13,15 +13,14 @@ import '../index.less'
// 待确认收货单
export interface FirstApprovedOrderProps {}
export interface ReadyReceiveOrderProps {}
const fetchTableData = async (params) => {
const { data } = await PublicApi.getOrderReceivingGoodsPendingOrderList(params)
const { data } = await PublicApi.getOrderBuyerValidateReceivePage(params)
return data
}
// TODO
const FirstApprovedOrder:React.FC<FirstApprovedOrderProps> = (props) => {
const ReadyReceiveOrder:React.FC<ReadyReceiveOrderProps> = (props) => {
const {
columns
} = useSelfTable()
......@@ -58,6 +57,6 @@ const FirstApprovedOrder:React.FC<FirstApprovedOrderProps> = (props) => {
</PageHeaderWrapper>
}
FirstApprovedOrder.defaultProps = {}
ReadyReceiveOrder.defaultProps = {}
export default FirstApprovedOrder
export default ReadyReceiveOrder
......@@ -18,9 +18,8 @@ export const useSelfTable = () => {
dataIndex: 'orderNo',
key: 'orderNo',
render: (text, record) => {
// 查看订单, 需根据状态显示不同schema
return (
<EyePreview url={`/memberCenter/tranactionAbility/purchaseOrder/readyReceiveOrder/preview?id=${record.id}`}>
<EyePreview url={`/memberCenter/tranactionAbility/purchaseOrder/readyReceiveOrder/preview?id=${record.orderId}`}>
{text}
</EyePreview>
)
......@@ -29,8 +28,8 @@ export const useSelfTable = () => {
{
title: '订单摘要/下单时间',
align: 'center',
dataIndex: 'orderThe',
key: 'orderThe',
dataIndex: 'digest',
key: 'digest',
render: (text, record) => <>
<div>{text}</div>
<div><FieldTimeOutlined />{formatTimeString(record.createTime)}</div>
......@@ -40,61 +39,62 @@ export const useSelfTable = () => {
{
title: '采购会员',
align: 'left',
dataIndex: 'supplyMembersName',
key: 'supplyMembersName',
dataIndex: 'memberName',
key: 'memberName',
},
{
title: '总金额',
align: 'center',
dataIndex: 'sumPrice',
key: 'sumPrice',
render: (t, r) => r.type === 7 || r.type === 8 ? t : '¥' + t
dataIndex: 'amount',
key: 'amount',
render: (t, r) => r.orderType === 7 || r.orderType === 8 ? t : '¥' + t
},
{ title: '已发货批次', align: 'center', dataIndex: 'shipmentBatch', key: 'shipmentBatch', render: text => text ? `第${text}次` : '' },
// @todo 收货单号跳转
{
title: '入库单号',
title: '已发货批次',
align: 'center',
dataIndex: 'invoiceNumber',
key: 'invoiceNumber',
dataIndex: 'batchNo',
key: 'batchNo',
render: text => text ? `第${text}次` : ''
},
{
title: '收货单号',
align: 'center',
dataIndex: 'receiptNo',
key: 'receiptNo',
render: (t, r) => r.orderDeliveryDetailsId ? <Link to={`/memberCenter/tranactionAbility/stockSellStorage/bills/detail?id=${r.orderDeliveryDetailsId}&preview=1`}>{t}</Link> : <a href={`https://www.kuaidi100.com/chaxun?nu=${t}`} target="blank">{t}</a>
},
{
title: '订单类型',
align: 'center',
dataIndex: 'typeName',
key: 'typeName',
dataIndex: 'orderTypeName',
key: 'orderTypeName',
},
{
title: '外部状态',
align: 'center',
dataIndex: 'externalState',
key: 'externalState',
render: (text, record) => <StatusColors status={text} type='out' text={record['externalStateName']} />,
dataIndex: 'outerStatus',
key: 'outerStatus',
render: (text, record) => <StatusColors status={text} type='out' text={record['outerStatusName']} />,
},
{
title: '内部状态',
align: 'center',
dataIndex: 'interiorState',
key: 'interiorState',
render: (text, record) => <StatusColors status={text} type='inside' text={record['interiorStateName']} />,
dataIndex: 'innerStatus',
key: 'innerStatus',
render: (text, record) => <StatusColors status={text} type='inside' text={record['innerStatusName']} />,
},
{
title: '操作',
align: 'center',
dataIndex: 'ctl',
key: 'ctl',
render: (text, record) => <>
{/* 支付结果确认到账= 待审核状态
{ (record.interiorState === PurchaseOrderInsideWorkState.CONFIRM_RECEIPT || record.interiorState === PurchaseOrderInsideWorkState.HAND_RECEIPT_ORDER) && */}
<Button type='link' onClick={() => handleConfirm(record)}>确认收货</Button>
{/* } */}
</>
render: (text, record) => <Button type='link' onClick={() => handleConfirm(record)}>确认收货</Button>
}
]
const handleConfirm = async (record) => {
history.push(`/memberCenter/tranactionAbility/purchaseOrder/readyReceiveOrder/detail?id=${record.id}&orderDeliveryDetailsId=${record.orderDeliveryDetailsId}`);
// history.push(`/memberCenter/tranactionAbility/purchaseOrder/readyReceiveOrder/detail?id=${record.orderId}&orderDeliveryDetailsId=${record.orderDeliveryDetailsId}`);
history.push(`/memberCenter/tranactionAbility/purchaseOrder/readyReceiveOrder/detail?id=${record.orderId}&batchNo=${record.batchNo}`);
}
return {
......
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { OrderTypeMap } from '@/constants/order';
import { getOrderType } from '@/pages/transaction/effect';
import { getPurchaseOrderAuditPageSelectOption } from '@/pages/transaction/effect';
/**
* 除了订单必填字段, 默认
*/
export const tableListSchema: any = () => {
const OrderType = getOrderType()
const res = getPurchaseOrderAuditPageSelectOption()
if(res) {
const {
orderTypes: OrderType,
} = res
return {
type: 'object',
properties: {
orderNo: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: '请输入订单编号',
align: 'flex-start',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
inline: true,
colStyle: {
marginRight: 20
}
},
properties: {
orderThe: {
type: 'string',
'x-component-props': {
placeholder: '请输入订单摘要',
}
return {
type: 'object',
properties: {
orderNo: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: '请输入订单编号',
align: 'flex-start',
},
"supplyMembersName": {
type: 'string',
"x-component-props": {
placeholder: '请输入供应会员名称'
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
inline: true,
colStyle: {
marginRight: 20
}
},
"type": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
properties: {
digest: {
type: 'string',
'x-component-props': {
placeholder: '请输入订单摘要',
}
},
enum: OrderType.map(item => ({
label: item['name'],
value: item['status'],
}))
},
"[startCreateTime,endCreateTime]": {
type: 'array',
"x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
"memberName": {
type: 'string',
"x-component-props": {
placeholder: '请输入供应会员名称'
}
},
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: '查询',
"orderType": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
},
enum: OrderType.map(item => ({
label: item['text'],
value: item['id'],
}))
},
"[startDate,endDate]": {
type: 'daterange',
// "x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
},
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: '查询',
},
},
},
},
},
}
}
}
}
......@@ -17,7 +17,7 @@ interface LayoutState {
/** 订单审核各个页面 只有订单类型查询的Schema */
export const tableListSchema: any = (align?: String, colStyle?: Object) => {
console.log(align, colStyle)
const res = getSaleOrderAuditPageSelectOption()
if(res) {
const {
......
......@@ -8,15 +8,22 @@ import { useOrderDetail } from '../../../_public/order/effects/useOrderDetail';
import OrderHandDeleved from '../../../components/orderHandDeleved';
import OrderDetailSection from '../../../components/orderDetailSection';
import { SaleOrderInsideWorkState, DeliverySideState } from '@/constants/order';
import { usePageStatus } from '@/hooks/usePageStatus';
const ReadyConfirmDelevedOrderDetail: React.FC = () => {
const { formContext, id, detailList } = useOrderDetail({type: 'saleOrder'})
const { formContext, id, detailList } = useOrderDetail({type: 'readyConfirmDelevedOrder'})
const { batchNo } = usePageStatus()
// // 是否是手工发货
// const isHandDeleved = formContext.data && formContext.data.purchaseOrderInteriorState === SaleOrderInsideWorkState.HAND_DELEVED_ORDER
// 是否是手工发货
const isHandDeleved = formContext.data && formContext.data.purchaseOrderInteriorState === SaleOrderInsideWorkState.HAND_DELEVED_ORDER
// // 所有发货单都是否已经发货了
// const isShowBtn = isHandDeleved || formContext.data?.orderDeliveryDetailsResponses?.some(v => v.interiorState === DeliverySideState.ADD_LOGISTICS_ORDER)
// 是否发过货
const isHandDeleved = Number(batchNo) <= 0
// 是否发货完成
// 所有发货单都是否已经发货了
const isShowBtn = isHandDeleved || formContext.data?.orderDeliveryDetailsResponses?.some(v => v.interiorState === DeliverySideState.ADD_LOGISTICS_ORDER)
const approvedRef = useRef<any>({})
const handleClick = useCallback(() => {
......@@ -32,7 +39,7 @@ const ReadyConfirmDelevedOrderDetail: React.FC = () => {
<div>
<OrderDetailContext.Provider value={formContext}>
<OrderDetailHeader detailList={detailList} detailData={formContext.data} extraRight={
isShowBtn && <Button type='primary' onClick={handleClick}>
<Button type='primary' onClick={handleClick}>
{ isHandDeleved ? '确认手工发货' : '去发货' }
</Button>
} />
......
......@@ -39,8 +39,8 @@ export const useSelfTable = () => {
{
title: '采购会员',
align: 'left',
dataIndex: 'buyerMemberName',
key: 'buyerMemberName',
dataIndex: 'memberName',
key: 'memberName',
},
{
title: '总金额',
......@@ -49,7 +49,13 @@ export const useSelfTable = () => {
key: 'amount',
render: (t, r) => (r.orderType === 7 || r.orderType === 8) ? t : '¥' + t
},
{ title: '已发货批次', align: 'center', dataIndex: 'batchNo', key: 'batchNo', render: text => text ? `${text}次` : '' },
{
title: '已发货批次',
align: 'center',
dataIndex: 'batchNo',
key: 'batchNo',
render: text => text ? `${text}次` : ''
},
// @todo 发货单号跳转
{
title: '发货单号',
......@@ -88,7 +94,8 @@ export const useSelfTable = () => {
]
const handleConfirm = async (record) => {
history.push(`/memberCenter/tranactionAbility/saleOrder/readyConfirmDelevedOrder/detail?id=${record.id}&orderDeliveryDetailsId=${record.orderDeliveryDetailsId}`)
// history.push(`/memberCenter/tranactionAbility/saleOrder/readyConfirmDelevedOrder/detail?id=${record.orderId}&orderDeliveryDetailsId=${record.orderDeliveryDetailsId}`)
history.push(`/memberCenter/tranactionAbility/saleOrder/readyConfirmDelevedOrder/detail?id=${record.orderId}&batchNo=${record.batchNo}`)
}
return {
......
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { getOrderType } from '@/pages/transaction/effect';
import { getSaleOrderAuditPageSelectOption } from '@/pages/transaction/effect';
/**
* 除了订单必填字段, 默认
*/
export const tableListSchema: any = () => {
const OrderType = getOrderType()
const res = getSaleOrderAuditPageSelectOption()
if(res) {
const {
orderTypes: OrderType,
} = res
return {
type: 'object',
properties: {
orderNo: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: '请输入订单编号',
align: 'flex-start',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
inline: true,
colStyle: {
marginRight: 20
}
},
properties: {
orderThe: {
type: 'string',
'x-component-props': {
placeholder: '请输入订单摘要',
}
return {
type: 'object',
properties: {
orderNo: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: '请输入订单编号',
align: 'flex-start',
},
"memberName": {
type: 'string',
"x-component-props": {
placeholder: '请输入采购会员名称'
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
inline: true,
colStyle: {
marginRight: 20
}
},
"type": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
properties: {
digest: {
type: 'string',
'x-component-props': {
placeholder: '请输入订单摘要',
}
},
enum: OrderType.map(item => ({
label: item['name'],
value: item['status'],
}))
},
"[startCreateTime,endCreateTime]": {
type: 'array',
"x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
"memberName": {
type: 'string',
"x-component-props": {
placeholder: '请输入采购会员名称'
}
},
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: '查询',
"orderType": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
},
enum: OrderType.map(item => ({
label: item['text'],
value: item['id'],
}))
},
"[startDate,endDate]": {
type: 'daterange',
// "x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
},
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: '查询',
},
},
},
},
},
}
}
}
}
......@@ -18,6 +18,7 @@ import * as SettleV2Api from './SettleV2Api';
import * as TransactionV2Api from './TransactionV2Api';
import * as ContractV2Api from './ContractV2Api';
import * as OrderV2Api from './OrderV2Api';
import * as OrderV2NewApi from './OrderV2NewApi';
import * as PlatformApi from './PlatformApi';
import * as ProductV2Api from './ProductV2Api';
import * as TemplateV2Api from './TemplateV2Api';
......@@ -58,6 +59,7 @@ export const PublicApi = {
...TransactionV2Api,
...ContractV2Api,
...OrderV2Api,
...OrderV2NewApi,
...PlatformApi,
...ProductV2Api,
...TemplateV2Api,
......
......@@ -20,6 +20,7 @@ const tokenList = [
{ name: 'TransactionV2', token: '3ad04435494d01c359b9f07948338e019133a3e6c0fccdbe1bc3adc19cf1e0b1', categoryIds: [0] }, // 交易服务V2
{ name: 'ContractV2', token: 'bbf1f327cfe7c59d1e7fd9c5d25119829dd79d238b1f1c79ed97331e220721a4', categoryIds: [0] }, // 合同能力V2
{ name: 'OrderV2', token: '033f83bd5f519506f65f46d1513b1f8028a1dc1b5238d22edd0a2feb53cd3a19', categoryIds: [0], }, //订单服务V2
{ name: 'OrderV2New', token: 'c11d6e07d958caff4fc5e26feaeb2637e38f1619e850cd2b6e7d5e7072d4989a', categoryIds: [0], }, //订单服务V2 New
{ name: 'Platform', token: 'db3b086157528c865a1a1a9fafffa574e9c3f098c0518a7c374a72988ba1edbb', categoryIds: [0] }, // 平台后台v2
{ name: 'ProductV2', token: 'b915026587fa1f6edf056f3335817fe2d4b350b0aa84da456786e15e83d45827', categoryIds: [0], }, // 商品服务V2
{ name: 'TemplateV2', token: 'f0187aed046ac19accbed5c780cade01cf11b50a37099dab9d456195a4abd0d3', categoryIds: [0], }, // 页面模板服务V2
......
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