Commit 5b0d8c05 authored by GuanHua's avatar GuanHua
parents 72639ab6 74d91f01
......@@ -33,8 +33,8 @@
"@ant-design/icons": "^4.2.1",
"@ant-design/pro-layout": "^5.0.16",
"@antv/data-set": "^0.11.5",
"@formily/antd": "^1.2.11",
"@formily/antd-components": "^1.2.11",
"@formily/antd": "^1.3.3",
"@formily/antd-components": "^1.3.3",
"@umijs/hooks": "^1.9.3",
"@umijs/preset-react": "1.x",
"@umijs/test": "^3.2.0",
......
......@@ -582,7 +582,7 @@ export enum PurchaseOrderInsideWorkState {
TWO_LEVEL_AUDIT_ORDER_NOT_ALLOWED,
/**
* 确认电子合同
* 待支付订单
*/
CONFIRM_ELECTRONIC,
......@@ -777,7 +777,7 @@ export const PurchaseOrderInsideWorkStateTexts = {
5: '待确认电子合同',
6: '提交一级审核订单不通过',
7: '提交二级审核订单不通过',
8: '确认电子合同',
8: '待支付订单',
10: '支付成功',
11: '支付失败',
12: '确认收货',
......
......@@ -34,6 +34,9 @@ const AddProducts: React.FC<{}> = (props) => {
const [isDisableSaveBtn, setIsDisableSaveBtn] = useState<boolean>(false)
const [currentTemplateName, setCurrentTemplateName] = useState<string>()
let [formRefs, setFormRefs] = useState([]) //子form的ref数组
const [forceRenderRef, setForceRenderRef] = useState<boolean>(false) // 编辑情况下 是否强制渲染后面的 tabpane
const isFirstRender = useRef<boolean>(true) // 编辑情况下 是否是初始切换品类
const { ProductStore } = store
const {
productSelectAttribute,
......@@ -61,8 +64,17 @@ const AddProducts: React.FC<{}> = (props) => {
setProductName(data?.name)
const attributeRes = await PublicApi.getProductCustomerGetCustomerCategoryById({ id: data?.customerCategory?.id + '' })
setAttributeLists(attributeRes.data?.customerAttributeList)
// return productRes.code
}
makeRequest()
// .then(v => {
// if(v === 1000){
// if(!isFirstRender)
// setForceRenderRef(true)
// else
// isFirstRender.current = false
// }
// })
}
return () => {
......
......@@ -90,8 +90,7 @@ const BasicInfoForm: React.FC<Iprops> = (props) => {
let arr = [...res.data] //裁去最后一级别
for (let index in arr) {
for (let _index in arr[index].areaResponses) {
let o = arr[index].areaResponses
//@ts-ignore
let o: any = arr[index].areaResponses
o[_index].areaResponses = null
}
}
......@@ -114,11 +113,7 @@ const BasicInfoForm: React.FC<Iprops> = (props) => {
}
}, [productInfoByEdit, getBasicFormParamsByEdit])
const onFinish = (values: any) => {
console.log(values,'原values')
}
const handleBrandSearch = (value?: any) => { // end value
const handleBrandSearch = (value?: any) => {
PublicApi.getProductSelectGetSelectBrand({ name: value||'' }).then(res => {
if (res.code === 1000)
setBrandData(res.data)
......
......@@ -90,7 +90,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
if(history.location.query?.id && !flagRef.current) {
flagRef.current = true
} else {
setProductSelectAttribute([])
// setProductSelectAttribute([])
priceForm.resetFields()
priceForm.setFieldsValue({isMemberPrice: false, priceType: planPrice})
}
......
......@@ -34,7 +34,7 @@ const ProductImageForm: React.FC<{}> = (props) => {
// 品类 变动清空数据
// 编辑下 flag为false 不清空;编辑下 flag为true 新建清空
if(history.location.query?.id && !flagRef.current) {
flagRef.current = true
flagRef.current = true
} else {
onChangeSetImageType({target: { value: true }})
}
......
import React from 'react'
import React, { useEffect, useState, useContext } from 'react'
import { Modal } from 'antd'
import NiceForm from '@/components/NiceForm'
import { createFormActions } from '@formily/antd'
import { OrderDetailContext } from '../../context'
import { PublicApi } from '@/services/api'
import { history } from 'umi'
export interface OrderElectronModalProps {}
const schemaActions = createFormActions()
export interface OrderElectronModalProps {
currentRef: any,
}
//@todo 尚未完成
const OrderElectronModal:React.FC<OrderElectronModalProps> = (props) => {
const { currentRef } = props
const { data } = useContext(OrderDetailContext)
const [visible, setVisible] = useState(false)
useEffect(() => {
currentRef.current = {
visible,
setVisible
}
}, [])
const handleSubmit = async () => {
console.log('签署')
const params = {
id: parseInt(data.id),
}
const { code } = await PublicApi.postOrderElectronicContractsAffirm(params)
if (code === 1000) {
setVisible(false)
history.goBack()
}
}
return (
<Modal>
<NiceForm
actions={schemaActions}
schema={{
type: 'object',
properties: {
NO_SUBMIT: {
type: 'object',
"x-component": "mega-layout",
"x-component-props": {
labelAlign: 'top'
},
properties: {
}
}
}
}}
/>
<Modal
width={1000}
style={{minHeight: 600}}
title='签署电子合同'
okText='签署合同并提交'
cancelText='不签署'
visible={visible}
onOk={handleSubmit}
onCancel={() => setVisible(false)}
>
<div style={{height: 600, position: 'relative'}}>
<iframe src={data.electronicContractUrl} style={{position: 'absolute', left: 0, top: 0, width: '100%', height: '100%', display: 'block'}}/>
</div>
</Modal>
)
}
......
import React, { useState, useEffect, useContext, useRef, useCallback } from 'react'
import OrderDetailHeader from '../../components/OrderDetailHeader'
import { Button, Row, Col } from 'antd'
import { Button, Row, Col, message } from 'antd'
import { Link, history } from 'umi'
import { orderTypeLabel, SALE_ORDER_STATUS, PURCHASE_ORDER_STATUS } from './constant'
import { formatTimeString } from '@/utils'
......@@ -21,6 +21,7 @@ import { createFormActions } from '@formily/antd'
import OrderPayModal from './components/orderPayModal'
import OrderDeleveRecord from './components/orderDeleveRecord'
import { PurchaseOrderInsideWorkState } from '@/constants'
import OrderElectronModal from './components/orderElectronModal'
export interface CommonOrderDetailProps { }
......@@ -32,10 +33,12 @@ const CommonOrderDetail: React.FC<CommonOrderDetailProps> = (props) => {
const [btnLoading, setBtnLoading] = useState<boolean>(false)
const [formData, setFormData] = useState<any>(null)
const [payList, setPaylist] = useState<any[]>([])
let { id, pageStatus, page_type = PURCHASE_ORDER_STATUS.PREVIEW_ORDER } = usePageStatus()
page_type = parseInt(page_type)
const approvedRef = useRef<any>({})
const payRef = useRef<any>({})
const electronRef = useRef<any>({})
useEffect(() => {
if (id) {
PublicApi.getOrderPurchaseOrderDetails({ id }).then(({ data, code }) => {
......@@ -98,11 +101,7 @@ const CommonOrderDetail: React.FC<CommonOrderDetailProps> = (props) => {
case PURCHASE_ORDER_STATUS.READY_CONFIRM_ELECTRON_ORDER: {
console.log('确认')
// const params = {
// id: parseInt(id),
// state: 1
// }
// result = await PublicApi.postOrderElectronicContractsAffirm(params)
break;
}
......@@ -159,7 +158,11 @@ const CommonOrderDetail: React.FC<CommonOrderDetailProps> = (props) => {
// 确认电子合同
if (page_type === PURCHASE_ORDER_STATUS.READY_CONFIRM_ELECTRON_ORDER) {
handleSubmit({})
if (!formData.electronicContractUrl) {
message.error('没有生成电子合同,请联系工作人员')
return ;
}
electronRef.current.setVisible(true)
}
if (page_type === PURCHASE_ORDER_STATUS.READY_RETURN_DOCUMENT) {
......@@ -178,6 +181,10 @@ const CommonOrderDetail: React.FC<CommonOrderDetailProps> = (props) => {
text = '确认电子合同'
break;
}
case PURCHASE_ORDER_STATUS.READY_PAY_ORDER: {
text = '去支付'
break;
}
default: {
text = '提交审核'
break;
......@@ -196,12 +203,12 @@ const CommonOrderDetail: React.FC<CommonOrderDetailProps> = (props) => {
</div>
}
</>
}, [formData])
}, [formData, btnLoading])
const detailList = [
{ label: '对应报价单号', name: 'quotationNo', span: 8, render: text => <Link to={'/'}>{text}</Link> },
{ label: '订单摘要', name: 'orderThe', span: 8 },
{ label: '供应会员', name: 'supplyMembersName', span: 8, render: text => <Link to={'/'}>{text}</Link> },
{ label: '供应会员', name: 'supplyMembersName', span: 8 },
{ label: '下单模式', name: 'orderModel', span: 8, render: text => GlobalConfig.web.orderMode.find(v => v.value === text)?.label || '' },
{ label: '订单类型', name: 'type', span: 8, render: text => orderTypeLabel[text] },
{ label: '下单时间', name: 'createTime', span: 8, render: text => formatTimeString(text) },
......@@ -310,6 +317,9 @@ const CommonOrderDetail: React.FC<CommonOrderDetailProps> = (props) => {
<OrderPayModal
currentRef={payRef}
/>
<OrderElectronModal
currentRef={electronRef}
/>
</OrderDetailContext.Provider>
</div>
) : null
......
import React, { useEffect, useState } from 'react'
import { history } from 'umi'
import { Button, Popconfirm } from 'antd'
import { Button, Popconfirm, Modal } from 'antd'
import { baseOrderListColumns } from '../../constant'
import { PublicApi } from '@/services/api'
......@@ -13,10 +13,20 @@ export const useSelfTable = () => {
history.push(`/memberCenter/tranactionAbility/purchaseOrder/orderPreview?page_type=4&id=${record.id}&preview=0`)
} else {
// 未认证
console.log('未认证电子合同')
Modal.confirm({
title: '提示',
content: '未签约电子合同, 是否要立即前往?',
onOk: popConfirm,
maskClosable: true
})
}
}
const popConfirm = () => {
console.log('前往签约')
history.push(`/memberCenter/tranactionAbility/electronicContracts/apply`)
}
useEffect(() => {
PublicApi.getOrderSignatureAuthAuthState().then(({data}) => {
setIsSign(data.state === 1)
......@@ -29,9 +39,7 @@ export const useSelfTable = () => {
dataIndex: 'ctl',
key: 'ctl',
render: (text, record) => <>
<Popconfirm title='您未申请电子签章是否需要立即前往?'>
<Button type='link' onClick={() => handleConfirm(record)}>确认电子合同</Button>
</Popconfirm>
<Button type='link' onClick={() => handleConfirm(record)}>确认电子合同</Button>
</>
}
])
......
import React from 'react'
import { Modal } from 'antd'
import React, { useContext, useRef } from 'react'
import { Modal, Button } from 'antd'
import NiceForm from '@/components/NiceForm'
import { createFormActions } from '@formily/antd'
import { createFormActions, ISchema } from '@formily/antd'
import ModalForm from '@/components/ModalForm'
import { history } from 'umi'
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect'
import { PublicApi } from '@/services/api'
import { useHttpRequest } from '@/hooks/useHttpRequest'
import { OrderDetailContext } from '../../context'
export interface OrderElectronModalProps {}
export interface OrderElectronModalProps {
currentRef: any
}
const schemaActions = createFormActions()
const schema: ISchema = {
type: 'object',
properties: {
NO_SUBMIT: {
type: 'object',
"x-component": "mega-layout",
"x-component-props": {
labelAlign: 'left',
labelCol: 6
},
properties: {
usingElectronicContracts: {
type: 'radio',
title: '是否使用电子合同',
enum: [
{ label: '是', value: 1 },
{ label: '否', value: 2 },
],
default: 1,
"x-linkages": [
{
type: 'value:visible',
target: 'contractTemplateId',
condition: "{{$value === 1}}"
},
{
type: 'value:visible',
target: 'electronicContractName',
condition: "{{$value === 1}}"
}
]
},
contractTemplateId: {
type: 'string',
enum: [],
title: '电子合同模板',
required: true,
"x-component-props": {
placeholder: '请选择电子合同模板',
style: {
minWidth: 140
}
},
"x-props": {
addonAfter: "{{electronBtn}}"
}
},
electronicContractName: {
type: 'string',
"x-component": 'children',
"x-component-props": {
children: ""
},
title: '电子合同',
},
electronicContractUrl: {
type: 'string',
display: false,
},
state: {
type: 'radio',
title: '是否审核通过',
enum: [
{ label: '审核通过', value: 1 },
{ label: '审核不通过', value: 0 },
],
default: 1,
"x-linkages": [
{
type: 'value:visible',
target: 'cause',
condition: "{{$value === 0}}"
}
]
},
cause: {
type: 'textarea',
"x-component-props": {
rows: 4,
placeholder: '在此输入你的原因, 最多60个汉字'
},
title: '审核不通过原因',
"x-rules": [
{
required: true,
message: '请输入审核不通过原因'
},
{
limitByte: true,
maxByte: 30
}
]
}
}
}
}
}
//@todo 尚未完成
const OrderElectronModal:React.FC<OrderElectronModalProps> = (props) => {
const formRef = useRef<any>({})
const { data } = useContext(OrderDetailContext)
const { run, loading } = useHttpRequest(PublicApi.postOrderSignatureSignContractCreate, {ctlType: 'none'})
const createElectron = async () => {
const contractTemplateId = schemaActions.getFieldValue('contractTemplateId')
const orderNo = data.orderNo
const signMemberId = data.createMemberId
const params = {
contractTemplateId,
orderNo,
signMemberId
}
const { code, data: resData } = await run(params)
if (code === 1000) {
schemaActions.setFieldValue('electronicContractName', resData.contractName)
schemaActions.setFieldValue('electronicContractUrl', resData.contractUrl)
schemaActions.setFieldState('electronicContractName', state => {
state.props["x-component-props"].children = <a href={resData.contractUrl} download={resData.contractName} target='_blank'>{resData.contractName}</a>
})
}
}
const electronBtn = <Button style={{marginLeft: 24}} onClick={createElectron} loading={loading}>生成电子合同</Button>
const handleSubmit = async (value) => {
const params = {
...value,
id: data.id,
}
const { code } = await PublicApi.postOrderSubmittedReviewOrder(params)
if (code === 1000) {
history.goBack()
}
}
const handleConfirm = () => {
schemaActions.submit()
}
return (
<Modal>
<NiceForm
actions={schemaActions}
schema={{
type: 'object',
properties: {
NO_SUBMIT: {
type: 'object',
"x-component": "mega-layout",
"x-component-props": {
labelAlign: 'top'
},
properties: {
}
}
}
}}
/>
</Modal>
<ModalForm
modalTitle='确认提交审核'
previewPlaceholder=' '
currentRef={props.currentRef}
schema={schema}
actions={schemaActions}
onSubmit={handleSubmit}
confirm={handleConfirm}
expressionScope={{
electronBtn
}}
effects={($) => {
useAsyncSelect('contractTemplateId', async () => (await PublicApi.getOrderSelectListContractTemplate()).data, ['name', 'id'])
}}
/>
)
}
......
......@@ -20,15 +20,23 @@ import OrderPayTabs from './components/orderPayTabs'
import StatusColors from '@/pages/transaction/components/StatusColors'
import OrderPayResultModal from './components/orderPayResultModal'
import OrderDeleveRecord from './components/orderDeleveRecord'
import OrderElectronModal from './components/orderElectronModal'
import ModalForm from '@/components/ModalForm'
import { createFormActions } from '@formily/antd'
export interface CommonOrderDetailProps {}
const approvedActions = createFormActions()
const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => {
const approvedRef = useRef<any>({})
const [btnLoading, setBtnLoading] = useState<boolean>(false)
const [formData, setFormData] = useState<any>(null)
let { id, pageStatus, page_type = SALE_ORDER_STATUS.READY_APPROVED_ORDER, orderDeliveryDetailsId } = usePageStatus()
page_type = Number(page_type)
const payResultVisible = useRef<any>({})
const electronRef = useRef<any>({})
const [payResultType, setPayResultType] = useState<'default' | 'preview'>('default')
useEffect(() => {
if (id) {
......@@ -40,6 +48,10 @@ const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => {
}
}, [])
const handleConfirmApproved = () => {
approvedActions.submit()
}
const formContext = {
data: formData,
payResultType,
......@@ -54,16 +66,15 @@ const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => {
let result: any = {}
const caseData = typeof page_type === 'string' ? parseInt(page_type) : page_type
setBtnLoading(true)
switch(caseData) {
case SALE_ORDER_STATUS.READY_APPROVED_ORDER: {
//@todo 暂时写死
const params = {
id: parseInt(id),
usingElectronicContracts: 0,
state: 1
}
result = await PublicApi.postOrderSubmittedReviewOrder(params)
// const params = {
// id: parseInt(id),
// usingElectronicContracts: 0,
// state: 1
// }
// result = await PublicApi.postOrderSubmittedReviewOrder(params)
break;
}
......@@ -145,11 +156,22 @@ const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => {
payResultVisible.current.setVisible(true)
return
}
if (page_type === SALE_ORDER_STATUS.READY_APPROVED_ORDER) {
electronRef.current.setVisible(true)
return
}
// 一级审核, 二级审核, 确认订单 都需要通过弹窗确认后再提交
if (page_type === SALE_ORDER_STATUS.ONE_LEVEL_APPROVED_ORDER || page_type === SALE_ORDER_STATUS.TWO_LEVEL_APPROVED_ORDER || page_type === SALE_ORDER_STATUS.CONFIRM_ORDER) {
approvedRef.current.setVisible(true)
return ;
}
handleSubmit()
}
const renderExtra = () => {
if (!formData || page_type === SALE_ORDER_STATUS.PREVIEW_ORDER) {
if (!formData || page_type === SALE_ORDER_STATUS.PREVIEW_ORDER || page_type === SaleOrderInsideWorkState.CONFIRM_DELIVERY_ORDER) {
return null
}
let text = ''
......@@ -158,10 +180,6 @@ const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => {
text = '确认提交'
break;
}
case SaleOrderInsideWorkState.CONFIRM_DELIVERY_ORDER: {
text = '确认全部已发货'
break;
}
case SaleOrderInsideWorkState.CONFIRM_RECEIPT: {
text = '确认全部已回单'
break;
......@@ -221,8 +239,66 @@ const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => {
<OrderTransformRecord/>
</div>
</OrderDetailWrapper>
<OrderElectronModal
currentRef={electronRef}
/>
<OrderPayResultModal currentRef={payResultVisible} type={payResultType}/>
{/* 提交时触发的弹窗集合 */}
<ModalForm
modalTitle='提示'
currentRef={approvedRef}
confirm={handleConfirmApproved}
actions={approvedActions}
schema={{
type: 'object',
properties: {
NO_SUBMIT: {
type: 'object',
"x-component": 'mega-layout',
"x-component-props": {
labelAlign: 'top',
},
properties: {
state: {
type: 'radio',
enum: [
{ label: '审核通过', value: 1 },
{ label: '审核不通过', value: 0 },
],
default: 1,
"x-linkages": [
{
type: 'value:visible',
target: 'cause',
condition: "{{$value === 0}}"
}
]
},
cause: {
type: 'textarea',
"x-component-props": {
rows: 4,
placeholder: '在此输入你的原因, 最多60个汉字'
},
title: '审核不通过原因',
"x-rules": [
{
required: true,
message: '请输入审核不通过原因'
},
{
limitByte: true,
maxByte: 30
}
]
}
}
}
}
}}
onSubmit={handleSubmit}
/>
</OrderDetailContext.Provider>
</div>
) : null
......
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