Commit ef4eb1e3 authored by 前端-彭佳文's avatar 前端-彭佳文

Merge branch 'v2-220418-order' into 'v2-220418'

fix: 完善送货计划管理 See merge request linkseeks-design/pro-platform!186
parents b1ac4d80 aca9b2a7
import { Button, Col, Drawer, Form, Input, Pagination, Radio, Row, Table } from "antd";
import { useCallback, useEffect, useState } from "react";
import { TableMemberColumn } from "./columns";
import { Button, Col, Drawer, Form, Input, Pagination, Radio, Row, Table } from "antd"
import { useCallback, useEffect, useState } from "react"
import { TableMemberColumn } from "./columns"
import { LinkOutlined } from "@ant-design/icons"
import styled from 'styled-components'
import {
///member/manage/lower/consumer/member/page
getMemberManageLowerProviderMerchantPage,
getMemberManageUpperProviderMerchantPage,
getMemberManageLowerConsumerMemberPage,
getMemberManageUpperConsumerMerchantPage
} from '@/services/MemberV2Api';
} from '@/services/MemberV2Api'
const RowStyleLayout = styled(props => <div {...props} />)`
.ant-input-group-compact {
display: flex;
}
.ant-input {
height: 32px;
}
.ant-btn {
height: 32px;
}
`
interface RoleSelectProps {
request?: (payload: any) => Promise<any>
params?: object
......@@ -61,14 +70,20 @@ function RoleSelect(props: RoleSelectProps) {
return (
<>
<Row gutter={4}>
{/* <Row gutter={4}>
<Col span={18}>
<Input value={value?.name} disabled={disabled} />
</Col>
<Col span={6}>
<Button disabled={disabled} onClick={showDrawer}>选择采购会员</Button>
</Col>
</Row>
</Row> */}
<RowStyleLayout>
<Input.Group compact>
<Input value={value?.name} disabled />
<Button type='primary' icon={<LinkOutlined />} disabled={disabled} onClick={showDrawer}>选择</Button>
</Input.Group>
</RowStyleLayout>
<Drawer
visible={visible}
......
......@@ -3,31 +3,31 @@
* @author: Gavin
* @description: 与SRM内容大致相同,文件分开方便后续对接以及日后变动修改二开
*/
import React, { useEffect, useRef, useState } from 'react'
import AnchorPage, { AnchorsItem } from '@/components/AnchorPage'
import { history } from 'umi'
import { Circulation, ConfirmDeliveryPlan, Purchaser, SubmitDeliveryPlan, BaseInfo as base_Info, Supplier, PlanningCycle, SupplyMembersLabel, PlanSummary, Remarks, PlannedDelivery, DeliveryPlanText, DeliveryPlanRemark, CreateDeliveryPlanTitleB2B } from '../../constants'
import { Button, DatePicker, Form, Input, InputNumber, message, Space, Steps, Table } from 'antd'
import { SaveOutlined } from '@ant-design/icons'
import BaseInfo from '@/components/BaseInfo/BaseInfo'
import _ from 'lodash'
import { convertArrtoObj, getDayAll } from '../../utils'
import { BrandColumn, ClassColumn, CommodityNoColumn, ConsigneeNumColumn, DeliveredNumColumn, OrderCreatedAtColumn, OrderNoColumn, OrderSummaryColumn, OrderNumColumn, PlannedDeliveryNumColumn, TradeNameColumn, TransitNumColumn, UntilColumn } from '../../constants/table-column'
import { RoleSelect } from '@/components/RoleSelect'
import { getMemberManageSupplyMember } from '@/services/MemberV2Api'
import { getOrderDeliveryPlanOrderProductPage, postOrderDeliveryPlanB2bCreate } from '@/services/OrderNewV2Api'
const formItemLayout = {
labelCol: { span: 3 },
wrapperCol: { span: 18 }
}
// 1:查询供应商角色,2:查询采购商角色
const ROLE_TYPE = '1'
// 1:b2b,2:srm
const ORDER_TYPE = '1'
import React, { useEffect, useRef, useState } from 'react'
import AnchorPage, { AnchorsItem } from '@/components/AnchorPage'
import { history } from 'umi'
import { Circulation, ConfirmDeliveryPlan, Purchaser, SubmitDeliveryPlan, BaseInfo as base_Info, Supplier, PlanningCycle, SupplyMembersLabel, PlanSummary, Remarks, PlannedDelivery, DeliveryPlanText, DeliveryPlanRemark, CreateDeliveryPlanTitleB2B } from '../../constants'
import { Button, DatePicker, Form, Input, InputNumber, message, Space, Spin, Steps, Table } from 'antd'
import { SaveOutlined } from '@ant-design/icons'
import BaseInfo from '@/components/BaseInfo/BaseInfo'
import _ from 'lodash'
import { convertArrToObj, getDayAll } from '../../utils'
import { BrandColumn, ClassColumn, CommodityNoColumn, ConsigneeNumColumn, DeliveredNumColumn, OrderCreatedAtColumn, OrderNoColumn, OrderSummaryColumn, OrderNumColumn, PlannedDeliveryNumColumn, TradeNameColumn, TransitNumColumn, UntilColumn } from '../../constants/table-column'
import { RoleSelect } from '@/components/RoleSelect'
import { getMemberManageSupplyMember } from '@/services/MemberV2Api'
import { getOrderDeliveryPlanOrderProductPage, postOrderDeliveryPlanB2bCreate } from '@/services/OrderNewV2Api'
const initGoodsTableColumn = [
const formItemLayout = {
labelCol: { span: 3 },
wrapperCol: { span: 18 }
}
// 1:查询供应商角色,2:查询采购商角色
const ROLE_TYPE = '1'
// 1:b2b,2:srm
const ORDER_TYPE = '1'
const initGoodsTableColumn = [
{ ...CommodityNoColumn, dataIndex: 'skuId', width: 80, },
{ ...TradeNameColumn, dataIndex: 'productName', width: 192, },
{ ...ClassColumn, dataIndex: 'category', width: 96, },
......@@ -49,226 +49,242 @@ const initExpandIconColumn = [
{ ...DeliveredNumColumn, dataIndex: 'leftCount', width: 86, },
{ ...PlannedDeliveryNumColumn, dataIndex: 'planCount', width: 96, },
]
const DeliveryPlanAwaitB2BCreate: React.FC = () => {
const [form] = Form.useForm()
const datesRef = useRef<any>(null)
const goodsTableDataRef = useRef(null)
// 锚点标题
const [iAnchors, setIAnchors] = useState<AnchorsItem[]>([
Circulation,
base_Info,
PlannedDelivery,
Remarks,
])
// 动态 TableColumn
const [goodsTableColumn, setGoodsTableColumn] = useState<any>(initGoodsTableColumn)
// 动态 expandIconColumn
const [expandIconColumn, setExpandIconColumn] = useState<any>(initExpandIconColumn)
const expandedRowRender = (record, index) => {
return <Table rowKey={'orderProductId'} columns={expandIconColumn} dataSource={record.orders} pagination={false} tableLayout="fixed" />
}
// 选中 开始时间,结束时间
const [selectedDate, setSelectedDate] = useState<Array<string>>([])
// 选中 会员信息
const [selectedMember, setSelectedMember] = useState<any>({})
// 计划送货商品 列表
const [goodsTableData, setGoodsTableData] = useState<any>(null)
// 保存
const save = () => {
form.validateFields().then(values => {
const DeliveryPlanAwaitB2BCreate: React.FC = () => {
const [form] = Form.useForm()
const datesRef = useRef<any>(null)
const goodsTableDataRef = useRef(null)
const [spinning, setSpinning] = useState<boolean>(false)
// 锚点标题
const [iAnchors, setIAnchors] = useState<AnchorsItem[]>([
Circulation,
base_Info,
PlannedDelivery,
Remarks,
])
// 动态 TableColumn
const [goodsTableColumn, setGoodsTableColumn] = useState<any>(initGoodsTableColumn)
// 动态 expandIconColumn
const [expandIconColumn, setExpandIconColumn] = useState<any>(initExpandIconColumn)
const expandedRowRender = (record, index) => {
return <Table rowKey={'orderProductId'} columns={expandIconColumn} dataSource={record.orders} pagination={false} tableLayout="fixed" />
}
// 选中 开始时间,结束时间
const [selectedDate, setSelectedDate] = useState<Array<string>>([])
// 选中 会员信息
const [selectedMember, setSelectedMember] = useState<any>({})
// 计划送货商品 列表
const [goodsTableData, setGoodsTableData] = useState<any>(null)
// 保存
const save = () => {
form.validateFields().then(values => {
// console.log('values :>> ', values)
if (_.isEmpty(goodsTableDataRef.current)) {
message.warning('没有找到可执行计划送货')
return
}
const productList = goodsTableDataRef.current.map((item: any) => {
return {
...item,
orders: item.orders.map((o: any) => {
const planDays = Object.keys(o).filter((f: any) => f.startsWith('$')).map((p: any) => o[p])
return {
...o,
planDays
}
})
}
})
postOrderDeliveryPlanB2bCreate({
vendorMemberId: values.memberInfo.memberId,
vendorRoleId: values.memberInfo.roleId,
vendorMemberName: values.memberInfo.name,
digest: values.planSummaryText,
planStartTime: values.dates[0].format('YYYY-MM-DD'),
planEndTime: values.dates[1].format('YYYY-MM-DD'),
remark: values.remark,
productList
}).then((res: any) => {
console.log('保存 :>> ', res)
})
})
}
// 对应日期填入的送货数量
const inputChange = (val: any, text: any, record: any) => {
let { day } = text
let dataArr = JSON.parse(JSON.stringify(goodsTableDataRef.current))
let index = dataArr.findIndex(f => f.skuId === record.skuId)
let childIndex = dataArr[index].orders.findIndex(f => f.orderProductId === record.orderProductId)
dataArr[index].orders[childIndex][`$${day}`].planCount = val
goodsTableDataRef.current = dataArr
setGoodsTableData(dataArr)
}
// 计划周期 选择日期
const handleDateAssembleColumn = (dateGroup) => {
if (_.isArray(dateGroup)) {
const startDate = dateGroup[0].format('YYYY-MM-DD')
const endDate = dateGroup[1].format('YYYY-MM-DD')
const dates = getDayAll(startDate, endDate)
datesRef.current = dates
setSelectedDate([startDate, endDate])
const datesColumn = dates.map((item, i) => ({ title: item.substr(1), dataIndex: item, key: item, width: 120, align: 'center', }))
const datesExpandIconColumn = dates.map((item, i) => ({
title: item.substr(1),
dataIndex: item,
key: item,
width: 80,
align: 'center',
render: (text: any, record: any) => (<InputNumber style={{ width: '100%' }} bordered value={text?.planCount} onChange={(val) => inputChange(val, text, record)} />)
}))
setGoodsTableColumn([...goodsTableColumn, ...datesColumn])
setExpandIconColumn([...expandIconColumn, ...datesExpandIconColumn])
} else {
// 清空
datesRef.current = null
goodsTableDataRef.current = null
setSelectedDate([])
setGoodsTableData([])
setGoodsTableColumn(initGoodsTableColumn)
setExpandIconColumn(initExpandIconColumn)
}
}
// 选中的会员信息
const handleMemberInfo = (info) => {
setSelectedMember(info)
}
// 获取计划送货
const getPlannedDelivery = () => {
getOrderDeliveryPlanOrderProductPage({
startDate: selectedDate[0],
endDate: selectedDate[1],
memberId: selectedMember.memberId,
roleId: selectedMember.roleId,
roleType: ROLE_TYPE,
orderType: ORDER_TYPE,
current: '1',
pageSize: '10'
}).then((res) => {
if (res.code === 1000) {
const assemble = res.data.data.map((item => {
return {
...item,
...convertArrtoObj(datesRef.current),
orders: item.orders.map(o => ({ ...o, ...convertArrtoObj(datesRef.current), }))
}
}))
goodsTableDataRef.current = assemble
setGoodsTableData(assemble)
}
})
}
// 监听 选择日期 and 选择会员
useEffect(() => {
// 双条件满足 请求
if (!_.isEmpty(selectedDate) && !_.isEmpty(selectedMember)) {
console.log('订单能力 - 送货计划管理 - 待提交送货计划 B2B -----------:>> ', '双条件满足 请求 获取计划送货')
getPlannedDelivery()
const planSummaryText = `${selectedDate[0]}~${selectedDate[1]} ${selectedMember.name} ${DeliveryPlanText}`
form.setFieldsValue({ planSummaryText })
} else {
console.log('订单能力 - 送货计划管理 - 待提交送货计划 B2B -----------:>> ', '条件暂未满足不调取接口获取')
}
}, [selectedDate, selectedMember])
return (<>
<AnchorPage
title={CreateDeliveryPlanTitleB2B}
onBack={() => history.goBack()}
anchors={iAnchors}
extra={
<Space>
{/* <Button>保存并提交</Button> */}
<Button type='primary' icon={<SaveOutlined />} onClick={save}>保存</Button>
</Space>
}
>
<Form
labelAlign='left'
form={form}
>
<BaseInfo className='mt-0' title={Circulation.name} id={Circulation.key} cols={1}>
<Steps progressDot current={0}>
<Steps.Step title={Purchaser} description={SubmitDeliveryPlan} />
<Steps.Step title={Supplier} description={ConfirmDeliveryPlan} />
</Steps>
</BaseInfo>
<BaseInfo className='mt-16' title={base_Info.name} id={base_Info.key}>
<Form.Item
{...formItemLayout}
label={PlanningCycle}
name='dates'
>
<DatePicker.RangePicker style={{ width: '100%' }} onChange={(dates) => handleDateAssembleColumn(dates)} />
</Form.Item>
<Form.Item
{...formItemLayout}
label={SupplyMembersLabel}
name='memberInfo'
>
<RoleSelect
request={getMemberManageSupplyMember}
onChange={handleMemberInfo}
/>
</Form.Item>
<Form.Item
{...formItemLayout}
label={PlanSummary}
name='planSummaryText'
>
<Input />
</Form.Item>
</BaseInfo>
<BaseInfo className='mt-16' title={PlannedDelivery.name} id={PlannedDelivery.key} cols={1}>
<Table
// defaultExpandAllRows
rowKey={'skuId'}
columns={goodsTableColumn}
expandedRowRender={expandedRowRender}
dataSource={goodsTableData}
tableLayout="fixed"
scroll={{ x: 2022 }}
/>
</BaseInfo>
<BaseInfo className='mt-16' title={Remarks.name} id={Remarks.key} cols={1}>
<Form.Item
name='remark'
>
<Input.TextArea rows={4} maxLength={300} placeholder={DeliveryPlanRemark} />
</Form.Item>
</BaseInfo>
</Form>
</AnchorPage>
</>)
}
export default DeliveryPlanAwaitB2BCreate
\ No newline at end of file
setSpinning(true)
const productList = goodsTableDataRef.current.map((item: any) => {
return {
...item,
orders: item.orders.map((o: any) => {
const planDays = Object.keys(o).filter((f: any) => f.startsWith('$')).map((p: any) => o[p])
return {
...o,
planDays
}
})
}
})
postOrderDeliveryPlanB2bCreate({
vendorMemberId: values.memberInfo.memberId,
vendorRoleId: values.memberInfo.roleId,
vendorMemberName: values.memberInfo.name,
digest: values.planSummaryText,
planStartTime: values.dates[0].format('YYYY-MM-DD'),
planEndTime: values.dates[1].format('YYYY-MM-DD'),
remark: values.remark,
productList
}).then((res: any) => {
setSpinning(false)
if (res.code === 1000) {
history.goBack()
}
}).catch(err => {
setSpinning(false)
})
})
}
// 对应日期填入的送货数量
const inputChange = (val: any, text: any, record: any) => {
let { day } = text
let dataArr = JSON.parse(JSON.stringify(goodsTableDataRef.current))
let index = dataArr.findIndex(f => f.skuId === record.skuId)
let childIndex = dataArr[index].orders.findIndex(f => f.orderProductId === record.orderProductId)
dataArr[index].orders[childIndex][`$${day}`].planCount = val
goodsTableDataRef.current = dataArr
setGoodsTableData(dataArr)
}
// 计划周期 选择日期
const handleDateAssembleColumn = (dateGroup) => {
if (_.isArray(dateGroup)) {
const startDate = dateGroup[0].format('YYYY-MM-DD')
const endDate = dateGroup[1].format('YYYY-MM-DD')
const dates = getDayAll(startDate, endDate)
datesRef.current = dates
setSelectedDate([startDate, endDate])
const datesColumn = dates.map((item, i) => ({ title: item.substr(1), dataIndex: item, key: item, width: 120, align: 'center', }))
const datesExpandIconColumn = dates.map((item, i) => ({
title: item.substr(1),
dataIndex: item,
key: item,
width: 80,
align: 'center',
render: (text: any, record: any) => (<InputNumber style={{ width: '100%' }} bordered value={text?.planCount} onChange={(val) => inputChange(val, text, record)} />)
}))
setGoodsTableColumn([...initGoodsTableColumn, ...datesColumn])
setExpandIconColumn([...initExpandIconColumn, ...datesExpandIconColumn])
} else {
// 清空
datesRef.current = null
goodsTableDataRef.current = null
setSelectedDate([])
setGoodsTableData([])
setGoodsTableColumn(initGoodsTableColumn)
setExpandIconColumn(initExpandIconColumn)
}
}
// 选中的会员信息
const handleMemberInfo = (info) => {
setSelectedMember(info)
}
// 获取计划送货
const getPlannedDelivery = () => {
getOrderDeliveryPlanOrderProductPage({
startDate: selectedDate[0],
endDate: selectedDate[1],
memberId: selectedMember.memberId,
roleId: selectedMember.roleId,
roleType: ROLE_TYPE,
orderType: ORDER_TYPE,
current: '1',
pageSize: '10'
}).then((res) => {
if (res.code === 1000) {
const assemble = res.data.data.map((item => {
return {
...item,
...convertArrToObj(datesRef.current),
orders: item.orders.map(o => ({ ...o, ...convertArrToObj(datesRef.current), }))
}
}))
goodsTableDataRef.current = assemble
setGoodsTableData(assemble)
}
})
}
// 监听 选择日期 and 选择会员
useEffect(() => {
// 双条件满足 请求
if (!_.isEmpty(selectedDate) && !_.isEmpty(selectedMember)) {
console.log('订单能力 - 送货计划管理 - 待提交送货计划 B2B -----------:>> ', '双条件满足 请求 获取计划送货')
getPlannedDelivery()
const planSummaryText = `${selectedDate[0]}~${selectedDate[1]} ${selectedMember.name} ${DeliveryPlanText}`
form.setFieldsValue({ planSummaryText })
} else {
console.log('订单能力 - 送货计划管理 - 待提交送货计划 B2B -----------:>> ', '条件暂未满足不调取接口获取')
}
}, [selectedDate, selectedMember])
return (<>
<Spin spinning={spinning}>
<AnchorPage
title={CreateDeliveryPlanTitleB2B}
onBack={() => history.goBack()}
anchors={iAnchors}
extra={
<Space>
{/* <Button>保存并提交</Button> */}
<Button type='primary' icon={<SaveOutlined />} onClick={save}>保存</Button>
</Space>
}
>
<Form
labelAlign='left'
form={form}
>
<BaseInfo className='mt-0' title={Circulation.name} id={Circulation.key} cols={1}>
<Steps progressDot current={0}>
<Steps.Step title={Purchaser} description={SubmitDeliveryPlan} />
<Steps.Step title={Supplier} description={ConfirmDeliveryPlan} />
</Steps>
</BaseInfo>
<BaseInfo className='mt-16' title={base_Info.name} id={base_Info.key}>
<Form.Item
{...formItemLayout}
label={PlanningCycle}
name='dates'
>
<DatePicker.RangePicker style={{ width: '100%' }} onChange={(dates) => handleDateAssembleColumn(dates)} />
</Form.Item>
<Form.Item
{...formItemLayout}
label={SupplyMembersLabel}
name='memberInfo'
>
<RoleSelect
request={getMemberManageSupplyMember}
onChange={handleMemberInfo}
/>
</Form.Item>
<Form.Item
{...formItemLayout}
label={PlanSummary}
name='planSummaryText'
rules={[
{ required: true, message: '请选择' }
]}
>
<Input />
</Form.Item>
</BaseInfo>
<BaseInfo className='mt-16' title={PlannedDelivery.name} id={PlannedDelivery.key} cols={1}>
<Table
// defaultExpandAllRows
rowKey={'skuId'}
columns={goodsTableColumn}
expandedRowRender={expandedRowRender}
dataSource={goodsTableData}
tableLayout="fixed"
scroll={{ x: 2022 }}
/>
</BaseInfo>
<BaseInfo className='mt-16' title={Remarks.name} id={Remarks.key} cols={1}>
<Form.Item
name='remark'
rules={[
{ required: true, message: '请输入' }
]}
>
<Input.TextArea rows={4} maxLength={300} placeholder={DeliveryPlanRemark} />
</Form.Item>
</BaseInfo>
</Form>
</AnchorPage>
</Spin>
</>)
}
export default DeliveryPlanAwaitB2BCreate
\ No newline at end of file
......@@ -5,39 +5,31 @@
*/
import React, { useEffect, useRef, useState } from 'react'
import AnchorPage, { AnchorsItem } from '@/components/AnchorPage'
import { history } from 'umi'
import { Circulation, ConfirmDeliveryPlan, Purchaser, SubmitDeliveryPlan, BaseInfo as base_Info, Supplier, PlanningCycle, SupplyMembersLabel, PlanSummary, ExternalState, Remarks, ExternalRoamRecord, PlannedDelivery, DeliveryPlanText, DeliveryPlanRemark } from '../../constants'
import { Button, DatePicker, Form, Input, InputNumber, Space, Steps, Table } from 'antd'
import { SaveOutlined } from '@ant-design/icons'
import { history, useHistory } from 'umi'
import { Circulation, ConfirmDeliveryPlan, Purchaser, SubmitDeliveryPlan, BaseInfo as base_Info, Supplier, PlanningCycle, SupplyMembersLabel, PlanSummary, ExternalState, Remarks, ExternalRoamRecord, PlannedDelivery, PlanNumber } from '../../constants'
import { Steps, Table, Tag } from 'antd'
import BaseInfo from '@/components/BaseInfo/BaseInfo'
import { ExternalRoamRecordTableColumn } from '../../constants/page-table-column'
import _ from 'lodash'
import { convertArrtoObj, getDayAll } from '../../utils'
import { getDayAll, godAtob, integrationArrToObj, integrationOjb, TagStatus } from '../../utils'
import { BrandColumn, ClassColumn, CommodityNoColumn, ConsigneeNumColumn, DeliveredNumColumn, OrderCreatedAtColumn, OrderNoColumn, OrderSummaryColumn, OrderNumColumn, PlannedDeliveryNumColumn, TradeNameColumn, TransitNumColumn, UntilColumn } from '../../constants/table-column'
import { RoleSelect } from '@/components/RoleSelect'
import { getMemberManageLowerMerchantProviderPage } from '@/services/MemberV2Api'
import { getOrderDeliveryPlanOrderProductPage, postOrderDeliveryPlanB2bCreate } from '@/services/OrderNewV2Api'
import { getOrderDeliveryPlanDeliveryHistory, getOrderDeliveryPlanDetail, getOrderDeliveryPlanDetailProductPage } from '@/services/OrderNewV2Api'
import moment from 'moment'
const formItemLayout = {
labelCol: { span: 3 },
wrapperCol: { span: 18 }
}
const tagStatus = new TagStatus()
const statusTxt = new Map([[1, '待提交'], [2, '待确认'], [3, '待修订'], [4, '已确认'], [5, '已删除']])
// 1:查询供应商角色,2:查询采购商角色
const ROLE_TYPE = '1'
// 1:b2b,2:srm
const OEDER_TYPE = '1'
const DeliveryPlanAwaitB2BDetails: React.FC = () => {
const [form] = Form.useForm()
const datesRef = useRef<any>(null)
const { location: { query: { i } } } = useHistory()
const id = godAtob(i)
const goodsTableDataRef = useRef(null)
// 锚点标题
const [iAnchors, setiAnchors] = useState<AnchorsItem[]>([
const [iAnchors, setIAnchors] = useState<AnchorsItem[]>([
Circulation,
base_Info,
PlannedDelivery,
Remarks,
ExternalRoamRecord,
])
......@@ -70,225 +62,122 @@ const DeliveryPlanAwaitB2BDetails: React.FC = () => {
return <Table rowKey={'orderProductId'} columns={expandIconColumn} dataSource={record.orders} pagination={false} tableLayout="fixed" />
}
// 选中 开始时间,结束时间
const [selectedDate, setSelectedDate] = useState<Array<string>>([])
// 选中 会员信息
const [selectedMember, setSelectedMember] = useState<any>({})
// 详情
const [details, setDetails] = useState<any>({})
// 计划送货商品 列表
const [goodsTableData, setGoodsTableData] = useState<any>(null)
const [details, setDetails] = useState<any>({})
// 保存
const save = () => {
form.validateFields().then(values => {
console.log('values :>> ', values)
const productList = goodsTableDataRef.current.map((item: any) => {
return {
...item,
orders: item.orders.map((o: any) => {
const planDays = Object.keys(o).filter((f: any) => f.startsWith('$')).map((p: any) => o[p])
return {
...o,
planDays
}
})
}
})
postOrderDeliveryPlanB2bCreate({
vendorMemberId: selectedMember.memberId,
vendorRoleId: selectedMember.roleId,
vendorMemberName: selectedMember.name,
digest: values.planSummaryText,
planStartTime: values.dates[0].format('YYYY-MM-DD'),
planEndTime: values.dates[1].format('YYYY-MM-DD'),
remark: values.remark,
productList
}).then((res: any) => {
console.log('保存 :>> ', res)
})
})
}
// 对应日期填入的送货数量
const inputChange = (val: any, text: any, record: any) => {
let { day } = text
let dataArr = JSON.parse(JSON.stringify(goodsTableDataRef.current))
let index = dataArr.findIndex(f => f.skuId === record.skuId)
let childIndex = dataArr[index].orders.findIndex(f => f.orderProductId === record.orderProductId)
dataArr[index].orders[childIndex][`$${day}`].planCount = val
// console.log('goodsTableDataRef.current 2222:>> ', goodsTableDataRef.current)
goodsTableDataRef.current = dataArr
setGoodsTableData(dataArr)
}
// 计划周期 选择日期
const handleDateAssembleColumn = (dateGroup) => {
if (_.isArray(dateGroup)) {
const startDate = dateGroup[0].format('YYYY-MM-DD')
const endDate = dateGroup[1].format('YYYY-MM-DD')
const dates = getDayAll(startDate, endDate)
datesRef.current = dates
setSelectedDate([startDate, endDate])
const datesColumn = dates.map((item, i) => ({ title: item.substr(1), dataIndex: item, key: item, width: 120, align: 'center', }))
const datesExpandIconColumn = dates.map((item, i) => ({
title: item.substr(1),
dataIndex: item,
key: item,
width: 80,
align: 'center',
render: (text: any, record: any) => (<InputNumber style={{ width: '100%' }} bordered value={text?.planCount} onChange={(val) => inputChange(val, text, record)} />)
}))
setGoodsTableColumn([...goodsTableColumn, ...datesColumn])
setExpandIconColumn([...expandIconColumn, ...datesExpandIconColumn])
} else {
// 清空
datesRef.current = null
goodsTableDataRef.current = null
setSelectedDate([])
setGoodsTableData([])
}
}
// 选中的会员信息
const handleMemberInfo = (info) => {
console.log('info :>> ', info)
setSelectedMember(info)
// 外部流转单据记录
const [externalRoamRecordData, setExternalRoamRecordData] = useState<any>(null)
// 计划周期 渲染日期
const handleDateAssembleColumn = (startDate: string, endDate: string) => {
const dates = getDayAll(moment(startDate).format('YYYY-MM-DD'), moment(endDate).format('YYYY-MM-DD'))
const datesColumn = dates.map((item, i) => ({ title: item.substr(1), dataIndex: item, key: item, width: 120, align: 'center', }))
const datesExpandIconColumn = dates.map((item, i) => ({
title: item.substr(1),
dataIndex: item,
key: item,
width: 80,
align: 'center',
render: (text: any, record: any) => (<span>{text?.planCount}</span>)
}))
setGoodsTableColumn([...goodsTableColumn, ...datesColumn])
setExpandIconColumn([...expandIconColumn, ...datesExpandIconColumn])
}
// 获取计划送货
// 获取计划送货 商品
const getPlannedDelivery = () => {
getOrderDeliveryPlanOrderProductPage({
startDate: selectedDate[0],
endDate: selectedDate[1],
memberId: selectedMember.memberId,
roleId: selectedMember.roleId,
roleType: ROLE_TYPE,
orderType: OEDER_TYPE,
getOrderDeliveryPlanDetailProductPage({
id,
current: '1',
pageSize: '10'
}).then((res) => {
if (res.code === 1000) {
const assemble = res.data.data.map((item => {
const assemble = res.data.data.map(item => {
return {
...item,
...convertArrtoObj(datesRef.current),
orders: item.orders.map(o => ({ ...o, ...convertArrtoObj(datesRef.current), }))
...integrationOjb(item.dayNumbers),
orders: item.orders.map(o => ({ ...o, ...integrationArrToObj(o.planDays) }))
}
}))
console.log('assemble ------------- :>> ', assemble)
})
goodsTableDataRef.current = assemble
setGoodsTableData(assemble)
}
})
}
// 监听 选择日期 and 选择会员
// 获取详情
const getDetails = () => {
getOrderDeliveryPlanDetail({
id
}).then((res: any) => {
if (res.code === 1000) {
setDetails(res.data)
getPlannedDelivery()
handleDateAssembleColumn(res.data.planStartTime, res.data.planEndTime)
}
})
}
// 获取流转记录
const getExternalRoamRecordData = () => {
getOrderDeliveryPlanDeliveryHistory({ id }).then((res: any) => {
if (res.code === 1000 && !_.isEmpty(res.data)) {
setExternalRoamRecordData(res.data)
}
})
}
useEffect(() => {
// 双条件满足 请求
if (!_.isEmpty(selectedDate) && !_.isEmpty(selectedMember)) {
console.log('订单能力 - 送货计划管理 - 待提交送货计划 B2B -----------:>> ', '双条件满足 请求 获取计划送货')
getPlannedDelivery()
const planSummaryText = `${selectedDate[0]}~${selectedDate[1]} ${selectedMember.name} ${DeliveryPlanText}`
form.setFieldsValue({ planSummaryText })
} else {
console.log('订单能力 - 送货计划管理 - 待提交送货计划 B2B -----------:>> ', '条件暂未满足不调取接口获取')
}
}, [selectedDate, selectedMember])
getDetails()
getExternalRoamRecordData()
}, [])
return (<>
<AnchorPage
title={details?.name || '没有title'}
title={details?.planNo}
onBack={() => history.goBack()}
anchors={iAnchors}
extra={
<Space>
<Button>保存并提交</Button>
<Button type='primary' icon={<SaveOutlined />} onClick={save}>保存</Button>
</Space>
}
>
<Form
labelAlign='left'
form={form}
>
<BaseInfo className='mt-0' title={Circulation.name} id={Circulation.key} cols={1}>
<Steps progressDot current={0}>
<Steps.Step title={Purchaser} description={SubmitDeliveryPlan} />
<Steps.Step title={Supplier} description={ConfirmDeliveryPlan} />
</Steps>
</BaseInfo>
<BaseInfo className='mt-16' title={base_Info.name} id={base_Info.key}>
<Form.Item
{...formItemLayout}
label={PlanningCycle}
name='dates'
>
<DatePicker.RangePicker style={{ width: '100%' }} onChange={(dates) => handleDateAssembleColumn(dates)} />
</Form.Item>
<Form.Item
{...formItemLayout}
label={SupplyMembersLabel}
name='memberId'
>
{/* 临时调用SRM会员列表 */}
<RoleSelect
request={getMemberManageLowerMerchantProviderPage}
onChange={handleMemberInfo}
params={{ current: '1', pageSize: '100' }}
/>
</Form.Item>
<Form.Item
{...formItemLayout}
label={PlanSummary}
name='planSummaryText'
>
<Input />
</Form.Item>
<Form.Item
{...formItemLayout}
label={ExternalState}
>
待提交
</Form.Item>
</BaseInfo>
<BaseInfo className='mt-16' title={PlannedDelivery.name} id={PlannedDelivery.key} cols={1}>
<Table
// defaultExpandAllRows
rowKey={'skuId'}
columns={goodsTableColumn}
expandedRowRender={expandedRowRender}
dataSource={goodsTableData}
tableLayout="fixed"
scroll={{ x: 2022 }}
/>
</BaseInfo>
<BaseInfo className='mt-16' title={Remarks.name} id={Remarks.key} cols={1}>
<Form.Item
name='remark'
>
<Input.TextArea rows={4} maxLength={300} placeholder={DeliveryPlanRemark} />
</Form.Item>
</BaseInfo>
<BaseInfo className='mt-16' title={ExternalRoamRecord.name} id={ExternalRoamRecord.key} cols={1}>
<Table
rowKey={'id'}
dataSource={[{
id: '1',
'name1': '1',
'name2': '操作角色',
'name3': '状态',
'name4': '操作',
'name5': '操作时间',
'name6': '备注',
},]}
columns={ExternalRoamRecordTableColumn}
/>
</BaseInfo>
</Form>
<BaseInfo className='mt-0' title={Circulation.name} id={Circulation.key} cols={1}>
<Steps progressDot current={0}>
<Steps.Step title={Purchaser} description={SubmitDeliveryPlan} />
<Steps.Step title={Supplier} description={ConfirmDeliveryPlan} />
</Steps>
</BaseInfo>
<BaseInfo className='mt-16' title={base_Info.name} id={base_Info.key}>
<BaseInfo.BaseInfoItem label={PlanNumber}> {details?.planNo} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={SupplyMembersLabel}> {details?.vendorMemberName} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={PlanningCycle}> {moment(details?.planStartTime).format('YYYY-MM-DD')} ~ {moment(details?.planEndTime).format('YYYY-MM-DD')} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={PlanSummary}> {details?.digest} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={ExternalState}>
<Tag color={tagStatus.getTagStyle(details?.status).bgColor}>
<span style={{ color: tagStatus.getTagStyle(details?.status).fontColor }}>{statusTxt.get(details?.status)}</span>
</Tag>
</BaseInfo.BaseInfoItem>
</BaseInfo>
<BaseInfo className='mt-16' title={PlannedDelivery.name} id={PlannedDelivery.key} cols={1}>
<Table
// defaultExpandAllRows
rowKey={'skuId'}
columns={goodsTableColumn}
expandedRowRender={expandedRowRender}
dataSource={goodsTableData}
tableLayout="fixed"
scroll={{ x: 2022 }}
/>
</BaseInfo>
<BaseInfo className='mt-16' title={ExternalRoamRecord.name} id={ExternalRoamRecord.key} cols={1}>
<Table
rowKey={'id'}
dataSource={externalRoamRecordData}
columns={ExternalRoamRecordTableColumn}
/>
</BaseInfo>
</AnchorPage>
</>)
}
......
......@@ -6,8 +6,8 @@
import React, { useRef } from 'react'
import { history } from 'umi'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Button, Card, Space, Tag } from 'antd'
import { PlusOutlined } from '@ant-design/icons'
import { Button, Card, Modal, Space, Tag } from 'antd'
import { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons'
import StandardTable from '@/components/StandardTable'
import { ColumnType } from 'antd/lib/table'
import TableOperation from '@/components/TableOperation'
......@@ -20,7 +20,7 @@ import { deliveryPlanManagementAwaitB2BSchema } from './schema'
import { godBtoa, TagStatus } from '../../utils'
import { ExternalStateColumn, OperationColumn, PlannedEndDateColumn, PlannedStartDateColumn, PlanNumberColumn, PlanSummaryColumn, SupplyMemberColumn } from '../../constants/table-column'
import moment from 'moment'
import { getOrderDeliveryPlanBuyerPage } from '@/services/OrderNewV2Api'
import { getOrderDeliveryPlanBuyerPage, postOrderDeliveryPlanDelete, postOrderDeliveryPlanSubmit } from '@/services/OrderNewV2Api'
// 外部状态1-待提交 2-已确认
const STATUS = 2
......@@ -32,6 +32,36 @@ const DeliveryPlanManagementAwaitB2B: React.FC = () => {
const ref = useRef<any>({})
const formActions = createFormActions()
const handleDelete = (id: number) => {
Modal.confirm({
icon: <ExclamationCircleOutlined />,
content: <span>确认删除?</span>,
okText: '确认',
cancelText: '取消',
onOk() {
postOrderDeliveryPlanDelete({ id }).then((res: any) => {
if (res.code === 1000) ref.current.reload()
})
},
onCancel() { },
})
}
const handleSubmit = (id: number) => {
Modal.confirm({
icon: <ExclamationCircleOutlined />,
content: <span>确认提交?</span>,
okText: '确认',
cancelText: '取消',
onOk() {
postOrderDeliveryPlanSubmit({ id }).then((res: any) => {
if (res.code === 1000) ref.current.reload()
})
},
onCancel() { },
})
}
const controllerBtns = (
<Space>
<Button type='primary' icon={<PlusOutlined />} onClick={() => history.push(`/memberCenter/order/deliveryPlanManagement/awaitB2B/create`)}>新增</Button>
......@@ -51,9 +81,9 @@ const DeliveryPlanManagementAwaitB2B: React.FC = () => {
'查看': true,
}
const operationHandler = {
'提交': () => { console.log('提交 :>> ',) },
'提交': () => handleSubmit(record.id),
'修改': () => history.push(`/memberCenter/order/deliveryPlanManagement/awaitB2B/update?i=${godBtoa(record.id)}`),
'删除': () => { console.log('删除 :>> ',) },
'删除': () => handleDelete(record.id),
'查看': () => history.push(`/memberCenter/order/deliveryPlanManagement/awaitB2B/details?i=${godBtoa(record.id)}`),
}
return (
......@@ -70,7 +100,7 @@ const DeliveryPlanManagementAwaitB2B: React.FC = () => {
dataIndex: 'planNo',
key: 'planNo',
// width: 160,
render: (text: unknown, record: unknown) => <EyePreview url='/memberCenter/order/deliveryPlanManagement/awaitB2B/details'>{text}</EyePreview>
render: (text: unknown, record: any) => <EyePreview url={`/memberCenter/order/deliveryPlanManagement/awaitB2B/details?i=${godBtoa(record.id)}`}>{text}</EyePreview>
},
{ ...PlanSummaryColumn, dataIndex: 'digest', key: 'digest' },
{ ...PlannedStartDateColumn, dataIndex: 'planStartTime', key: 'planStartTime', render: (text: string, record: any) => (moment(text).format('YYYY-MM-DD')) },
......
......@@ -6,16 +6,14 @@
import React, { useEffect, useRef, useState } from 'react'
import AnchorPage, { AnchorsItem } from '@/components/AnchorPage'
import { history, useHistory } from 'umi'
import { Circulation, ConfirmDeliveryPlan, Purchaser, SubmitDeliveryPlan, BaseInfo as base_Info, Supplier, PlanningCycle, SupplyMembersLabel, PlanSummary, Remarks, PlannedDelivery, DeliveryPlanText, DeliveryPlanRemark, CreateDeliveryPlanTitleB2B, ExternalRoamRecord } from '../../constants'
import { Button, DatePicker, Form, Input, InputNumber, message, Space, Steps, Table } from 'antd'
import { Circulation, ConfirmDeliveryPlan, Purchaser, SubmitDeliveryPlan, BaseInfo as base_Info, Supplier, PlanningCycle, SupplyMembersLabel, PlanSummary, Remarks, PlannedDelivery, DeliveryPlanText, DeliveryPlanRemark, CreateDeliveryPlanTitleB2B, ExternalRoamRecord, ExternalState } from '../../constants'
import { Button, Form, Input, InputNumber, message, Space, Spin, Steps, Table, Tag } from 'antd'
import { SaveOutlined } from '@ant-design/icons'
import BaseInfo from '@/components/BaseInfo/BaseInfo'
import _ from 'lodash'
import { convertArrtoObj, getDayAll, godAtob, integrationArrtoObj, integrationOjb } from '../../utils'
import { getDayAll, godAtob, integrationArrToObj, integrationOjb, TagStatus } from '../../utils'
import { BrandColumn, ClassColumn, CommodityNoColumn, ConsigneeNumColumn, DeliveredNumColumn, OrderCreatedAtColumn, OrderNoColumn, OrderSummaryColumn, OrderNumColumn, PlannedDeliveryNumColumn, TradeNameColumn, TransitNumColumn, UntilColumn } from '../../constants/table-column'
import { RoleSelect } from '@/components/RoleSelect'
import { getMemberManageSupplyMember } from '@/services/MemberV2Api'
import { getOrderDeliveryPlanDeliveryHistory, getOrderDeliveryPlanDetail, getOrderDeliveryPlanDetailProductPage, getOrderDeliveryPlanOrderProductPage, postOrderDeliveryPlanB2bCreate, postOrderDeliveryPlanUpdate } from '@/services/OrderNewV2Api'
import { getOrderDeliveryPlanDeliveryHistory, getOrderDeliveryPlanDetail, getOrderDeliveryPlanDetailProductPage, postOrderDeliveryPlanUpdate } from '@/services/OrderNewV2Api'
import moment from 'moment'
import { ExternalRoamRecordTableColumn } from '../../constants/page-table-column'
......@@ -24,11 +22,8 @@ const formItemLayout = {
wrapperCol: { span: 16 }
}
// 1:查询供应商角色,2:查询采购商角色
const ROLE_TYPE = '1'
// 1:b2b,2:srm
const OEDER_TYPE = '1'
const tagStatus = new TagStatus()
const statusTxt = new Map([[1, '待提交'], [2, '待确认'], [3, '待修订'], [4, '已确认'], [5, '已删除']])
const DeliveryPlanAwaitB2BUpdate: React.FC = () => {
const { location: { query: { i } } } = useHistory()
const id = godAtob(i)
......@@ -37,12 +32,15 @@ const DeliveryPlanAwaitB2BUpdate: React.FC = () => {
const datesRef = useRef<any>(null)
const goodsTableDataRef = useRef(null)
const [spinning, setSpinning] = useState<boolean>(false)
// 锚点标题
const [iAnchors, setiAnchors] = useState<AnchorsItem[]>([
const [iAnchors, setIAnchors] = useState<AnchorsItem[]>([
Circulation,
base_Info,
PlannedDelivery,
Remarks,
ExternalRoamRecord,
])
// 动态 TableColumn
......@@ -84,11 +82,12 @@ const DeliveryPlanAwaitB2BUpdate: React.FC = () => {
// 保存
const save = () => {
form.validateFields().then(values => {
// console.log('values :>> ', values)
console.log('values :>> ', values)
if (_.isEmpty(goodsTableDataRef.current)) {
message.warning('没有找到可执行计划送货')
return
}
setSpinning(true)
const orders = goodsTableDataRef.current.flatMap((item: any) => item.orders).flatMap((o: any) => ({
...o,
planDays: Object.keys(o).filter((f: any) => f.startsWith('$')).map((p: any) => o[p])
......@@ -99,7 +98,12 @@ const DeliveryPlanAwaitB2BUpdate: React.FC = () => {
remark: values.remark,
orders
}).then((res: any) => {
console.log('保存 :>> ', res)
setSpinning(false)
if (res.code === 1000) {
history.goBack()
}
}).catch(err => {
setSpinning(false)
})
})
}
......@@ -144,7 +148,7 @@ const DeliveryPlanAwaitB2BUpdate: React.FC = () => {
return {
...item,
...integrationOjb(item.dayNumbers),
orders: item.orders.map(o => ({ ...o, ...integrationArrtoObj(o.planDays) }))
orders: item.orders.map(o => ({ ...o, ...integrationArrToObj(o.planDays) }))
}
})
goodsTableDataRef.current = assemble
......@@ -162,7 +166,6 @@ const DeliveryPlanAwaitB2BUpdate: React.FC = () => {
setDetails(res.data)
form.setFieldsValue({
planSummaryText: res.data.digest,
remark: '',
})
getPlannedDelivery()
handleDateAssembleColumn(res.data.planStartTime, res.data.planEndTime)
......@@ -186,71 +189,82 @@ const DeliveryPlanAwaitB2BUpdate: React.FC = () => {
}, [])
return (<>
<AnchorPage
title={CreateDeliveryPlanTitleB2B}
onBack={() => history.goBack()}
anchors={iAnchors}
extra={
<Space>
{/* <Button>保存并提交</Button> */}
<Button type='primary' icon={<SaveOutlined />} onClick={save}>保存</Button>
</Space>
}
>
<Form
labelAlign='left'
form={form}
<Spin spinning={spinning}>
<AnchorPage
title={details?.planNo}
onBack={() => history.goBack()}
anchors={iAnchors}
extra={
<Space>
{/* <Button>保存并提交</Button> */}
<Button type='primary' icon={<SaveOutlined />} onClick={save}>保存</Button>
</Space>
}
>
<BaseInfo className='mt-0' title={Circulation.name} id={Circulation.key} cols={1}>
<Steps progressDot current={0}>
<Steps.Step title={Purchaser} description={SubmitDeliveryPlan} />
<Steps.Step title={Supplier} description={ConfirmDeliveryPlan} />
</Steps>
</BaseInfo>
<BaseInfo className='mt-16' title={base_Info.name} id={base_Info.key}>
<BaseInfo.BaseInfoItem label={PlanningCycle}> {moment(details?.planStartTime).format('YYYY-MM-DD')} ~ {moment(details?.planEndTime).format('YYYY-MM-DD')} </BaseInfo.BaseInfoItem>
<Form
labelAlign='left'
form={form}
>
<BaseInfo className='mt-0' title={Circulation.name} id={Circulation.key} cols={1}>
<Steps progressDot current={0}>
<Steps.Step title={Purchaser} description={SubmitDeliveryPlan} />
<Steps.Step title={Supplier} description={ConfirmDeliveryPlan} />
</Steps>
</BaseInfo>
<BaseInfo className='mt-16' title={base_Info.name} id={base_Info.key}>
<BaseInfo.BaseInfoItem label={PlanningCycle}> {moment(details?.planStartTime).format('YYYY-MM-DD')} ~ {moment(details?.planEndTime).format('YYYY-MM-DD')} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={SupplyMembersLabel}> {details?.vendorMemberName} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={SupplyMembersLabel}> {details?.vendorMemberName} </BaseInfo.BaseInfoItem>
<Form.Item
{...formItemLayout}
label={PlanSummary}
name='planSummaryText'
rules={[
{ required: true, message: '请输入' }
]}
>
<Input />
</Form.Item>
<Form.Item
{...formItemLayout}
label={PlanSummary}
name='planSummaryText'
rules={[
{ required: true, message: '请输入' }
]}
>
<Input />
</Form.Item>
</BaseInfo>
<BaseInfo className='mt-16' title={PlannedDelivery.name} id={PlannedDelivery.key} cols={1}>
<Table
// defaultExpandAllRows
rowKey={'skuId'}
columns={goodsTableColumn}
expandedRowRender={expandedRowRender}
dataSource={goodsTableData}
tableLayout="fixed"
scroll={{ x: 2022 }}
/>
</BaseInfo>
<BaseInfo className='mt-16' title={Remarks.name} id={Remarks.key} cols={1}>
<Form.Item
name='remark'
>
<Input.TextArea rows={4} maxLength={300} placeholder={DeliveryPlanRemark} />
</Form.Item>
</BaseInfo>
<BaseInfo className='mt-16' title={ExternalRoamRecord.name} id={ExternalRoamRecord.key} cols={1}>
<Table
rowKey={'id'}
dataSource={externalRoamRecordData}
columns={ExternalRoamRecordTableColumn}
pagination={false}
/>
</BaseInfo>
</Form>
</AnchorPage>
<BaseInfo.BaseInfoItem label={ExternalState}>
<Tag color={tagStatus.getTagStyle(details?.status).bgColor}>
<span style={{ color: tagStatus.getTagStyle(details?.status).fontColor }}>{statusTxt.get(details?.status)}</span>
</Tag>
</BaseInfo.BaseInfoItem>
</BaseInfo>
<BaseInfo className='mt-16' title={PlannedDelivery.name} id={PlannedDelivery.key} cols={1}>
<Table
// defaultExpandAllRows
rowKey={'skuId'}
columns={goodsTableColumn}
expandedRowRender={expandedRowRender}
dataSource={goodsTableData}
tableLayout="fixed"
scroll={{ x: 2022 }}
/>
</BaseInfo>
<BaseInfo className='mt-16' title={Remarks.name} id={Remarks.key} cols={1}>
<Form.Item
name='remark'
rules={[
{ required: true, message: '请输入' }
]}
>
<Input.TextArea rows={4} maxLength={300} placeholder={DeliveryPlanRemark} />
</Form.Item>
</BaseInfo>
<BaseInfo className='mt-16' title={ExternalRoamRecord.name} id={ExternalRoamRecord.key} cols={1}>
<Table
rowKey={'id'}
dataSource={externalRoamRecordData}
columns={ExternalRoamRecordTableColumn}
pagination={false}
/>
</BaseInfo>
</Form>
</AnchorPage>
</Spin>
</>)
}
......
......@@ -11,7 +11,7 @@
import { SaveOutlined } from '@ant-design/icons'
import BaseInfo from '@/components/BaseInfo/BaseInfo'
import _ from 'lodash'
import { convertArrtoObj, getDayAll } from '../../utils'
import { convertArrToObj, getDayAll } from '../../utils'
import { BrandColumn, ClassColumn, ConsigneeNumColumn, DeliveredNumColumn, MaterialModelColumn, MaterialNameColumn, MaterialNoColumn, OrderCreatedAtColumn, OrderNoColumn, OrderSummaryColumn, OrderNumColumn, PlannedDeliveryNumColumn, TransitNumColumn, UntilColumn } from '../../constants/table-column'
import { RoleSelect } from '@/components/RoleSelect'
import { getOrderDeliveryPlanOrderProductPage, postOrderDeliveryPlanSrmCreate } from '@/services/OrderNewV2Api'
......@@ -151,8 +151,8 @@ const initExpandIconColumn = [
align: 'center',
render: (text: any, record: any) => (<InputNumber style={{ width: '100%' }} bordered value={text?.planCount} onChange={(val) => inputChange(val, text, record)} />)
}))
setMaterialTableColumn([...materialTableColumn, ...datesColumn])
setExpandIconColumn([...expandIconColumn, ...datesExpandIconColumn])
setMaterialTableColumn([...initMaterialTableColumn, ...datesColumn])
setExpandIconColumn([...initExpandIconColumn, ...datesExpandIconColumn])
} else {
// 清空
datesRef.current = null
......@@ -185,8 +185,8 @@ const initExpandIconColumn = [
const assemble = res.data.data.map((item => {
return {
...item,
...convertArrtoObj(datesRef.current),
orders: item.orders.map(o => ({ ...o, ...convertArrtoObj(datesRef.current), }))
...convertArrToObj(datesRef.current),
orders: item.orders.map(o => ({ ...o, ...convertArrToObj(datesRef.current), }))
}
}))
materialTableDataRef.current = assemble
......
......@@ -6,12 +6,12 @@
import React, { useEffect, useRef, useState } from 'react'
import { history, useHistory } from 'umi'
import AnchorPage, { AnchorsItem } from '@/components/AnchorPage'
import { BaseInfo as base_Info, PlanningCycle, SupplyMembersLabel, PlanSummary, ExternalRoamRecord, Circulation, Purchaser, SubmitDeliveryPlan, Supplier, ConfirmDeliveryPlan, PlannedDelivery, ExternalState } from '../../constants'
import { BaseInfo as base_Info, PlanningCycle, SupplyMembersLabel, PlanSummary, ExternalRoamRecord, Circulation, Purchaser, SubmitDeliveryPlan, Supplier, ConfirmDeliveryPlan, PlannedDelivery, ExternalState, PlanNumber } from '../../constants'
import { Steps, Table, Tag } from 'antd'
import BaseInfo from '@/components/BaseInfo/BaseInfo'
import { ExternalRoamRecordTableColumn } from '../../constants/page-table-column'
import _ from 'lodash'
import { getDayAll, godAtob, integrationArrtoObj, integrationOjb, TagStatus } from '../../utils'
import { getDayAll, godAtob, integrationArrToObj, integrationOjb, TagStatus } from '../../utils'
import { BrandColumn, ClassColumn, ConsigneeNumColumn, DeliveredNumColumn, MaterialModelColumn, MaterialNameColumn, MaterialNoColumn, OrderCreatedAtColumn, OrderNoColumn, OrderSummaryColumn, OrderNumColumn, PlannedDeliveryNumColumn, TransitNumColumn, UntilColumn } from '../../constants/table-column'
import { getOrderDeliveryPlanDeliveryHistory, getOrderDeliveryPlanDetail, getOrderDeliveryPlanDetailProductPage, getOrderDeliveryPlanOrderProductPage } from '@/services/OrderNewV2Api'
import moment from 'moment'
......@@ -22,10 +22,7 @@ const DeliveryPlanAwaitSRMDetails: React.FC = () => {
const { location: { query: { i } } } = useHistory()
const id = godAtob(i)
const datesRef = useRef(null)
const materialTableDataRef = useRef(null)
const [iAnchors, setiAnchors] = useState<AnchorsItem[]>([
const [iAnchors, setIAnchors] = useState<AnchorsItem[]>([
Circulation,
base_Info,
PlannedDelivery,
......@@ -70,10 +67,9 @@ const DeliveryPlanAwaitSRMDetails: React.FC = () => {
// 外部流转单据记录
const [externalRoamRecordData, setExternalRoamRecordData] = useState<any>(null)
// 计划周期 选择日期
// 计划周期 渲染日期
const handleDateAssembleColumn = (startDate: string, endDate: string) => {
const dates = getDayAll(moment(startDate).format('YYYY-MM-DD'), moment(endDate).format('YYYY-MM-DD'))
datesRef.current = dates
const datesColumn = dates.map((item, i) => ({ title: item.substr(1), dataIndex: item, key: item, width: 120, align: 'center', }))
const datesExpandIconColumn = dates.map((item, i) => ({
title: item.substr(1),
......@@ -99,10 +95,9 @@ const DeliveryPlanAwaitSRMDetails: React.FC = () => {
return {
...item,
...integrationOjb(item.dayNumbers),
orders: item.orders.map(o => ({ ...o, ...integrationArrtoObj(o.planDays) }))
orders: item.orders.map(o => ({ ...o, ...integrationArrToObj(o.planDays) }))
}
})
materialTableDataRef.current = assemble
setMaterialTableData(assemble)
}
})
......@@ -148,15 +143,17 @@ const DeliveryPlanAwaitSRMDetails: React.FC = () => {
</Steps>
</BaseInfo>
<BaseInfo className='mt-16' title={base_Info.name} id={base_Info.key}>
<BaseInfo.BaseInfoItem label={PlanningCycle}> {moment(details?.planStartTime).format('YYYY-MM-DD')} ~ {moment(details?.planEndTime).format('YYYY-MM-DD')} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={PlanNumber}> {details?.planNo} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={SupplyMembersLabel}> {details?.vendorMemberName} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={PlanningCycle}> {moment(details?.planStartTime).format('YYYY-MM-DD')} ~ {moment(details?.planEndTime).format('YYYY-MM-DD')} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={PlanSummary}> {details?.digest} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={ExternalState}>
<Tag color={tagStatus.getTagStyle(details?.status).bgColor}>
<span style={{ color: tagStatus.getTagStyle(details?.status).fontColor }}>{statusTxt.get(details?.status)}</span>
<span style={{ color: tagStatus.getTagStyle(details?.status).fontColor }}>{statusTxt.get(details?.status)}</span>
</Tag>
</BaseInfo.BaseInfoItem>
</BaseInfo>
......
......@@ -6,8 +6,8 @@
import React, { useRef } from 'react'
import { history } from 'umi'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Button, Card, Space, Tag } from 'antd'
import { PlusOutlined } from '@ant-design/icons'
import { Button, Card, Modal, Space, Tag } from 'antd'
import { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons'
import StandardTable from '@/components/StandardTable'
import { ColumnType } from 'antd/lib/table'
import TableOperation from '@/components/TableOperation'
......@@ -19,22 +19,52 @@ import { FORM_FILTER_PATH } from '@/formSchema/const'
import { deliveryPlanManagementAwaitSRMSchema } from './schema'
import { godBtoa, TagStatus } from '../../utils'
import { ExternalStateColumn, OperationColumn, PlannedEndDateColumn, PlannedStartDateColumn, PlanNumberColumn, PlanSummaryColumn, SupplyMemberColumn } from '../../constants/table-column'
import { getOrderDeliveryPlanBuyerPage } from '@/services/OrderNewV2Api'
import { getOrderDeliveryPlanBuyerPage, postOrderDeliveryPlanDelete, postOrderDeliveryPlanSubmit } from '@/services/OrderNewV2Api'
import moment from 'moment'
// 外部状态1-待提交 2-已确认
const STATUS = 2
// 订单类型1-B2B 2-SRM
const OEDER_TYPE = 2
const ORDER_TYPE = 2
const tagStatus = new TagStatus()
const statusTxt = new Map([[1, '待提交'], [2, '待确认'], [3, '待修订'],[4,'已确认'],[5,'已删除']])
const DeliveryPlanManagementAwaitSRM: React.FC = () => {
const statusTxt = new Map([[1, '待提交'], [2, '待确认'], [3, '待修订'], [4, '已确认'], [5, '已删除']])
const DeliveryPlanManagementAwaitSRM: React.FC = () => {
const ref = useRef<any>({})
const formActions = createFormActions()
const handleDelete = (id: number) => {
Modal.confirm({
icon: <ExclamationCircleOutlined />,
content: <span>确认删除?</span>,
okText: '确认',
cancelText: '取消',
onOk() {
postOrderDeliveryPlanDelete({ id }).then((res: any) => {
if (res.code === 1000) ref.current.reload()
})
},
onCancel() { },
})
}
const handleSubmit = (id: number) => {
Modal.confirm({
icon: <ExclamationCircleOutlined />,
content: <span>确认提交?</span>,
okText: '确认',
cancelText: '取消',
onOk() {
postOrderDeliveryPlanSubmit({ id }).then((res: any) => {
if (res.code === 1000) ref.current.reload()
})
},
onCancel() { },
})
}
const controllerBtns = (
<Space>
<Button type='primary' icon={<PlusOutlined/>} onClick={() => history.push(`/memberCenter/order/deliveryPlanManagement/awaitSRM/create`)}>新增</Button>
<Button type='primary' icon={<PlusOutlined />} onClick={() => history.push(`/memberCenter/order/deliveryPlanManagement/awaitSRM/create`)}>新增</Button>
</Space>
)
const renderOptionButton = (record: any) => {
......@@ -46,17 +76,17 @@ const statusTxt = new Map([[1, '待提交'], [2, '待确认'], [3, '待修订'],
}
const buttonGroup = {
'提交': record.status <= 1,
'修改': record.status >= 1,
'删除': record.status <= 1,
'修改': record.status >= 1,
'删除': record.status <= 1,
'查看': true,
}
const operationHandler = {
'提交': () => { console.log('提交 :>> ',) },
'提交': () => handleSubmit(record.id),
'修改': () => history.push(`/memberCenter/order/deliveryPlanManagement/awaitSRM/update?i=${godBtoa(record.id)}`),
'删除': () => { console.log('删除 :>> ',) },
'删除': () => handleDelete(record.id),
'查看': () => history.push(`/memberCenter/order/deliveryPlanManagement/awaitSRM/details?i=${godBtoa(record.id)}`),
}
return (
<TableOperation
buttonTextFieldMap={buttonGroup}
......@@ -74,7 +104,7 @@ const statusTxt = new Map([[1, '待提交'], [2, '待确认'], [3, '待修订'],
render: (text: unknown, record: any) => <EyePreview url={`/memberCenter/order/deliveryPlanManagement/awaitSRM/details?i=${godBtoa(record.id)}`}>{text}</EyePreview>
},
{ ...PlanSummaryColumn, dataIndex: 'digest', key: 'digest' },
{ ...PlannedStartDateColumn, dataIndex: 'planStartTime', key: 'planStartTime', render: (text: string, record: any) => (moment(text).format('YYYY-MM-DD')) },
{ ...PlannedStartDateColumn, dataIndex: 'planStartTime', key: 'planStartTime', render: (text: string, record: any) => (moment(text).format('YYYY-MM-DD')) },
{ ...PlannedEndDateColumn, dataIndex: 'planEndTime', key: 'planEndTime', render: (text: string, record: any) => (moment(text).format('YYYY-MM-DD')) },
{ ...SupplyMemberColumn, dataIndex: 'memberName', key: 'memberName' },
{
......@@ -103,16 +133,16 @@ const statusTxt = new Map([[1, '待提交'], [2, '待确认'], [3, '待修订'],
getOrderDeliveryPlanBuyerPage({
...params,
status: STATUS,
orderType: OEDER_TYPE,
orderType: ORDER_TYPE,
}).then((res) => {
resolve(res.data);
})
})
})
}
return (
<PageHeaderWrapper>
<Card>
return (
<PageHeaderWrapper>
<Card>
<StandardTable
// keepAlive={false}
currentRef={ref}
......@@ -139,8 +169,8 @@ const statusTxt = new Map([[1, '待提交'], [2, '待确认'], [3, '待修订'],
}
/>
</Card>
</PageHeaderWrapper>
)
}
</PageHeaderWrapper>
)
}
export default DeliveryPlanManagementAwaitSRM
\ No newline at end of file
export default DeliveryPlanManagementAwaitSRM
\ No newline at end of file
......@@ -12,7 +12,7 @@ import { SaveOutlined } from '@ant-design/icons'
import BaseInfo from '@/components/BaseInfo/BaseInfo'
import { ExternalRoamRecordTableColumn } from '../../constants/page-table-column'
import _ from 'lodash'
import { getDayAll, godAtob, integrationArrtoObj, integrationOjb, TagStatus } from '../../utils'
import { getDayAll, godAtob, integrationArrToObj, integrationOjb, TagStatus } from '../../utils'
import { BrandColumn, ClassColumn, ConsigneeNumColumn, DeliveredNumColumn, MaterialModelColumn, MaterialNameColumn, MaterialNoColumn, OrderCreatedAtColumn, OrderNoColumn, OrderSummaryColumn, OrderNumColumn, PlannedDeliveryNumColumn, TransitNumColumn, UntilColumn } from '../../constants/table-column'
import { getOrderDeliveryPlanDeliveryHistory, getOrderDeliveryPlanDetail, getOrderDeliveryPlanDetailProductPage, postOrderDeliveryPlanUpdate } from '@/services/OrderNewV2Api'
import moment from 'moment'
......@@ -148,7 +148,7 @@ const DeliveryPlanAwaitSRMUpdate: React.FC = () => {
return {
...item,
...integrationOjb(item.dayNumbers),
orders: item.orders.map(o => ({ ...o, ...integrationArrtoObj(o.planDays) }))
orders: item.orders.map(o => ({ ...o, ...integrationArrToObj(o.planDays) }))
}
})
materialTableDataRef.current = assemble
......
......@@ -4,126 +4,152 @@
*/
import React, { useEffect, useState } from 'react'
import { history } from 'umi'
import _ from 'lodash'
import moment from 'moment'
import { Steps, Table, Tag } from 'antd'
import AnchorPage from '@/components/AnchorPage'
import { AnchorsItem } from "@/components/AnchorPage"
import AnchorPage, { AnchorsItem } from "@/components/AnchorPage"
import BaseInfo from '@/components/BaseInfo/BaseInfo'
import { BaseInfo as base_Info, Circulation, ConfirmDeliveryPlan, DeliveryPlanDetails, ExternalRoamRecord, ExternalState, PlannedDelivery, PlanningCycle, PlanNumber, PlanSummary, Purchaser, SubmitDeliveryPlan, Supplier, SupplyMember, } from '../../constants'
import { ExternalRoamRecordTableColumn, PlannedDeliveryMaterialExpandableTableColumn, PlannedDeliveryMaterialTableColumn } from '../../constants/page-table-column'
import { BaseInfo as base_Info, Circulation, ConfirmDeliveryPlan, ExternalRoamRecord, ExternalState, PlannedDelivery, PlanningCycle, PlanNumber, PlanSummary, Purchaser, SubmitDeliveryPlan, Supplier, SupplyMember, SupplyMembersLabel, } from '../../constants'
import { ExternalRoamRecordTableColumn } from '../../constants/page-table-column'
import { BrandColumn, ClassColumn, CommodityNoColumn, ConsigneeNumColumn, DeliveredNumColumn, MaterialModelColumn, MaterialNameColumn, MaterialNoColumn, OrderCreatedAtColumn, OrderNoColumn, OrderNumColumn, OrderSummaryColumn, PlannedDeliveryNumColumn, TradeNameColumn, TransitNumColumn, UntilColumn } from '../../constants/table-column'
import { getDayAll, godAtob, integrationArrToObj, integrationOjb, TagStatus } from '../../utils'
import { getOrderDeliveryPlanDeliveryHistory, getOrderDeliveryPlanDetail, getOrderDeliveryPlanDetailProductPage } from '@/services/OrderNewV2Api'
const columnB2B = [
{ ...CommodityNoColumn, dataIndex: 'skuId', width: 80, },
{ ...TradeNameColumn, dataIndex: 'productName', width: 192, },
{ ...ClassColumn, dataIndex: 'category', width: 96, },
{ ...BrandColumn, dataIndex: 'brand', width: 96, },
{ ...UntilColumn, dataIndex: 'unit', width: 64, },
{ ...OrderNumColumn, dataIndex: 'purchaseCountSum', width: 96, },
{ ...ConsigneeNumColumn, dataIndex: 'receiveCountSum', width: 96, },
{ ...TransitNumColumn, dataIndex: 'transitCountSum', width: 96, },
{ ...DeliveredNumColumn, dataIndex: 'leftCountSum', width: 96, },
{ ...PlannedDeliveryNumColumn, dataIndex: 'planCountSum', width: 128, },
]
const columnSRM = [
{ ...MaterialNoColumn, dataIndex: 'skuId', width: 80, },
{ ...MaterialNameColumn, dataIndex: 'productName', width: 192, },
{ ...MaterialModelColumn, dataIndex: 'productName', width: 128, },
{ ...ClassColumn, dataIndex: 'category', width: 96, },
{ ...BrandColumn, dataIndex: 'brand', width: 96, },
{ ...UntilColumn, dataIndex: 'unit', width: 64, },
{ ...OrderNumColumn, dataIndex: 'purchaseCountSum', width: 96, },
{ ...ConsigneeNumColumn, dataIndex: 'receiveCountSum', width: 96, },
{ ...TransitNumColumn, dataIndex: 'transitCountSum', width: 96, },
{ ...DeliveredNumColumn, dataIndex: 'leftCountSum', width: 96, },
{ ...PlannedDeliveryNumColumn, dataIndex: 'planCountSum', width: 128, },
]
const tagStatus = new TagStatus()
const statusTxt = new Map([[1, '待提交'], [2, '待确认'], [3, '待修订'], [4, '已确认'], [5, '已删除']])
const DeliveryPlanManagementDetails: React.FC = () => {
const [iAnchors, setiAnchors] = useState<AnchorsItem[]>(DeliveryPlanDetails)
const [details, setDetails] = useState<any>({})
const [test, setTest] = useState<any>([])
const data = [
{
id: '1',
'name1': 'Q89YTE1',
'name2': '进口头层黄牛皮荔枝纹',
'name3': '红色/XXL/厚1.5mm',
'name4': '牛皮',
'name5': 'PELLE',
'name6': '尺',
'name7': '10,000',
'name8': '10,000',
'name9': '10,000',
'name10': '10,000',
'name11': '10,000',
},
{
id: '2',
'name1': 'Q89YTE1',
'name2': '进口头层黄牛皮荔枝纹',
'name3': '红色/XXL/厚1.5mm',
'name4': '牛皮',
'name5': 'PELLE',
'name6': '尺',
'name7': '10,000',
'name8': '10,000',
'name9': '10,000',
'name10': '10,000',
'name11': '10,000',
},
{
id: '3',
'name1': 'Q89YTE1',
'name2': '进口头层黄牛皮荔枝纹',
'name3': '红色/XXL/厚1.5mm',
'name4': '牛皮',
'name5': 'PELLE',
'name6': '尺',
'name7': '10,000',
'name8': '10,000',
'name9': '10,000',
'name10': '10,000',
'name11': '10,000',
},
{
id: '4',
'name1': 'Q89YTE1',
'name2': '进口头层黄牛皮荔枝纹',
'name3': '红色/XXL/厚1.5mm',
'name4': '牛皮',
'name5': 'PELLE',
'name6': '尺',
'name7': '10,000',
'name8': '10,000',
'name9': '10,000',
'name10': '10,000',
'name11': '10,000',
},
]
const expandedRowRender = () => {
const data = [
{
id: '1',
'name1': 'DPTY12',
'name2': '进口头层黄牛皮荔枝纹',
'name3': '规格型号',
'name4': '2020-08-25 09:50',
'name5': '20,000',
'name6': '4,000',
'name7': '2,000',
'name8': '14,000',
},
{
id: '2',
'name1': 'DPTY12',
'name2': '进口头层黄牛皮荔枝纹',
'name3': '规格型号',
'name4': '2020-08-25 09:50',
'name5': '20,000',
'name6': '4,000',
'name7': '2,000',
'name8': '14,000',
},
{
id: '3',
'name1': 'DPTY12',
'name2': '进口头层黄牛皮荔枝纹',
'name3': '规格型号',
'name4': '2020-08-25 09:50',
'name5': '20,000',
'name6': '4,000',
'name7': '2,000',
'name8': '14,000',
const { location: { query: { ty, i } } } = history
// 1-B2B 2-SRM
const deliveryPlanType = godAtob(ty as string)
const id = godAtob(i as string)
console.log('object :>> ', ty, deliveryPlanType)
console.log('object :>> ', i, id)
const [iAnchors, setIAnchors] = useState<AnchorsItem[]>([
Circulation,
base_Info,
PlannedDelivery,
ExternalRoamRecord
])
// 动态 TableColumn
const [tableColumn, setTableColumn] = useState<any>([])
// 动态 expandIconColumn
const [expandIconColumn, setExpandIconColumn] = useState<any>([
{ ...OrderNoColumn, dataIndex: 'orderNo', width: 80, },
{ ...OrderSummaryColumn, dataIndex: 'orderDigest', width: 200, },
{ ...OrderCreatedAtColumn, dataIndex: 'createTime', width: 160, },
{ ...OrderNumColumn, dataIndex: 'purchaseCount', width: 96, },
{ ...ConsigneeNumColumn, dataIndex: 'receiveCount', width: 96, },
{ ...TransitNumColumn, dataIndex: 'transitCount', width: 96, },
{ ...DeliveredNumColumn, dataIndex: 'leftCount', width: 96, },
{ ...PlannedDeliveryNumColumn, dataIndex: 'planCount', width: 128, },
])
const expandedRowRender = (record) => {
return <Table rowKey={'id'} columns={expandIconColumn} dataSource={record.orders} pagination={false} tableLayout="fixed" />
}
// 详情
const [details, setDetails] = useState<any>(null)
// 计划送货物 列表
const [tableData, setTableData] = useState<any>(null)
// 外部流转单据记录
const [externalRoamRecordData, setExternalRoamRecordData] = useState<any>(null)
// 计划周期 渲染日期
const handleDateAssembleColumn = (startDate: string, endDate: string) => {
const dates = getDayAll(moment(startDate).format('YYYY-MM-DD'), moment(endDate).format('YYYY-MM-DD'))
const datesColumn = dates.map((item, i) => ({ title: item.substr(1), dataIndex: item, key: item, width: 120, align: 'center', }))
const datesExpandIconColumn = dates.map((item, i) => ({
title: item.substr(1),
dataIndex: item,
key: item,
width: 80,
align: 'center',
render: (text: any, record: any) => (<span>{text?.planCount}</span>)
}))
const table_column = deliveryPlanType === '1' ? columnB2B : deliveryPlanType === '2' ? columnSRM : []
setTableColumn([...table_column, ...datesColumn])
setExpandIconColumn([...expandIconColumn, ...datesExpandIconColumn])
}
// 获取计划送货 物料
const getPlannedDelivery = () => {
getOrderDeliveryPlanDetailProductPage({
id,
current: '1',
pageSize: '10'
}).then((res) => {
if (res.code === 1000) {
const assemble = res.data.data.map(item => {
return {
...item,
...integrationOjb(item.dayNumbers),
orders: item.orders.map(o => ({ ...o, ...integrationArrToObj(o.planDays) }))
}
})
setTableData(assemble)
}
})
}
// 获取详情
const getDetails = () => {
getOrderDeliveryPlanDetail({
id
}).then((res: any) => {
if (res.code === 1000) {
setDetails(res.data)
getPlannedDelivery()
handleDateAssembleColumn(res.data.planStartTime, res.data.planEndTime)
}
]
return <Table rowKey={'id'} columns={[...PlannedDeliveryMaterialExpandableTableColumn, ...test]} dataSource={data} pagination={false} />
})
}
// 获取流转记录
const getExternalRoamRecordData = () => {
getOrderDeliveryPlanDeliveryHistory({ id }).then((res: any) => {
if (res.code === 1000 && !_.isEmpty(res.data)) {
setExternalRoamRecordData(res.data)
}
})
}
useEffect(() => {
setTimeout(() => {
let arr = Array.from(Array(90)).map((item, i) => ({ title: '日期' + i, dataIndex: 'date' + i, width: '64px', align: 'center' }))
console.log('执行渲染 :>> ', arr);
setTest(arr)
}, 0)
getDetails()
getExternalRoamRecordData()
}, [])
return (
<AnchorPage
title={details?.name || '没有title'}
title={details?.planNo}
onBack={() => history.goBack()}
anchors={iAnchors}
>
......@@ -134,30 +160,28 @@ const DeliveryPlanManagementDetails: React.FC = () => {
</Steps>
</BaseInfo>
<BaseInfo className='mt-16' title={base_Info.name} id={base_Info.key}>
<BaseInfo.BaseInfoItem label={PlanNumber}>
DL2014070100001
</BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={SupplyMember}>
温州龙昌手袋有限公司
</BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={PlanSummary}>
2014-07-01~2014-07-31 广州白马皮具交易中心送货计划
</BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={PlanningCycle}>
2020-08-25 至 2020-10-25
</BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={PlanNumber}> {details?.planNo} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={SupplyMembersLabel}> {details?.vendorMemberName} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={PlanningCycle}> {moment(details?.planStartTime).format('YYYY-MM-DD')} ~ {moment(details?.planEndTime).format('YYYY-MM-DD')} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={PlanSummary}> {details?.digest} </BaseInfo.BaseInfoItem>
<BaseInfo.BaseInfoItem label={ExternalState}>
<Tag color='green'>已提交</Tag>
<Tag color={tagStatus.getTagStyle(details?.status).bgColor}>
<span style={{ color: tagStatus.getTagStyle(details?.status).fontColor }}>{statusTxt.get(details?.status)}</span>
</Tag>
</BaseInfo.BaseInfoItem>
</BaseInfo>
<BaseInfo className='mt-16' title={PlannedDelivery.name} id={PlannedDelivery.key} cols={1}>
{/* B2B 显示计划送货物料,SRM显示计划送货商品 */}
<Table
// defaultExpandAllRows
rowKey={'id'}
columns={[...PlannedDeliveryMaterialTableColumn, ...test]}
rowKey={'skuId'}
columns={tableColumn}
expandable={{ expandedRowRender }}
dataSource={data}
dataSource={tableData}
tableLayout="fixed"
scroll={{ x: 2022 }}
/>
......@@ -165,7 +189,7 @@ const DeliveryPlanManagementDetails: React.FC = () => {
<BaseInfo className='mt-16' title={ExternalRoamRecord.name} id={ExternalRoamRecord.key} cols={1}>
<Table
rowKey={'id'}
dataSource={data}
dataSource={externalRoamRecordData}
columns={ExternalRoamRecordTableColumn}
/>
</BaseInfo>
......
......@@ -14,7 +14,7 @@ import { createFormActions } from '@formily/antd'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import { deliveryPlanManagementQuerySchema } from './schema'
import { TagStatus } from '../../utils'
import { godBtoa, TagStatus } from '../../utils'
import dayjs from 'dayjs'
import { ExternalStateColumn, OperationColumn, PlannedEndDateColumn, PlannedStartDateColumn, PlanNumberColumn, PlanSummaryColumn, SupplyMemberColumn } from '../../constants/table-column'
import { getOrderDeliveryPlanBuyerPage } from '@/services/OrderNewV2Api';
......@@ -38,7 +38,7 @@ const DeliveryPlanManagementQuery: React.FC = () => {
}
const buttonGroup = {
'查看': true,
'变更': record.id === 1
'变更': record.status === 4
}
const operationHandler = {
'查看': () => { console.log('查看 :>> ',) },
......@@ -57,8 +57,8 @@ const DeliveryPlanManagementQuery: React.FC = () => {
...PlanNumberColumn,
dataIndex: 'planNo',
key: 'planNo',
width: 160,
render: (text: string, record: any) => <EyePreview url='/memberCenter/order/deliveryPlanManagement/query/details'>{text}</EyePreview>
// width: 160,
render: (text: string, record: any) => <EyePreview url={`/memberCenter/order/deliveryPlanManagement/query/details?ty=${godBtoa(record.orderType)}&i=${godBtoa(record.id)}`}>{text}</EyePreview>
},
{ ...PlanSummaryColumn, dataIndex: 'digest', key: 'digest' },
{ ...PlannedStartDateColumn, dataIndex: 'planStartTime', key: 'planStartTime', render: (text: string, record: any) => (dayjs(text).format('YYYY-MM-DD')) },
......
......@@ -7,7 +7,7 @@
* @param arr
* @returns
*/
const convertArrtoObj = (arr) => {
const convertArrToObj = (arr) => {
return arr.reduce((obj, currVal) => {
return {
...obj,
......@@ -39,7 +39,7 @@ const integrationOjb = (obj) => {
* @param arr
* @returns
*/
const integrationArrtoObj = (arr) => {
const integrationArrToObj = (arr) => {
return arr.reduce((obj, currVal, idx) => {
return {
...obj,
......@@ -68,9 +68,9 @@ const godAtob = (str: string) => {
}
export {
convertArrtoObj,
convertArrToObj,
integrationOjb,
integrationArrtoObj,
integrationArrToObj,
godBtoa,
godAtob,
}
\ No newline at end of file
......@@ -10,7 +10,7 @@ interface StatusStyleItem {
/**
* 状态描述
* - default: 默认
* - toSbumit: 待提交
* - toSubmit: 待提交
* - toBeConfirmed: 待确认
* - toBeModified: 待修改
* - confirmed: 已确认
......@@ -18,23 +18,23 @@ interface StatusStyleItem {
* - voided: 已确认
*/
enum StatusEnum {
Default = 1,
ToSbumit = 2,
ToBeConfirmed = 3,
ToBeModified = 4,
Confirmed = 5,
Generated = 6,
Voided = 7,
Default = undefined,
ToSubmit = 1,
ToBeConfirmed = 2,
ToBeModified = 3,
Confirmed = 4,
Generated = 5,
Voided = 6,
}
class TagStatus {
/**
* 默认的Sytle集合 具体情况,看StatusEnum
* 默认的Style集合 具体情况,看StatusEnum
*/
#tagStatusColor: StatusStyleItem = {
[StatusEnum.Default]: this.defaultStatusStyle(),
[StatusEnum.ToSbumit]: this.toSbumitStatusStyle(),
[StatusEnum.ToSubmit]: this.toSubmitStatusStyle(),
[StatusEnum.ToBeConfirmed]: this.toBeConfirmedStyle(),
[StatusEnum.ToBeModified]: this.toBeConfirmedStyle(),
[StatusEnum.Confirmed]: this.confirmedStyle(),
......@@ -46,7 +46,7 @@ class TagStatus {
return { bgColor: '#f2f4f5', fontColor: '#000', txt: '默认' }
}
toSbumitStatusStyle() {
toSubmitStatusStyle() {
return { bgColor: '#f4f5f7', fontColor: '#5c626a', txt: '待提交' };
}
......
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