Commit 66c3f0db authored by 前端-钟卫鹏's avatar 前端-钟卫鹏

fix: 对接待新增请购单下单/新增请购单下单,formSchema添加内置Form表单字段校验错误数收集

parent 075d24d0
...@@ -236,7 +236,7 @@ export const addOrderModalSchema: ISchema = { ...@@ -236,7 +236,7 @@ export const addOrderModalSchema: ISchema = {
export const addContractOrderModalSchema: ISchema = { export const addContractOrderModalSchema: ISchema = {
type: 'object', type: 'object',
properties: { properties: {
code: { productNo: {
type: 'string', type: 'string',
'x-component': 'ModalSearch', 'x-component': 'ModalSearch',
'x-component-props': { 'x-component-props': {
...@@ -265,7 +265,7 @@ export const addOrderModalSchema: ISchema = { ...@@ -265,7 +265,7 @@ export const addOrderModalSchema: ISchema = {
placeholder: '物料名称', placeholder: '物料名称',
}, },
}, },
type: { spec: {
type: 'string', type: 'string',
"x-component-props": { "x-component-props": {
placeholder: '规格型号', placeholder: '规格型号',
......
...@@ -54,6 +54,10 @@ export const ORDER_TYPE_BIDDING_CONTRACT = 10; ...@@ -54,6 +54,10 @@ export const ORDER_TYPE_BIDDING_CONTRACT = 10;
* 采购招标合同 * 采购招标合同
*/ */
export const ORDER_TYPE_TENDER_CONTRACT = 11; export const ORDER_TYPE_TENDER_CONTRACT = 11;
/**
* 请购单下单
*/
export const ORDER_TYPE_REQUISITION = 12;
...@@ -103,6 +107,10 @@ export const ORDER_TYPE_TENDER_CONTRACT = 11; ...@@ -103,6 +107,10 @@ export const ORDER_TYPE_TENDER_CONTRACT = 11;
* 采购招标合同 * 采购招标合同
*/ */
export const ORDER_TYPE2_TENDER_CONTRACT = 11; export const ORDER_TYPE2_TENDER_CONTRACT = 11;
/**
* 请购单下单
*/
export const ORDER_TYPE2_REQUISITION = 12;
export const ORDER_TYPE2 = { export const ORDER_TYPE2 = {
[ORDER_TYPE2_INQUIRY]: '询价采购', [ORDER_TYPE2_INQUIRY]: '询价采购',
...@@ -116,6 +124,7 @@ export const ORDER_TYPE_TENDER_CONTRACT = 11; ...@@ -116,6 +124,7 @@ export const ORDER_TYPE_TENDER_CONTRACT = 11;
[ORDER_TYPE2_ENQUIRY_CONTRACT]: '采购询价合同', [ORDER_TYPE2_ENQUIRY_CONTRACT]: '采购询价合同',
[ORDER_TYPE2_BIDDING_CONTRACT]: '采购竞价合同', [ORDER_TYPE2_BIDDING_CONTRACT]: '采购竞价合同',
[ORDER_TYPE2_TENDER_CONTRACT]: '采购招标合同', [ORDER_TYPE2_TENDER_CONTRACT]: '采购招标合同',
[ORDER_TYPE2_REQUISITION]: '请购单采购',
}; };
...@@ -143,6 +152,7 @@ export const ORDER_TYPE = ['', ...@@ -143,6 +152,7 @@ export const ORDER_TYPE = ['',
'采购询价合同', '采购询价合同',
'采购招标合同', '采购招标合同',
'采购竞价合同', '采购竞价合同',
'请购单采购',
] ]
// 下单模式 *NEW // 下单模式 *NEW
...@@ -181,6 +191,11 @@ export enum OrderModalType { ...@@ -181,6 +191,11 @@ export enum OrderModalType {
* 采购招标合同下单 * 采购招标合同下单
*/ */
PURCHASE_TENDER_CONTRACT_ORDER = 14, PURCHASE_TENDER_CONTRACT_ORDER = 14,
/**
* 请购单采购下单
*/
PURCHASE_REQUISITION_ORDER = 15,
} }
// 订单种类 *NEW @可能还需要补充 现货采购 渠道直采 渠道现货 // 订单种类 *NEW @可能还需要补充 现货采购 渠道直采 渠道现货
......
...@@ -12,13 +12,14 @@ export const useFormDetail = () => { ...@@ -12,13 +12,14 @@ export const useFormDetail = () => {
const [formData, setFormData] = useState<any>(null) const [formData, setFormData] = useState<any>(null)
// 完成度 // 完成度
const [formProcess, setFormProcess] = useState<string|number>() const [formProcess, setFormProcess] = useState<string|number>()
// 总交互字段数
// 总交互字段数 const [amount, setAomunt] = useState<number>(0)
const [amount, setAomunt] = useState<number>(0) // 输入数
// 输入数 const [inputAmount, setInputAomunt] = useState<number>(0)
const [inputAmount, setInputAomunt] = useState<number>(0) // 有效统计字段
// 有效统计字段 const effectFields = []
const effectFields = [] // 用于收集 schema表单内置组件Form表单的校验error
const [innerFormErrors, setInnerFormErrors] = useState<number>(0)
useEffect(() => { useEffect(() => {
if(amount > 0) { if(amount > 0) {
...@@ -66,9 +67,11 @@ export const useFormDetail = () => { ...@@ -66,9 +67,11 @@ export const useFormDetail = () => {
const formContext = { const formContext = {
data: formData, data: formData,
formProcess, formProcess,
innerFormErrors,
ctl: { ctl: {
setFormData, setFormData,
setFormProcess setFormProcess,
setInnerFormErrors
}, },
useAttachmentChangeForContext, useAttachmentChangeForContext,
} }
......
...@@ -35,9 +35,9 @@ export const fetchOrderApi = { ...@@ -35,9 +35,9 @@ export const fetchOrderApi = {
return data return data
}, },
/** 合同下单 获取合同采购物料 */ /** 请购单下单 获取请购单物料 */
async getContractPurchaseMaterielList(params) { async getRequisitionPurchaseMaterielList(params) {
const { data } = await PublicApi.getContractManagePagePurchaseMaterielList(params) const { data } = await PublicApi.getPurchaseRequisitionPurchaseOrderMaterialPage(params)
return data return data
}, },
......
...@@ -5,6 +5,7 @@ import { useModalTable } from '../../model/useModalTable' ...@@ -5,6 +5,7 @@ import { useModalTable } from '../../model/useModalTable'
import { ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd' import { ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd'
import { requisitionColumns } from '../../constant' import { requisitionColumns } from '../../constant'
import { PublicApi } from '@/services/api' import { PublicApi } from '@/services/api'
import moment from 'moment'
export interface RequisitionModalTableProps extends ModalTableProps { export interface RequisitionModalTableProps extends ModalTableProps {
type?: 'radio' | 'checkbox', type?: 'radio' | 'checkbox',
...@@ -44,46 +45,32 @@ const RequisitionModalTable:React.FC<RequisitionModalTableProps> = (props) => { ...@@ -44,46 +45,32 @@ const RequisitionModalTable:React.FC<RequisitionModalTableProps> = (props) => {
schemaAction.setFieldValue('products', []) schemaAction.setFieldValue('products', [])
schemaAction.setFieldValue('requisitionNo', item.requisitionNo) schemaAction.setFieldValue('requisitionNo', item.requisitionNo)
schemaAction.setFieldValue('requisitionId', item.id) schemaAction.setFieldValue('requisitionId', item.id)
// const { data } = await fetchOrderApi.getContractPurchaseMaterielList({ schemaAction.setFieldValue('digest', item.digest)
// contractId: item?.id || item?.contractId, schemaAction.setFieldValue('deliverDate', moment(item.deliverTime).format('YYYY-MM-DD HH:mm'))
// current: 1,
// pageSize: 999,
// })
// if(!data) { return false; }
// // 字段转换 const { data } = await fetchOrderApi.getRequisitionPurchaseMaterielList({
// let newData = data.map((v: any) => { requisitionId: item.id,
// let temp: any = {}; current: 1,
// temp.id = v.id; pageSize: 999,
// temp.code = v.materielNo; })
// temp.name = v.materielName; if(!data) { return false; }
// temp.type = v.type;
// temp.category = v.category;
// temp.brand = v.brand;
// temp.unit = v.unit;
// temp.relevanceProductId = v.associatedDataId;
// temp.relevanceProductName = v.associatedGoods;
// temp.relevanceProductType = v.associatedType;
// temp.relevanceProductCategory = v.associatedCategory;
// temp.relevanceProductBrand = v.associatedBrand;
// temp.price = v.price;
// temp.stock = v.supplierInventory;
// temp.tax = v.isHasTax;
// temp.taxRate = v.taxRate;
// // @ 配送方式 默认物流
// temp.logistics = 1
// // 会员信息冗余 // 字段转换
// temp.memberId = item.partyBMemberId let newData = data.map((v: any) => ({
// temp.memberRoleId = item.partyBRoleId ...v,
// return temp tax: true,
// }) // @ 配送方式 默认物流
logistics: 1,
// 会员信息冗余
memberName: item.vendorMemberName,
memberId: item.vendorMemberId,
memberRoleId: item.vendorRoleId,
}))
// schemaAction.setFieldValue('products', data) schemaAction.setFieldValue('products', newData)
schemaAction.setFieldValue('vendorMemberName', item.partyBName) schemaAction.setFieldValue('vendorMemberName', item.vendorMemberName)
schemaAction.setFieldValue('vendorMemberId', item.partyBMemberId) schemaAction.setFieldValue('vendorMemberId', item.vendorMemberId)
schemaAction.setFieldValue('vendorRoleId', item.partyBRoleId) schemaAction.setFieldValue('vendorRoleId', item.vendorRoleId)
schemaAction.setFieldValue('digest', item.digest)
} }
confirmModal && confirmModal() confirmModal && confirmModal()
setVisible(false) setVisible(false)
......
...@@ -19,27 +19,27 @@ export interface MaterialModalTableProps extends ModalTableProps { ...@@ -19,27 +19,27 @@ export interface MaterialModalTableProps extends ModalTableProps {
export const materialColumns: any[] = [ export const materialColumns: any[] = [
{ {
title: 'ID', title: 'ID',
dataIndex: 'id', dataIndex: 'productId',
align: 'center', align: 'center',
key: 'id', key: 'productId',
}, },
{ {
title: '物料编号', title: '物料编号',
dataIndex: 'materielNo', dataIndex: 'productNo',
align: 'center', align: 'center',
key: 'materielNo', key: 'productNo',
}, },
{ {
title: '规格型号', title: '物料名称',
dataIndex: 'type', dataIndex: 'name',
align: 'center', align: 'center',
key: 'type', key: 'name',
}, },
{ {
title: '物料名称', title: '规格型号',
dataIndex: 'materielName', dataIndex: 'spec',
align: 'center', align: 'center',
key: 'materielName', key: 'spec',
}, },
{ {
title: '品类', title: '品类',
...@@ -60,17 +60,17 @@ export const materialColumns: any[] = [ ...@@ -60,17 +60,17 @@ export const materialColumns: any[] = [
key: 'unit' key: 'unit'
}, },
{ {
title: '合同剩余', title: '数量',
dataIndex: 'contractFreeCount', dataIndex: 'quantity',
align: 'center', align: 'center',
key: 'contractFreeCount' key: 'quantity'
}, },
// { {
// title: '供方库存', title: '可用数量',
// dataIndex: 'supplierInventory', dataIndex: 'quantifiable',
// align: 'center', align: 'center',
// key: 'supplierInventory' key: 'quantifiable'
// }, }
] ]
const MaterialModalTable:React.FC<MaterialModalTableProps> = (props) => { const MaterialModalTable:React.FC<MaterialModalTableProps> = (props) => {
...@@ -90,31 +90,22 @@ const MaterialModalTable:React.FC<MaterialModalTableProps> = (props) => { ...@@ -90,31 +90,22 @@ const MaterialModalTable:React.FC<MaterialModalTableProps> = (props) => {
const addMaterialProcessField = (value, origin) => { const addMaterialProcessField = (value, origin) => {
let tempOriginData = [...origin] let tempOriginData = [...origin]
if(Array.isArray(value)) { if(Array.isArray(value)) {
let processData = value.map(v => { const vendorMemberName = schemaAction.getFieldValue('vendorMemberName')
let temp: any = {}; const vendorMemberId = schemaAction.getFieldValue('vendorMemberId')
temp.id = v.id; const vendorRoleId = schemaAction.getFieldValue('vendorRoleId')
temp.code = v.materielNo; let processData = value.map(v => ({
temp.name = v.materielName; ...v,
temp.type = v.type; tax: true,
temp.category = v.category;
temp.brand = v.brand;
temp.unit = v.unit;
temp.relevanceProductId = v.associatedDataId;
temp.relevanceProductName = v.associatedGoods;
temp.relevanceProductType = v.associatedType;
temp.relevanceProductCategory = v.associatedCategory;
temp.relevanceProductBrand = v.associatedBrand;
temp.price = v.price;
temp.stock = v.supplierInventory;
temp.tax = v.isHasTax;
temp.taxRate = v.taxRate;
// @ 配送方式 默认物流 // @ 配送方式 默认物流
temp.logistics = 1 logistics: 1,
return temp // 冗余会员信息
}) vendorMemberName,
let originIds = tempOriginData.map(item => item.id) vendorMemberId,
vendorRoleId,
}))
let originIds = tempOriginData.map(item => item.productId)
processData.map(item => { processData.map(item => {
if(!originIds.includes(item.id)) { if(!originIds.includes(item.productId)) {
tempOriginData.push(item) tempOriginData.push(item)
} }
}) })
...@@ -123,35 +114,19 @@ const MaterialModalTable:React.FC<MaterialModalTableProps> = (props) => { ...@@ -123,35 +114,19 @@ const MaterialModalTable:React.FC<MaterialModalTableProps> = (props) => {
} }
const handleConfirm = async () => { const handleConfirm = async () => {
// 判断所选择的商品是否属于同一个工作流 const productData = schemaAction.getFieldValue('products')
console.log(rowSelectionCtl, 'rowSelectionCtl') schemaAction.setFieldValue('products', addMaterialProcessField(rowSelectionCtl.selectRow, productData))
// @ts-ignore confirmModal && confirmModal()
// const res = await PublicApi.postOrderIsWorkFlow({ setVisible(false)
// memberId: schemaAction.getFieldValue('vendorMemberId'),
// memberRoleId: schemaAction.getFieldValue('vendorRoleId'),
// productIds: rowSelectionCtl.selectRow.map(item => item.associatedDataId),
// orderMode: schemaAction.getFieldValue('orderMode')
// }, { ctlType: 'none' })
// if (res.code === 1000) {
const productData = schemaAction.getFieldValue('products')
schemaAction.setFieldValue('products', addMaterialProcessField(rowSelectionCtl.selectRow, productData))
confirmModal && confirmModal()
setVisible(false)
// }
// else {
// message.error(res.message)
// }
} }
const fetchMaterialList = (values) => { const fetchMaterialList = (values) => {
const contract = schemaAction.getFieldValue('contract') const requisitionId = schemaAction.getFieldValue('requisitionId')
const contractId = contract['id'] || contract['contractId']
const params = { const params = {
...values, ...values,
contractId, requisitionId,
} }
return fetchOrderApi.getContractPurchaseMaterielList(params) return fetchOrderApi.getRequisitionPurchaseMaterielList(params)
} }
...@@ -168,11 +143,11 @@ const MaterialModalTable:React.FC<MaterialModalTableProps> = (props) => { ...@@ -168,11 +143,11 @@ const MaterialModalTable:React.FC<MaterialModalTableProps> = (props) => {
resetModal={{destroyOnClose: true}} resetModal={{destroyOnClose: true}}
modalType='none' modalType='none'
tableProps={{ tableProps={{
rowKey: 'id', rowKey: 'productId',
onRow: (record) => ({ onRow: (record) => ({
onClick: () => { onClick: () => {
rowSelectionCtl.appendSelectRow(record); rowSelectionCtl.appendSelectRow(record);
rowSelectionCtl.appendSelectRowKeys(record.id); rowSelectionCtl.appendSelectRowKeys(record.productId);
}, },
}) })
}} }}
...@@ -184,7 +159,7 @@ const MaterialModalTable:React.FC<MaterialModalTableProps> = (props) => { ...@@ -184,7 +159,7 @@ const MaterialModalTable:React.FC<MaterialModalTableProps> = (props) => {
useStateFilterSearchLinkageEffect( useStateFilterSearchLinkageEffect(
$, $,
actions, actions,
'code', 'productNo',
FORM_FILTER_PATH, FORM_FILTER_PATH,
); );
} }
......
...@@ -2,6 +2,7 @@ import React, { useState, useRef, useContext } from 'react' ...@@ -2,6 +2,7 @@ import React, { useState, useRef, useContext } from 'react'
import { Form, Input, Select, Popover, Row } from 'antd'; import { Form, Input, Select, Popover, Row } from 'antd';
import { EnvironmentOutlined } from '@ant-design/icons'; import { EnvironmentOutlined } from '@ant-design/icons';
import { PublicApi } from '@/services/api'; import { PublicApi } from '@/services/api';
import { FormDetailContext } from '@/formSchema/context';
export interface MaterialTableCellProps { export interface MaterialTableCellProps {
title: React.ReactNode; title: React.ReactNode;
...@@ -47,6 +48,7 @@ export const MaterialTableCell:React.FC<MaterialTableCellProps> = ({ ...@@ -47,6 +48,7 @@ export const MaterialTableCell:React.FC<MaterialTableCellProps> = ({
}) => { }) => {
const formItemRef = useRef<any>(); const formItemRef = useRef<any>();
const { form } = useContext(EditableContext); const { form } = useContext(EditableContext);
const { formContext } = useContext(FormDetailContext);
// 是否显示地址 // 是否显示地址
const [showAddress, setShowAddress] = useState<boolean>(false) const [showAddress, setShowAddress] = useState<boolean>(false)
...@@ -62,12 +64,14 @@ export const MaterialTableCell:React.FC<MaterialTableCellProps> = ({ ...@@ -62,12 +64,14 @@ export const MaterialTableCell:React.FC<MaterialTableCellProps> = ({
setReceiveInfo(() => deliveryAddress[0]) setReceiveInfo(() => deliveryAddress[0])
} }
const save = async e => { const save = async () => {
try { try {
const values = await form.validateFields(); const values = await form.validateFields();
values.purchaseCount = Number(values.quantity) || 0 values.purchaseCount = Number(values.quantity) || 0
handleSave({ ...record, ...values }); handleSave({ ...record, ...values });
formContext.ctl.setInnerFormErrors(0)
} catch (errInfo) { } catch (errInfo) {
formContext.ctl.setInnerFormErrors(errInfo.errorFields.length)
console.log('Save failed:', errInfo); console.log('Save failed:', errInfo);
} }
}; };
......
...@@ -8,14 +8,15 @@ import AddressModal from '../addressModal' ...@@ -8,14 +8,15 @@ import AddressModal from '../addressModal'
import { fetchOrderApi } from '../../apis' import { fetchOrderApi } from '../../apis'
import { PublicApi } from '@/services/api' import { PublicApi } from '@/services/api'
const SelectStyles = styled((props) => <div className='select-list' {...props}></div>)` const SelectStyles = styled((props) => <div className='select-list' style={{display: 'flex'}} {...props}></div>)`
.select_style_border { .select_style_border {
border: 1px solid #EEF0F3; border: 1px solid #EEF0F3;
margin-top: 20px; // margin-top: 20px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 8px 14px; padding: 8px 14px;
flex: 1;
cursor: pointer; cursor: pointer;
line-height: 28px; line-height: 28px;
position:relative; position:relative;
...@@ -118,11 +119,11 @@ const SelectAddress = (props: ISchemaFieldComponentProps) => { ...@@ -118,11 +119,11 @@ const SelectAddress = (props: ISchemaFieldComponentProps) => {
} }
return ( return (
<div style={{ width: '100%' }}> <div style={{ width: '100%'}}>
{editable && <Button block onClick={handleAdd} icon={<PlusOutlined />}>新建地址</Button>} {/* {editable && <Button block onClick={handleAdd} icon={<PlusOutlined />}>新建地址</Button>} */}
<SelectStyles> <SelectStyles><Row gutter={[16, 16]} style={{width: '100%'}}>
{ {
showDataSource.map(v => <div key={v.id} onClick={() => handleCheck(v)} className={cx('select_style_border', checkedId === v.id ? 'active' : '')}> showDataSource.map(v => <Col span={12}><div key={v.id} onClick={() => handleCheck(v)} className={cx('select_style_border', checkedId === v.id ? 'active' : '')}>
<div> <div>
<Row style={{ color: '#303133' }}> <Row style={{ color: '#303133' }}>
<Col>{v.receiverName}</Col> <Col>{v.receiverName}</Col>
...@@ -142,11 +143,20 @@ const SelectAddress = (props: ISchemaFieldComponentProps) => { ...@@ -142,11 +143,20 @@ const SelectAddress = (props: ISchemaFieldComponentProps) => {
<EyeOutlined onClick={(e) => handleEdit(v, e, 'preview')} /> <EyeOutlined onClick={(e) => handleEdit(v, e, 'preview')} />
} }
</Space> </Space>
</div>) </div></Col>)
} }
</SelectStyles> {editable && <Col span={12}>
<div
className='select_style_border'
style={{width: '100%', height: '100%', borderStyle: "dashed"}}
onClick={handleAdd}
>
<p style={{width: '100%', textAlign: 'center'}}><PlusOutlined />&nbsp;新增地址</p>
</div>
</Col>}
</Row></SelectStyles>
{transformData.length > 3 && {transformData.length > 3 &&
<div onClick={toogleMore} style={{ textAlign: 'center', cursor: 'pointer' }}> <div onClick={toogleMore} style={{ textAlign: 'center', cursor: 'pointer', color: '#00b37a' }}>
显示更多{showMore ? <CaretDownOutlined /> : <CaretUpOutlined />} 显示更多{showMore ? <CaretDownOutlined /> : <CaretUpOutlined />}
</div> </div>
} }
......
...@@ -13,9 +13,9 @@ ...@@ -13,9 +13,9 @@
.invoice_list { .invoice_list {
position: relative; position: relative;
display: flex; // display: flex;
margin: 0 -10px; margin: 0 -10px;
flex-wrap: wrap; // flex-wrap: wrap;
.invoice_list_item { .invoice_list_item {
display: flex; display: flex;
...@@ -70,6 +70,18 @@ ...@@ -70,6 +70,18 @@
} }
} }
.select_style_border {
border: 1px solid #EEF0F3;
// display: flex;
// align-items: center;
// justify-content: space-between;
// padding: 8px 14px;
// flex: 1;
// cursor: pointer;
// line-height: 28px;
// position:relative;
}
:global { :global {
span.ant-radio+* { span.ant-radio+* {
display: block; display: block;
...@@ -82,7 +94,7 @@ ...@@ -82,7 +94,7 @@
align-items: center; align-items: center;
height: 72px; height: 72px;
background-color: #FAFAFA; background-color: #FAFAFA;
margin: 10px; // margin: 10px;
padding-left: 16px; padding-left: 16px;
} }
...@@ -105,4 +117,4 @@ ...@@ -105,4 +117,4 @@
} }
} }
} }
\ No newline at end of file
import React, { useState, useRef } from 'react' import React, { useState, useRef } from 'react'
import { ISchemaFieldComponentProps, useFieldState } from '@formily/antd' import { ISchemaFieldComponentProps, useFieldState } from '@formily/antd'
import { Button, Radio } from 'antd' import { Button, Col, Radio, Row } from 'antd'
import { PlusOutlined, CaretUpOutlined, CaretDownOutlined } from '@ant-design/icons' import { PlusOutlined, CaretUpOutlined, CaretDownOutlined } from '@ant-design/icons'
import cx from 'classnames' import cx from 'classnames'
import { fetchOrderApi } from '../../apis' import { fetchOrderApi } from '../../apis'
...@@ -24,9 +24,6 @@ const TheInvoiceList = (props: ISchemaFieldComponentProps) => { ...@@ -24,9 +24,6 @@ const TheInvoiceList = (props: ISchemaFieldComponentProps) => {
const { pageStatus, id } = usePageStatus() const { pageStatus, id } = usePageStatus()
// const [useValue, setUseValue] = useState(() => typeof value === 'object' ? value : dataSource.find(v => v.id === value))
// let useValue = typeof value === 'object' ? value : dataSource.find(v => v.id === value)
if(pageStatus === PageStatus.ADD) { if(pageStatus === PageStatus.ADD) {
if(typeof value === 'object') { if(typeof value === 'object') {
...@@ -155,11 +152,12 @@ const TheInvoiceList = (props: ISchemaFieldComponentProps) => { ...@@ -155,11 +152,12 @@ const TheInvoiceList = (props: ISchemaFieldComponentProps) => {
return ( return (
<div style={{width: '100%'}} className={styles.invoice}> <div style={{width: '100%'}} className={styles.invoice}>
{ editable && <Button block onClick={handleAdd} icon={<PlusOutlined/>}>新增发票</Button> } {/* { editable && <Button block onClick={handleAdd} icon={<PlusOutlined/>}>新增发票</Button> } */}
<Radio.Group className={styles.raido_group} value={useValue} onChange={e => handleCheck(e)}> <Radio.Group className={styles.raido_group} value={useValue} onChange={e => handleCheck(e)}>
<div className={styles.invoice_list}> <div className={styles.invoice_list}>
<Row gutter={[16, 16]}>
{ {
showDataSource.map((item, index) => ( showDataSource.map((item, index) => (<Col span={12}>
<Radio className={styles.list_radio} value={item} key={`address_list_radio_${item?.id}`}> <Radio className={styles.list_radio} value={item} key={`address_list_radio_${item?.id}`}>
<div className={styles.invoice_list_item} key={`invoice_list_item_${index}`}> <div className={styles.invoice_list_item} key={`invoice_list_item_${index}`}>
<div className={styles.invoice_list_item_content}> <div className={styles.invoice_list_item_content}>
...@@ -188,13 +186,22 @@ const TheInvoiceList = (props: ISchemaFieldComponentProps) => { ...@@ -188,13 +186,22 @@ const TheInvoiceList = (props: ISchemaFieldComponentProps) => {
} }
</div> </div>
</Radio> </Radio>
)) </Col>))
} }
{ editable && <Col span={12}>
<div
className={styles.select_style_border}
style={{width: '100%', height: '100%', borderStyle: "dashed"}}
onClick={handleAdd}
>
<p style={{width: '100%', textAlign: 'center', fontSize: 12, marginTop: 14}}><PlusOutlined />&nbsp;新增发票</p>
</div>
</Col> }
</Row>
</div> </div>
</Radio.Group> </Radio.Group>
{ transformData.length > 3 && { transformData.length > 3 &&
<div onClick={toogleMore} style={{textAlign: 'center', cursor: 'pointer'}}> <div onClick={toogleMore} style={{textAlign: 'center', cursor: 'pointer', color: '#00b37a'}}>
显示更多{showMore ? <CaretDownOutlined /> : <CaretUpOutlined/>} 显示更多{showMore ? <CaretDownOutlined /> : <CaretUpOutlined/>}
</div> </div>
} }
......
...@@ -22,7 +22,7 @@ export const PriceComp = (props) => { ...@@ -22,7 +22,7 @@ export const PriceComp = (props) => {
</div> </div>
} }
/** 修改合同下单 初始值转换 */ /** 修改请购单下单 初始值转换 */
export const procurmentRenderInit = (initValue: any) => { export const procurmentRenderInit = (initValue: any) => {
return { return {
...@@ -41,9 +41,8 @@ export const procurmentRenderInit = (initValue: any) => { ...@@ -41,9 +41,8 @@ export const procurmentRenderInit = (initValue: any) => {
digest: initValue.digest, digest: initValue.digest,
deliverDate: initValue.consignee.deliverDate, deliverDate: initValue.consignee.deliverDate,
theInvoiceId: initValue.invoice?.invoiceId || null, theInvoiceId: initValue.invoice?.invoiceId || null,
hasContract: initValue.hasContract, requisitionNo: initValue.requisitionNo,
requisitionNo: initValue.contract.requisitionNo, requisitionId: initValue.requisitionId,
contract: {...initValue.contract},
} }
} }
...@@ -55,8 +54,6 @@ export const procurementRenderField = (data) => { ...@@ -55,8 +54,6 @@ export const procurementRenderField = (data) => {
...item, ...item,
logistics: item.deliverType, logistics: item.deliverType,
id: item.productId, id: item.productId,
code: item.productNo,
type: item.spec,
// 冗余memberId memberRoleId查询自提地址使用 // 冗余memberId memberRoleId查询自提地址使用
memberId: data.vendorMemberId, memberId: data.vendorMemberId,
memberRoleId: data.vendorRoleId, memberRoleId: data.vendorRoleId,
......
...@@ -29,6 +29,7 @@ import { FormDetailContext } from '@/formSchema/context' ...@@ -29,6 +29,7 @@ import { FormDetailContext } from '@/formSchema/context'
import FormDetailWrapper from '@/components/FormDetailWrapper' import FormDetailWrapper from '@/components/FormDetailWrapper'
import { useFormDetail } from '@/formSchema/effects/useFormDetail' import { useFormDetail } from '@/formSchema/effects/useFormDetail'
import { filterProductDataById } from '../orderCollect/components/productModalTable' import { filterProductDataById } from '../orderCollect/components/productModalTable'
import moment from 'moment'
export interface AddRequisitionOrderProps { } export interface AddRequisitionOrderProps { }
...@@ -140,18 +141,23 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => { ...@@ -140,18 +141,23 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => {
} = requisitionData } = requisitionData
addSchemaAction.setFieldValue('requisitionId', requisitionId) addSchemaAction.setFieldValue('requisitionId', requisitionId)
addSchemaAction.setFieldValue('requisitionNo', requisitionNo) addSchemaAction.setFieldValue('requisitionNo', requisitionNo)
addSchemaAction.setFieldValue('deliverDate', deliverTime) addSchemaAction.setFieldValue('deliverDate', moment(deliverTime).format('YYYY-MM-DD HH:mm'))
addSchemaAction.setFieldValue('digest', digest) addSchemaAction.setFieldValue('digest', digest)
addSchemaAction.setFieldValue('vendorMemberName', vendorMemberName) addSchemaAction.setFieldValue('vendorMemberName', vendorMemberName)
addSchemaAction.setFieldValue('vendorMemberId', vendorMemberId) addSchemaAction.setFieldValue('vendorMemberId', vendorMemberId)
addSchemaAction.setFieldValue('vendorRoleId', vendorRoleId) addSchemaAction.setFieldValue('vendorRoleId', vendorRoleId)
let newData = product.products.map((v: any) => { let newData = product.products.map((v: any) => {
// 默认含税
v.tax = true
// @ 配送方式 默认物流
v.logistics = 1
// 冗余供应会员 用于查询自提地址 // 冗余供应会员 用于查询自提地址
v.memberId = vendorMemberId v.memberId = vendorMemberId
v.memberName = vendorMemberName
v.memberRoleId = vendorRoleId v.memberRoleId = vendorRoleId
return v return v
}) })
addSchemaAction.setFieldValue('products', product.products) addSchemaAction.setFieldValue('products', newData)
} }
} }
...@@ -161,9 +167,17 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => { ...@@ -161,9 +167,17 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => {
// 新增订单/编辑订单 // 新增订单/编辑订单
const params = { ...value } const params = { ...value }
console.log(value) console.log(value)
if(formContext.innerFormErrors) {
// 校验采购数量 throw new Error('请完善订单物料数据')
}
// 校验采购数量 单价和税率
const judgementByPrice = []
const judgementByCount = params.products?.length && params.products.map(item => { const judgementByCount = params.products?.length && params.products.map(item => {
if(item.price) {
judgementByPrice.push(true)
} else {
judgementByPrice.push(false)
}
if(item.quantity){ if(item.quantity){
return true return true
} else { } else {
...@@ -173,14 +187,16 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => { ...@@ -173,14 +187,16 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => {
if(!judgementByCount || judgementByCount.includes(false)){ if(!judgementByCount || judgementByCount.includes(false)){
throw new Error('请填写商品采购数量') throw new Error('请填写商品采购数量')
} }
if(judgementByPrice.includes(false)){
throw new Error('请填写商品单价')
}
// 使用发票即校验发票id // 使用发票即校验发票id
if(params.hasInvoice && !params.theInvoiceId) { if(params.hasInvoice && !params.theInvoiceId) {
throw new Error('请新增或选择需要使用的发票') throw new Error('请新增或选择需要使用的发票')
} }
setBtnLoading(true) setBtnLoading(true)
/** 字段转换 */ // 请购单下单 取供应商默认的发货地址
// 合同下单 取供应商默认的发货地址
const { data: deliveryAddress} = await PublicApi.getLogisticsSelectListMemberShipperAddress({ const { data: deliveryAddress} = await PublicApi.getLogisticsSelectListMemberShipperAddress({
memberId: params.vendorMemberId, memberId: params.vendorMemberId,
roleId: params.vendorRoleId roleId: params.vendorRoleId
...@@ -244,18 +260,18 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => { ...@@ -244,18 +260,18 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => {
const _params = procurementProcessField(params) const _params = procurementProcessField(params)
console.log(_params) console.log(_params)
// if(id) { if(id) {
// fnResult = await PublicApi.postOrderBuyerCreateSrmUpdate({..._params, orderId: id}) fnResult = await PublicApi.postOrderBuyerUpdateRequisition({..._params, orderId: id})
// } else { } else {
// fnResult = await PublicApi.postOrderBuyerCreateSrm(_params) fnResult = await PublicApi.postOrderBuyerCreateRequisition(_params)
// } }
// if (fnResult.code === 1000) { if (fnResult.code === 1000) {
// setTimeout(() => { setTimeout(() => {
// history.push("/memberCenter/tranactionAbility/purchaseOrder/readyAddSrmOrder") history.push("/memberCenter/tranactionAbility/purchaseOrder/readyAddRequisitionOrder")
// }, 1000) }, 1000)
// } else { } else {
setBtnLoading(false) setBtnLoading(false)
// } }
} catch (error) { } catch (error) {
setBtnLoading(false) setBtnLoading(false)
error?.message && message.error(error.message) error?.message && message.error(error.message)
...@@ -300,12 +316,12 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => { ...@@ -300,12 +316,12 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => {
<ReadyAddOrderDetailContext.Provider value={providerValue}> <ReadyAddOrderDetailContext.Provider value={providerValue}>
<Card className={styles.orderCollectCard} style={{marginTop: 24}}> */} <Card className={styles.orderCollectCard} style={{marginTop: 24}}> */}
<FormDetailContext.Provider value={providerValue}> <FormDetailContext.Provider value={providerValue}>
<FormDetailHeader <FormDetailHeader
title={id?"编辑":"新增"} title={id?"编辑":"新增"}
schema={initFormSchema} schema={initFormSchema}
extraRight={[ extraRight={[
<Button key="1" onClick={() => addSchemaAction.submit()} loading={formLoading} type="primary" icon={<SaveOutlined />}> <Button key="1" onClick={() => addSchemaAction.submit()} loading={btnLoading} type="primary" icon={<SaveOutlined />}>
保存 保存
</Button>, </Button>,
]} ]}
...@@ -351,6 +367,7 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => { ...@@ -351,6 +367,7 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => {
// 商品信息的改动 驱动支付信息变化 // 商品信息的改动 驱动支付信息变化
useProductTableChangeForPay(ctx, update) useProductTableChangeForPay(ctx, update)
// 注入表单完成进度
formContext.useAttachmentChangeForContext(ctx) formContext.useAttachmentChangeForContext(ctx)
}} }}
...@@ -369,7 +386,7 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => { ...@@ -369,7 +386,7 @@ const AddRequisitionOrder:React.FC<AddRequisitionOrderProps> = (props) => {
{/* </Card> */} {/* </Card> */}
</FormDetailWrapper> </FormDetailWrapper>
</FormDetailContext.Provider> </FormDetailContext.Provider>
{/* 选择供应会员 */} {/* 选择供应会员 */}
<MemberModalTable currentRef={memberRef} productRef={materialRef} schemaAction={addSchemaAction}/> <MemberModalTable currentRef={memberRef} productRef={materialRef} schemaAction={addSchemaAction}/>
{/* 选择请购单 */} {/* 选择请购单 */}
......
import React, { useState, useEffect } from 'react'
import { OrderModalType } from '@/constants/order'
import { PublicApi } from '@/services/api'
import { useLocation, history } from 'umi'
import { ISchemaFormActions } from '@formily/antd'
interface DetailOrderLocationState {
// 进货单商品列表
productList?: any[],
// 下单模式
modelType?: OrderModalType
}
interface DetailOptionsProps {
addSchemaAction: ISchemaFormActions
}
export const useDetailOrder = (options: DetailOptionsProps) => {
const { addSchemaAction } = options
const locationState = useLocation<DetailOrderLocationState>().state || {}
const { productList } = locationState
const { modelType } = history.location.query
// 是否显示选择商品按钮
const [showProBtn, setShowProBtn] = useState(false)
// 是否显示供应会员字段
const [showMemberType, setShowMemberType] = useState(false)
const [visibleMember, setVisibleMember] = useState(false)
// 商品列表, 如果路由state中 带有productList, 说明是进货单下单, 需要回显进货单商品数据
const [proList, setProList] = useState<any[]>(() => productList || [])
// 回显数据写在这
useEffect(() => {
// 页面中有传入下单模式, 需要手动回显数据
if (modelType) {
addSchemaAction.setFieldValue('orderMode', parseInt(modelType))
}
// 在有传入商品列表时 需手动回显
if (proList.length > 0) {
addSchemaAction.setFieldValue('orderProductRequests', proList)
addSchemaAction.setFieldValue('orderThe', proList[0].name)
}
}, [modelType, productList])
// 唤起新增订单
const fetchAddOrder = async (params) => {
await PublicApi.postOrderProcurementOrderAdd(params)
}
return {
showProBtn,
setShowProBtn,
showMemberType,
setShowMemberType,
fetchAddOrder,
proList,
modelType,
visibleMember,
setVisibleMember
}
}
...@@ -26,17 +26,17 @@ export const getUnitPriceTotal = (record) => { ...@@ -26,17 +26,17 @@ export const getUnitPriceTotal = (record) => {
*/ */
export const useMaterialTable = (ctx: ISchemaFormActions | ISchemaFormAsyncActions) => { export const useMaterialTable = (ctx: ISchemaFormActions | ISchemaFormAsyncActions) => {
const materialRef = useRef<any>({}) const materialRef = useRef<any>({})
const { visible, setVisible, rowSelection, rowSelectionCtl } = useModalTable({type: 'checkbox'}) const { visible, setVisible, rowSelection, rowSelectionCtl } = useModalTable({type: 'checkbox', customKey: 'productId'})
const handleDelete = (record) => { const handleDelete = (record) => {
const newData = [...ctx.getFieldValue('products')] const newData = [...ctx.getFieldValue('products')]
// 删除formvalue // 删除formvalue
const colIndex = newData.findIndex(v => v.id === record.id) const colIndex = newData.findIndex(v => v.productId === record.productId)
newData.splice(colIndex, 1) newData.splice(colIndex, 1)
// 删除选中的项 // 删除选中的项
rowSelectionCtl.setSelectRow(newData) rowSelectionCtl.setSelectRow(newData)
rowSelectionCtl.setSelectedRowKeys(newData.map(v => v.id)) rowSelectionCtl.setSelectedRowKeys(newData.map(v => v.productId))
ctx.setFieldValue('products', newData) ctx.setFieldValue('products', newData)
} }
...@@ -44,26 +44,27 @@ export const useMaterialTable = (ctx: ISchemaFormActions | ISchemaFormAsyncActio ...@@ -44,26 +44,27 @@ export const useMaterialTable = (ctx: ISchemaFormActions | ISchemaFormAsyncActio
const [materialColumns, setMaterialColumns] = useState(() => { const [materialColumns, setMaterialColumns] = useState(() => {
const { pageStatus } = usePageStatus() const { pageStatus } = usePageStatus()
const tempColumn = [...materialInfoColumns]
if (pageStatus === PageStatus.ADD) { if (pageStatus === PageStatus.ADD) {
// 渲染操作 // 渲染操作
materialInfoColumns[materialInfoColumns.length - 1].render = (text, record) => <Button type='link' onClick={() => handleDelete(record)}>删除</Button> tempColumn[tempColumn.length - 1].render = (text, record) => <Button type='link' onClick={() => handleDelete(record)}>删除</Button>
// 渲染单价 // // 渲染单价
materialInfoColumns[7].render = (t, r) => <span style={{color: 'red'}}>{Number(r.price).toFixed(2)}</span> // tempColumn[7].render = (t, r) => <span style={{color: 'red'}}>¥ {Number(r.price).toFixed(2)}</span>
} else { } else {
// 渲染单价 // 渲染单价
materialInfoColumns[7].render = (t, r) => <span style={{color: 'red'}}>{Number(r.price).toFixed(2)}</span> // tempColumn[7].render = (t, r) => <span style={{color: 'red'}}>¥ {Number(r.price).toFixed(2)}</span>
materialInfoColumns.pop() tempColumn.pop()
} }
return materialInfoColumns return tempColumn
}) })
const handleShowMaterial = () => { const handleShowMaterial = () => {
const supplyMembersId = ctx.getFieldValue('vendorMemberId') const supplyMembersId = ctx.getFieldValue('vendorMemberId')
const products = ctx.getFieldValue('products') const products = ctx.getFieldValue('products')
if (supplyMembersId) { if (supplyMembersId) {
materialRef.current.setVisible(true) materialRef.current.setVisible(true)
materialRef.current.rowSelectionCtl.setSelectedRowKeys(() => products.map(item => item.id)) materialRef.current.rowSelectionCtl.setSelectedRowKeys(() => products.map(item => item.productId))
} else { } else {
message.error('请先选择采购询价合同') message.error('请先选择采购询价合同')
} }
...@@ -80,7 +81,7 @@ export const useMaterialTable = (ctx: ISchemaFormActions | ISchemaFormAsyncActio ...@@ -80,7 +81,7 @@ export const useMaterialTable = (ctx: ISchemaFormActions | ISchemaFormAsyncActio
const handleSave = row => { const handleSave = row => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const newData = [...ctx.getFieldValue('products')]; const newData = [...ctx.getFieldValue('products')];
const index = newData.findIndex(item => row.id === item.id); const index = newData.findIndex(item => row.productId === item.productId);
const item = newData[index]; const item = newData[index];
// 算单行价格 // 算单行价格
row['amount'] = getUnitPriceTotal(row) row['amount'] = getUnitPriceTotal(row)
......
...@@ -341,10 +341,10 @@ const basicInfo: ISchema = { ...@@ -341,10 +341,10 @@ const basicInfo: ISchema = {
required: true, required: true,
enum: [{ enum: [{
label: '请购单下单', label: '请购单下单',
value: 10, value: 15,
}], }],
title: '下单模式', title: '下单模式',
default: 10, default: 15,
"x-component-props": { "x-component-props": {
disabled: true, disabled: true,
} }
...@@ -366,6 +366,7 @@ const basicInfo: ISchema = { ...@@ -366,6 +366,7 @@ const basicInfo: ISchema = {
requisitionNo: { requisitionNo: {
type: 'string', type: 'string',
title: '对应请购单', title: '对应请购单',
required: true,
"x-component-props": { "x-component-props": {
disabled: true, disabled: true,
addonAfter: "{{orderRequisition}}" addonAfter: "{{orderRequisition}}"
...@@ -450,7 +451,7 @@ export const orderMaterial: ISchema = { ...@@ -450,7 +451,7 @@ export const orderMaterial: ISchema = {
"x-component": 'MultTable', "x-component": 'MultTable',
required: true, required: true,
"x-component-props": { "x-component-props": {
rowKey: 'materialId', rowKey: 'productId',
columns: "{{materialColumns}}", columns: "{{materialColumns}}",
components: "{{materialComponents}}", components: "{{materialComponents}}",
prefix: "{{materialAddButton}}", prefix: "{{materialAddButton}}",
...@@ -505,52 +506,62 @@ const submitInfo: ISchema = { ...@@ -505,52 +506,62 @@ const submitInfo: ISchema = {
}, },
} }
}, },
deliveryAddresId: { FLEX_LAYOUT_RIGHT: {
type: 'string', type: 'object',
"x-component": 'SelectAddress', "x-component": 'mega-layout',
"x-mega-props": {
style: {
full: true
}
},
"x-component-props": { "x-component-props": {
dataSource: [], labelCol: 2,
times: 0, wrapperCol: 22,
}, },
"x-rules": [ properties: {
{ deliveryAddresId: {
required: true, type: 'string',
message: '请选择送货地址' "x-component": 'SelectAddress',
"x-mega-props": {
style: {
full: true
}
},
"x-component-props": {
dataSource: [],
times: 0,
},
"x-rules": [
{
required: true,
message: '请选择送货地址'
}
],
title: '送货地址'
} }
], }
title: '送货地址' },
}
} }
} }
} }
} }
// 其他信息 // 发票信息
const ortherInfo: ISchema = { const invoiceInfo: ISchema = {
"x-index": 4, "x-index": 4,
type: 'object', type: 'object',
"x-component": 'MellowCard', "x-component": 'MellowCard',
"x-component-props": { "x-component-props": {
title: '其他信息', title: '发票信息',
id: 'otherInfo' id: 'invoiceInfo'
}, },
properties: { properties: {
NO_SUBMIT_LAYOUT_ORTHER: { NO_SUBMIT_LAYOUT_ORTHER: {
type: 'object', type: 'object',
"x-component": 'mega-layout', "x-component": 'mega-layout',
"x-component-props": { "x-component-props": {
labelCol: 4, labelCol: 2,
wrapperCol: 18, wrapperCol: 9,
labelAlign: "left", labelAlign: "left",
grid: true, grid: true,
full: true, full: true,
autoRow: true, autoRow: true,
columns: 2, columns: 1,
}, },
properties: { properties: {
hasInvoice: { hasInvoice: {
...@@ -572,11 +583,84 @@ const ortherInfo: ISchema = { ...@@ -572,11 +583,84 @@ const ortherInfo: ISchema = {
} }
] ]
}, },
FLEX_LAYOUT_RIGHT: {
type: 'object',
"x-component": 'mega-layout',
"x-component-props": {
labelCol: 2,
wrapperCol: 22,
},
properties: {
theInvoiceId: {
type: 'number',
title: ' ',
"x-component": "theInvoiceList",
"x-component-props": {
times: 0,
}
},
}
},
}
}
}
}
// 其他信息
const ortherInfo: ISchema = {
"x-index": 5,
type: 'object',
"x-component": 'MellowCard',
"x-component-props": {
title: '其他信息',
id: 'otherInfo'
},
properties: {
NO_SUBMIT_LAYOUT_ORTHER: {
type: 'object',
"x-component": 'mega-layout',
"x-component-props": {
labelCol: 4,
wrapperCol: 18,
labelAlign: "left",
grid: true,
full: true,
autoRow: true,
columns: 2,
},
properties: {
// hasInvoice: {
// type: 'boolean',
// "x-component": 'CheckboxSingle',
// "x-component-props": {
// children: '需要发票',
// style: {
// marginTop: 4,
// }
// },
// title: '发票',
// default: false,
// "x-linkages": [
// {
// type: 'value:visible',
// target: 'theInvoiceId',
// condition: "{{$value}}"
// }
// ]
// },
// theInvoiceId: {
// type: 'number',
// title: ' ',
// "x-component": "theInvoiceList",
// "x-component-props": {
// times: 0,
// }
// },
pack: { pack: {
type: 'string', type: 'string',
"x-component": 'textarea', "x-component": 'textarea',
"x-component-props": { "x-component-props": {
rows: 4 rows: 1
}, },
title: '包装要求', title: '包装要求',
"x-rules": [ "x-rules": [
...@@ -586,19 +670,11 @@ const ortherInfo: ISchema = { ...@@ -586,19 +670,11 @@ const ortherInfo: ISchema = {
} }
] ]
}, },
theInvoiceId: {
type: 'number',
title: ' ',
"x-component": "theInvoiceList",
"x-component-props": {
times: 0,
}
},
remark: { remark: {
type: 'string', type: 'string',
"x-component": 'textarea', "x-component": 'textarea',
"x-component-props": { "x-component-props": {
rows: 4 rows: 1
}, },
title: '其他要求', title: '其他要求',
"x-rules": [ "x-rules": [
...@@ -620,6 +696,7 @@ export const orderAddSchema: ISchema = { ...@@ -620,6 +696,7 @@ export const orderAddSchema: ISchema = {
basicInfo, basicInfo,
submitInfo, submitInfo,
orderMaterial, orderMaterial,
invoiceInfo,
ortherInfo, ortherInfo,
} }
} }
...@@ -48,20 +48,21 @@ export const useMaterialTable = (ctx: ISchemaFormActions | ISchemaFormAsyncActio ...@@ -48,20 +48,21 @@ export const useMaterialTable = (ctx: ISchemaFormActions | ISchemaFormAsyncActio
const [materialColumns, setMaterialColumns] = useState(() => { const [materialColumns, setMaterialColumns] = useState(() => {
const { pageStatus } = usePageStatus() const { pageStatus } = usePageStatus()
const tempColumn = [...materialInfoColumns]
if (pageStatus === PageStatus.ADD) { if (pageStatus === PageStatus.ADD) {
// 渲染操作 // 渲染操作
materialInfoColumns[materialInfoColumns.length - 1].render = (text, record) => <Button type='link' onClick={() => handleDelete(record)}>删除</Button> tempColumn[tempColumn.length - 1].render = (text, record) => <Button type='link' onClick={() => handleDelete(record)}>删除</Button>
// 渲染单价 // 渲染单价
materialInfoColumns[7].render = (t, r) => <span style={{color: 'red'}}>{Number(r.price).toFixed(2)}</span> tempColumn[7].render = (t, r) => <span style={{color: 'red'}}>{Number(r.price).toFixed(2)}</span>
} else { } else {
// 渲染单价 // 渲染单价
materialInfoColumns[7].render = (t, r) => <span style={{color: 'red'}}>{Number(r.price).toFixed(2)}</span> tempColumn[7].render = (t, r) => <span style={{color: 'red'}}>{Number(r.price).toFixed(2)}</span>
// materialInfoColumns[materialInfoColumns.length - 1].render = (t, r) => null // tempColumn[tempColumn.length - 1].render = (t, r) => null
materialInfoColumns.pop() tempColumn.pop()
} }
return materialInfoColumns return tempColumn
}) })
const handleShowMaterial = () => { const handleShowMaterial = () => {
const supplyMembersId = ctx.getFieldValue('vendorMemberId') const supplyMembersId = ctx.getFieldValue('vendorMemberId')
......
...@@ -12,7 +12,6 @@ import { FORM_FILTER_PATH } from '@/formSchema/const' ...@@ -12,7 +12,6 @@ import { FORM_FILTER_PATH } from '@/formSchema/const'
import Submit from '@/components/NiceForm/components/Submit' import Submit from '@/components/NiceForm/components/Submit'
import { useSelfTable } from './model/useReadyAddOrder' import { useSelfTable } from './model/useReadyAddOrder'
import { useHttpRequest } from '@/hooks/useHttpRequest' import { useHttpRequest } from '@/hooks/useHttpRequest'
import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix'
import '../index.less' import '../index.less'
/** /**
...@@ -22,7 +21,7 @@ import '../index.less' ...@@ -22,7 +21,7 @@ import '../index.less'
export interface ReadyAddRequisitionOrderProps {} export interface ReadyAddRequisitionOrderProps {}
const fetchTableData = async (params) => { const fetchTableData = async (params) => {
const { data } = await PublicApi.getOrderBuyerCreateSrmPage(params) const { data } = await PublicApi.getOrderBuyerCreateRequisitionPage(params)
return data return data
} }
...@@ -91,7 +90,6 @@ const ReadyAddRequisitionOrder:React.FC<ReadyAddRequisitionOrderProps> = () => { ...@@ -91,7 +90,6 @@ const ReadyAddRequisitionOrder:React.FC<ReadyAddRequisitionOrderProps> = () => {
); );
}, },
components: { components: {
DateRangePickerUnix,
Submit Submit
} }
}, },
......
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const'; import { FORM_FILTER_PATH } from '@/formSchema/const';
import { getPurchaseOrderReadyAddPageSelectOption } from '@/pages/transaction/effect';
import { ORDER_TYPE_INQUIRYT_PURCHASE } from '@/constants/order';
export const tableListSchema: any = () => { export const tableListSchema: any = () => {
const res = getPurchaseOrderReadyAddPageSelectOption()
if(res) {
const {
orderTypes: OrderType,
} = res
return { return {
type: 'object', type: 'object',
properties: { properties: {
...@@ -44,19 +35,8 @@ export const tableListSchema: any = () => { ...@@ -44,19 +35,8 @@ export const tableListSchema: any = () => {
placeholder: '请输入供应会员名称' placeholder: '请输入供应会员名称'
} }
}, },
"orderType": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
},
enum: OrderType.filter(item => item.id !== ORDER_TYPE_INQUIRYT_PURCHASE).map(item => ({
label: item['text'],
value: item['id'],
}))
},
"[startDate,endDate]": { "[startDate,endDate]": {
type: 'daterange', type: 'daterange',
// "x-component": 'DateRangePickerUnix',
'x-component-props': { 'x-component-props': {
placeholder: ['开始时间','结束时间'], placeholder: ['开始时间','结束时间'],
}, },
...@@ -71,5 +51,4 @@ export const tableListSchema: any = () => { ...@@ -71,5 +51,4 @@ export const tableListSchema: any = () => {
}, },
} }
} }
}
} }
...@@ -2,6 +2,8 @@ import React, { useState, useRef, useContext } from 'react' ...@@ -2,6 +2,8 @@ import React, { useState, useRef, useContext } from 'react'
import { Form, Input, Select, Popover, Row } from 'antd'; import { Form, Input, Select, Popover, Row } from 'antd';
import { EnvironmentOutlined } from '@ant-design/icons'; import { EnvironmentOutlined } from '@ant-design/icons';
import { PublicApi } from '@/services/api'; import { PublicApi } from '@/services/api';
import { useFormDetail } from '@/formSchema/effects/useFormDetail';
import { FormDetailContext } from '@/formSchema/context';
export interface MaterialTableCellProps { export interface MaterialTableCellProps {
title: React.ReactNode; title: React.ReactNode;
...@@ -47,6 +49,7 @@ export const MaterialTableCell:React.FC<MaterialTableCellProps> = ({ ...@@ -47,6 +49,7 @@ export const MaterialTableCell:React.FC<MaterialTableCellProps> = ({
}) => { }) => {
const formItemRef = useRef<any>(); const formItemRef = useRef<any>();
const { form } = useContext(EditableContext); const { form } = useContext(EditableContext);
const { formContext } = useContext(FormDetailContext);
// 是否显示地址 // 是否显示地址
const [showAddress, setShowAddress] = useState<boolean>(false) const [showAddress, setShowAddress] = useState<boolean>(false)
...@@ -62,11 +65,13 @@ export const MaterialTableCell:React.FC<MaterialTableCellProps> = ({ ...@@ -62,11 +65,13 @@ export const MaterialTableCell:React.FC<MaterialTableCellProps> = ({
setReceiveInfo(() => deliveryAddress[0]) setReceiveInfo(() => deliveryAddress[0])
} }
const save = async e => { const save = async () => {
try { try {
const values = await form.validateFields(); const values = await form.validateFields();
handleSave({ ...record, ...values }); handleSave({ ...record, ...values });
formContext.ctl.setInnerFormErrors(0)
} catch (errInfo) { } catch (errInfo) {
formContext.ctl.setInnerFormErrors(errInfo.errorFields.length)
console.log('Save failed:', errInfo); console.log('Save failed:', errInfo);
} }
}; };
......
...@@ -91,7 +91,9 @@ const IncreaseRequisition:React.FC<{}> = () => { ...@@ -91,7 +91,9 @@ const IncreaseRequisition:React.FC<{}> = () => {
// 新增订单/编辑订单 // 新增订单/编辑订单
const params = { ...value } const params = { ...value }
console.log(value) console.log(value)
if(formContext.innerFormErrors) {
throw new Error('请完善订单物料数据')
}
// 校验采购数量 // 校验采购数量
const judgementByCount = params.products?.length && params.products.map(item => { const judgementByCount = params.products?.length && params.products.map(item => {
if(item.quantity){ if(item.quantity){
......
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