Commit f0e03866 authored by 前端-钟卫鹏's avatar 前端-钟卫鹏
parents 64f9b519 c7d00914
......@@ -288,7 +288,7 @@ const Detail: React.FC<{}> = () => {
const handleManualDeliver = (value) => {
const postData = {
produceNoticeOrderId: id,
manualDeliverBO: value,
manualDeliver: value,
}
PublicApi.postEnhanceProcessToBeDeliveryManualDeliver(postData)
.then(({data, code}) => {
......@@ -354,6 +354,11 @@ const Detail: React.FC<{}> = () => {
text={info.innerStatusName}></Badge>
</Descriptions.Item>
</Descriptions>
{
info?.cause
? <div style={{marginLeft: '32px'}}>不通过原因: {info.cause}</div>
: null
}
</Col>
<Col span={4}>
{
......@@ -376,10 +381,10 @@ const Detail: React.FC<{}> = () => {
<DeliverGood
mode="view"
deliveryType={info.deliveryType}
deliveryAddress={info.manualDeliverBO?.deliveryAddress}
deliveryTime={info.manualDeliverBO?.deliveryTime}
deliveryNo={info.manualDeliverBO?.deliveryNo}
logisticsName={info.manualDeliverBO?.logisticsName}
deliveryAddress={info.manualDeliver?.deliveryAddress}
deliveryTime={info.manualDeliver?.deliveryTime}
deliveryNo={info.manualDeliver?.deliveryNo}
logisticsName={info.manualDeliver?.logisticsName}
handleManualReceiver={handleManualReceiver}
>
<Button type="primary" >确认手工收货</Button>
......
......@@ -186,7 +186,7 @@ const AddLogistics: React.FC<{}> = () => {
relevanceOrderCode: res.data.orderNo,
voucherTime: res.data.transactionTime,
externalState: res.data.state,
shipmentOrderId: res.data.invoicesTypeId,
shipmentOrderId: res.data.id,
relevanceOrderId: res.data.relevanceInvoicesId,
}
form.setFieldsValue(obj);
......@@ -332,7 +332,7 @@ const AddLogistics: React.FC<{}> = () => {
case 1:
case 2:
case 3:
PublicApi.getWarehouseInvoicesProductList({ ...params, invoicesId: id }).then((res: any) => {
PublicApi.getWarehouseInvoicesProductList({ ...params, invoicesId: query.shipmentOrderId }).then((res: any) => {
if (res.code === 1000) {
res.data.data.forEach(item => {
item.category = item.categoryName
......@@ -344,21 +344,21 @@ const AddLogistics: React.FC<{}> = () => {
})
break;
case 4:
PublicApi.getAsReplaceGoodsPageReturnCommodityByLogistics({ ...params, dataId: id }).then(res => {
PublicApi.getAsReplaceGoodsPageReturnCommodityByLogistics({ ...params, dataId: query.relevanceOrderId }).then(res => {
if (res.code === 1000) {
resolve(res.data)
}
})
break;
case 5:
PublicApi.getAsReplaceGoodsPageReplaceCommodityByLogistics({ ...params, dataId: id }).then(res => {
PublicApi.getAsReplaceGoodsPageReplaceCommodityByLogistics({ ...params, dataId: query.relevanceOrderId}).then(res => {
if (res.code === 1000) {
resolve(res.data)
}
})
break;
case 6:
PublicApi.getAsReturnGoodsPageCommodityByLogistics({ ...params, dataId: id }).then(res => {
PublicApi.getAsReturnGoodsPageCommodityByLogistics({ ...params, dataId: query.relevanceOrderId }).then(res => {
if (res.code === 1000) {
resolve(res.data)
}
......@@ -695,7 +695,7 @@ const AddLogistics: React.FC<{}> = () => {
}
</Select>
</Form.Item>
<Form.Item label="单据时间" name='voucherTime'><span>{query.voucherTime}</span></Form.Item>
<Form.Item label="单据时间" name='voucherTime'><span>{moment(query.voucherTime).format('YYYY-MM-DD HH:mm:ss')} </span></Form.Item>
<Form.Item label="外部状态" name='externalState'><span>{query.externalState}</span></Form.Item>
</Form>
</TabPane>
......
......@@ -32,6 +32,9 @@ const comfirmDialog: React.FC<Params> = (props) => {
if (res.code === 1000) {
props.onOK()
}
}).catch(error => {
console.log(error)
props.onOK()
})
}
......
......@@ -180,6 +180,7 @@ const company: React.FC<parmas> = (props) => {
let { memberId, roleId, name } = selectRow
menuForm.setFieldsValue({
companyMemberId: memberId,
companyRoleId: roleId,
name: name
})
setsVisible(false)
......
import React, { ReactText, useRef, useEffect, useLayoutEffect, useState } from 'react';
import { StandardTable } from 'god';
import { ISchema } from '@formily/antd';
import NestTable from '@/components/NestTable';
import { IStandardTableProps } from 'god/dist/src/standard-table';
import { Row, Col, Modal, Form, Radio } from 'antd';
import Search from '@/components//NiceForm/components/Search';
import SearchSelect from '@/components//NiceForm/components/SearchSelect';
import Submit from '@/components//NiceForm/components/Submit';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import DateSelect from '@/components//NiceForm/components/DateSelect';
import { PublicApi } from '@/services/api';
export interface ModalTableProps extends IStandardTableProps<any> {
width?: number,
confirm?: Function,
cancel?(),
visible?: boolean,
resetModal?: object,
useNestTable?: boolean, // 是否使用嵌套表格
nestColumns?: any[],
nestTableProps?: any,
// fix: 新增参数, 为true时每次开启弹窗都会重新reload接口
forceRender?: boolean,
invoicesNo?: string, // 对应订单号/售后单号
relevanceType?: number, //对应单据类型
}
export const logisticsDeliverySearchSchema: ISchema = {
type: 'object',
properties: {
invoicesNo: {
type: 'string',
'x-component': 'ModalSearch',
'x-component-props': {
placeholder: '单据号',
align: 'flex-left',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
rowStyle: {
flexWrap: 'nowrap',
style: {
marginRight: 0
}
},
colStyle: {
marginTop: 20,
},
},
properties: {
orderNo: {
type: 'string',
"x-component-props": {
placeholder: '会员名称',
style: {
width: 160
}
}
},
invoicesAbstract: {
type: 'string',
"x-component-props": {
placeholder: '单据摘要',
style: {
width: 160
}
}
},
"[startTransactionTime,endTransactionTime]": {
type: 'string',
"x-component": "dateSelect",
"x-component-props": {
placeholder: '单据时间(全部)',
}
},
submit: {
"x-component": 'Submit',
"x-mega-props": {
span: 1
},
"x-component-props": {
children: '查询'
}
}
}
}
}
}
export const otherSearchSchema: ISchema = {
type: 'object',
properties: {
applyNo: {
type: 'string',
'x-component': 'ModalSearch',
'x-component-props': {
placeholder: '申请单号',
align: 'flex-left',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
rowStyle: {
flexWrap: 'nowrap',
style: {
marginRight: 0
}
},
colStyle: {
marginTop: 20,
},
},
properties: {
memberName: {
type: 'string',
"x-component-props": {
placeholder: '会员名称',
style: {
width: 160
}
}
},
applyAbstract: {
type: 'string',
"x-component-props": {
placeholder: '单据摘要',
style: {
width: 160
}
}
},
"[startTime,endTime]": {
type: 'string',
"x-component": "dateSelect",
"x-component-props": {
placeholder: '单据时间(全部)',
}
},
submit: {
"x-component": 'Submit',
"x-mega-props": {
span: 1
},
"x-component-props": {
children: '查询'
}
}
}
}
}
}
const ModalTableOrder: React.FC<ModalTableProps> = (props) => {
const { width = 704, confirm, cancel, visible, currentRef, resetModal, forceRender, useNestTable = false, nestColumns, nestTableProps, invoicesNo, relevanceType=1, ...resetTable } = props
const selfRef = currentRef || useRef<any>({})
useEffect(() => {
if (visible && forceRender) {
// 重新开启时需reload接口
// fix: 去掉自动reload接口, 防止重复请求
// fix: 新增forceRender接口, 用于控制弹窗是否需要reload
selfRef.current.reload && selfRef.current.reload()
} else {
selfRef.current.resetField && selfRef.current.resetField({
validate: false
})
}
}, [visible])
const [form] = Form.useForm();
const [type, setType] = useState<number>(1);
const [modalTitle, setmodalTitle] = useState<string>('订单');
useEffect(() => {
console.log(relevanceType)
setType(relevanceType)
}, [relevanceType])
useEffect(() => {
form.setFieldsValue({
radio: type
})
}, [type])
const fetchData = (parmas?: any) => {
return new Promise(resolve => {
switch (type) {
case 1:
PublicApi.getOrderLogisticsOrderList({...parmas}).then(res => {
if(res.code === 1000) {
resolve(res.data)
}
})
break;
case 2:
PublicApi.getAsReplaceGoodsPageToBeAddReturnByLogistics({...parmas}).then(res => {
if(res.code === 1000) {
resolve(res.data)
}
})
break;
case 3:
PublicApi.getAsReplaceGoodsPageToBeAddReplaceByLogistics({...parmas}).then(res => {
if(res.code === 1000) {
resolve(res.data)
}
})
break;
case 4:
PublicApi.getAsReturnGoodsPageByLogistics({...parmas}).then(res => {
if(res.code === 1000) {
resolve(res.data)
}
})
break;
}
})
}
return (
<Modal
width={width}
title={modalTitle}
onOk={() => confirm(type)}
onCancel={cancel}
visible={visible}
{...resetModal}
maskClosable={false}
>
{
useNestTable ? (
<NestTable
NestColumns={nestColumns}
className="common_tb"
rowClassName={(_, index) => (index % 2) === 0 && "tb_bg"}
{...nestTableProps}
/>
) : (
<StandardTable
tableType='small'
currentRef={selfRef}
fetchTableData={(params) => fetchData(params)}
formRender={(child, ps) => <Row justify='space-between' style={{ marginBottom: 16 }}>
<Col span={18} style={{ zIndex: 99 }}>
<Form form={form}>
<Form.Item name='radio' label='单据选择'>
<Radio.Group onChange={(e) => { setType(e.target.value); selfRef.current.reload(); }}>
<Radio value={1}>订单</Radio>
<Radio value={2}>换货申请单(退货发货)</Radio>
<Radio value={3}>换货申请单(换货发货)</Radio>
<Radio value={4}>退货申请单</Radio>
</Radio.Group>
</Form.Item>
</Form>
</Col>
<Col style={{ marginTop: 4 }}>{ps}</Col>
<Col span={18} style={{ zIndex: 99 }}>{child}</Col>
</Row >}
formilyProps={
{
ctx: {
schema: type === 1 ? logisticsDeliverySearchSchema : otherSearchSchema,
components: { ModalSearch: Search, SearchSelect, Submit, DateSelect },
effects: ($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
type === 1 ? 'invoicesNo' : 'applyNo',
FORM_FILTER_PATH,
);
}
}
}
}
{...resetTable}
/>
)
}
</Modal>
)
}
ModalTableOrder.defaultProps = {}
export default ModalTableOrder
/**
* @Name: 新增编辑 - 待提交物流单 - 基本信息
* @Date: 2020-11-06
* @Author: HJX
*/
import React, { useState, useEffect } from 'react';
import { Form, Input, Select, Button } from 'antd';
import styles from './index.less';
import moment from 'moment';
import { ColumnType } from 'antd/lib/table/interface';
import { LinkOutlined } from '@ant-design/icons';
import { PublicApi } from '@/services/api';
import ModalTable from '@/components/ModalTable';
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
import ModalTableOrder from './ModalTableOrder';
const { Search } = Input;
const { Option } = Select;
const layout: any = {
colon: false,
labelCol: { style: { width: '174px' } },
wrapperCol: { span: 9 },
labelAlign: "left"
};
export interface interfaceinfo {
set?: any,
currentRef?: any,
onGet?: Function,
onBadge?: Function,
addId?: Number,
}
const BasicInfo: React.FC<interfaceinfo> = (props) => {
const { set, currentRef, onGet, onBadge, addId } = props;
const [listcompany, setlistcompany] = useState<any>([]);//物流服务商
const [shipperaddress, setshipperaddress] = useState<any>([]);//发货地址
const [shippingvisible, setshippingvisible] = useState<boolean>(false);
const [invoicesvisible, setinvoicesvisible] = useState<boolean>(false);
const [shippingRowSelection, shippingRowCtl] = useRowSelectionTable({ customKey: 'id', type: 'radio' });
const [invoicesRowSelection, invoicesRowCtl] = useRowSelectionTable({ customKey: 'id', type: 'radio' });
const [form] = Form.useForm();
//获取物流服务商
const getListCompany = () => {
const company = new Promise(resolve => {
PublicApi.getLogisticsSelectListMemberCompany({}).then(res => {
if (res.code === 1000) {
resolve(res.data)
}
})
})
return company
}
//获取发货地址
const getShipperAddress = () => {
const address = new Promise(resolve => {
PublicApi.getLogisticsSelectListShipperAddress().then(res => {
if (res.code === 1000) {
resolve(res.data)
}
})
})
return address
}
useEffect(() => {
Promise.all([getListCompany(), getShipperAddress()]).then(res => {
setlistcompany(res[0]);
setshipperaddress(res[1]);
})
}, [])
// 对应发货单 columns
const shippingColumns: ColumnType<any>[] = [
{
title: '发货单号',
dataIndex: 'invoicesNo',
},
{
title: '对应订单号',
dataIndex: 'orderNo',
},
{
title: '单据摘要',
dataIndex: 'invoicesAbstract',
},
{
title: '对应仓库',
dataIndex: 'inventory',
},
{
title: '单据类型',
dataIndex: 'invoicesType',
},
{
title: '单据时间',
dataIndex: 'transactionTime',
render: (text: any) => <>{moment(text).format('YYYY-MM-DD HH:mm:ss')}</>
}
]
// 对应订单 columns
const invoicesColumns: ColumnType<any>[] = [
{
title: '单据号',
dataIndex: 'orderNo',
},
{
title: '单据摘要',
dataIndex: 'orderThe',
},
{
title: '会员名称',
dataIndex: 'supplyMembersName',
},
{
title: '单据时间',
dataIndex: 'createTime',
render: (text: any) => <>{moment(text).format('YYYY-MM-DD HH:mm:ss')}</>
}
]
// 确定
const handleShipping = () => {
const selectRow = shippingRowCtl.selectRow[0]
console.log(selectRow)
form.setFieldsValue({
shipmentOrderCode: selectRow.invoicesNo
})
onGet(selectRow, 2);
setshippingvisible(false);
}
const handleInvoices = (type: number) => {
const selectRow = invoicesRowCtl.selectRow[0]
form.setFieldsValue({
relevanceOrderCode: selectRow.orderNo
})
onGet(selectRow, 3, type);
setinvoicesvisible(false);
}
useEffect(() => {
currentRef.current = {
get: () => new Promise((resolve: any) => {
form.validateFields().then(res => {
resolve({
state: true,
name: 'basicInfo',
data: {
digest: res.digest,
companyId: res.companyId,
shipmentOrderCode: res.shipmentOrderCode,
invoicesNo: res.invoicesNo,
shipperAddressId: res.shipperAddressId,
companyName: set.companyName,
shipperFullAddress: set.shipperFullAddress,
receiverMemberId: set.receiverMemberId,
receiverMemberName: set.receiverMemberName,
receiverFullAddress: set.receiverFullAddress,
receiverName: set.receiverName,
receiverPhone: set.receiverPhone,
}
})
onBadge(0, 0)
}).catch(error => {
if (error && error.errorFields) {
onBadge(error.errorFields.length, 0)
}
})
})
}
})
/** 选择发货单 列表数据 */
const fetchShippingData = (params: any) => {
return new Promise(resolve => {
PublicApi.getWarehouseInvoicesList({ ...params }).then(res => {
if (res.code === 1000) {
resolve(res.data)
}
})
})
}
/**编辑是调用选择对应发货单 */
const getShipmentOrder = () => {
const params = {
invoicesNo: set.shipmentOrderCode,
invoicesType: '',
invoicesAbstract: '',
memberName: '',
inventoryId: '',
startTransactionTime: '',
endTransactionTime: '',
orderNo: '',
state: '',
current: '1',
pageSize: '1'
}
new Promise(resolve => {
PublicApi.getWarehouseInvoicesList({ ...params }).then((res: any) => {
if (res.code === 1000) {
resolve(res.data)
}
})
}).then((res: any) => {
shippingRowCtl.setSelectRow(res.data);
shippingRowCtl.setSelectedRowKeys(res.data.map(v => v.id));
onGet(res.data[0], 2);
})
}
/** 编辑是调用对应订单号/售后单 */
const getInvoicesOrder = (type: number) => {
switch (type) {
case 1:
PublicApi.getOrderLogisticsOrderList({orderNo: set.invoicesNo}).then((res:any) => {
if (res.code === 1000) {
const {data} = res.data;
invoicesRowCtl.setSelectRow(data);
invoicesRowCtl.setSelectedRowKeys(data.map(v => v.id));
onGet(data[0], 3);
}
})
break;
case 2:
break;
case 3:
break;
case 4:
break;
}
}
useEffect(() => {
/**编辑回显数据 */
if (set.id) {
form.setFieldsValue({
digest: set.digest,
companyId: set.companyId,
shipmentOrderCode: set.shipmentOrderCode,
relevanceOrderCode: set.relevanceOrderCode,
shipperAddressId: set.shipperAddressId
})
if (set.shipmentOrderCode) {
getShipmentOrder()
}
if(set.relevanceOrderCode) {
getInvoicesOrder(Number(set.relevanceType))
}
}
if(addId) {
console.log(set, 960)
form.setFieldsValue({
shipmentOrderCode: set.shipmentOrderCode,
relevanceOrderCode: set.relevanceOrderCode,
})
}
}, [set.id, addId])
return (
<>
<Form
{...layout}
form={form}
className={styles.revise_style}
>
<Form.Item label="单据摘要" name="digest" rules={[{ required: true, message: '请输入单据摘要' }]}>
<Input />
</Form.Item>
<Form.Item label="物流服务商" name="companyId" rules={[{ required: true, message: '请选择流服务商' }]}>
<Select allowClear onChange={(value, option) => onGet(option, 1)}>
{
listcompany.map((item: any, index: number) => (
<Option roleid={item.roleId} memberid={item.memberId} key={item.id} value={item.id}>{item.name}</Option>
))
}
</Select>
</Form.Item>
<Form.Item label="物流单号" name='receiverName1'><span></span></Form.Item>
<Form.Item label='对应发货单号'>
<Form.Item noStyle name='shipmentOrderCode'>
<Search disabled={!!addId} readOnly enterButton={<><LinkOutlined /> 选择</>} onSearch={() => setshippingvisible(true)} />
</Form.Item>
{shippingRowCtl.selectRow.length > 0 && <Button type='link'>查看单号详情</Button>}
</Form.Item>
<Form.Item label='对应订单号/售后单'>
<Form.Item noStyle name='relevanceOrderCode'>
<Search disabled={!!addId} readOnly enterButton={<><LinkOutlined /> 选择</>} onSearch={() => setinvoicesvisible(true)} />
</Form.Item>
{invoicesRowCtl.selectRow.length > 0 && <Button type='link'>查看单号详情</Button>}
</Form.Item>
<Form.Item label="收货方" name='receiverName'><span>{set.receiverName}</span></Form.Item>
<Form.Item label="收货地址" name='receiverFullAddress'>
<div style={{ lineHeight: '36px' }}>{set.receiverName}/{set.receiverPhone}</div>
<div>{set.receiverFullAddress}</div>
</Form.Item>
<Form.Item label="发货地址" name="shipperAddressId" rules={[{ required: true, message: '请选择发货地址' }]}>
<Select allowClear onChange={(value, option) => onGet(option, 4)}>
{
shipperaddress.map((item: any, index: number) => (
<Option key={item.id} value={item.id}>{item.fullAddress}</Option>
))
}
</Select>
</Form.Item>
<Form.Item label="单据时间" name='voucherTime'><span>{set.invoicesTime && set.invoicesTime}</span></Form.Item>
<Form.Item label="外部状态" name='externalState'><span>{set.status && set.status}</span></Form.Item>
</Form>
{/* 选择发货单弹框 */}
<ModalTable
width={900}
modalTitle='选择发货单'
columns={shippingColumns}
visible={shippingvisible}
rowSelection={shippingRowSelection}
cancel={() => setshippingvisible(false)}
confirm={handleShipping}
fetchTableData={params => fetchShippingData(params)}
resetModal={{ destroyOnClose: true }}
tableProps={{ rowKey: 'id' }}
modalType='logisticsDelivery'
searchName='invoicesNo'
/>
{/* 选择订单/换货申请单(退货发货)/换货申请单(换货发货)/退货申请单 */}
<ModalTableOrder
width={900}
visible={invoicesvisible}
columns={invoicesColumns}
invoicesNo={set.invoicesNo}
relevanceType={set.relevanceType}
resetModal={{ destroyOnClose: true }}
tableProps={{ rowKey: 'id' }}
rowSelection={invoicesRowSelection}
cancel={() => setinvoicesvisible(false)}
confirm={handleInvoices}
/>
</>
)
}
export default BasicInfo;
import React, { useEffect, useState } from 'react';
import { Button, Input, Table, Row, Col, Statistic, message, Form } from 'antd';
import { ColumnType } from 'antd/lib/table/interface';
import { PlusOutlined } from '@ant-design/icons';
import ModalTable from '@/components/ModalTable'
import { PublicApi } from '@/services/api';
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
interface goodsParamsProps {
currentRef?: any,
set?: any,
onGet?: Function,
onBadge?: Function,
addId?: Number,
createType?: any
}
const AddGoods: React.FC<goodsParamsProps> = (props) => {
const { currentRef, set, onGet, onBadge, addId, createType } = props;
const [form] = Form.useForm();
const [visible, setvisible] = useState<boolean>(false);
const [rowSelection, SelectionRowCtl] = useRowSelectionTable({ customKey: 'productId' });
const [data, setdata] = useState<Array<any>>([]);
const columns: ColumnType<any>[] = [
{
title: 'ID',
key: 'productId',
dataIndex: 'productId'
},
{
title: '商品名称',
key: 'productName',
dataIndex: 'productName'
},
{
title: '品类',
key: 'categoryName',
dataIndex: 'categoryName'
},
{
title: '品牌',
key: 'brandName',
dataIndex: 'brandName'
},
{
title: '单位',
key: 'unitName',
dataIndex: 'unitName'
},
{
title: '数量',
key: 'amount',
width: 120,
dataIndex: 'amount',
render: (text: any, record: any, index: number) =>
<Form.Item noStyle name={`amount${index}`} initialValue={record.amount} rules={[{ required: true, message: '请输入数量' }]}>
<Input type='number' min={1} onBlur={(e) => inputOnchange(record.productId, e, 'amount')} />
</Form.Item>
},
{
title: '箱数',
key: 'carton',
width: 120,
dataIndex: 'carton',
render: (text: any, record: any, index: number) =>
<Form.Item noStyle name={`carton${index}`} initialValue={record.carton} rules={[{ required: true, message: '请输入箱数' }]}>
<Input type='number' min={1} onBlur={(e) => inputOnchange(record.productId, e, 'carton')} />
</Form.Item>
},
{
title: '重量 (KG)',
key: 'weight',
width: 120,
dataIndex: 'weight',
render: (text: any, record: any, index: number) =>
<Form.Item noStyle name={`weight${index}`} initialValue={record.weight} rules={[{ required: true, message: '请输入重量 (KG)' }]}>
<Input type='number' min={1} onBlur={(e) => inputOnchange(record.productId, e, 'weight')} />
</Form.Item>
},
{
title: '体积 (M3)',
key: 'volume',
width: 120,
dataIndex: 'volume',
render: (text: any, record: any, index: number) =>
<Form.Item noStyle name={`volume${index}`} initialValue={record.volume} rules={[{ required: true, message: '请输入体积 (M3)' }]}>
<Input type='number' min={1} onBlur={(e) => inputOnchange(record.productId, e, 'volume')} />
</Form.Item>
},
{
title: '操作',
key: 'options',
dataIndex: 'options',
render: (text: any, record: any, index: number) => <Button type='link' onClick={() => onHandleDelect(index)}>删除</Button>
}
]
/** 删除 */
const onHandleDelect = (idx: number) => {
const list = [...data];
list.splice(idx, 1);
SelectionRowCtl.setSelectRow(list)
SelectionRowCtl.setSelectedRowKeys(list.map(v => v.productId));
setdata([...list])
form.resetFields();
console.log(idx)
}
/**选择商品弹框表头 */
const columnsTable: ColumnType<any>[] = [
{
title: 'ID',
key: 'productId',
dataIndex: 'productId'
},
{
title: '商品名称',
key: 'productName',
dataIndex: 'productName'
},
{
title: '品类',
key: 'categoryName',
dataIndex: 'categoryName'
},
{
title: '品牌',
key: 'brandName',
dataIndex: 'brandName'
}
]
/**获取商品列表 */
const fetchProductList = (params: any) => {
return new Promise(resolve => {
PublicApi.getOrderProcurementOrderProductPageList({ id: set.shipmentOrderId, ...params }).then(res => {
if (res.code === 1000) {
const arr: any = [];
res.data.data.forEach((item: any) => {
arr.push({
productId: item.productId,
productName: item.productName,
categoryName: item.category,
brandName: item.brand,
unitName: item.unit,
amount: item.amount,
carton: item.carton,
weight: item.weight,
volume: item.volume
})
})
res.data.data = arr
resolve(res.data)
}
})
})
}
/**用户循环改变列表返回的字段 */
const forKeyValue = (data: any) => {
const arr: any = [];
data.forEach((item:any) => {
arr.push({
productId: item.id,
productName: item.productName,
categoryName: item.category,
brandName: item.brand,
unitName: item.unit,
amount: item.productCount,
carton: item.carton,
weight: item.weight,
volume: item.volume
})
})
setdata([...arr])
}
/** 打开添加商品 */
const openModal = () => {
const dataInfo = { ...set };
if (Object.keys(dataInfo).length > 0 && dataInfo.shipmentOrderId) {
if (data.length > 0) {
SelectionRowCtl.setSelectRow([...data])
}
setvisible(true)
} else {
message.error('请先选择要操作的对应发货单号或对应订单号/售后单')
}
}
/** 确定添加商品 */
const onconfirm = () => {
const list = SelectionRowCtl.selectRow;
const arr: any[] = []
list.forEach((item: any) => {
arr.push({
productId: item.productId,
productName: item.productName,
categoryName: item.categoryName,
brandName: item.brandName,
unitName: item.unitName,
amount: item.amount,
carton: item.carton,
weight: item.weight,
volume: item.volume
})
})
setdata([...arr])
setvisible(false)
}
/**输入框输入 */
const inputOnchange = (id, e, name) => {
const { value } = e.target
data.forEach(v => {
if (v.productId === id) {
v[name] = value
}
})
onGet([...data]) // 返回给父级
setdata([...data])
countTotal(name)
}
/** 计算总数 */
const countTotal = (name?: string) => {
let num: any = 0
data.forEach((item: any, idx: number) => {
if (name === 'carton') {
num += item.carton ? Number(item.carton) : 0
} else if (name === 'weight') {
num += item.weight ? Number(item.weight) : 0
} else if (name === 'volume') {
num += item.volume ? Number(item.volume) : 0
}
})
return num
}
useEffect(() => {
currentRef.current = {
get: () => new Promise((resolve: any) => {
form.validateFields().then(res => {
if (data.length > 0) {
resolve({
state: true,
name: 'goods',
})
onBadge(0, 1)
} else {
resolve({
state: false,
name: 'goods',
})
onBadge(1, 1)
}
}).catch(error => {
if (error && error.errorFields) {
onBadge(error.errorFields.length, 1)
}
})
})
}
})
/**编辑回显 */
useEffect(() => {
if (set.id) {
setdata([...set.detailList])
SelectionRowCtl.setSelectRow(set.detailList);
SelectionRowCtl.setSelectedRowKeys(set.detailList.map(v => v = v.productId))
}
}, [set.id])
/**别处单据过来 */
useEffect(() => {
switch (Number(createType)) {
case 2:
PublicApi.getWarehouseInvoicesDetailsList({invoicesId: addId.toString()}).then(res => {
if(res.code === 1000) {
forKeyValue(res.data)
}
})
break
case 3:
break
case 4:
break
}
}, [addId])
return (
<>
<Button disabled={!!addId} block type='dashed' style={{ marginBottom: '24px' }} onClick={openModal}><PlusOutlined />添加商品</Button>
<Form form={form}>
<Table columns={columns} dataSource={data} rowKey={'productId'} pagination={false} />
</Form>
<Row gutter={[24, 24]} style={{ margin: '0 0 0 65%', width: '35%' }}>
<Col span={8}><Statistic title="总箱数(箱)" value={countTotal('carton')} /></Col>
<Col span={8}><Statistic title="总重量(KG)" value={countTotal('weight')} /></Col>
<Col span={8}><Statistic title="总体积(M3)" value={countTotal('volume')} /></Col>
</Row>
{/* 选择商品弹框 */}
<ModalTable
width={900}
modalTitle='选择商品'
columns={columnsTable}
visible={visible}
rowSelection={rowSelection}
fetchTableData={params => fetchProductList(params)}
resetModal={{ destroyOnClose: true }}
tableProps={{ rowKey: 'productId' }}
cancel={() => setvisible(false)}
confirm={() => onconfirm()}
/>
</>
)
}
export default AddGoods;
.revise_style {
:global {
.ant-form-item-label {
width: 174px;
label {
color:#6B778C
}
}
.ant-form-item-control {
width: 500px;
.ant-form-item-control-input-content {
position: relative;
.ant-btn-link {
position: absolute;
right: -120px;
}
.ant-picker {
width: 100%;
}
}
.ant-input-group-addon {
.ant-input-search-button {
background-color: #6B778C;
border-color: #6B778C;
}
}
}
.ant-radio-group-solid {
.ant-radio-button-wrapper-checked {
background: #6B778C;
border-color: #6B778C;
&:hover {
background: #6B778C;
border-color: #6B778C;
}
}
}
}
.upload_item {
padding: 5px 8px;
margin-bottom: 16px;
display: flex;
align-items: center;
justify-content: space-between;
background-color: #FAFBFC;
.upload_left {
display: flex;
align-items: center;
color: #303133;
:global {
.anticon-file-word {
color: #4279df;
font-size: 20px;
margin-right: 8px;
}
}
}
.upload_right {
color: #00B37A;
cursor: pointer;
:global {
.anticon-delete {
margin-left: 19px;
color: #C0C4CC;
}
}
}
}
}
\ No newline at end of file
/**
* @Name: 新增编辑 - 待提交物流单 - 流转记录
* @Date: 2020-11-06
* @Author: HJX
*/
import React from 'react';
import { Table } from 'antd';
import {ColumnType} from 'antd/lib/table/interface'
const TableLOG:React.FC<{}> = () => {
const columns: ColumnType<any>[] = [
{
title: '序号',
dataIndex: 'operatorRoleId'
},{
title: '操作角色',
dataIndex: 'operatorRoleName'
},{
title: '状态',
dataIndex: 'status'
},{
title: '操作',
dataIndex: 'type'
},{
title: '操作时间',
dataIndex: 'operateTime'
},{
title: '审核意见',
dataIndex: 'remark'
}
]
return(
<Table columns={columns} />
)
}
export default TableLOG
\ No newline at end of file
/**
* @Name: 新增编辑 - 待提交物流单
* @Date: 2020-11-06
* @Author: HJX
*/
import React, { useState, useRef, useEffect } from 'react';
import { Button, Card, Tabs, Form, message, Badge } from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import ReturnEle from '@/components/ReturnEle';
import { history } from 'umi';
import Table from './components/table';//流转记录
import BasicInfo from './components/basicInfo';//基本信息
import Goods from './components/goods';//物流单明细
import { PublicApi } from '@/services/api';
const { TabPane } = Tabs
const layout: any = {
colon: false,
labelCol: { style: { width: '174px' } },
wrapperCol: { span: 9 },
labelAlign: "left"
};
const TabFormErrors = (props) => {
return (
<Badge size="small" count={props.dot} offset={[6, -5]}>
{props.children}
</Badge>
)
}
const AddEditLogistics: React.FC<{}> = () => {
const basic = useRef<any>();
const goods = useRef<any>();
// 用于提交的
const [parmas, setParmas] = useState<any>({
digest: '',//单据摘要
companyId: '',//物流服务商id
shipmentOrderId: '',//发货单id 1
shipmentOrderCode: '',//发货单号 1
relevanceOrderId: '',//对应订单id
relevanceOrderCode: '',//对应单据编号 1
relevanceType: 1,//对应单据类型 1-订单 2-换货申请单(退货发货) 3-换货申请单(换货发货) 4-退货申请单
receiverName: '',//收货方名称1
receiverAddressId: '',//收货方id 1
shipperAddressId: '',//发货方id
receiverFullAddress: '',
createType: 1,
detailList: [],//物流单明细列表 ,LogisticsOrderDetailRequest
})
const parmasRef = useRef(parmas)
const [settlementMethod, setSettlementMethod] = useState<any>();
const [memberInfo, setmemberInfo] = useState<any>({});
const [badge, setbadge] = useState<any>([0, 0, 0]);
const { pathname, query } = history.location;
const type = pathname.split('/')[pathname.split('/').length - 1];
const [addId, setAddId] = useState<number>(0);
// 提交数据
const handleSubmit = async () => {
const basicRef = await basic.current.get();
const goodsRef = await goods.current.get();
if (basicRef.state && goodsRef.state) {
if (parmas.detailList.length > 0) {
const data = { ...basicRef.data };
data.relevanceOrderCode = parmas.relevanceOrderCode;
data.receiverMemberId = parmas.receiverMemberId;
data.receiverMemberName = parmas.receiverMemberName;
data.relevanceOrderId = parmas.relevanceOrderId;
data.relevanceType = parmas.relevanceType;
data.detailList = parmas.detailList;
data.createType = parmas.createType;
if (type === 'add') {
PublicApi.postLogisticsOrderWaitSubmitAdd({ ...data }).then(res => {
if (res.code === 1000) {
history.goBack()
}
})
} else {
data.id = parmas.id;
PublicApi.postLogisticsOrderWaitSubmitUpdate({...data }).then(res => {
if (res.code === 1000) {
history.goBack()
}
})
}
}
} else if (!goodsRef.state) {
setbadge(badge[1] = 1)
message.error('请先添加商品')
}
}
const getBasicInfo = (value: any, index: number, type?: number) => {
console.log(value, index, 85)
const data = { ...parmas };
if (index === 1) {
data.companyName = value.children
setmemberInfo({ memberId: value.memberid, roleId: value.roleid })
} else if (index === 2) {
data.shipmentOrderId = value.id
data.shipmentOrderCode = value.shipmentOrderCode;//发货单号
data.receiverPhone = value.phone;
data.receiverName = value.receiverName;//收货方名称
data.receiverFullAddress = value.fullAddress;
data.receiverMemberName = value.memberName;
} else if (index === 3) {
if (!data.shipmentOrderId) {
data.receiverPhone = value.phone;
data.receiverName = value.receiverName;//收货方名称
data.receiverFullAddress = value.fullAddress;
data.receiverMemberName = value.memberName;
}
data.relevanceOrderId = value.id
data.relevanceOrderCode = value.orderNo
data.relevanceType = type;
} else {
data.shipperFullAddress = value.children
}
setParmas(data)
}
/**必填没填写出现角标 */
const getError = (num: number, idx: number) => {
const data = [...badge];
data[idx] = num;
setbadge(data);
}
const getGoodsList = (list: any) => {
const data = { ...parmas }
data.detailList = list;
setParmas(data);
}
useEffect(() => {
if (Object.keys(memberInfo).length > 0) {
PublicApi.getSettleAccountsPlatformConfigGetSettlementWay({ ...memberInfo }).then(res => {
if (res.code === 1000) {
console.log(res.data)
}
}).catch(error => {
message.error(error.message)
})
}
}, [memberInfo])
useEffect(() => {
const { id, createType, shipmentOrderCode, invoicesNo, relevanceType } = query;
if (id && type === 'edit') {
PublicApi.getLogisticsOrderWaitSubmitGet({ id }).then(res => {
if (res.code === 1000) {
setParmas(res.data)
}
})
} else if (id && type === 'add') {
const data = { ...parmas };
data.createType = Number(createType);
data.relevanceType = Number(relevanceType);
data.shipmentOrderCode = shipmentOrderCode;
data.relevanceOrderCode = invoicesNo;
switch (Number(relevanceType)) {
case 1:
new Promise(resolve => {
PublicApi.getWarehouseInvoicesDetails({ invoicesId: id }).then((res: any) => {
resolve(res.data)
})
}).then((res: any) => {
data.relevanceOrderId = res.relevanceInvoicesId
data.receiverPhone = res.phone;
data.receiverName = res.receiverName;//收货方名称
data.receiverFullAddress = res.fullAddress;
data.receiverMemberName = res.memberName;
}).catch(error => {
console.log(error)
})
break;
case 2:
break;
case 3:
break;
case 4:
break;
}
parmasRef.current = data
setParmas(parmasRef.current);
setAddId(Number(id));
}
}, [])
return (
<PageHeaderWrapper
onBack={() => history.goBack()}
backIcon={<ReturnEle description='返回' />}
extra={<Button type="primary" onClick={handleSubmit}> 保存</Button>}
>
<Card>
<Tabs type="card">
<TabPane key='tab-1' tab={<TabFormErrors dot={badge[0]}>基本信息</TabFormErrors>} forceRender>
<BasicInfo
addId={addId}
currentRef={basic}
set={parmas}
onBadge={getError}
onGet={getBasicInfo}
/>
</TabPane>
<TabPane key='tab-2' tab={<TabFormErrors dot={badge[1]}>物流单明细</TabFormErrors>} forceRender>
<Goods
addId={addId}
createType={query.createType}
currentRef={goods}
set={parmas}
onBadge={getError}
onGet={getGoodsList}
/>
</TabPane>
<TabPane key='tab-3' tab='运费' forceRender>
<Form {...layout}>
<Form.Item label='运费'>
<span></span>
</Form.Item>
<Form.Item label='结算方式'>
<span></span>
</Form.Item>
</Form>
</TabPane>
<TabPane key='tab-4' tab='流转记录' forceRender>
<Table />
</TabPane>
</Tabs>
</Card>
</PageHeaderWrapper>
)
}
export default AddEditLogistics
/*
* @Author: LeeJiancong
* @Date: 2020-07-28 11:25:30
* @LastEditors: LeeJiancong
* @Copyright: 1549414730@qq.com
* @LastEditTime: 2020-10-14 16:23:57
*/
import React, { Component, useEffect, useRef, useState, ReactNode } from 'react'
import { Card, Row, Col, Tabs, Button, Input as SelectInput, Badge, message } from 'antd'
import { LinkOutlined, PlusOutlined } from '@ant-design/icons'
import ModalTable, { ModalTableProps } from '@/components/ModalTable'
import { StandardTable } from 'god'
import { ColumnType, TableRowSelection } from 'antd/lib/table/interface'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { PATTERN_MAPS } from '@/constants/regExp'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PageStatus, usePageStatus } from '@/hooks/usePageStatus'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import SearchSelect from '@/components/NiceForm/components/SearchSelect'
import ListMadal from '../components/sumbitOrderModal'
import OrderLog from '../components/pageOrderLog'
import { PublicApi } from '@/services/api'
import {
Submit,
Reset,
SchemaForm,
ISchema,
Form,
FormItem,
MegaLayout,
FieldList,
SchemaMarkupField as Field,
FormEffectHooks,
useFormSpy,
createFormActions
} from '@formily/antd'
import createAscyncActions from '@formily/antd/esm'
import {
Input,
NumberPicker,
FormTab,
FormMegaLayout,
Select,
ArrayTable
} from '@formily/antd-components'
import ReturnEle from '@/components/ReturnEle'
import style from '../components/index.less'
import { history } from 'umi'
import moment from 'moment'
import { values, action } from 'mobx'
import Search from '@/components/NiceForm/components/Search'
const actions = createFormActions()
const { onFieldChange$, onFieldValueChange$ } = FormEffectHooks
const { TabPane } = Tabs
const data = [
{
key: '22',
name: '3'
},
{
key: '11',
name: '11'
},
]
const fetchData = (params: any) => {
return new Promise((resolve, reject) => {
const queryResult = data.find(v => v.key === params.keywords)
setTimeout(() => {
resolve({
code: 200,
message: '',
data: queryResult ? [queryResult] : data
})
}, 1000)
})
}
const Deatail: React.FC<{}> = () => {
const ref = useRef({})
const [visibleObj, setvisibleObj] = useState({
ModalSeletOrder1: false,
ModalSeletOrder2: false,
ModalSeletOrder3: false
})
let { query } = history.location
//保存发货 销售 退货 换货相关id和code
const [shipmentOrderCode, setshipmentOrderCode] = useState('')
const [invoicesNo, setinvoicesNo] = useState('')
const [initOrderObj, setinitOrderObj] = useState({
invoicesTypeId: null,
shipmentOrderCode: '',//发货单id orderDeliveryDetailsId
invoicesNo: '',//对应单据编号
relevanceOrderId: null,//订单id
relevanceType: 1,//对应单据类型 1-订单 2-换货申请单(退货发货) 3-换货申请单(换货发货) 4-退货申请单
})
const [rowSelection, goodRowCtl] = useRowSelectionTable({ type: "checkbox", customKey: 'id' })
let [companyList, setCompanyList] = useState([])
const [initialValues, setInitialValues] = useState<any>({})
const [relevanceType, setrelevanceType] = useState('1')//对应单据类型 1-订单 2-换货申请单(退货发货) 3-换货申请单(换货发货) 4-退货申请单
const [shipmentOrderID, setShipmentOrderID] = useState<any>(null)//发货单
const [invoicesId, setInvoicesId] = useState<any>(null)
const [headerTitle, setHeaderTitle] = useState<string>('')
let [shipperAddress, setshipperAddress] = useState([])
let [receiverAddress, setReceiverAddress] = useState('')
const { id, pageStatus } = usePageStatus()
const [totalVolume, setTotalVolume] = useState(0)
const [totalWeight, setTotalWeight] = useState(0)
const [totalCarton, setTotalCarton] = useState(0)//箱数
const [editable, setEditable] = useState(true)
const [loading, setloading] = useState(false);
const columns: ColumnType<any>[] = [
{
title: '序号',
align: 'center',
dataIndex: 'id',
key: 'id',
},
{
title: '状态',
align: 'left',
dataIndex: 'name',
key: 'name',
render: (text: number, record: any) => {
let component: ReactNode = null;
text === 1 ? component = <Badge status='default' text="待提交" /> :
text === 2 ? component = <Badge status='processing' text="待确认" /> :
text === 3 ? component = <Badge status='error' text="不接受物流单" /> :
component = <Badge status='success' text="接受物流单" />
return component;
},
},
{
title: '操作',
align: 'center',
dataIndex: '',
key: '',
},
{
title: '操作时间',
align: 'center',
dataIndex: '',
key: '',
},
{
title: '审核意见',
align: 'center',
dataIndex: '',
key: ''
}
]
/**
* @description: 选择订单
* @param {type}
* @return:
*/
const columns1: ColumnType<any>[] = [
{
title: '单据号',
align: 'left',
dataIndex: 'orderNo',
key: 'orderNo',
},
{
title: '单据摘要',
align: 'center',
dataIndex: 'orderThe',
key: 'orderThe'
},
{
title: '会员名称',
align: 'center',
dataIndex: 'supplyMembersName',
key: 'supplyMembersName',
},
{
title: '单据时间',
align: 'center',
dataIndex: 'createTime',
key: 'createTime',
render: (text: any) => <>{moment(text).format('YYYY-MM-DD HH:mm:ss')}</>
}
]
/**
* @description: 选择发货单
* @param {type}
* @return:
*/
const columns2: ColumnType<any>[] = [
{
title: '发货单号',
align: 'left',
dataIndex: 'invoicesNo',
key: 'invoicesNo',
},
{
title: '对应订单号',
align: 'center',
dataIndex: 'orderNo',
key: 'orderNo',
},
{
title: '单据摘要',
align: 'center',
dataIndex: 'invoicesAbstract',
key: 'invoicesAbstract'
},
{
title: '对应仓库',
align: 'center',
dataIndex: 'inventory',
key: 'inventory',
},
{
title: '单据类型',
align: 'center',
dataIndex: 'invoicesType',
key: 'invoicesType',
},
{
title: '单据时间',
align: 'center',
dataIndex: 'transactionTime',
key: 'transactionTime',
render: (text: any) => <>{moment(text).format('YYYY-MM-DD HH:mm:ss')}</>
}
]
/**
* @description: 选择商品
* @param {type}
* @return:
*/
const columns3: ColumnType<any>[] = [
{
title: 'ID',
align: 'center',
dataIndex: 'productId',
key: 'productId',
},
{
title: '商品名称',
align: 'center',
dataIndex: 'productName',
key: 'productName'
},
{
title: '品类',
align: 'center',
dataIndex: 'categoryName',
key: 'categoryName'
},
{
title: '品牌',
align: 'center',
dataIndex: 'brandName',
key: 'brandName'
}
]
/**
* @description: 挂载更新
* @param {type}
* @return:
*/
useEffect(() => {
// let _title = pageStatus === PageStatus.PREVIEW ? '查看' : id ? '编辑' : '新建'
// setHeaderTitle(`${_title}物流单`)
PublicApi.getLogisticsSelectListCompany({ cooperateType: '1' }).then(res => {
let list = []
res.data.forEach(item => {
list.push({ value: item.id, label: item.name })
})
setCompanyList(list)
})
PublicApi.getLogisticsSelectListShipperAddress().then(res => {
let list = []
res.data.forEach(item => {
list.push({ value: item.id, label: item.fullAddress })
})
setshipperAddress(list)
})
//详情
if (id) {
PublicApi.getLogisticsOrderWaitSubmitGet({ id: id }).then(res => {
if (res.code === 1000) {
let { data } = res
setInitialValues(data)
}
})
}
console.log('query', query)
//从销售订单来
if (query.orderId) {
PublicApi.getOrderPurchaseOrderDetails({ id: query.orderId }).then(res => {
if (res.code === 1000) {
actions.setFieldValue('receiverName', res.data.receiverName)
}
})
//发货单号
if (query.shipmentOrderCode) {
setshipmentOrderCode(query.shipmentOrderCode)
}
//设置地址 发货单id 逻辑有物流单的用物流单优先 无物流单用订单 二选一
setShipmentOrderID(query.orderDeliveryDetailsId || null)//发货单id
setInvoicesId(query.invoicesId || null)//订单id
//订单号
if (query.invoicesNo) {
setinvoicesNo(query.invoicesNo)
}
if (query.orderDeliveryDetailsId) {//发货单
PublicApi.getWarehouseInvoicesList({
current: '1',
pageSize: '1000'
}).then(res => {
if (res.code === 1000) {
console.log(res.data, 100086)
let v = res.data.data.filter(v => v.id == query.orderDeliveryDetailsId).map(v => v)
let { memberName, fullAddress, deliveryAddresId } = v[0] || {}
actions.setFieldValue('receiverName', memberName)
actions.setFieldValue('receiverAddressId', deliveryAddresId)
actions.setFieldValue('receiverFullAddress', fullAddress)
}
})
return
}
if (query.invoicesId) {//订单
PublicApi.getOrderLogisticsOrderList({
current: '1',
pageSize: '100000'
}).then(res => {
if (res.code === 1000) {
let v = res.data.data.filter(v => v.id == query.invoicesId).map(v => v)
let { memberName, fullAddress, deliveryAddresId } = v[0] || {}
actions.setFieldValue('receiverName', memberName)
actions.setFieldValue('receiverAddressId', deliveryAddresId)
actions.setFieldValue('receiverFullAddress', fullAddress)
}
})
}
}
return () => {
}
}, [])
//具体可以看 formProduct
const formSearch: ISchema = {
type: 'object',
properties: {
productName: {
type: 'string',
'x-component': 'ModalSearch',
'x-component-props': {
placeholder: '请输入商品名称',
align: 'flex-left',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
rowStyle: {
flexWrap: 'nowrap',
style: {
marginRight: 0
}
},
colStyle: {
marginTop: 20,
},
},
properties: {
category: {
type: 'string',
"x-component": 'Select',
"x-component-props": {
placeholder: '请输入品类',
className: 'fixed-ant-selected-down', // 该类强制将显示的下拉框出现在select下, 只有这里出现问题, ??
fetchSearch: PublicApi.getProductSelectGetSelectCustomerCategory,
style: {
width: 160
}
},
},
brand: {
type: 'string',
"x-component": 'Input',
"x-component-props": {
placeholder: '请输入品牌',
fetchSearch: PublicApi.getProductSelectGetSelectBrand,
style: {
width: 160
}
}
},
submit: {
"x-component": 'Submit',
"x-mega-props": {
span: 1
},
"x-component-props": {
children: '查询'
}
}
}
}
}
}
const handleLink = (type: number) => {
switch (type) {
//订单
case 1:
setvisibleObj({ ...visibleObj, ModalSeletOrder1: true })
break;
//发货单
case 2:
setvisibleObj({ ...visibleObj, ModalSeletOrder2: true })
break;
}
}
const selectBtn1 = (
<Button style={{ backgroundColor: '#909399', borderColor: '#909399', color: 'white' }} onClick={() => handleLink(1)}>
<LinkOutlined />选择
</Button>
)
const selectBtn2 = (
<Button style={{ backgroundColor: '#909399', borderColor: '#909399', color: 'white' }} onClick={() => handleLink(2)}>
<LinkOutlined />选择
</Button>
)
/**
* @description: 保存
* @param {type}
* @return {type}
*/
const FormSubmit = (values: any) => {
let value = { ...values }
console.log(value)
setloading(true)
if (query.orderId) {//销售订单过来的
// value['orderId'] = query.orderId
// value['orderDeliveryDetailsId'] = query.orderDeliveryDetailsId
value['shipmentOrderId'] = query.orderDeliveryDetailsId
value['shipmentOrderCode'] = query.shipmentOrderCode
value['relevanceType'] = Number(query.invoicesTypeId)
value['relevanceOrderId'] = query.invoicesId
value['receiverName'] = actions.getFieldValue('receiverName')
value['receiverAddressId'] = actions.getFieldValue('receiverAddressId')
value['invoicesNo'] = query.invoicesNo //对应单据编号
console.log('value', value, JSON.stringify(value))
PublicApi.postOrderLogisticsOrderAdd(value).then(res => {
if (res.code === 1000) {
setTimeout(() => {
history.goBack()
}, 1000)
}
}).catch(error => {
setloading(false)
})
} else {//原页面 物流进来
if (id) {
value['id'] = id
value['relevanceType'] = Number(relevanceType)
PublicApi.postLogisticsOrderWaitSubmitUpdate(value).then(res => {
if (res.code === 1000) {
setTimeout(() => {
history.goBack()
}, 1000)
}
}).catch(error => {
setloading(false)
})
} else {
value['relevanceType'] = Number(relevanceType)
PublicApi.postLogisticsOrderWaitSubmitAdd(value).then(res => {
if (res.code === 1000) {
setTimeout(() => {
history.goBack()
}, 1000)
}
}).catch(error => {
setloading(false)
})
}
}
}
const headList = [
{
name: 'ID',
span: 2
},
{
name: '商品名称',
span: 5
},
{
name: '品类',
span: 2
},
{
name: '品牌',
span: 3
},
{
name: '单位',
span: 1
},
{
name: '数量',
span: 3
},
{
name: '箱数',
span: 3
},
{
name: '重量 (KG)',
span: 2
}, {
name: '体积 (M3)',
span: 2
},
, {
name: '操作',
span: 1
}
]
/**
* @description: 自定义hook 计算属性
* @param {type}
* @return {type}
*/
const useTabEffect = () => {
const { setFieldValue } = createFormActions()
onFieldValueChange$('detailList').subscribe(({ value }) => {
// setFieldValue('detailList', [...value])
let detailData = [...value]
computedALL(detailData)
})
}
/**
* @description: 结算 计算
* @param {type}
* @return {type}
*/
const computedALL = (data) => {
let _totalCarton = 0, _totalVolume = 0, _totalWeight = 0
if (data && data.length > 0) {
console.log('全部', data)
data.forEach(v => {
if (v.amount && v.carton) {
_totalCarton += Number(v.carton)
}
if (v.amount && v.volume) {
_totalVolume += Number(v.volume)
}
if (v.amount && v.weight) {
_totalWeight += Number(v.weight)
}
});
}
setTotalCarton(_totalCarton)
setTotalVolume(_totalVolume)
setTotalWeight(_totalWeight)
}
/**
* @description: 订单 || 发货单弹窗
* @param {type}
* @return {type}
*/
const handleOnOK = (type, values, params) => {
console.log(type, values, '参数:', params)
let { id, orderNo, deliveryAddresId, fullAddress, memberName, invoicesNo, receiverName } = values[0]
switch (type) {
case 1://订单
setrelevanceType(params.orderType)//订单类型
actions.setFieldValue('invoicesNo', orderNo)
actions.setFieldValue('relevanceOrderId', id)
// setReceiverAddress(address)
// deliveryAddresId
setInvoicesId(id)
//需求 发货人和发货地址已发货单为准
if (!actions.getFieldValue('receiverAddressId')) {
actions.setFieldValue("receiverAddressId", deliveryAddresId)
}
if (!actions.getFieldValue('receiverFullAddress')) {
actions.setFieldValue("receiverFullAddress", fullAddress)
}
if (!actions.getFieldValue('receiverName')) {
actions.setFieldValue("receiverName", memberName)
}
setvisibleObj({ ...visibleObj, ModalSeletOrder1: false })
break;
case 2://发货单
// memberName 收货方
setShipmentOrderID(id)
actions.setFieldValue('shipmentOrderCode', invoicesNo)
actions.setFieldValue("receiverName", receiverName)
actions.setFieldValue('shipmentOrderId', id)// 发货单id
actions.setFieldValue("invoicesTypeId", 1)//发货单
actions.setFieldValue("receiverAddressId", deliveryAddresId)
actions.setFieldValue("receiverFullAddress", fullAddress)
setvisibleObj({ ...visibleObj, ModalSeletOrder2: false })
break;
}
}
/**
* @description: 保存商品
* @param {type}
* @return {type}
*/
const handleConfirmProduct = () => {
console.log('goodRowCtl', goodRowCtl)
let list = [...goodRowCtl.selectRow]
list.forEach((val: any) => {
if (!val.hasOwnProperty('amount')) {
val['amount'] = null
}
if (!val.hasOwnProperty('carton')) {
val['carton'] = null
}
if (!val.hasOwnProperty('weight')) {
val['weight'] = null
}
if (!val.hasOwnProperty('volume')) {
val['volume'] = null
}
})
actions.setFieldValue("detailList", goodRowCtl.selectRow)
setvisibleObj({ ...visibleObj, ModalSeletOrder3: false })
}
const data2 = [
{
id: '1',
productId: '1',
productName: '名称1',
categoryName: '品类1',
brandName: '品牌',
unitName: '单位1'
},
{
id: '2',
productId: '2',
productName: '名称2',
categoryName: '品类2',
brandName: '品牌2',
unitName: '单位2'
},
]
/**
* @description: 选择商品
* @param {type}
* @return {type}
*/
const fetchProductList = async (params) => {
// if(shipmentOrderID === null){//发货单id
// message.error('请先选择发货单')
// return
// }
if (shipmentOrderID) {//发货单
const res = await PublicApi.getWarehouseInvoicesProductList({ ...params, invoicesId: shipmentOrderID })
return res.data
} else {//订单
const res = await PublicApi.getOrderProcurementOrderProductPageList({ ...params, id: invoicesId })
return res.data
}
}
return (
<>
<PageHeaderWrapper
onBack={() => history.goBack()}
title={headerTitle}
backIcon={<ReturnEle description='返回' />}
extra={<Button type="primary" onClick={() => actions.submit()} loading={loading}> 保存</Button>}
>
<Card>
<Row>
<Col span={24}>
<Form
actions={actions}
editable={pageStatus === PageStatus.PREVIEW ? false : true}
initialValues={initialValues}
labelCol={5}
onSubmit={(values) => FormSubmit(values)}
effects={() => useTabEffect()}
>
<Tabs key='tabs' type="card" defaultActiveKey={'tab-1'}>
<TabPane key='tab-1' tab='基本信息' forceRender>
<Row>
<Col span={12}>
<FormItem name="companyId" label="物流服务商" dataSource={companyList} required component={Select} />
<FormItem name="digest" label="单据摘要" required component={Input} />
{
query.invoicesTypeId != 2 &&
<Row style={{ marginLeft: '23px' }}>
<Col span={21}>
<FormItem editable={false} name="shipmentOrderCode" label='对应发货单号' component={Input}></FormItem>
</Col>
<Col span={3} >
{selectBtn2}
</Col>
<Col span={21}>
<FormItem editable={false} name="invoicesNo" label='对应订单号/售后单' component={Input}></FormItem>
</Col>
<Col span={3}>
{selectBtn1}
</Col>
</Row>
}
{
query.invoicesTypeId == 2 &&
<>
<FormItem label='对应发货单号' name="shipmentOrder_Code">
<Button type="link">{shipmentOrderCode}</Button>
</FormItem>
<FormItem label='对应订单号/售后单' name="invoices_No">
<Button type="link">{invoicesNo}</Button>
</FormItem>
</>
}
<FormItem editable={false} name="receiverName" label='收货方' component={Input} />
<FormItem display={false} editable={false} name="receiverAddressId" label='收货地址id' component={Input} />
<FormItem display={false} editable={false} name="shipmentOrderId" label='发货单Id' component={Input} />
<FormItem display={false} editable={false} name="relevanceOrderId" label='对应订单id' component={Input} />
{/* <FormItem display={false} editable={false} name="invoicesTypeId" label='订单类型' component={Input}/> */}
<FormItem editable={false} name="receiverFullAddress" label='收货地址' component={Input} />
<FormItem name="shipperAddressId" label="发货地址" dataSource={shipperAddress} required component={Select} />
</Col>
</Row>
</TabPane>
<TabPane key="tab-2" tab="物流单明细" forceRender>
<FieldList
name="detailList"
// initialValue={[
// ]}
>
{({ state, mutators }) => {
// const onAdd = () => mutators.push()
const selectGoods = () => {
if (!shipmentOrderID && !invoicesId) {
message.error('请先选择发货单')
return
}
setvisibleObj({ ...visibleObj, ModalSeletOrder3: true })
}
return (
<>
<Button style={{ marginBottom: 16, marginTop: 24 }} block icon={<PlusOutlined />} onClick={selectGoods} type='dashed'>选择商品</Button>
<div>
<Row gutter={[10, 10]} justify="center">
{
headList.map((item, index) => {
return <Col key={index} className={item.name == '商品名称' ? style['alignLeft'] : style['alignCenter']} span={item.span}>{item.name}</Col>
})
}
</Row>
{state.value.map((item: any, index: any) => {
const onRemove = (index: number) => {
// let _list = list.splice(index, 1)
// console.log('_list', _list,mutators)
mutators.remove(index)
let list = actions.getFieldValue('detailList')
// actions.setFieldValue('detailList', ...list)
computedALL(list)
}
return (
<>
<Row gutter={[10, 10]} key={'index' + index}>
<Col span={2} className={style['alignCenter']}>
<FormItem
name={`detailList.${index}.productId`}
component={Input}
editable={false}
required
/>
</Col>
<Col span={5} >
<FormItem
name={`detailList.${index}.productName`}
component={Input}
required
editable={false}
/>
</Col>
<Col span={2} className={style['alignCenter']}>
<FormItem
name={`detailList.${index}.categoryName`}
component={Input}
required
editable={false}
/>
</Col>
<Col span={3} className={style['alignCenter']}>
<FormItem
name={`detailList.${index}.brandName`}
component={Input}
required
editable={false}
/>
</Col>
<Col span={1} className={style['alignCenter']}>
<FormItem
name={`detailList.${index}.unitName`}
component={Input}
required
editable={false}
/>
</Col>
<Col span={3} className={style['alignCenter']}>
<FormItem
name={`detailList.${index}.amount`}
component={NumberPicker}
required
/>
</Col>
<Col span={3} className={style['alignCenter']}>
<FormItem
name={`detailList.${index}.carton`}
component={NumberPicker}
required
/>
</Col>
<Col span={2} >
<FormItem
name={`detailList.${index}.weight`}
component={NumberPicker}
rules={
[
{
// pattern:''
message: '请输入数值'
}
]
}
required
/>
</Col>
<Col span={2}>
<FormItem
name={`detailList.${index}.volume`}
component={NumberPicker}
required
/>
</Col>
<Col span={1}>
<Button type='link' onClick={() => onRemove(index)}>删除</Button>
</Col>
</Row>
</>
)
})}
<Row style={{ marginTop: '26px' }}>
<Col span={9} push={15}>
<Row align='middle' justify='center' gutter={[16, 16]}>
<Col span={8} >
<div>总箱数(箱)</div>
<div className={style.count}>{totalCarton}</div>
</Col>
<Col span={8} >
<div>总重量(KG)</div>
<div className={style.count}>{totalWeight}</div>
</Col>
<Col span={8} >
<div>总体积(M3)</div>
<div className={style.count}>{totalVolume}</div>
</Col>
</Row>
</Col>
</Row>
</div>
</>
)
}}
</FieldList>
</TabPane>
<TabPane key='tab-3' tab='运费' forceRender>
<FormItem labelAlign="left" labelCol={{ span: 2 }} editable={false} name="fregint" label="运费">
<>{initialValues.freightPrice || '未报价'}</>
</FormItem>
<FormItem labelAlign="left" labelCol={{ span: 2 }} editable={false} name="fregint2" label="结算方式">
<>{initialValues.freightPrice || '-'}</>
</FormItem>
</TabPane>
<TabPane key='tab-4' tab='流转记录' forceRender>
<OrderLog id={id} type="Submit" />
</TabPane>
</Tabs>
</Form>
</Col>
</Row>
</Card>
<ListMadal title='选择订单'
columns={columns1}
type={1}
onOk={(type, values, params) => handleOnOK(type, values, params)}
dialogVisible={visibleObj.ModalSeletOrder1}
onCancel={() => setvisibleObj({ ...visibleObj, ModalSeletOrder1: false })}
/>
<ListMadal title='选择发货单'
columns={columns2}
type={2}
onOk={(type, values, params) => handleOnOK(type, values, params)}
dialogVisible={visibleObj.ModalSeletOrder2}
onCancel={() => setvisibleObj({ ...visibleObj, ModalSeletOrder2: false })}
/>
<ModalTable
modalTitle='选择商品'
confirm={handleConfirmProduct}
cancel={() => setvisibleObj({ ...visibleObj, ModalSeletOrder3: false })}
visible={visibleObj.ModalSeletOrder3}
columns={columns3}
rowSelection={rowSelection}
rowKey={'id'}
fetchTableData={params => fetchProductList(params)}
formilyProps={
{
ctx: {
schema: formSearch,
components: { ModalSearch: Search, SearchSelect, Submit, Input },
effects: ($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'productName',
FORM_FILTER_PATH,
);
}
}
}
}
tableProps={{
rowKey: 'id'
}}
/>
</PageHeaderWrapper>
</>
)
}
export default Deatail
......@@ -173,7 +173,7 @@ export const enquierySearchSchema: ISchema = {
inline: true
},
properties:{
inquiryListMemberName:{
memberName:{
type:'string',
"x-component-props":{
placeholder:'询价会员'
......@@ -458,7 +458,7 @@ export const quoteFormSearch: ISchema = {
placeholder:'询价单号'
}
},
inquiryListMemberName:{
memberName:{
type:'string',
"x-component-props":{
placeholder:'询价会员'
......
......@@ -164,7 +164,7 @@ export const inquiryQuoteSchema: ISchema = {
placeholder: '报价单摘要'
}
},
inquiryListMemberName: {
memberName: {
type: 'string',
"x-component-props": {
placeholder: '询价会员'
......
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