Commit 3ab1a149 authored by 前端-钟卫鹏's avatar 前端-钟卫鹏

fix: 订单详情添加订单物料区块

parent fc19db1e
......@@ -15,7 +15,7 @@
// import AfterService from './afterServiceRoute' // 售后
// import HandlingRoute from './handlingRoute'; // 加工能力
import asyncRoutes from '../router.config.json';
import ProcurementRoute from './procurementRoute';
// import ProcurementRoute from './procurementRoute';
// import { callForBidsRoute } from './procurementRoute/callForBids';
// import { purchaseInquiryRoute } from './procurementRoute/purchaseInquiry';
// import contracRoute from './contracRoute';
......@@ -57,12 +57,12 @@ const memberCenterRoute = {
// ShopRoute,
// CommodityRoute,
// srm开发临时使用...
ProcurementRoute,
// ProcurementRoute,
// // 合同能力
// contracRoute,
//...
// AuthConfigRoute,
// ...asyncRoutes,
...asyncRoutes,
{
path: '/memberCenter/noAuth',
auth: false,
......
......@@ -114,7 +114,7 @@ const MultAddress = (props) => {
if (res.code === 1000) {
result[idx].provinceCode = val;
result[idx].province = item.name;
// @todo 编辑情况下 第一次不清空
// @ 编辑情况下 第一次不清空
if(!cityAfterRef.current) {
result[idx].cityCode = null;
result[idx].city = null;
......@@ -140,7 +140,7 @@ const MultAddress = (props) => {
if(res.code === 1000) {
result[idx].cityCode = val;
result[idx].city = items.name;
// @todo 编辑情况下 第一次不清空
// @ 编辑情况下 第一次不清空
if(!areaAfterRef.current) {
result[idx].areaCode = null;
result[idx].area = null;
......
......@@ -47,8 +47,7 @@ const MultAddress = (props) => {
// 是否仅读
const { readOnly = null } = props.props
console.log(_v, 'vvv')
// 处理表单提交置空触发错误角标提示
let value = null
if(!_v.length) {
value = [{ provinceCode: null, province: null, cityCode: null, city: null }]
......@@ -62,6 +61,7 @@ const MultAddress = (props) => {
const [province, setprovince] = useState<any>([]); // 省列表
const [city, setcity] = useState<any>([]); // 市列表
const flag = useRef<boolean>(true)
const cityAfterRef = useRef<boolean>(true)
useEffect(() => {
PublicApi.getManageAreaAll().then(res => {
......@@ -92,7 +92,10 @@ const MultAddress = (props) => {
}
}, [value])
// 触发onChange改变值
/**
* 触发onChange改变值
* @param num (1省 2市)
* */
const changeAddress = async (val: any, idx: number, num: number) => {
const result = [...value]
const cityCode: Array<any> = []
......@@ -112,12 +115,22 @@ const MultAddress = (props) => {
// 渲染省份option
const renderProvice = async (result, val, idx) => {
console.log(result, val, idx)
await province.forEach(item => {
if (item.code === val) {
PublicApi.getManageAreaByPcodeAll({ pcode: val }).then((res: any) => {
if (res.code === 1000) {
result[idx].provinceCode = val;
result[idx].province = item.name;
// @todo 编辑情况下 result[idx]存在id ?第一次渲染回填值的时候不清空
// if(result[idx]?.i d&& ) {
// console.log(cityAfterRef.current, 1, item)
// result[idx].cityCode = null;
// result[idx].city = null;
// } else {
// console.log(cityAfterRef.current, 2, item)
// cityAfterRef.current = false;
// }
city[idx] = { citydata: res.data }
setcity([...city])
}
......
......@@ -611,7 +611,7 @@ export const DOC_STATUS = {
[DOC_STATUS_REVIEWED]: '已审核',
};
// 订单类型
// 下单模式
export enum OrderModalType {
/**
......
......@@ -39,65 +39,69 @@ export const columnsSetMember: any[] = [
export const buildColumns: any[] = [
{
dataIndex: 'id',
title: 'ID',
align: 'center',
className: 'commonHide',
},
{
dataIndex: 'id',
title: '序号',
align: 'center',
render: (r, t, i) => i++
render: (t, r, i) => ++i
},
{
dataIndex: 'name',
dataIndex: 'type',
align: 'center',
title: '专家类型'
title: '专家类型',
key: 'type'
},
{
dataIndex: 'memberTypeName',
title: '专家专业级别',
align: 'center'
dataIndex: 'speciality',
title: '专家专业类别',
align: 'center',
key: 'speciality'
},
{
dataIndex: 'roleName',
dataIndex: 'qualification',
title: '专家资格证书',
align: 'center'
align: 'center',
key: 'qualification'
},
{
dataIndex: 'orderThe',
dataIndex: 'userJobTitle',
title: '专家专业职称',
align: 'center'
align: 'center',
key: 'userJobTitle'
},
{
dataIndex: 'receiverName',
title: '从事年限',
align: 'center'
align: 'center',
key: 'type'
},
{
dataIndex: 'supplyMembersName',
title: '所属行业',
align: 'center'
align: 'center',
key: 'type'
},
{
dataIndex: 'supplyMembersName',
title: '要求地区',
align: 'center'
align: 'center',
key: 'type'
},
{
dataIndex: 'supplyMembersName',
title: '排除地区',
align: 'center'
align: 'center',
key: 'type'
},
{
dataIndex: 'supplyMembersName',
title: '工作单位',
align: 'center'
align: 'center',
key: 'type'
},
{
dataIndex: 'supplyMembersName',
title: '抽取人数',
align: 'center'
align: 'center',
key: 'type'
},
// {
// dataIndex: 'ctl',
......
......@@ -135,6 +135,15 @@ const AddRemarkBidCommittee:React.FC<AddRemarkBidCommitteeProps> = (props) => {
addSchemaAction.setFieldValue('openTenderTime', formatTimeString(selectRow[0]['openTenderTime']))
addSchemaAction.setFieldValue('remarkTime', `${formatTimeString(selectRow[0]['evaluationStartTime'])} ~ ${formatTimeString(selectRow[0]['evaluationEndTime'])}`)
addSchemaAction.setFieldValue('createTime', formatTimeString(selectRow[0]['createTime']))
// 获取组件条件里面的评标专家库列表
PublicApi.getPurchaseExpertGetExpertList({current: '1', pageSize: '999'}).then(res => {
const { data, code } = res
if(code === 1000) {
addSchemaAction.setFieldValue('conditionLists', data)
}
})
}
const onConditonClick = () => {
......
......@@ -3,7 +3,7 @@ import { history } from 'umi'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import ReutrnEle from '@/components/ReturnEle'
import { usePageStatus, PageStatus } from '@/hooks/usePageStatus'
import { Button, Card } from 'antd'
import { Button, Card, message } from 'antd'
import { createFormActions } from '@formily/antd'
import { PlusOutlined, SaveOutlined } from '@ant-design/icons'
import NiceForm from '@/components/NiceForm'
......@@ -37,6 +37,10 @@ const AddRemarkBidTemplate:React.FC<AddRemarkBidTemplateProps> = (props) => {
const handleSubmit = async (value) => {
setBtnLoading(true)
if(!value?.templateContentList?.length) {
setBtnLoading(false)
return message.error('请填写评标内容')
}
PublicApi.postPurchaseTemplateSaveOrUpdateTemplate(value).then(res => {
if(res.code === 1000) {
history.goBack()
......
......@@ -17,7 +17,7 @@ import '../../constants/index.less'
export interface RemarkBidCommitteeProps {}
const fetchTableData = async (params) => {
const { data } = await PublicApi.getOrderProcurementReviewedListOne(params)
const { data } = await PublicApi.getPurchaseExpertExtractGetExpertExtractList(params)
return data
}
......
import React, { useRef } from 'react'
import { Button } from 'antd'
import { Button, Popconfirm } from 'antd'
import StatusSwitch from '@/components/StatusSwitch'
import { PublicApi } from '@/services/api'
import EyePreview from '@/components/EyePreview'
......@@ -83,7 +83,17 @@ export const useSelfTable = () => {
key: 'ctl',
render: (text, record) => <>
<Button type='link' onClick={() => history.push(`/memberCenter/procurementAbility/callForBids/remarkBidTemplate/edit?id=${record.id}`)}>编辑</Button>
<Button type='link' onClick={() => handleDelete(record.id)}>删除</Button>
<Popconfirm
title="确定要执行该操作?"
onConfirm={() => handleDelete(record.id)}
okText="是"
cancelText="否"
>
<Button
type='link'
// onClick={() => handleDelete(record.id)}
>删除</Button>
</Popconfirm>
</>
}
])
......
......@@ -114,6 +114,17 @@ const AddTender:React.FC<AddTenderProps> = (props) => {
setBtnLoading(false)
return message.error('请先关联投标商品')
}
// 校验单价
let judgementByCount = params.submitTenderMateriel?.length && params.submitTenderMateriel.map(item => {
if(item.price && typeof item.taxRate === 'number'){
return true
} else {
return false
}
})
if(!judgementByCount || judgementByCount.includes(false)){
throw new Error('请填写商品单价')
}
if(value?.id) params.id = value.id
const res = await PublicApi.postPurchaseSubmitTenderSaveSubmitTender(params)
if(res.code === 1000) {
......
......@@ -12,6 +12,9 @@ export const orderTypeLabel = ['',
'渠道现货',
'积分兑换',
'渠道积分兑换',
'采购询价合同下单',
'采购招标合同下单',
'采购竞价合同下单',
]
/**
......
......@@ -8,6 +8,7 @@ import OrderMergeInfo from '../../components/orderMergeInfo'
import OrderDeleveRecord from '../../components/orderDeleveRecord'
import OrderTransformRecord from '../../components/orderTransformRecord'
import OrderSaleRecord from '../orderSaleRecord'
import { ORDER_TYPE2_BIDDING_CONTRACT, ORDER_TYPE2_ENQUIRY_CONTRACT, ORDER_TYPE2_TENDER_CONTRACT } from '@/constants'
export interface OrderDetailSectionProps {
formContext: any,
......@@ -42,7 +43,16 @@ const OrderDetailSection:React.FC<OrderDetailSectionProps> = ({formContext, type
{ type === 'saleOrder' ? <SaleOrderProductTable/> : <OrderProductTable editable /> }
<OrderPayTabs />
{/* 采购合同下单不显示 支付信息栏 */}
{
formContext.data.type === ORDER_TYPE2_ENQUIRY_CONTRACT ||
formContext.data.type === ORDER_TYPE2_BIDDING_CONTRACT ||
formContext.data.type === ORDER_TYPE2_TENDER_CONTRACT
?
null
:
<OrderPayTabs />
}
<OrderMergeInfo />
......
......@@ -10,7 +10,7 @@ import ModalForm from '@/components/ModalForm'
import { createFormActions } from '@formily/antd'
import MellowCard from '@/components/MellowCard'
import { AddressPop } from '../../purchaseOrder/orderCollect/components/productModalTable'
import { DELIVERY_TYPE } from '@/constants'
import { DELIVERY_TYPE, OrderModalType } from '@/constants'
export interface OrderProductTableProps {
editable: boolean
......@@ -218,6 +218,8 @@ const OrderProductTable:React.FC<OrderProductTableProps> = ({editable}) => {
const { ctl, data, preview } = useContext(OrderDetailContext)
const { orderProductRequests = [], orderModel } = data || {}
const creditsCommodity = (orderModel === 24 || orderModel === 25) // 积分或渠道积分下单模式
// 合同下单模式
const contractOrder = (orderModel === OrderModalType.PURCHASE_ENQUIRY_CONTRACT_ORDER || orderModel === OrderModalType.PURCHASE_TENDER_CONTRACT_ORDER || orderModel === OrderModalType.PURCHASE_BIDDING_CONTRACT_ORDER)
const productComponents = {
body: {
......@@ -272,6 +274,7 @@ const OrderProductTable:React.FC<OrderProductTableProps> = ({editable}) => {
})
};
// 订单商品
const productInfoColumns: any[] = [
{
title: 'ID',
......@@ -347,6 +350,101 @@ const OrderProductTable:React.FC<OrderProductTableProps> = ({editable}) => {
}
]
// 订单物料
const materialInfo: any[] = [
{
title: 'ID',
dataIndex: 'id',
align: 'center',
key: 'id',
className: 'commonHide'
},
{
title: '物料编号',
dataIndex: 'materialCode',
align: 'center',
key: 'materialCode',
},
{
title: '物料名称/规格',
dataIndex: 'materialName',
align: 'center',
key: 'materialName',
render: (t, r) => <>{t}/{r.materialType}</>
},
{
title: '品类',
dataIndex: 'materialCategory',
align: 'center',
key: 'materialCategory',
},
{
title: '品牌',
dataIndex: 'materialBrand',
align: 'center',
key: 'materialBrand',
},
{
title: '单位',
dataIndex: 'unit',
align: 'center',
key: 'unit',
},
{
title: '关联报价商品ID/名称/规格/品类/品牌',
dataIndex: 'materialId',
align: 'center',
key: 'materialId',
render: (t, r) => `${t}/${r.productName}/${r.category}/${r.brand}`
},
{
title: '单价(元)',
dataIndex: 'price',
align: 'left',
key: 'price',
},
{
title: '供方库存',
dataIndex: 'inventory',
align: 'center',
key: 'inventory',
},
{
title: '采购数量',
dataIndex: 'purchaseCount',
align: 'center',
key: 'purchaseCount',
},
{
title: '含税',
dataIndex: 'taxInclusive',
align: 'center',
key: 'taxInclusive',
render: (t, r) => t ? '是' : '否'
},
{
title: '税率',
dataIndex: 'taxRate',
align: 'center',
key: 'taxRate',
},
{
title: '金额',
dataIndex: 'money',
align: 'center',
key: 'money',
},
// 接口调用
{
title: '配送方式',
dataIndex: 'logistics',
align: 'center',
key: 'logistics',
render: (text) => (text && text.deliveryType && text.deliveryType === 2) ?
<AddressPop pickInfo={text}>{DELIVERY_TYPE[text.deliveryType]}</AddressPop> : DELIVERY_TYPE[text?.deliveryType]
}
]
const columns = !editable ? productInfoColumns : productInfoColumns.map(col => {
......@@ -365,9 +463,9 @@ const OrderProductTable:React.FC<OrderProductTableProps> = ({editable}) => {
};
});
return (
<MellowCard title='订单商品' style={{marginTop: 24}} bordered={false}>
<MellowCard title={contractOrder ? '订单物料' : '订单商品'} style={{marginTop: 24}} bordered={false}>
<Table
columns={productInfoColumns}
columns={ contractOrder ? materialInfo : productInfoColumns }
dataSource={orderProductRequests}
components={productComponents}
rowKey='id'
......
......@@ -13,7 +13,7 @@ import { usePageStatus } from '@/hooks/usePageStatus'
import ModalTable from '@/components/ModalTable'
import { formatTimeString } from '@/utils'
import { AddressPop } from '../../purchaseOrder/orderCollect/components/productModalTable'
import { DELIVERY_TYPE, SaleOrderInsideWorkStateTexts } from '@/constants'
import { DELIVERY_TYPE, OrderModalType, SaleOrderInsideWorkStateTexts } from '@/constants'
export interface OrderProductTableProps {}
......@@ -295,7 +295,9 @@ const SaleOrderProductTable:React.FC<OrderProductTableProps> = (props) => {
const { page_type } = usePageStatus()
const { orderProductRequests = [], orderModel } = data || {}
const creditsCommodity = (orderModel === 24 || orderModel === 25) // 积分或渠道积分下单模式
// 合同下单模式
const contractOrder = (orderModel === OrderModalType.PURCHASE_ENQUIRY_CONTRACT_ORDER || orderModel === OrderModalType.PURCHASE_TENDER_CONTRACT_ORDER || orderModel === OrderModalType.PURCHASE_BIDDING_CONTRACT_ORDER)
console.log(contractOrder, 'fff')
const [warehouseVisible, setWarehouseVisible] = useState(false)
const [checkProductId, setCheckProductId] = useState(0) // 选中的商品id
const warehouseRef = useRef<any>({})
......@@ -367,6 +369,7 @@ const SaleOrderProductTable:React.FC<OrderProductTableProps> = (props) => {
setWarehouseVisible(true)
}
// 订单商品列
const productInfoColumns: any[] = [
{
title: 'ID',
......@@ -445,11 +448,112 @@ const SaleOrderProductTable:React.FC<OrderProductTableProps> = (props) => {
dataIndex: 'record',
align: 'center',
key: 'record',
// @todo 尚未实现, 需UI设计
render: (_, record) => <Button type='link' onClick={() => handlePreviewWarehouse(record)}>查看</Button>
},
]
// 订单物料
const materialInfo: any[] = [
{
title: 'ID',
dataIndex: 'id',
align: 'center',
key: 'id',
className: 'commonHide'
},
{
title: '物料编号',
dataIndex: 'materialCode',
align: 'center',
key: 'materialCode',
},
{
title: '物料名称/规格',
dataIndex: 'materialName',
align: 'center',
key: 'materialName',
render: (t, r) => <>{t}/{r.materialType}</>
},
{
title: '品类',
dataIndex: 'materialCategory',
align: 'center',
key: 'materialCategory',
},
{
title: '品牌',
dataIndex: 'materialBrand',
align: 'center',
key: 'materialBrand',
},
{
title: '单位',
dataIndex: 'unit',
align: 'center',
key: 'unit',
},
{
title: '关联报价商品ID/名称/规格/品类/品牌',
dataIndex: 'materialId',
align: 'center',
key: 'materialId',
render: (t, r) => `${t}/${r.productName}/${r.category}/${r.brand}`
},
{
title: '单价(元)',
dataIndex: 'price',
align: 'left',
key: 'price',
},
{
title: '供方库存',
dataIndex: 'inventory',
align: 'center',
key: 'inventory',
},
{
title: '采购数量',
dataIndex: 'purchaseCount',
align: 'center',
key: 'purchaseCount',
},
{
title: '含税',
dataIndex: 'taxInclusive',
align: 'center',
key: 'taxInclusive',
render: (t, r) => t ? '是' : '否'
},
{
title: '税率',
dataIndex: 'taxRate',
align: 'center',
key: 'taxRate',
},
{
title: '金额',
dataIndex: 'money',
align: 'center',
key: 'money',
},
// 接口调用
{
title: '配送方式',
dataIndex: 'logistics',
align: 'center',
key: 'logistics',
render: (text) => (text && text.deliveryType && text.deliveryType === 2) ?
<AddressPop pickInfo={text}>{DELIVERY_TYPE[text.deliveryType]}</AddressPop> : DELIVERY_TYPE[text?.deliveryType]
},
{
title: '仓位库存扣减记录',
dataIndex: 'record',
align: 'center',
key: 'record',
render: (_, record) => <Button type='link' onClick={() => handlePreviewWarehouse(record)}>查看</Button>
}
]
const fetchWarehouseData = useCallback(async (params) => {
const { data } = await PublicApi.getWarehousePositionDeductionRecordList({...params, productId: String(checkProductId)})
return data
......@@ -471,9 +575,9 @@ const SaleOrderProductTable:React.FC<OrderProductTableProps> = (props) => {
};
});
return (
<MellowCard title='订单商品' style={{marginTop: 24}} bordered={false}>
<MellowCard title={contractOrder ? '订单物料' : '订单商品'} style={{marginTop: 24}} bordered={false}>
<Table
columns={columns}
columns={ contractOrder ? materialInfo : columns}
dataSource={orderProductRequests.sort((a, b) => a.id - b.id)}
components={productComponents}
rowKey='id'
......
......@@ -88,7 +88,7 @@ export const AddressPop = (props) => {
{
receiveInfo && <>
<p>{receiveInfo.shipperName} / {receiveInfo.phone}</p>
<p>{receiveInfo.provinceName + receiveInfo.cityName + receiveInfo.districtName + receiveInfo.address}</p>
<p>{receiveInfo.provinceName + receiveInfo.cityName + receiveInfo.districtName + receiveInfo.address || receiveInfo.fullAddress}</p>
</>
}
</div>
......@@ -162,6 +162,7 @@ const ProductModalTable:React.FC<ProductModalTableProps> = (props) => {
const handleConfirmProduct = async () => {
// 判断所选择的商品是否属于同一个工作流
// @ts-ignore
const res = await PublicApi.postOrderIsWorkFlow({
memberId: rowSelectionCtl.selectRow[0].memberId,
memberRoleId: rowSelectionCtl.selectRow[0].memberRoleId,
......
......@@ -81,7 +81,8 @@ export const usePaymentInfo = (ctx: ISchemaFormActions | ISchemaFormAsyncActions
}, [orderProducts])
const getPayLists = (memberId, memberRoleId) => {
PublicApi.getPayPayWayList({memberId, memberRoleId}).then(res => {
// PublicApi.getPayPayWayList({memberId, memberRoleId}).then(res => {
PublicApi.getPayPayWayAccount({memberId, memberRoleId}).then(res => {
const { code, data } = res
if (code === 1000) {
const newColumns = [...columns]
......
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