Commit ae6a9d38 authored by GuanHua's avatar GuanHua
parents 590ad7a4 6d5e7503
...@@ -44,13 +44,13 @@ const Relevance = props => { ...@@ -44,13 +44,13 @@ const Relevance = props => {
const tableRowLableKey = tableProps.lableKey || ''; // Input展示用的 key val const tableRowLableKey = tableProps.lableKey || ''; // Input展示用的 key val
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
const [rowSelection, rowCtl] = useRowSelectionTable({ type: selectionType }); const [rowSelection, rowCtl] = useRowSelectionTable({ type: selectionType, customKey: tableRowKey });
useEffect(() => { useEffect(() => {
// Table 只能缓存 keys // Table 只能缓存 keys
const rowKeys = value.map(item => item[tableRowKey]); const rowKeys = value.map(item => item[tableRowKey]);
rowCtl.setSelectedRowKeys(rowKeys); rowCtl.setSelectedRowKeys(rowKeys);
}, [props.value]); }, [props.value, tableProps.rowKey]);
const handleConfirm = () => { const handleConfirm = () => {
const rows = rowCtl.selectRow; const rows = rowCtl.selectRow;
......
...@@ -670,27 +670,27 @@ export enum SaleOrderInsideWorkState { ...@@ -670,27 +670,27 @@ export enum SaleOrderInsideWorkState {
CONFIRM_NOT_PAY_RESULT, CONFIRM_NOT_PAY_RESULT,
/** /**
* 订单销售,发货单创建 * 待新增销售发货单
*/ */
SALE_CREATE_DELIVED_ORDER, SALE_CREATE_DELIVED_ORDER,
/** /**
* 新增物流单 * 待新增物流单(发货单审核成功)
*/ */
ADD_LOGISTICS_ORDER, ADD_LOGISTICS_ORDER,
/** /**
* 订单发货确认 * 待确认发货(物流单审核成功)
*/ */
CONFIRM_DELIVERY_ORDER, CONFIRM_DELIVERY_ORDER,
/** /**
* 确认回单 * 待确认回单(已确认发货)
*/ */
CONFIRM_RECEIPT = 23, CONFIRM_RECEIPT = 23,
/** /**
* 订单归档 * 待订单归档(已确认回单)
*/ */
FILLING_ORDER, FILLING_ORDER,
...@@ -700,7 +700,7 @@ export enum SaleOrderInsideWorkState { ...@@ -700,7 +700,7 @@ export enum SaleOrderInsideWorkState {
READY_DELEVED_APPROVED, READY_DELEVED_APPROVED,
/** /**
* 销售发货单审核成功 * 待审核物流单(新增物流单成功)
*/ */
DELIVERY_APPROVED_SUCCESS DELIVERY_APPROVED_SUCCESS
} }
......
...@@ -7,6 +7,7 @@ import { StandardTable } from 'god' ...@@ -7,6 +7,7 @@ import { StandardTable } from 'god'
import {ColumnType} from 'antd/lib/table/interface'; import {ColumnType} from 'antd/lib/table/interface';
import ReutrnEle from '@/components/ReturnEle'; import ReutrnEle from '@/components/ReturnEle';
import { PublicApi } from '@/services/api'; import { PublicApi } from '@/services/api';
import { validatorByte } from '@/utils/regExp';
const { Option } = Select; const { Option } = Select;
...@@ -180,9 +181,12 @@ const AddAtttribute: React.FC<{}> = () => { ...@@ -180,9 +181,12 @@ const AddAtttribute: React.FC<{}> = () => {
required: true, required: true,
message: '输入属性组名!', message: '输入属性组名!',
}, },
{
validator: (r, v, c) => validatorByte(r, v, c, 20)
}
]} ]}
> >
<Input maxLength={10} placeholder="输入属性组名" disabled={isSee} /> <Input placeholder="输入属性组名" disabled={isSee} />
</Form.Item> </Form.Item>
</Col> </Col>
<Col span={18}> <Col span={18}>
...@@ -202,9 +206,12 @@ const AddAtttribute: React.FC<{}> = () => { ...@@ -202,9 +206,12 @@ const AddAtttribute: React.FC<{}> = () => {
required: true, required: true,
message: '输入属性名称!', message: '输入属性名称!',
}, },
{
validator: (r, v, c) => validatorByte(r, v, c, 20)
}
]} ]}
> >
<Input maxLength={10} placeholder="输入属性名称" disabled={isSee} /> <Input placeholder="输入属性名称" disabled={isSee} />
</Form.Item> </Form.Item>
</Col> </Col>
<Col span={18}> <Col span={18}>
......
...@@ -9,6 +9,7 @@ import { PublicApi } from '@/services/api'; ...@@ -9,6 +9,7 @@ import { PublicApi } from '@/services/api';
import TabTree, { useTreeActions, createTreeActions } from '@/components/TabTree'; import TabTree, { useTreeActions, createTreeActions } from '@/components/TabTree';
import { useTreeTabs } from '@/hooks/useTreeTabs'; import { useTreeTabs } from '@/hooks/useTreeTabs';
import { GetManageAreaAllResponse } from '@/services'; import { GetManageAreaAllResponse } from '@/services';
import { validatorByte } from '@/utils/regExp';
const layout = { const layout = {
labelCol: { labelCol: {
...@@ -202,9 +203,12 @@ const AddPropertyValue: React.FC<{}> = () => { ...@@ -202,9 +203,12 @@ const AddPropertyValue: React.FC<{}> = () => {
required: true, required: true,
message: '输入属性值名称!', message: '输入属性值名称!',
}, },
{
validator: (r, v, c) => validatorByte(r, v, c, 12)
}
]} ]}
> >
<Input maxLength={12} placeholder="输入属性值名称" disabled={isSee} /> <Input placeholder="输入属性值名称" disabled={isSee} />
</Form.Item> </Form.Item>
} }
{ {
......
...@@ -9,6 +9,7 @@ import ReutrnEle from '@/components/ReturnEle'; ...@@ -9,6 +9,7 @@ import ReutrnEle from '@/components/ReturnEle';
import styles from './index.less' import styles from './index.less'
import { PublicApi } from '@/services/api'; import { PublicApi } from '@/services/api';
import { GetProductCustomerGetCustomerCategoryTreeResponse } from '@/services'; import { GetProductCustomerGetCustomerCategoryTreeResponse } from '@/services';
import { validatorByte } from '@/utils/regExp';
const { Option } = Select; const { Option } = Select;
const layout = { const layout = {
...@@ -158,9 +159,12 @@ const AddGoods = () => { ...@@ -158,9 +159,12 @@ const AddGoods = () => {
required: true, required: true,
message: '请填入货品名称' message: '请填入货品名称'
}, },
{
validator: (r, v, c) => validatorByte(r, v, c, 40)
}
]} ]}
> >
<Input placeholder="最长20个字符" maxLength={20} disabled={isSee} /> <Input placeholder="最长40个字符20个汉字" disabled={isSee} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name="type" name="type"
...@@ -170,9 +174,12 @@ const AddGoods = () => { ...@@ -170,9 +174,12 @@ const AddGoods = () => {
required: true, required: true,
message: '请填入规格型号' message: '请填入规格型号'
}, },
{
validator: (r, v, c) => validatorByte(r, v, c, 40)
}
]} ]}
> >
<Input placeholder="最长20个字符" maxLength={20} disabled={isSee} /> <Input placeholder="最长40个字符20个汉字" disabled={isSee} />
</Form.Item> </Form.Item>
{/* <Form.Item {/* <Form.Item
name={['customerCategory', 'id']} name={['customerCategory', 'id']}
......
...@@ -162,29 +162,18 @@ const AddProducts: React.FC<{}> = (props) => { ...@@ -162,29 +162,18 @@ const AddProducts: React.FC<{}> = (props) => {
if(_productAttributeAndImageParams.length>0){ if(_productAttributeAndImageParams.length>0){
_productAttributeAndImageParams.map(_item => { _productAttributeAndImageParams.map(_item => {
console.log(_item, '_item') console.log(_item, '_item')
_item.goods = { id: _item.goodsId } // id为0表示无货品 _item.goods = { id: _item.goodsId } // id为0表示无货品
delete _item.goodsId delete _item.goodsId
// if(_item.attributeAndValueList.length>0){
// _item.attributeAndValueList.map(__item => {
// delete __item.customerAttributeName
// // **** 新字段结构变更
// __item.customerAttribute = { id: __item.customerAttributeId }
// __item.customerAttributeValue = { id: __item.id, value: __item.value }
// delete __item.id
// delete __item.value
// delete __item.customerAttributeId
// })
// }
if(_item.commodityPic.length>0){ if(_item.commodityPic.length>0){
// 编辑情况下兼顾手动添加图片列表属性 // 编辑情况下兼顾手动添加图片列表属性
console.log('不一定')
_item.commodityPic = _item.commodityPic.map(__item => __item?.response?.data || __item?.url) _item.commodityPic = _item.commodityPic.map(__item => __item?.response?.data || __item?.url)
// 多种属性组合 所有属性共用的情况下 每一行都是用第一项 // 多种属性组合 所有属性共用的情况下 每一行都是用第一项
if(isAllAttributePic) if(isAllAttributePic)
_item.commodityPic = _productAttributeAndImageParams[0].commodityPic _item.commodityPic = _productAttributeAndImageParams[0].commodityPic
}else{ }else{
if(isAllAttributePic && _productAttributeAndImageParams[0].commodityPic.length>0){ //处理所有属性共用 if(isAllAttributePic && _productAttributeAndImageParams[0].commodityPic.length>0){ //处理所有属性共用
console.log('所有属性共用')
_item.commodityPic = _productAttributeAndImageParams[0].commodityPic _item.commodityPic = _productAttributeAndImageParams[0].commodityPic
} }
else else
...@@ -201,7 +190,6 @@ const AddProducts: React.FC<{}> = (props) => { ...@@ -201,7 +190,6 @@ const AddProducts: React.FC<{}> = (props) => {
}else{ // 编辑 没有点击商品图片 }else{ // 编辑 没有点击商品图片
_params.unitPriceAndPicList = productInfoByEdit.unitPriceAndPicList _params.unitPriceAndPicList = productInfoByEdit.unitPriceAndPicList
if(clickTabIndex.indexOf("4") !== -1){ // 没有点击图片单单修改了商品价格 取原有的图片和新的价格合成 if(clickTabIndex.indexOf("4") !== -1){ // 没有点击图片单单修改了商品价格 取原有的图片和新的价格合成
console.log('仅修改商品价格')
_params.unitPriceAndPicList = priceAttributeParams.map((item, index) => { _params.unitPriceAndPicList = priceAttributeParams.map((item, index) => {
return { return {
goods: { id: item.goodsId }, goods: { id: item.goodsId },
......
...@@ -17,6 +17,7 @@ import { inject, observer } from 'mobx-react' ...@@ -17,6 +17,7 @@ import { inject, observer } from 'mobx-react'
// import { IProductModule } from '@/module/productModule' // import { IProductModule } from '@/module/productModule'
// import { IStore } from '@/store'; // import { IStore } from '@/store';
import { store } from '@/store' import { store } from '@/store'
import { validatorByte } from '@/utils/regExp';
const { Option } = Select const { Option } = Select
const layout = { const layout = {
...@@ -268,9 +269,12 @@ const BasicInfoForm: React.FC<Iprops> = (props) => { ...@@ -268,9 +269,12 @@ const BasicInfoForm: React.FC<Iprops> = (props) => {
required: true, required: true,
message: '商品名称' message: '商品名称'
}, },
{
validator: (r, v, c) => validatorByte(r, v, c, 90)
}
]} ]}
> >
<Input placeholder="商品名称" maxLength={45} onBlur={e =>onChangeName(e.target.value)}/> <Input placeholder="商品名称" onBlur={e =>onChangeName(e.target.value)}/>
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name="slogan" name="slogan"
...@@ -282,14 +286,17 @@ const BasicInfoForm: React.FC<Iprops> = (props) => { ...@@ -282,14 +286,17 @@ const BasicInfoForm: React.FC<Iprops> = (props) => {
</Tooltip> </Tooltip>
</span> </span>
} }
// rules={[ rules={[
// { // {
// required: true, // required: true,
// message: '请填入商品标语' // message: '请填入商品标语'
// }, // },
// ]} {
validator: (r, v, c) => validatorByte(r, v, c, 90)
}
]}
> >
<Input placeholder="请输入商品标语" maxLength={45} /> <Input placeholder="请输入商品标语" />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name="sellingPoint" name="sellingPoint"
...@@ -312,6 +319,7 @@ const BasicInfoForm: React.FC<Iprops> = (props) => { ...@@ -312,6 +319,7 @@ const BasicInfoForm: React.FC<Iprops> = (props) => {
mode="tags" mode="tags"
placeholder="请输入或选择商品卖点" placeholder="请输入或选择商品卖点"
maxTagCount={3} maxTagCount={3}
maxTagTextLength={8}
tagRender={tagRender} tagRender={tagRender}
/> />
</Form.Item> </Form.Item>
......
...@@ -2,6 +2,7 @@ import React, { useState, useEffect, useRef } from 'react' ...@@ -2,6 +2,7 @@ import React, { useState, useEffect, useRef } from 'react'
import { history } from 'umi' import { history } from 'umi'
import { Form, Select, Radio, Input } from 'antd' import { Form, Select, Radio, Input } from 'antd'
import { store } from '@/store' import { store } from '@/store'
import { validatorByte } from '@/utils/regExp'
const { ProductStore } = store const { ProductStore } = store
const layout = { const layout = {
...@@ -60,20 +61,35 @@ const OtherForm: React.FC<Iprops> = (props) => { ...@@ -60,20 +61,35 @@ const OtherForm: React.FC<Iprops> = (props) => {
<Form.Item <Form.Item
name="marks" name="marks"
label="唛头" label="唛头"
rules={[
{
validator: (r, v, c) => validatorByte(r, v, c, 50)
}
]}
> >
<Input maxLength={25} placeholder="请输入唛头(最长25个字符)" /> <Input placeholder="最长50个字符25个汉字" />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name="packing" name="packing"
label="包装清单" label="包装清单"
rules={[
{
validator: (r, v, c) => validatorByte(r, v, c, 120)
}
]}
> >
<TextArea maxLength={120} rows={4} placeholder="最长120个字符" /> <TextArea rows={4} placeholder="最长120个字符60个汉字" />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name="afterService" name="afterService"
label="售后服务" label="售后服务"
rules={[
{
validator: (r, v, c) => validatorByte(r, v, c, 300)
}
]}
> >
<TextArea maxLength={300} rows={4} placeholder="最长300个字符" /> <TextArea rows={4} placeholder="最长300个字符150个汉字" />
</Form.Item> </Form.Item>
</Form> </Form>
</>) </>)
......
...@@ -5,6 +5,7 @@ import styles from './index.less' ...@@ -5,6 +5,7 @@ import styles from './index.less'
import { inject, observer } from 'mobx-react' import { inject, observer } from 'mobx-react'
import { store } from '@/store' import { store } from '@/store'
import { validatorByte } from '@/utils/regExp'
const layout = { const layout = {
labelCol: { labelCol: {
...@@ -166,20 +167,6 @@ const ProductAttributeForm: React.FC<Iprops> = (props) => { ...@@ -166,20 +167,6 @@ const ProductAttributeForm: React.FC<Iprops> = (props) => {
_isDisabled = _isPrice && !_isUpdateAttribute _isDisabled = _isPrice && !_isUpdateAttribute
} }
// 校验字节
const validatorByte = (rule, value, callback) => {
try {
let str = value
str = str.replace(/[\u4e00-\u9fa5]/g, 'OO')
if(str.length > 60)
throw new Error('最多输入60个字符,30个汉字');
else
callback()
} catch (err) {
callback(err)
}
}
return ( return (
<> <>
{ {
...@@ -253,13 +240,12 @@ const ProductAttributeForm: React.FC<Iprops> = (props) => { ...@@ -253,13 +240,12 @@ const ProductAttributeForm: React.FC<Iprops> = (props) => {
required: true, required: true,
message: '此项为必填项' message: '此项为必填项'
},{ },{
validator: validatorByte validator: (r, v, c) => validatorByte(r, v, c, 60)
}]} }]}
> >
<TextArea <TextArea
disabled={_isDisabled} disabled={_isDisabled}
onChange={(v)=>onChange(v, attrItem)} onChange={(v)=>onChange(v, attrItem)}
maxLength={60}
placeholder="最多输入60个字符,30个汉字" placeholder="最多输入60个字符,30个汉字"
rows={4} rows={4}
/> />
......
...@@ -150,15 +150,17 @@ const ProductImageForm: React.FC<Iprops> = (props) => { ...@@ -150,15 +150,17 @@ const ProductImageForm: React.FC<Iprops> = (props) => {
const handleChange = ({ file, fileList }, index) => { const handleChange = ({ file, fileList }, index) => {
let _priceAttributeParams = [...priceAttributeParamsByRender] let _priceAttributeParams = [...priceAttributeParamsByRender]
console.log(_priceAttributeParams, index, '图片更改初始数据') // console.log(_priceAttributeParams, index, '图片更改初始数据')
setCommonImageList(fileList) setCommonImageList(fileList)
_priceAttributeParams[index].commodityPic = fileList if(file?.response?.data){ // 服务端是否响应正常url字符
_priceAttributeParams[index].commodityPic = fileList
}
if(!file?.status && file?.status !== 'done'){ if(!file?.status && file?.status !== 'done'){
let ttt = _priceAttributeParams[index].commodityPic.filter(_ => _.status === 'done') let ttt = _priceAttributeParams[index].commodityPic.filter(_ => _.status === 'done')
_priceAttributeParams[index].commodityPic = ttt _priceAttributeParams[index].commodityPic = ttt
setCommonImageList(ttt) setCommonImageList(ttt)
} }
console.log(_priceAttributeParams, '图片更改之后数据') // console.log(_priceAttributeParams, '图片更改之后数据')
setPriceAttributeParamsByRender(_priceAttributeParams) setPriceAttributeParamsByRender(_priceAttributeParams)
setProductAttributeAndImageParams(_priceAttributeParams) setProductAttributeAndImageParams(_priceAttributeParams)
} }
......
...@@ -181,6 +181,8 @@ const AddMember: React.FC<any> = props => { ...@@ -181,6 +181,8 @@ const AddMember: React.FC<any> = props => {
areas: filtered, areas: filtered,
remark, remark,
detail: rest, detail: rest,
}, {
timeout: 0,
}).then(res => { }).then(res => {
if (res.code !== 1000) { if (res.code !== 1000) {
return; return;
...@@ -212,6 +214,8 @@ const AddMember: React.FC<any> = props => { ...@@ -212,6 +214,8 @@ const AddMember: React.FC<any> = props => {
areas: filtered, areas: filtered,
remark, remark,
detail: rest, detail: rest,
}, {
timeout: 0,
}).then(res => { }).then(res => {
if (res.code !== 1000) { if (res.code !== 1000) {
return; return;
......
...@@ -17,6 +17,7 @@ import ReutrnEle from '@/components/ReturnEle' ...@@ -17,6 +17,7 @@ import ReutrnEle from '@/components/ReturnEle'
import { PublicApi } from '@/services/api' import { PublicApi } from '@/services/api'
import { UPLOAD_TYPE } from '@/constants' import { UPLOAD_TYPE } from '@/constants'
import styles from './index.less' import styles from './index.less'
import { validatorByte } from '@/utils/regExp'
const { Step } = Steps; const { Step } = Steps;
...@@ -120,7 +121,7 @@ const AddBrand: React.FC<{}> = () => { ...@@ -120,7 +121,7 @@ const AddBrand: React.FC<{}> = () => {
setLogoLoading(false) setLogoLoading(false)
} }
}; };
// @ts-ignore
const handleChange = ({ fileList }) =>setFileList(fileList) const handleChange = ({ fileList }) =>setFileList(fileList)
const handleSave = () => { const handleSave = () => {
...@@ -141,14 +142,12 @@ const AddBrand: React.FC<{}> = () => { ...@@ -141,14 +142,12 @@ const AddBrand: React.FC<{}> = () => {
PublicApi.postProductBrandSaveOrUpdateBrand(values).then(res => { PublicApi.postProductBrandSaveOrUpdateBrand(values).then(res => {
setIsDisabledSave(true) setIsDisabledSave(true)
setIsEnableCheck(false) setIsEnableCheck(false)
//@ts-ignore
setReponseId(res.data) setReponseId(res.data)
}) })
}) })
} }
const handleApplyCheck = () => { const handleApplyCheck = () => {
//@ts-ignore
PublicApi.postProductBrandApplyCheckBrand({id: responseId}).then(res=>{ PublicApi.postProductBrandApplyCheckBrand({id: responseId}).then(res=>{
setCurrentStep(1) setCurrentStep(1)
setTimeout(() => { setTimeout(() => {
...@@ -213,6 +212,9 @@ const AddBrand: React.FC<{}> = () => { ...@@ -213,6 +212,9 @@ const AddBrand: React.FC<{}> = () => {
required: true, required: true,
message: '输入品牌名称!', message: '输入品牌名称!',
}, },
{
validator: (r, v, c) => validatorByte(r, v, c, 20)
}
]} ]}
> >
<Input disabled={banSomeField} placeholder="输入品牌名称" /> <Input disabled={banSomeField} placeholder="输入品牌名称" />
......
...@@ -35,6 +35,8 @@ const DemandModalTable:React.FC<DemandModalTableProps> = (props) => { ...@@ -35,6 +35,8 @@ const DemandModalTable:React.FC<DemandModalTableProps> = (props) => {
id: item.id id: item.id
}) })
schemaAction.setFieldValue('orderProductRequests', data) schemaAction.setFieldValue('orderProductRequests', data)
schemaAction.setFieldValue('supplyMembersName', item.demandMembers)
schemaAction.setFieldValue('supplyMembersId', item.demandMemberId)
} }
confirmModal && confirmModal() confirmModal && confirmModal()
setVisible(false) setVisible(false)
......
...@@ -59,9 +59,12 @@ const SelectAddress = (props: ISchemaFieldComponentProps) => { ...@@ -59,9 +59,12 @@ const SelectAddress = (props: ISchemaFieldComponentProps) => {
const modalRef = useRef<any>({}) const modalRef = useRef<any>({})
const { dataSource, showMore } = state const { dataSource, showMore } = state
const { value, mutators, editable } = props const { value, mutators, editable } = props
const transformData = transformDefaultData(dataSource) const transformData = transformDefaultData(dataSource)
const showDataSource = showMore ? [...transformData].splice(0, 3) : transformData const showDataSource = showMore ? [...transformData].splice(0, 3) : transformData
// 当前选中的id
const checkedId = value ? value.id : dataSource[0]?.id
const handleAdd = () => { const handleAdd = () => {
setMode('add') setMode('add')
modalRef.current.setVisible(true) modalRef.current.setVisible(true)
...@@ -111,7 +114,7 @@ const SelectAddress = (props: ISchemaFieldComponentProps) => { ...@@ -111,7 +114,7 @@ const SelectAddress = (props: ISchemaFieldComponentProps) => {
{ editable && <Button block onClick={handleAdd} icon={<PlusOutlined/>}>新建地址</Button> } { editable && <Button block onClick={handleAdd} icon={<PlusOutlined/>}>新建地址</Button> }
<SelectStyles> <SelectStyles>
{ {
showDataSource.map(v => <div key={v.id} onClick={() => handleCheck(v)} className={cx('select_style_border', value.id === v.id ? 'active' : '')}> showDataSource.map(v => <div key={v.id} onClick={() => handleCheck(v)} className={cx('select_style_border', checkedId === v.id ? 'active' : '')}>
<div> <div>
<Row style={{color: '#172B4D'}}> <Row style={{color: '#172B4D'}}>
<Col>{v.receiverName}</Col> <Col>{v.receiverName}</Col>
......
...@@ -275,6 +275,7 @@ export const productInfoColumns: any[] = [ ...@@ -275,6 +275,7 @@ export const productInfoColumns: any[] = [
dataIndex: 'none', dataIndex: 'none',
align: 'center', align: 'center',
key: 'none', key: 'none',
render: () => '是'
}, },
{ {
title: '金额', title: '金额',
......
...@@ -357,6 +357,7 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => { ...@@ -357,6 +357,7 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
{/* 询价报价单弹窗 */} {/* 询价报价单弹窗 */}
<InquiryModalTable currentRef={inquiryRef} schemaAction={addSchemaAction}/> <InquiryModalTable currentRef={inquiryRef} schemaAction={addSchemaAction}/>
{/* 需求报价单弹窗 */}
<DemandModalTable currentRef={demandRef} schemaAction={addSchemaAction}/> <DemandModalTable currentRef={demandRef} schemaAction={addSchemaAction}/>
</ReadyAddOrderDetailContext.Provider> </ReadyAddOrderDetailContext.Provider>
</PageHeaderWrapper> </PageHeaderWrapper>
......
...@@ -318,6 +318,7 @@ const OrderProductTable:React.FC<OrderProductTableProps> = ({editable}) => { ...@@ -318,6 +318,7 @@ const OrderProductTable:React.FC<OrderProductTableProps> = ({editable}) => {
dataIndex: 'none', dataIndex: 'none',
align: 'center', align: 'center',
key: 'none', key: 'none',
render: () => '是'
}, },
{ {
title: '金额', title: '金额',
......
...@@ -318,6 +318,7 @@ export const productInfoColumns: any[] = [ ...@@ -318,6 +318,7 @@ export const productInfoColumns: any[] = [
dataIndex: 'none', dataIndex: 'none',
align: 'center', align: 'center',
key: 'none', key: 'none',
render: () => '是'
}, },
{ {
title: '金额', title: '金额',
......
...@@ -317,6 +317,7 @@ export const productInfoColumns: any[] = [ ...@@ -317,6 +317,7 @@ export const productInfoColumns: any[] = [
dataIndex: 'none', dataIndex: 'none',
align: 'center', align: 'center',
key: 'none', key: 'none',
render: () => '是'
}, },
{ {
title: '金额', title: '金额',
......
...@@ -107,7 +107,7 @@ export const useSelfTable = () => { ...@@ -107,7 +107,7 @@ export const useSelfTable = () => {
} }
const handleAdd = async (record) => { const handleAdd = async (record) => {
history.push(`/memberCenter/tranactionAbility/stockSellStorage/addBills?relevanceInvoicesId=${record.id}&invoicesTypeId=S002&relevanceInvoices=1`) history.push(`/memberCenter/tranactionAbility/stockSellStorage/addBills?orderNo=${record.orderNo}&deliveryAddresId=${record.deliveryAddresId}&relevanceInvoicesId=${record.id}&invoicesTypeId=S002&relevanceInvoices=1`)
} }
return { return {
......
import React, { useContext } from 'react'
import { Tabs, Table, Button } from 'antd'
import StatusColors from '@/pages/transaction/components/StatusColors'
import { formatTimeString } from '@/utils'
import { OrderDetailContext } from '../../context'
import MellowCard from '@/components/MellowCard'
import NestTable from '@/components/NestTable'
export interface OrderDeleveRecordProps {}
const outOrderCols: any[] = [
{
title: '商品ID',
dataIndex: 'productId',
align: 'center',
key: 'productId'
},
{
title: '商品名称',
dataIndex: 'productName',
align: 'center',
key: 'productName',
},
{
title: '品类',
dataIndex: 'category',
align: 'center',
key: 'category'
},
{
title: '品牌',
dataIndex: 'brand',
align: 'center',
key: 'brand',
},
{
title: '单位',
dataIndex: 'unit',
align: 'center',
key: 'unit'
},
{
title: '单价',
dataIndex: 'unitPrice',
align: 'center',
key: 'unitPrice',
},
{
title: '采购数量',
dataIndex: 'purchaseCount',
align: 'center',
key: 'purchaseCount',
},
{
title: '含税',
dataIndex: 'no',
align: 'center',
key: 'no',
render: () => '是'
},
{
title: '金额',
dataIndex: 'price',
align: 'center',
key: 'price',
},
{
title: '已发货',
dataIndex: 'delivered',
align: 'center',
key: 'delivered',
},
{
title: '未发货',
dataIndex: 'notDelivered',
align: 'center',
key: 'notDelivered',
},
{
title: '已收货',
dataIndex: 'goodsReceived',
align: 'center',
key: 'goodsReceived',
},
{
title: '差异数量',
dataIndex: 'differenceCount',
align: 'center',
key: 'differenceCount',
},
]
const sideOrderCols: any[] = [
{
title: '发货批次',
dataIndex: 'deliveryBatch',
align: 'center',
key: 'deliveryBatch'
},
{
title: '发货单号',
dataIndex: 'deliveryNo',
align: 'center',
key: 'deliveryNo',
},
{
title: '发货时间',
dataIndex: 'deliveryTime',
align: 'center',
key: 'deliveryTime',
render: text => formatTimeString(text)
},
{
title: '物流单号',
dataIndex: 'logisticsNo',
align: 'center',
key: 'logisticsNo',
},
{
title: '物流公司',
dataIndex: 'logisticsCompanyName',
align: 'center',
key: 'logisticsCompanyName'
},
{
title: '入库单号',
dataIndex: 'storageNo',
align: 'center',
key: 'storageNo',
},
{
title: '入库时间',
dataIndex: 'storageTime',
align: 'center',
key: 'storageTime',
render: text => formatTimeString(text)
},
{
title: '内部状态',
dataIndex: 'interiorState',
align: 'center',
key: 'interiorState',
render: text => <StatusColors type='saleInside' status={text}/>
},
{
title: '操作',
dataIndex: 'ctl',
align: 'center',
key: 'ctl',
render: record => <>
{/* todo 需根据内部状态判断显示哪个按钮 */}
<Button type='link'>确认回单</Button>
<Button type='link'>确认发货</Button>
</>
},
]
const sideChildrenCols: any[] = [
{
title: '商品ID',
dataIndex: 'productId',
align: 'center',
key: 'productId',
},
{
title: '商品名称',
dataIndex: 'productName',
align: 'center',
key: 'productName',
},
{
title: '品类',
dataIndex: 'category',
align: 'center',
key: 'category',
},
{
title: '品牌',
dataIndex: 'brand',
align: 'center',
key: 'brand',
},
{
title: '单位',
dataIndex: 'unit',
align: 'center',
key: 'unit',
},
{
title: '采购数量',
dataIndex: 'purchaseCount',
align: 'center',
key: 'purchaseCount',
},
{
title: '发货数量',
dataIndex: 'deliverGoodsCount',
align: 'center',
key: 'deliverGoodsCount',
},
{
title: '入库数量',
dataIndex: 'storageCount',
align: 'center',
key: 'storageCount',
},
{
title: '差异数量',
dataIndex: 'differenceCount',
align: 'center',
key: 'differenceCount',
},
]
// 订单发货记录
const OrderDeleveRecord:React.FC<OrderDeleveRecordProps> = (props) => {
const { data } = useContext(OrderDetailContext)
const { orderReceivingStatisticsResponses, orderDeliveryDetailsResponses } = data
return (
<MellowCard style={{marginTop: 24}} bordered={false}>
<Tabs defaultActiveKey="1" animated={false}>
<Tabs.TabPane tab='订单发货统计' key="1">
<Table
columns={outOrderCols}
dataSource={orderReceivingStatisticsResponses}
pagination={false}
rowKey="id"
/>
</Tabs.TabPane>
<Tabs.TabPane tab='订单发货明细' key="2">
<NestTable
NestColumns={[sideOrderCols, sideChildrenCols]}
childrenDataKey='orderDeliveryProducts'
dataSource={orderDeliveryDetailsResponses}
/>
</Tabs.TabPane>
</Tabs>
</MellowCard>
)
}
OrderDeleveRecord.defaultProps = {}
export default OrderDeleveRecord
\ No newline at end of file
...@@ -321,6 +321,7 @@ const OrderProductTable:React.FC<OrderProductTableProps> = (props) => { ...@@ -321,6 +321,7 @@ const OrderProductTable:React.FC<OrderProductTableProps> = (props) => {
dataIndex: 'none', dataIndex: 'none',
align: 'center', align: 'center',
key: 'none', key: 'none',
render: () => '是'
}, },
{ {
title: '金额', title: '金额',
......
...@@ -118,7 +118,7 @@ const OrderTransformRecord:React.FC<OrderTransformRecordProps> = (props) => { ...@@ -118,7 +118,7 @@ const OrderTransformRecord:React.FC<OrderTransformRecordProps> = (props) => {
</Tabs.TabPane> </Tabs.TabPane>
<Tabs.TabPane tab='内部订单流转记录' key="2"> <Tabs.TabPane tab='内部订单流转记录' key="2">
<Table <Table
columns={outOrderCols} columns={sideOrderCols}
dataSource={interiorProcurementOrderLogResponses} dataSource={interiorProcurementOrderLogResponses}
pagination={false} pagination={false}
rowKey="id" rowKey="id"
......
...@@ -306,6 +306,7 @@ export const productInfoColumns: any[] = [ ...@@ -306,6 +306,7 @@ export const productInfoColumns: any[] = [
dataIndex: 'none', dataIndex: 'none',
align: 'center', align: 'center',
key: 'none', key: 'none',
render: () => '是'
}, },
{ {
title: '金额', title: '金额',
......
...@@ -19,6 +19,7 @@ import OrderTransformRecord from './components/orderTransformRecord' ...@@ -19,6 +19,7 @@ import OrderTransformRecord from './components/orderTransformRecord'
import OrderPayTabs from './components/orderPayTabs' import OrderPayTabs from './components/orderPayTabs'
import StatusColors from '@/pages/transaction/components/StatusColors' import StatusColors from '@/pages/transaction/components/StatusColors'
import OrderPayResultModal from './components/orderPayResultModal' import OrderPayResultModal from './components/orderPayResultModal'
import OrderDeleveRecord from './components/orderDeleveRecord'
export interface CommonOrderDetailProps {} export interface CommonOrderDetailProps {}
...@@ -156,6 +157,9 @@ const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => { ...@@ -156,6 +157,9 @@ const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => {
{/* 杂项 */} {/* 杂项 */}
<OrderMergeInfo/> <OrderMergeInfo/>
{/* 订单发货记录 */}
<OrderDeleveRecord/>
{/* 订单流转记录 */} {/* 订单流转记录 */}
<OrderTransformRecord/> <OrderTransformRecord/>
</div> </div>
......
...@@ -54,7 +54,7 @@ export const useSelfTable = () => { ...@@ -54,7 +54,7 @@ export const useSelfTable = () => {
key: 'supplyMembersName', key: 'supplyMembersName',
}, },
{ {
title: '总金额/已支付(元)', title: '总金额',
align: 'center', align: 'center',
dataIndex: 'sumPrice', dataIndex: 'sumPrice',
key: 'sumPrice', key: 'sumPrice',
...@@ -91,16 +91,25 @@ export const useSelfTable = () => { ...@@ -91,16 +91,25 @@ export const useSelfTable = () => {
dataIndex: 'ctl', dataIndex: 'ctl',
key: 'ctl', key: 'ctl',
render: (text, record) => <> render: (text, record) => <>
{/* 支付结果确认到账= 待审核状态 */}
{ record.purchaseOrderInteriorState === SaleOrderInsideWorkState.ADD_LOGISTICS_ORDER && { record.purchaseOrderInteriorState === SaleOrderInsideWorkState.ADD_LOGISTICS_ORDER &&
<Button type='link' onClick={() => handleConfirm(record.id)}>新增物流单</Button> <Button type='link' onClick={() => handleConfirm(record.id)}>新增物流单</Button>
} }
{ record.purchaseOrderInteriorState === SaleOrderInsideWorkState.DELIVERY_APPROVED_SUCCESS &&
<Button type='link' onClick={() => handleConfirm(record.id)}>查看物流单</Button>
}
</> </>
} }
] ]
const handleConfirm = async (record) => { const handleConfirm = async (record) => {
history.push(`/memberCenter/tranactionAbility/saleOrder/orderPreview?page_type=4&id=${record.id}&preview=0`) history.push(`/memberCenter/logisticsAbility/logisticsSubmit/toOrderSubmitDetail
?orderId=${record.id}
&invoicesTypeId=2
&shipmentOrderCode=${record.invoiceNumber}
&orderDeliveryDetailsId=${record.orderDeliveryDetailsId}
&invoicesNo=${record.orderNo}
&invoicesId=${record.id}
`)
} }
return { return {
......
...@@ -317,6 +317,7 @@ export const productInfoColumns: any[] = [ ...@@ -317,6 +317,7 @@ export const productInfoColumns: any[] = [
dataIndex: 'none', dataIndex: 'none',
align: 'center', align: 'center',
key: 'none', key: 'none',
render: () => '是'
}, },
{ {
title: '金额', title: '金额',
......
...@@ -54,7 +54,7 @@ export const useSelfTable = () => { ...@@ -54,7 +54,7 @@ export const useSelfTable = () => {
key: 'supplyMembersName', key: 'supplyMembersName',
}, },
{ {
title: '总金额/已支付(元)', title: '总金额',
align: 'center', align: 'center',
dataIndex: 'sumPrice', dataIndex: 'sumPrice',
key: 'sumPrice', key: 'sumPrice',
...@@ -92,15 +92,15 @@ export const useSelfTable = () => { ...@@ -92,15 +92,15 @@ export const useSelfTable = () => {
key: 'ctl', key: 'ctl',
render: (text, record) => <> render: (text, record) => <>
{/* 支付结果确认到账= 待审核状态 */} {/* 支付结果确认到账= 待审核状态 */}
{ record.purchaseOrderInteriorState === SaleOrderInsideWorkState.ADD_LOGISTICS_ORDER && { record.purchaseOrderInteriorState === SaleOrderInsideWorkState.CONFIRM_DELIVERY_ORDER &&
<Button type='link' onClick={() => handleConfirm(record.id)}>新增物流单</Button> <Button type='link' onClick={() => handleConfirm(record.id)}>确认发货</Button>
} }
</> </>
} }
] ]
const handleConfirm = async (record) => { const handleConfirm = async (record) => {
history.push(`/memberCenter/tranactionAbility/saleOrder/orderPreview?page_type=4&id=${record.id}&preview=0`) history.push(`/memberCenter/tranactionAbility/saleOrder/orderPreview?page_type=7&id=${record.id}&preview=0`)
} }
return { return {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-09-16 15:16:47 * @Date: 2020-09-16 15:16:47
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-09-22 09:53:36 * @LastEditTime: 2020-09-24 20:11:39
* @Description: 联动逻辑相关 * @Description: 联动逻辑相关
*/ */
import { FormEffectHooks, FormPath } from '@formily/antd'; import { FormEffectHooks, FormPath } from '@formily/antd';
...@@ -25,6 +25,7 @@ import { ...@@ -25,6 +25,7 @@ import {
DOC_TYPE_EXCHANGE_INVOICE, DOC_TYPE_EXCHANGE_INVOICE,
DOC_TYPE_EXCHANGE_RECEIPT, DOC_TYPE_EXCHANGE_RECEIPT,
PurchaseOrderInsideWorkStateTexts, PurchaseOrderInsideWorkStateTexts,
DELIVERY_TYPE,
} from '@/constants'; } from '@/constants';
import Search from '@/components/NiceForm/components/Search'; import Search from '@/components/NiceForm/components/Search';
import Submit from '@/components/NiceForm/components/Submit'; import Submit from '@/components/NiceForm/components/Submit';
...@@ -142,8 +143,8 @@ const afterSaleColumns = [ ...@@ -142,8 +143,8 @@ const afterSaleColumns = [
}, },
]; ];
// 获取单相关数据 // 获取采购入库单相关数据
const fetchOrderList = async (params: any) => { const fetchOrderPurchaseReceiptAddList = async (params: any) => {
const res = await PublicApi.getOrderPurchaseReceiptAddList({ const res = await PublicApi.getOrderPurchaseReceiptAddList({
...params, ...params,
}) })
...@@ -153,6 +154,17 @@ const fetchOrderList = async (params: any) => { ...@@ -153,6 +154,17 @@ const fetchOrderList = async (params: any) => {
return []; return [];
}; };
// 获取销售发货单相关数据
const getOrderSalesInvoiceOrderList = async (params: any) => {
const res = await PublicApi.getOrderSalesInvoiceOrderList({
...params,
})
if (res.code === 1000) {
return res.data;
}
return [];
};
// 获取关联组件对应的 params // 获取关联组件对应的 params
const getParams = type => { const getParams = type => {
const params = { const params = {
...@@ -181,43 +193,29 @@ const getParams = type => { ...@@ -181,43 +193,29 @@ const getParams = type => {
} }
}, },
tableProps: { tableProps: {
rowKey: 'id', rowKey: 'orderNo',
lableKey: '', lableKey: '',
}, },
}; };
switch (type) { switch (type) {
// 对应单据 - 订 // 采购入库
case DEPENDENT_DOC_ORDER: { case DOC_TYPE_PURCHASE_RECEIPT: {
params.modalProps.title = '选择订单'; params.modalProps.title = '选择订单';
params.columns = orderColumns; params.columns = orderColumns;
params.fetchTableData = fetchOrderList; params.fetchTableData = fetchOrderPurchaseReceiptAddList;
params.formilyProps.ctx.schema = orderBillSchema; params.formilyProps.ctx.schema = orderBillSchema;
params.tableProps.lableKey = 'orderNo'; params.tableProps.lableKey = 'orderNo';
break; break;
} }
// 对应单据 - 换货 // 销售发货单
case DEPENDENT_DOC_EXCHANGE: { case DOC_TYPE_SALES_INVOICE: {
params.modalProps.title = '选择订单';
break; params.columns = orderColumns;
} params.fetchTableData = getOrderSalesInvoiceOrderList;
params.formilyProps.ctx.schema = orderBillSchema;
// 对应单据 - 退货 params.tableProps.lableKey = 'orderNo';
case DEPENDENT_DOC_RETURN: {
break;
}
// 对应单据 - 生产
case DEPENDENT_DOC_PRODUCTION: {
break;
}
// 对应单据 - 内部
case DEPENDENT_DOC_INTERNAL: {
break; break;
} }
...@@ -251,7 +249,7 @@ export const useBusinessEffects = (context, actions) => { ...@@ -251,7 +249,7 @@ export const useBusinessEffects = (context, actions) => {
const linkage = useLinkageUtils(); const linkage = useLinkageUtils();
// 根据 单据类型 联动 对应单据所选项 // 根据 单据类型 联动 对应单据所选项
onFieldValueChange$('invoicesTypeId').subscribe(fieldState => { onFieldInputChange$('invoicesTypeId').subscribe(fieldState => {
const newEnum = [...getFieldState('relevanceInvoices', state => state.props.enum)]; const newEnum = [...getFieldState('relevanceInvoices', state => state.props.enum)];
switch (fieldState.value) { switch (fieldState.value) {
...@@ -288,8 +286,21 @@ export const useBusinessEffects = (context, actions) => { ...@@ -288,8 +286,21 @@ export const useBusinessEffects = (context, actions) => {
break; break;
} }
} }
linkage.value('relevanceInvoices', undefined); linkage.value('relevanceInvoices', undefined);
linkage.value('invoicesDetailsRequests', []);
linkage.enum('relevanceInvoices', newEnum); linkage.enum('relevanceInvoices', newEnum);
const orderNoVal = getFieldValue('orderNo');
if (orderNoVal && orderNoVal.length) {
linkage.value('orderNo', []);
}
});
// 根据 单据类型 联动 对应单据所选项
onFieldValueChange$('invoicesTypeId').subscribe(fieldState => {
const params = getParams(fieldState.value);
linkage.componentProps('orderNo', params);
}); });
onFieldInputChange$('inventoryId').subscribe(fieldState => { onFieldInputChange$('inventoryId').subscribe(fieldState => {
...@@ -298,28 +309,25 @@ export const useBusinessEffects = (context, actions) => { ...@@ -298,28 +309,25 @@ export const useBusinessEffects = (context, actions) => {
linkage.value('inventoryRole', current.principal); linkage.value('inventoryRole', current.principal);
} }
}); });
// 对应单据改变
onFieldValueChange$('relevanceInvoices').subscribe(fieldState => {
const params = getParams(fieldState.value);
linkage.componentProps('orderNo', params);
});
// 关联单据改变 // 关联单据改变
onFieldValueChange$('orderNo').subscribe(fieldState => { onFieldValueChange$('orderNo').subscribe(fieldState => {
const relevanceInvoicesVal = getFieldValue('relevanceInvoices'); const relevanceInvoicesVal = getFieldValue('relevanceInvoices');
const first = fieldState.value && fieldState.value[0]; const first = fieldState.value && fieldState.value[0];
console.log('first', first)
setFieldValue('memberName', first ? first.memberName : '');
setFieldValue('relevanceInvoicesId', first ? first.id : null);
setFieldValue('deliveryAddresId', first ? first.deliveryAddresId : null);
setFieldValue('address', first ? `${first.fullAddress} ${first.receiverName}/${first.phone}` : '');
setFieldValue('transport', first && first.deliveryType ? DELIVERY_TYPE[first.deliveryType] : '');
if (!first) { if (!first) {
return; return;
} }
switch (relevanceInvoicesVal) { switch (relevanceInvoicesVal) {
// 对应单据 - 订单 // 对应单据 - 订单
case DEPENDENT_DOC_ORDER: { case DEPENDENT_DOC_ORDER: {
setFieldValue('memberName', first.supplyMembersName);
setFieldValue('address', '暂无收货地址');
setFieldValue('transport', '暂无物流方式');
// 根据选择的订单查询 订单对应的商品,并给 Table 的商品下拉框赋值 // 根据选择的订单查询 订单对应的商品,并给 Table 的商品下拉框赋值
PublicApi.getOrderProcurementOrderProductList({ PublicApi.getOrderProcurementOrderProductList({
id: first.id, id: first.id,
...@@ -391,7 +399,7 @@ export const useBusinessEffects = (context, actions) => { ...@@ -391,7 +399,7 @@ export const useBusinessEffects = (context, actions) => {
return `invoicesDetailsRequests.${$1}.price` return `invoicesDetailsRequests.${$1}.price`
}), }),
state => { state => {
state.value = `¥${current.price}`; state.value = current.price;
} }
); );
setFieldState( setFieldState(
...@@ -399,7 +407,7 @@ export const useBusinessEffects = (context, actions) => { ...@@ -399,7 +407,7 @@ export const useBusinessEffects = (context, actions) => {
return `invoicesDetailsRequests.${$1}.productCount` return `invoicesDetailsRequests.${$1}.productCount`
}), }),
state => { state => {
state.value = ''; state.value = 1;
} }
); );
setFieldState( setFieldState(
......
...@@ -2,6 +2,7 @@ import React, { useState, useEffect, useRef } from 'react'; ...@@ -2,6 +2,7 @@ import React, { useState, useEffect, useRef } from 'react';
import { Button, Card, Spin, message } from 'antd'; import { Button, Card, Spin, message } from 'antd';
import { Radio, ArrayTable } from '@formily/antd-components'; import { Radio, ArrayTable } from '@formily/antd-components';
import { history, Prompt } from 'umi'; import { history, Prompt } from 'umi';
import moment from 'moment';
import { usePageStatus } from '@/hooks/usePageStatus'; import { usePageStatus } from '@/hooks/usePageStatus';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { SaveOutlined, PlusOutlined } from '@ant-design/icons'; import { SaveOutlined, PlusOutlined } from '@ant-design/icons';
...@@ -41,7 +42,16 @@ const { ...@@ -41,7 +42,16 @@ const {
} = FormEffectHooks; } = FormEffectHooks;
const AddBills: React.FC<{}> = (props: any) => { const AddBills: React.FC<{}> = (props: any) => {
const { pageStatus, preview, id } = usePageStatus(); const {
pageStatus,
preview,
id,
invoicesTypeId,
relevanceInvoices,
orderNo,
deliveryAddresId,
relevanceInvoicesId,
} = usePageStatus();
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
const [productRowSelection, productRowCtl] = useRowSelectionTable({ type: 'checkbox' }); const [productRowSelection, productRowCtl] = useRowSelectionTable({ type: 'checkbox' });
const [billInfo, setBillInfo] = useState(null); const [billInfo, setBillInfo] = useState(null);
...@@ -112,7 +122,17 @@ const AddBills: React.FC<{}> = (props: any) => { ...@@ -112,7 +122,17 @@ const AddBills: React.FC<{}> = (props: any) => {
if (res.code !== 1000) { if (res.code !== 1000) {
return; return;
} }
setBillInfo(res.data); const {
transactionTime,
orderNo,
...rest
} = res.data;
setBillInfo({
transactionTime: transactionTime ? moment(transactionTime) : moment(),
orderNo: orderNo ? [{ orderNo }] : [],
...rest,
invoicesTypeId: 'S001',
});
}).finally(() => { }).finally(() => {
setInfoLoading(false); setInfoLoading(false);
}); });
...@@ -141,14 +161,38 @@ const AddBills: React.FC<{}> = (props: any) => { ...@@ -141,14 +161,38 @@ const AddBills: React.FC<{}> = (props: any) => {
); );
useEffect(() => { useEffect(() => {
if (invoicesTypeId && relevanceInvoices && orderNo && deliveryAddresId && relevanceInvoicesId) {
setBillInfo({
invoicesTypeId,
relevanceInvoices: +relevanceInvoices,
orderNo: orderNo ? [{ orderNo, id: +relevanceInvoicesId }] : [],
deliveryAddresId: +deliveryAddresId,
});
}
getBillInfo(); getBillInfo();
}, []); }, []);
const handleSubmit = value => { const handleSubmit = value => {
const { invoicesTypeId, orderNo, transactionTime, ...rest } = value; const {
invoicesTypeId,
orderNo,
transactionTime,
receiverName,
address,
transport,
invoicesDetailsRequests = [],
...rest
} = value;
const newInvoicesDetailsRequests = invoicesDetailsRequests.map(item => ({
...item,
productCount: +item.productCount,
}));
const payload = { const payload = {
orderNo: orderNo[0].id, orderNo: orderNo[0].orderNo,
transactionTime: transactionTime ? transactionTime.format('YYYY-MM-DD HH:mm:ss') : '', relevanceInvoicesId: orderNo[0].id,
transactionTime: transactionTime ? transactionTime.valueOf() : null,
invoicesDetailsRequests: newInvoicesDetailsRequests,
...rest, ...rest,
}; };
...@@ -177,7 +221,22 @@ const AddBills: React.FC<{}> = (props: any) => { ...@@ -177,7 +221,22 @@ const AddBills: React.FC<{}> = (props: any) => {
// 销售发货单 // 销售发货单
case DOC_TYPE_SALES_INVOICE: { case DOC_TYPE_SALES_INVOICE: {
if (!id) {
PublicApi.postOrderSalesInvoiceOrder(payload)
.then(res => {
if (res.code !== 1000) {
return;
}
setUnsaved(false);
setTimeout(() => {
history.goBack();
}, 800);
}).finally(() => {
setSubmitLoading(false);
});
} else {
// update action
}
break; break;
} }
...@@ -228,16 +287,17 @@ const AddBills: React.FC<{}> = (props: any) => { ...@@ -228,16 +287,17 @@ const AddBills: React.FC<{}> = (props: any) => {
const handleOkAddProduct = async () => { const handleOkAddProduct = async () => {
const values = productRowCtl.selectRow.map(item => ({ const values = productRowCtl.selectRow.map(item => ({
itemNo: item.code, itemNo: item.code,
itemNmae: item.name, goodsId: item.id,
itemName: item.name,
specifications: item.type, specifications: item.type,
category: item.customerCategory.name, category: item.customerCategory.name,
brand: item.brand.name, brand: item.brand.name,
unit: item.unitName, unit: item.unitName,
costPrice: `¥${item.costPrice}`, costPrice: item.costPrice,
productName: undefined, productName: undefined,
productId: '', productId: '',
price: '', price: 0,
productCount: '', productCount: 0,
amount: '', amount: '',
})); }));
addSchemaAction.setFieldValue('invoicesDetailsRequests', values); addSchemaAction.setFieldValue('invoicesDetailsRequests', values);
...@@ -285,6 +345,7 @@ const AddBills: React.FC<{}> = (props: any) => { ...@@ -285,6 +345,7 @@ const AddBills: React.FC<{}> = (props: any) => {
> >
<Card> <Card>
<NiceForm <NiceForm
initialValues={billInfo}
expressionScope={{ expressionScope={{
tableAddButton, tableAddButton,
}} }}
......
...@@ -331,6 +331,11 @@ export const addBillSchema: ISchema = { ...@@ -331,6 +331,11 @@ export const addBillSchema: ISchema = {
title: '会员名称', title: '会员名称',
default: '', default: '',
}, },
// 不用于展示,只用于收集值
deliveryAddresId: {
type: 'string',
display: false,
},
address: { address: {
type: 'string', type: 'string',
'x-component': 'Text', 'x-component': 'Text',
......
...@@ -4,6 +4,7 @@ import { PageHeaderWrapper } from '@ant-design/pro-layout'; ...@@ -4,6 +4,7 @@ import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { Button, Card, Dropdown, Menu, Space, Badge, Popconfirm } from 'antd'; import { Button, Card, Dropdown, Menu, Space, Badge, Popconfirm } from 'antd';
import { PlusOutlined, DownOutlined, DeleteOutlined, RollbackOutlined, SnippetsOutlined, ZoomOutOutlined } from '@ant-design/icons'; import { PlusOutlined, DownOutlined, DeleteOutlined, RollbackOutlined, SnippetsOutlined, ZoomOutOutlined } from '@ant-design/icons';
import { StandardTable } from 'god'; import { StandardTable } from 'god';
import moment from 'moment';
import { ColumnType } from 'antd/lib/table/interface'; import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview'; import EyePreview from '@/components/EyePreview';
import NiceForm from '@/components/NiceForm'; import NiceForm from '@/components/NiceForm';
...@@ -175,7 +176,6 @@ const Bills: React.FC<{}> = () => { ...@@ -175,7 +176,6 @@ const Bills: React.FC<{}> = () => {
title: '单据号', title: '单据号',
dataIndex: 'invoicesNo', dataIndex: 'invoicesNo',
align: 'center', align: 'center',
key: 'invoicesNo',
render: (text: any, record: any) => ( render: (text: any, record: any) => (
<EyePreview <EyePreview
url={`/memberCenter/tranactionAbility/stockSellStorage/addBills?id=${record.id}&preview=1`} url={`/memberCenter/tranactionAbility/stockSellStorage/addBills?id=${record.id}&preview=1`}
...@@ -206,25 +206,22 @@ const Bills: React.FC<{}> = () => { ...@@ -206,25 +206,22 @@ const Bills: React.FC<{}> = () => {
title: '对应仓库', title: '对应仓库',
align: 'center', align: 'center',
dataIndex: 'inventory', dataIndex: 'inventory',
key: 'inventory',
}, },
{ {
title: '交易时间', title: '交易时间',
align: 'center', align: 'center',
dataIndex: 'transactionTime', dataIndex: 'transactionTime',
key: 'transactionTime', render: text => text ? moment(text).format('YYYY-MM-DD HH:mm:ss') : '',
}, },
{ {
title: '订单号', title: '订单号',
align: 'center', align: 'center',
dataIndex: 'orderNo', dataIndex: 'orderNo',
key: 'orderNo',
}, },
{ {
title: '单据状态', title: '单据状态',
align: 'center', align: 'center',
dataIndex: 'state', dataIndex: 'state',
key: 'state',
filters: [ filters: [
{ text: DOC_STATUS[DOC_STATUS_UNREVIEWED], value: DOC_STATUS_UNREVIEWED }, { text: DOC_STATUS[DOC_STATUS_UNREVIEWED], value: DOC_STATUS_UNREVIEWED },
{ text: DOC_STATUS[DOC_STATUS_REVIEWED], value: DOC_STATUS_REVIEWED }, { text: DOC_STATUS[DOC_STATUS_REVIEWED], value: DOC_STATUS_REVIEWED },
......
...@@ -17,6 +17,8 @@ import RuleSetting from './components/RuleSetting' ...@@ -17,6 +17,8 @@ import RuleSetting from './components/RuleSetting'
const addSchemaAction = createFormActions() const addSchemaAction = createFormActions()
const AddRule:React.FC<{}> = (props) => { const AddRule:React.FC<{}> = (props) => {
const [isDisabled, setIsDisabled] = useState<boolean>(false)
const { const {
id, id,
preview, preview,
...@@ -25,7 +27,7 @@ const AddRule:React.FC<{}> = (props) => { ...@@ -25,7 +27,7 @@ const AddRule:React.FC<{}> = (props) => {
// 整体表单提交 // 整体表单提交
const formSubmit = async (values) => { const formSubmit = async (values) => {
console.log(values) setIsDisabled(true)
values.products = values.products.map(item => ({ values.products = values.products.map(item => ({
productId: item.id, productId: item.id,
commodityId: item.commodityId, commodityId: item.commodityId,
...@@ -33,17 +35,25 @@ const AddRule:React.FC<{}> = (props) => { ...@@ -33,17 +35,25 @@ const AddRule:React.FC<{}> = (props) => {
customerCategoryName: item.customerCategoryName, customerCategoryName: item.customerCategoryName,
priceType: item.priceType, priceType: item.priceType,
brandName: item.brandName brandName: item.brandName
})) }))
values.isElectronicContract = values.isElectronicContract ? 1 : 0 values.isElectronicContract = values.isElectronicContract ? 1 : 0
const params = omit(values, ['state']) // 移除不需要的字段 const params = omit(values, ['state']) // 移除不需要的字段
addSchemaAction.getFieldState('transactionProcesssId', state => {
let dataSource = state.dataSource.filter(item => params.transactionProcesssId === item.id)
params.transactionProcess = dataSource[0].name
})
let res: any = {}
if(pageStatus === PageStatus.EDIT){ if(pageStatus === PageStatus.EDIT){
await PublicApi.postOrderTradingRulesUpdata(params) res = await PublicApi.postOrderTradingRulesUpdata(params)
}else if(pageStatus === PageStatus.ADD){ }else if(pageStatus === PageStatus.ADD){
await PublicApi.postOrderTradingRulesAdd(params) res = await PublicApi.postOrderTradingRulesAdd(params)
} }
setTimeout(() => { if(res.code === 1000){
setIsDisabled(false)
history.goBack(-1) history.goBack(-1)
}, 1000) }
} }
return ( return (
...@@ -57,7 +67,7 @@ const AddRule:React.FC<{}> = (props) => { ...@@ -57,7 +67,7 @@ const AddRule:React.FC<{}> = (props) => {
onClick={() => addSchemaAction.submit()} onClick={() => addSchemaAction.submit()}
type="primary" type="primary"
icon={<SaveOutlined />} icon={<SaveOutlined />}
disabled={pageStatus === PageStatus.PREVIEW} disabled={pageStatus === PageStatus.PREVIEW || isDisabled}
> >
保存 保存
</Button>, </Button>,
......
...@@ -87,7 +87,7 @@ const RuleSetting:React.FC<RuleSettingProps> = (props) => { ...@@ -87,7 +87,7 @@ const RuleSetting:React.FC<RuleSettingProps> = (props) => {
key: 'name', key: 'name',
render: (_, record) => <EyePreview url={`/memberCenter/commodityAbility/commodity/products/viewProducts?id=${record.commodityId}`}>{_}</EyePreview> render: (_, record) => <EyePreview url={`/memberCenter/commodityAbility/commodity/products/viewProducts?id=${record.commodityId}`}>{_}</EyePreview>
}, },
{ {
dataIndex: 'customerCategoryName', dataIndex: 'customerCategoryName',
title: '品类', title: '品类',
key: 'customerCategoryName' key: 'customerCategoryName'
...@@ -245,7 +245,6 @@ const RuleSetting:React.FC<RuleSettingProps> = (props) => { ...@@ -245,7 +245,6 @@ const RuleSetting:React.FC<RuleSettingProps> = (props) => {
} }
addSchemaAction.setFieldValue('isElectronicContract', data.isElectronicContract ? true : false) addSchemaAction.setFieldValue('isElectronicContract', data.isElectronicContract ? true : false)
addSchemaAction.setFieldValue('transactionProcesssId', data.transactionProcesssId) addSchemaAction.setFieldValue('transactionProcesssId', data.transactionProcesssId)
console.log(data)
addSchemaAction.setFieldValue('isTacitlyApprove', data.isTacitlyApprove) addSchemaAction.setFieldValue('isTacitlyApprove', data.isTacitlyApprove)
setInitialValue(data) setInitialValue(data)
} }
......
...@@ -28,14 +28,7 @@ const TransactionRules: React.FC<{}> = () => { ...@@ -28,14 +28,7 @@ const TransactionRules: React.FC<{}> = () => {
}) })
}) })
} }
// id
// name
// state
// 状态:1.有效 0.无效
// transactionProcess
// operationTime
const columns: ColumnType<any>[] = [ const columns: ColumnType<any>[] = [
{ {
title: '交易规则ID', title: '交易规则ID',
......
...@@ -52,7 +52,6 @@ export const ruleDetailSchema: ISchema = padRequiredMessage({ ...@@ -52,7 +52,6 @@ export const ruleDetailSchema: ISchema = padRequiredMessage({
"transactionProcesssId": { "transactionProcesssId": {
type: 'string', type: 'string',
title: '流程选择', title: '流程选择',
"x-component": 'SelectProcesss', "x-component": 'SelectProcesss',
"x-mega-props": { "x-mega-props": {
style: { style: {
...@@ -65,10 +64,9 @@ export const ruleDetailSchema: ISchema = padRequiredMessage({ ...@@ -65,10 +64,9 @@ export const ruleDetailSchema: ISchema = padRequiredMessage({
"x-rules": [ "x-rules": [
{ {
required: true, required: true,
message: '请选择收货方式' message: '请选择流程配置'
} }
], ],
// required: true, // required: true,
// "x-component": 'SearchSelect', // "x-component": 'SearchSelect',
// "x-component-props": { // "x-component-props": {
......
import { values } from 'mobx';
/** /**
* @param str:string 需要校验的字符串 * @param str:string 需要校验的字符串
* @param type:string 需要校验的类型 * @param type:string 需要校验的类型
...@@ -42,3 +43,28 @@ export const checkRegExp = (str:string, type:string) => { ...@@ -42,3 +43,28 @@ export const checkRegExp = (str:string, type:string) => {
return true; return true;
} }
} }
/**
* 区别校验 汉字 和 字符 长度
* @param rule
* @param value 表单输入的值
* @param callback
* @param maxByte:number 最大字符数
*/
export const validatorByte = (rule, value, callback, maxByte: number) => {
try {
if(value){
let str = value
str = str.replace(/[\u4e00-\u9fa5]/g, 'OO')
if(str.length > maxByte)
throw new Error(`最多输入${maxByte}个字符,${Math.floor(maxByte / 2)}个汉字`);
else
callback()
} else {
callback()
}
} catch (err) {
callback(err)
}
}
\ No newline at end of file
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