Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
jinfa-platform
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄庭坚
jinfa-platform
Commits
21aae1ff
Commit
21aae1ff
authored
Nov 30, 2020
by
前端-钟卫鹏
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' of
http://10.0.0.22:3000/lingxi/lingxi-business-paltform
into dev
parents
8a90870e
68a7b01c
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
38 changed files
with
1902 additions
and
361 deletions
+1902
-361
handlingRoute.ts
config/routes/handlingRoute.ts
+11
-24
demandPosts.ts
config/routes/tranactionRoute/demandPosts.ts
+7
-0
menu.ts
src/locales/zh-CN/menu.ts
+1
-1
index.tsx
...ervice/exchangeApplication/exchangePrAddDeliver/index.tsx
+26
-13
index.tsx
src/pages/handling/assign/detail/index.tsx
+77
-29
index.tsx
src/pages/handling/assign/processStock/index.tsx
+28
-15
index.tsx
src/pages/handling/common/index.tsx
+3
-2
index.tsx
src/pages/handling/components/Appendix/index.tsx
+2
-1
DetailTab.tsx
.../handling/components/ReceiptDeliveryDetails/DetailTab.tsx
+175
-0
ReceiptDeliveryDetailsCard.tsx
...nts/ReceiptDeliveryDetails/ReceiptDeliveryDetailsCard.tsx
+32
-0
StatisticsTab.tsx
...dling/components/ReceiptDeliveryDetails/StatisticsTab.tsx
+18
-0
index.tsx
...ages/handling/components/ReceiptDeliveryDetails/index.tsx
+10
-154
AfterSoldCenter.tsx
src/pages/home/components/Centers/AfterSoldCenter.tsx
+13
-2
LogisticsCenter.tsx
src/pages/home/components/Centers/LogisticsCenter.tsx
+10
-1
ProcessCenter.tsx
src/pages/home/components/Centers/ProcessCenter.tsx
+10
-1
ProductCenter.tsx
src/pages/home/components/Centers/ProductCenter.tsx
+27
-3
TradeCenter.tsx
src/pages/home/components/Centers/TradeCenter.tsx
+15
-3
index.tsx
src/pages/home/components/UserCenter/index.tsx
+7
-2
index.tsx
src/pages/home/index.tsx
+1
-2
index.tsx
src/pages/member/memberUpgradeRule/index.tsx
+8
-3
modalAnchor.tsx
...irySubmit/addDemandOrder/components/Modal/modalAnchor.tsx
+244
-0
modalGoods.tsx
...uirySubmit/addDemandOrder/components/Modal/modalGoods.tsx
+259
-0
addGoods.tsx
...tion/enquirySubmit/addDemandOrder/components/addGoods.tsx
+165
-7
basicInfo.tsx
...ion/enquirySubmit/addDemandOrder/components/basicInfo.tsx
+112
-29
demandDbutted.tsx
...enquirySubmit/addDemandOrder/components/demandDbutted.tsx
+165
-0
flowRecord.tsx
...on/enquirySubmit/addDemandOrder/components/flowRecord.tsx
+14
-6
index.less
...action/enquirySubmit/addDemandOrder/components/index.less
+123
-0
tradingConditions.tsx
...irySubmit/addDemandOrder/components/tradingConditions.tsx
+64
-9
data.ts
src/pages/transaction/enquirySubmit/addDemandOrder/data.ts
+22
-0
index.tsx
src/pages/transaction/enquirySubmit/addDemandOrder/index.tsx
+90
-7
index.tsx
src/pages/transaction/enquirySubmit/toAddSubmit/index.tsx
+24
-24
attached.tsx
...action/goodsOffer/addEnquiryOrder/components/attached.tsx
+2
-2
basicInfo.tsx
...ction/goodsOffer/addEnquiryOrder/components/basicInfo.tsx
+1
-1
attached.tsx
...tion/inquiryQuote/addInquiryOrder/components/attached.tsx
+4
-1
useBusinessEffects.ts
.../bills/components/BillsForm/effects/useBusinessEffects.ts
+0
-0
index.tsx
...ion/stockSellStorage/bills/components/BillsForm/index.tsx
+126
-17
index.ts
...ockSellStorage/bills/components/BillsForm/schema/index.ts
+4
-0
index.tsx
src/pages/transaction/stockSellStorage/inventory/index.tsx
+2
-2
No files found.
config/routes/handlingRoute.ts
View file @
21aae1ff
...
...
@@ -120,14 +120,7 @@ const HandlingRoute = {
component
:
'@/pages/handling/assign/detail'
,
hideInMenu
:
true
,
},
// 指派生产通知单 -> 新建加工入库单
// {
// path: '/memberCenter/handling/assign/createProcessStock',
// name: 'createProcessStock',
// icon: 'smile',
// component: '@/pages/handling/assign/processStock/createProcessStock',
// hideInMenu: true,
// }
]
},
// 确认生产通知单
...
...
@@ -222,14 +215,6 @@ const HandlingRoute = {
component
:
'@/pages/handling/assign/detail'
,
hideInMenu
:
true
},
// 确认生产通知单 -> 新建加工发货单
// {
// path: '/memberCenter/handling/confirm/createProcessInvoice',
// name: 'createProcessInvoice',
// icon: 'smile',
// component: '@/pages/handling/confirm/createProcessInvoice'
// },
// 确认生产通知单 -> 待新增物流单
{
path
:
'/memberCenter/handling/confirm/pendingAddLogistics'
,
...
...
@@ -237,13 +222,6 @@ const HandlingRoute = {
icon
:
'smile'
,
component
:
'@/pages/handling/assign/processStock'
,
},
// 确认生产通知单 -> 新建物流单
// {
// path: '/memberCenter/handling/confirm/createLogisticsOrder',
// name: 'createLogisticsOrder',
// icon: 'smile',
// component: '@/pages/handling/confirm/createLogisticsOrder',
// },
// 确认生产通知单 -> 待发货生产通知单
{
path
:
'/memberCenter/handling/confirm/pendingDelivered'
,
...
...
@@ -256,6 +234,7 @@ const HandlingRoute = {
name
:
'pendingDeliveredDetail'
,
icon
:
'smile'
,
component
:
'@/pages/handling/assign/detail'
,
hideInMenu
:
true
,
},
// 确认生产通知单 -> 待确认回单生产通知单
{
...
...
@@ -263,7 +242,15 @@ const HandlingRoute = {
name
:
'pendingReceipt'
,
icon
:
'smile'
,
component
:
'@/pages/handling/assign/processStock'
}
},
// 确认生产通知单 -> 待确认回单生产通知单
{
path
:
'/memberCenter/handling/confirm/pendingReceipt/detail'
,
name
:
'pendingReceiptDetail'
,
icon
:
'smile'
,
component
:
'@/pages/handling/assign/detail'
,
hideInMenu
:
true
,
},
]
}
...
...
config/routes/tranactionRoute/demandPosts.ts
View file @
21aae1ff
...
...
@@ -43,6 +43,13 @@ export default [
},
// 待新增需求单-编辑
{
path
:
'/memberCenter/tranactionAbility/enquirySubmit/addDemandOrder/edit'
,
name
:
'editEnquiry'
,
component
:
'@/pages/transaction/enquirySubmit/addDemandOrder'
,
hideInMenu
:
true
,
},
// 待新增需求单-编辑
{
path
:
'/memberCenter/tranactionAbility/enquirySubmit/toAddSubmitList/edit'
,
name
:
'editEnquiry'
,
component
:
'@/pages/transaction/enquirySubmit/toAddSubmit/detail'
,
...
...
src/locales/zh-CN/menu.ts
View file @
21aae1ff
...
...
@@ -489,7 +489,7 @@ export default {
'menu.handling.confirm.pendingReceipt'
:
'待确认回单生产通知单'
,
'menu.handling.confirm.createProcessInvoice'
:
'新建加工发货单'
,
'menu.handling.confirm.createLogisticsOrder'
:
'新建物流单'
,
'menu.handling.confirm.pendingReceiptDetail'
:
'待确认回单生产通知单详情'
,
// 售后能力
'menu.afterService'
:
'售后'
,
'menu.afterService.exchangeApplication'
:
'换货申请'
,
...
...
src/pages/afterService/exchangeApplication/exchangePrAddDeliver/index.tsx
View file @
21aae1ff
...
...
@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-2
0 16:03:42
* @LastEditTime: 2020-11-2
7 17:16:30
* @Description: 待新增退货发货单
*/
import
React
,
{
useState
,
useRef
}
from
'react'
;
...
...
@@ -18,6 +18,12 @@ import { ColumnType } from 'antd/lib/table/interface';
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
createFormActions
}
from
'@formily/antd'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
DOC_TYPE_RETURN_INVOICE
,
DEPENDENT_DOC_EXCHANGE
,
EXCHANGE_INNER_STATUS_NOT_ADDED_RETURN_DELIVERY
,
EXCHANGE_INNER_STATUS_UNREVIEWED_RETURN_DELIVERY
,
}
from
'@/constants'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
;
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
;
import
EyePreview
from
'@/components/EyePreview'
;
...
...
@@ -111,18 +117,25 @@ const ExchangePrAddDeliver: React.FC = () => {
align
:
'center'
,
render
:
(
text
,
record
)
=>
(
<>
<
Button
type=
"link"
onClick=
{
()
=>
()
=>
history
.
push
(
``
)
}
>
新增
</
Button
>
<
Button
type=
"link"
onClick=
{
()
=>
handleVerify
(
record
)
}
>
审核
</
Button
>
{
record
.
innerStatus
===
EXCHANGE_INNER_STATUS_NOT_ADDED_RETURN_DELIVERY
&&
(
<
Button
type=
"link"
onClick=
{
()
=>
history
.
push
(
`/memberCenter/tranactionAbility/stockSellStorage/bills/add?relevanceInvoicesId=${record.replaceId}&invoicesTypeId=${DOC_TYPE_RETURN_INVOICE}&relevanceInvoices=${DEPENDENT_DOC_EXCHANGE}`
)
}
>
新增
</
Button
>
)
}
{
record
.
innerStatus
===
EXCHANGE_INNER_STATUS_UNREVIEWED_RETURN_DELIVERY
&&
(
<
Button
type=
"link"
onClick=
{
()
=>
handleVerify
(
record
)
}
>
审核
</
Button
>
)
}
</>
),
},
...
...
src/pages/handling/assign/detail/index.tsx
View file @
21aae1ff
import
React
,
{
useState
,
useEffect
,
useCallback
}
from
'react'
;
import
React
,
{
useState
,
useEffect
,
useCallback
,
useMemo
}
from
'react'
;
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
history
}
from
'umi'
;
import
AvatarWrap
from
'@/components/AvatarWrap'
;
import
{
PageHeader
,
Descriptions
,
Card
,
Tabs
,
Row
,
Col
,
Button
,
Badge
,
Table
}
from
'antd'
;
import
{
PageHeader
,
Descriptions
,
Card
,
Tabs
,
Row
,
Col
,
Button
,
Badge
,
Table
,
Popconfirm
}
from
'antd'
;
import
Circulation
from
'../../components/Circulation'
;
import
OtherRequirement
from
'../../components/OtherRequirement'
;
import
Appendix
from
'../../components/Appendix'
;
...
...
@@ -10,8 +10,8 @@ import { usePageStatus } from '@/hooks/usePageStatus'
import
{
PublicApi
}
from
'@/services/api'
;
import
StatusTag
from
'@/components/StatusTag'
;
import
DeliveryInfomation
from
'../../components/DeliveryInformation'
;
import
ReceiptDeliveryDetails
from
'../../components/ReceiptDeliveryDetails'
;
import
moment
from
'moment'
;
import
{
ReceiptDeliveryDetailsCard
,
StatisticsTab
,
DetailTab
}
from
'../../components/ReceiptDeliveryDetails'
;
import
{
columns
,
orderDetailColumn
,
innerWorkFlowRecordColumn
,
outerWorkflowRecordsColumn
,
receiveColumns
,
pnoReceiveDeliverDetailDOListColumns
}
from
'./columns'
;
import
ExamineModal
from
'../../components/ExamineModal'
;
import
{
FormOutlined
}
from
'@ant-design/icons'
...
...
@@ -28,13 +28,16 @@ import {
CONFIRM_PENDING_SECOND_DETAIL
,
CONFIRM_PENDING_CONFIRM_DETAIL
,
PENDING_DELIVERD_PATH
,
PENDING_RECEIPT_PATH
,
SUPPLIER_DETAIL_INNER_STATUS_COLOR
,
CONFIRM_DETAIL_INNER_STATUS_COLOR
,
SUPPLIER_OUTER_STATUS_COLOR
}
from
'../../common'
;
import
DeliverGood
from
'../../components/DeliverGood'
;
// 下面的地址需要抽离出来, 还有以下的相同的path
/**
* 进入详情页,根据不同的pathname 获取他们的service,
* Assign 指的是指派通知单, comfirm 是确认通知单
*/
const
SERVICE_MAP
=
{
[
`
${
ASSIGN_QUERY_DETAIL
}
`
]:
PublicApi
.
getEnhanceSupplierAllDetails
,
[
`
${
ASSIGN_TO_BE_ADD_QUERY_DETAIL
}
`
]:
PublicApi
.
getEnhanceSupplierToBeAddDetails
,
...
...
@@ -47,8 +50,8 @@ const SERVICE_MAP = {
[
`
${
CONFIRM_PENDING_FIRST_DETAIL
}
`
]:
PublicApi
.
getEnhanceProcessToBeFirstExamDetails
,
[
`
${
CONFIRM_PENDING_SECOND_DETAIL
}
`
]:
PublicApi
.
getEnhanceProcessToBeSecondExamDetails
,
[
`
${
CONFIRM_PENDING_CONFIRM_DETAIL
}
`
]:
PublicApi
.
getEnhanceProcessToBeConfirmDetails
,
[
`
${
PENDING_DELIVERD_PATH
}
/detail`
]:
PublicApi
.
getEnhanceProcessToBeDeliveryDetails
// '/memberCenter/handling/confirm/processingInvoiceTobeAdd/detail': PublicApi.getEnhanceProcessToBeAddDelivery
Details,
[
`
${
PENDING_DELIVERD_PATH
}
/detail`
]:
PublicApi
.
getEnhanceProcessToBeDeliveryDetails
,
[
`
${
PENDING_RECEIPT_PATH
}
/detail`
]:
PublicApi
.
getEnhanceProcessToBeConfirmReceipt
Details
,
}
/**
...
...
@@ -75,7 +78,26 @@ const Detail: React.FC<{}> = () => {
const
[
loading
,
setLoading
]
=
useState
<
boolean
>
(
false
);
const
[
deliverAddressOption
,
setDeliverAddressOption
]
=
useState
([]);
const
[
activeAddress
,
setActiveAddress
]
=
useState
<
string
|
null
>
(
null
)
const
tips
=
useMemo
(()
=>
{
let
string
=
""
if
(
pathname
===
`
${
PENDING_RECEIPT_PATH
}
/detail`
)
{
if
(
!
info
||
!
info
.
pnoReceiveDeliverDetailDOList
)
{
return
""
}
const
flag
=
info
.
pnoReceiveDeliverDetailDOList
.
some
((
item
)
=>
{
return
item
.
pnoReceiveDeliverDetailProductBOList
.
some
((
row
)
=>
{
return
row
.
processNum
-
row
.
deliverNum
>
0
// 还有未发货的
})
});
if
(
flag
)
{
string
=
"您还有未发货的商品,是否确认全部发货已完成"
}
else
{
string
=
"确认本单全部发货单是否已全部收到回单"
}
}
return
string
},
[
info
])
const
getInfo
=
()
=>
{
const
service
=
SERVICE_MAP
[
pathname
];
service
&&
service
({
id
:
id
})
...
...
@@ -95,7 +117,7 @@ const Detail: React.FC<{}> = () => {
// 确认生产通知单 -> 待提交审核生产通知单时需要同时提交他的发货地址
useEffect
(()
=>
{
if
(
isSetDeliverAddress
)
{
PublicApi
.
getLogisticsShipperAddressPage
({
current
:
'1'
,
pageSize
:
'
20
'
})
PublicApi
.
getLogisticsShipperAddressPage
({
current
:
'1'
,
pageSize
:
'
999
'
})
.
then
(({
data
,
code
})
=>
{
if
(
code
===
1000
)
{
const
tempData
=
[];
...
...
@@ -153,6 +175,11 @@ const Detail: React.FC<{}> = () => {
})
}
/**
* 统一的审核提交方法,比如审核一级单,审核二级单,提交审核
* @param service
* @param params
*/
const
postService
=
(
service
,
params
)
=>
{
setLoading
(
true
)
service
(
params
)
...
...
@@ -180,8 +207,18 @@ const Detail: React.FC<{}> = () => {
postService
(
PublicApi
.
postEnhanceSupplierToBeAddSubmitExam
,
{
id
:
id
});
}
const
renderExtra
=
useCallback
(()
=>
{
/**
* 确认全部发货
*/
const
handleAllReceiptReceive
=
()
=>
{
postService
(
PublicApi
.
postEnhanceProcessToBeConfirmReceiptConfirmAllReceipt
,
{
produceNoticeOrderId
:
id
,
status
:
true
}
)
}
const
renderExtra
=
()
=>
{
const
ExamineComponent
=
(
<
ExamineModal
onOk=
{
examOnOk
}
modalType=
{
"basic"
}
>
<
Button
loading=
{
loading
}
type=
"primary"
>
单据审核
</
Button
>
...
...
@@ -189,6 +226,11 @@ const Detail: React.FC<{}> = () => {
)
const
SubmitBtn
=
<
Button
loading=
{
loading
}
icon=
{
<
FormOutlined
/>
}
onClick=
{
submit
}
type=
"primary"
>
提交通知单
</
Button
>
const
NextBtn
=
<
Button
loading=
{
loading
}
onClick=
{
toNext
}
>
提交
</
Button
>
const
AllReceiptReceive
=
(
<
Popconfirm
title=
{
tips
}
onConfirm=
{
handleAllReceiptReceive
}
>
<
Button
loading=
{
loading
}
type=
"primary"
>
确认本单全部发货单已收到回单
</
Button
>
</
Popconfirm
>
)
const
COMPONENT_MAP
=
{
// 待新增生产通知单有提交按钮
...
...
@@ -200,10 +242,10 @@ const Detail: React.FC<{}> = () => {
[
`
${
CONFIRM_PENDING_FIRST_DETAIL
}
`
]:
ExamineComponent
,
[
`
${
CONFIRM_PENDING_SECOND_DETAIL
}
`
]:
ExamineComponent
,
[
`
${
CONFIRM_PENDING_CONFIRM_DETAIL
}
`
]:
ExamineComponent
,
// [`${PENDING_DELIVERD_PATH}/detail`]: DeliverGoodComponent
[
`
${
PENDING_RECEIPT_PATH
}
/detail`
]:
AllReceiptReceive
}
return
(
COMPONENT_MAP
[
pathname
]
||
null
)
}
,
[])
}
const
handleConfirm
=
(
status
,
params
)
=>
{
/**
...
...
@@ -211,16 +253,15 @@ const Detail: React.FC<{}> = () => {
* 1 可以是 deliverStatus, 也可以是receiveStatus 和 receiptStatus
*/
const
SERVICE_MAP
=
{
'
5
_1'
:
PublicApi
.
postEnhanceProcessToBeDeliveryConfirmDelivery
,
'
7
_1'
:
PublicApi
.
postEnhanceSupplierToBeReceiveConfirmReceive
,
'
8
_1'
:
PublicApi
.
postEnhanceProcessToBeConfirmReceiptConfirmReceipt
'
deliverStatus
_1'
:
PublicApi
.
postEnhanceProcessToBeDeliveryConfirmDelivery
,
'
receiveStatus
_1'
:
PublicApi
.
postEnhanceSupplierToBeReceiveConfirmReceive
,
'
receiptStatus
_1'
:
PublicApi
.
postEnhanceProcessToBeConfirmReceiptConfirmReceipt
}
const
service
=
SERVICE_MAP
[
status
];
if
(
service
)
{
service
(
params
)
.
then
((
data
,
code
)
=>
{
.
then
((
{
data
,
code
}
)
=>
{
if
(
code
===
1000
)
{
// console.log(data);
getInfo
()
}
})
...
...
@@ -246,7 +287,7 @@ const Detail: React.FC<{}> = () => {
}
>
<
Row
>
<
Col
span=
{
2
2
}
>
<
Col
span=
{
2
0
}
>
<
Descriptions
column=
{
3
}
style=
{
{
padding
:
'0 32px'
,
fontWeight
:
400
}
}
...
...
@@ -270,7 +311,7 @@ const Detail: React.FC<{}> = () => {
</
Descriptions
.
Item
>
</
Descriptions
>
</
Col
>
<
Col
span=
{
2
}
>
<
Col
span=
{
4
}
>
{
renderExtra
()
}
...
...
@@ -302,15 +343,22 @@ const Detail: React.FC<{}> = () => {
</
div
>
{
/* 这里全部是走 非手工发货,当有手工发货按钮是,此时下面收发货明细隐藏 */
}
<
div
style=
{
{
marginTop
:
'20px'
,
display
:
info
.
pnoReceiveDeliverDetailDOList
?.
length
>
0
?
'block'
:
'none'
}
}
>
<
ReceiptDeliveryDetails
statisticsColumn=
{
receiveColumns
}
statisticsData=
{
info
.
details
}
pnoReceiveDeliverDetailDOList=
{
info
.
pnoReceiveDeliverDetailDOList
}
pnoReceiveDeliverDetailColumns=
{
pnoReceiveDeliverDetailDOListColumns
}
outerStatus=
{
info
.
outerStatus
}
confirm=
{
handleConfirm
}
/>
<
div
style=
{
{
marginTop
:
'20px'
}
}
>
<
ReceiptDeliveryDetailsCard
>
<
StatisticsTab
tab=
"收发货统计"
columns=
{
receiveColumns
}
dataSource=
{
info
.
details
}
></
StatisticsTab
>
{
info
.
pnoReceiveDeliverDetailDOList
&&
info
.
pnoReceiveDeliverDetailDOList
.
length
>
0
?
<
DetailTab
tab=
"生产通知单收发货明细"
columns=
{
pnoReceiveDeliverDetailDOListColumns
}
dataSource=
{
info
.
pnoReceiveDeliverDetailDOList
}
handleConfirm=
{
handleConfirm
}
/>
:
null
}
</
ReceiptDeliveryDetailsCard
>
</
div
>
<
div
style=
{
{
marginTop
:
'20px'
}
}
>
<
DeliveryInfomation
...
...
src/pages/handling/assign/processStock/index.tsx
View file @
21aae1ff
...
...
@@ -13,15 +13,15 @@ import moment from 'moment';
import
{
ColumnsType
}
from
'antd/es/table'
;
import
{
timeRange
}
from
'@/utils'
;
import
{
Link
,
history
}
from
'umi'
import
{
DOC_TYPE_PROCESS_INVOICE
,
DEPENDENT_DOC_PRODUCTION
}
from
'@/constants'
;
import
{
DOC_TYPE_PROCESS_INVOICE
,
DEPENDENT_DOC_PRODUCTION
,
DOC_TYPE_PROCESS_RECEIPT
}
from
'@/constants'
;
import
{
PROCESS_TITLE
,
PENDING_ADD_PROCESS_PATH
,
PROCESSING_INVOICE_TO_BE_ADD_PATH
,
PENDING_ADD_LOGISTICS_PATH
,
PENDING_DELIVERD_PATH
,
PENDING_RECEIPT_PATH
,
ASSIGN_PENDING_RECEIVE
,
PENDING_RECEIPT_PATH
,
}
from
'../../common'
;
const
formActions
=
createFormActions
();
...
...
@@ -103,46 +103,59 @@ const processStock: React.FC<{}> = () => {
render
:
(
text
,
record
:
any
)
=>
{
// 这里暂时不知道status的状态, 先用内部状态判断, 审核的先不处理, 感觉应该用入库单号去判断吧
const
MAP
=
{
'待新增加工发货单'
:
(
// outerStatus = 5, innerStatus = 18
'待确认发货'
:
<
Link
to
=
{
`
${
PENDING_DELIVERD_PATH
}
/detail?id=
${
record
.
id
}
`
}
>
发货
<
/Link>
,
// outerStatus = 6, innerStatus = 19
'待新增加工入库单'
:
(
<
Link
to=
{
`${ADD_
PROCESS_PATH}?relevanceInvoicesId=${record.id}&invoicesTypeId=${DOC_TYPE_PROCESS_INVOICE
}&relevanceInvoices=${DEPENDENT_DOC_PRODUCTION}`
}
to=
{
`${ADD_
DELIVERY_PATH}?relevanceInvoicesId=${record.id}&invoicesTypeId=${DOC_TYPE_PROCESS_RECEIPT
}&relevanceInvoices=${DEPENDENT_DOC_PRODUCTION}`
}
>
新增加工
发货
单
新增加工
入库
单
</
Link
>
),
'待审核加工发货单'
:
(
// outerStatus = 6, innerStatus = 20
'待审核加工入库单'
:
(
<
Popconfirm
title=
{
`是否确认审核
发货单号为${record.deliveryNo}的加工发货
单?`
}
title=
{
`是否确认审核
入库单号为${record.deliveryNo}的加工入库
单?`
}
visible=
{
visibleID
===
record
.
id
}
placement=
"left"
okText=
"确定"
cancelText=
"取消"
onCancel=
{
handleCancel
}
okButtonProps=
{
{
loading
:
confirmLoading
}
}
onConfirm=
{
()
=>
handleExam
Delivery
(
record
.
id
,
ExamType
.
delivery
)
}
onConfirm=
{
()
=>
handleExam
(
record
.
id
,
ExamType
.
warehouseReceipt
)
}
>
<
a
onClick=
{
()
=>
handleVisible
(
record
.
id
)
}
>
审核
</
a
>
</
Popconfirm
>
),
'新增加工入库单'
:
<
Link
to
=
{
ADD_DELIVERY_PATH
}
>
新增加工入库单
<
/Link>
,
'审核加工入库单'
:
(
// outerStatus = 7, innerStatus = 21
'待确认收货'
:
<
Link
to
=
{
`
${
ASSIGN_PENDING_RECEIVE
}
/detail?id=
${
record
.
id
}
`
}
>
收货
<
/Link>
,
'待新增加工发货单'
:
(
<
Link
to=
{
`${ADD_PROCESS_PATH}?relevanceInvoicesId=${record.id}&invoicesTypeId=${DOC_TYPE_PROCESS_INVOICE}&relevanceInvoices=${DEPENDENT_DOC_PRODUCTION}`
}
>
新增加工发货单
</
Link
>
),
'待审核加工发货单'
:
(
<
Popconfirm
title=
{
`是否确认审核
入库单号为${record.deliveryNo}的加工入库
单?`
}
title=
{
`是否确认审核
发货单号为${record.deliveryNo}的加工发货
单?`
}
visible=
{
visibleID
===
record
.
id
}
placement=
"left"
okText=
"确定"
cancelText=
"取消"
onCancel=
{
handleCancel
}
okButtonProps=
{
{
loading
:
confirmLoading
}
}
onConfirm=
{
()
=>
handleExam
Delivery
(
record
.
id
,
ExamType
.
warehouseReceipt
)
}
onConfirm=
{
()
=>
handleExam
(
record
.
id
,
ExamType
.
delivery
)
}
>
<
a
onClick=
{
()
=>
handleVisible
(
record
.
id
)
}
>
审核
</
a
>
</
Popconfirm
>
),
'待新增物流单'
:
<
Link
to
=
{
`
${
ADD_LOGISTICS_PATH
}
`
}
>
新增
<
/Link>
,
'待确认物流单'
:
<
a
>
查看
<
/a>
,
'待收货通知单'
:
<
Link
to
=
{
`
${
ASSIGN_PENDING_RECEIVE
}
/detail`
}
>
收货
<
/Link>
,
'待确认
发货'
:
<
Link
to
=
{
`
${
PENDING_DELIVERD_PATH
}
/detail?id=
${
record
.
id
}
`
}
>
发货
<
/Link
>
// outerStatus = 8, innerStatus = 22
'待确认
回单'
:
<
Link
to
=
{
`
${
PENDING_RECEIPT_PATH
}
/detail?id=
${
record
.
id
}
`
}
>
确认回单
<
/Link
>
}
return
MAP
[
record
.
innerStatusName
]
}
...
...
@@ -156,7 +169,7 @@ const processStock: React.FC<{}> = () => {
* @param id 审核单id
* @param type deliver | warehouseReceipt
*/
const
handleExam
Delivery
=
(
id
:
number
,
type
:
string
)
=>
{
const
handleExam
=
(
id
:
number
,
type
:
string
)
=>
{
const
exam_service
=
{
[
ExamType
.
delivery
]:
PublicApi
.
postEnhanceProcessToBeAddDeliveryExam
,
[
ExamType
.
warehouseReceipt
]:
PublicApi
.
postEnhanceSupplierToBeAddStorageExam
,
...
...
src/pages/handling/common/index.tsx
View file @
21aae1ff
...
...
@@ -213,10 +213,11 @@ export const CONFIRM_DETAIL_INNER_STATUS_COLOR = [
"green"
,
// 完成
]
type
SUPPLIER_OUTER_STATUS_COLOR_TYPE
=
(
"default"
|
"primary"
|
"danger"
|
"success"
|
"warning"
)[]
/**
* 指派生产通知单 -> 列表页 -> 外部状态
*/
export
const
SUPPLIER_OUTER_STATUS_COLOR
=
[
export
const
SUPPLIER_OUTER_STATUS_COLOR
:
SUPPLIER_OUTER_STATUS_COLOR_TYPE
=
[
"default"
,
"default"
,
"primary"
,
...
...
@@ -265,8 +266,8 @@ export const PROCESS_TITLE = {
[
PROCESSING_INVOICE_TO_BE_ADD_PATH
]:
"待新增加工发货单"
,
[
PENDING_ADD_LOGISTICS_PATH
]:
"待新增物流单"
,
[
PENDING_DELIVERD_PATH
]:
"待发货生产通知单"
,
[
PENDING_RECEIPT_PATH
]:
"待确认回单生产通知单"
,
[
ASSIGN_PENDING_RECEIVE
]:
"待确认收货生产通知单"
,
[
PENDING_RECEIPT_PATH
]:
"待确认回单生产通知单"
,
}
...
...
src/pages/handling/components/Appendix/index.tsx
View file @
21aae1ff
...
...
@@ -17,7 +17,8 @@ const styles = {
backgroundColor
:
'#F4F5F7'
,
padding
:
'10px 10px'
,
cursor
:
'pointer'
,
height
:
'100%'
height
:
'100%'
,
marginBottom
:
'8px'
}
...
...
src/pages/handling/components/ReceiptDeliveryDetails/DetailTab.tsx
0 → 100644
View file @
21aae1ff
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
ColumnsType
}
from
'antd/es/table'
;
import
{
Table
,
Row
,
Col
,
Popconfirm
,
Radio
}
from
'antd'
;
import
styles
from
'./index.less'
import
moment
from
'moment'
;
import
{
history
}
from
'umi'
import
{
ASSIGN_PENDING_RECEIVE_DETAIL
,
PENDING_DELIVERD_PATH
,
PENDING_RECEIPT_PATH
}
from
'../../common'
;
interface
Iprops
{
tab
:
string
,
columns
:
ColumnsType
<
any
>
,
dataSource
:
any
[],
handleConfirm
:
(
type
:
string
,
params
:
any
)
=>
void
}
const
format
=
'YYYY-MM-DD HH:mm:ss'
;
/**
* 只有在待发货生产通知单, 待收货生产通知、待回单生产通知单才能修改他table商品的状态
* 比如确认发货,确认收货、确认回单
* 并且上面三个状态的值为1才能修改
* @param props
*/
const
PENDING_DELIVERD_DETAIL_PATH
=
PENDING_DELIVERD_PATH
+
'/detail'
;
const
PENDING_RECEIPT_DETAIL_PATH
=
PENDING_RECEIPT_PATH
+
'/detail'
;
//receiptStatus_1
const
MAP_PATH
=
{
[
PENDING_DELIVERD_DETAIL_PATH
]:
'deliverStatus'
,
[
ASSIGN_PENDING_RECEIVE_DETAIL
]:
'receiveStatus'
,
[
PENDING_RECEIPT_DETAIL_PATH
]:
'receiptStatus'
,
}
const
TEXT_MAP
=
{
'deliverStatus_1'
:
'确认发货'
,
'receiveStatus_1'
:
'确认收货'
,
'receiptStatus_1'
:
'确认回单'
}
// 从全部进来, 如果是confirm
const
CONFIRM_STATUS_TEXT
=
{
'1_1_1'
:
'待确认发货'
,
'2_1_1'
:
'已确认发货'
,
'2_2_1'
:
'待确认回单'
,
'2_2_2'
:
'已确认回单'
}
// 如果是 指派通知单
const
ASSIGN_STATUS_TEXT
=
{
'1_1_1'
:
'待确认发货'
,
'2_1_1'
:
'已确认发货'
,
'2_2_1'
:
'已确认收货'
,
'2_2_2'
:
'已确认回单'
}
const
DetailTab
:
React
.
FC
<
Iprops
>
=
(
props
)
=>
{
const
{
columns
,
dataSource
}
=
props
;
const
[
activeBatch
,
setActiveBatch
]
=
useState
(
0
);
const
[
activeData
,
setActiveData
]
=
useState
<
any
>
({});
// const [currentTarget, setCurrentTarget] = useState("deliverStatus");
const
pathname
=
history
.
location
.
pathname
;
const
currentPage
=
MAP_PATH
[
pathname
];
const
INNER_TEXT
=
pathname
.
includes
(
'confirm'
)
?
CONFIRM_STATUS_TEXT
:
ASSIGN_STATUS_TEXT
;
useEffect
(()
=>
{
if
(
dataSource
&&
dataSource
.
length
>
0
)
{
setActiveData
(
dataSource
[
0
])
}
},
[
dataSource
])
const
handleOnChange
=
(
e
)
=>
{
setActiveBatch
(
e
.
target
.
value
)
setActiveData
(
dataSource
[
e
.
target
.
value
])
}
const
confirm
=
(
params
,
type
)
=>
{
props
.
handleConfirm
(
type
,
params
);
}
return
(
<
div
>
<
div
>
<
Radio
.
Group
value=
{
activeBatch
}
onChange=
{
handleOnChange
}
>
{
dataSource
&&
dataSource
.
map
((
item
,
key
)
=>
{
return
(
<
Radio
.
Button
key=
{
item
.
deliveryBatch
}
value=
{
key
}
>
第
{
item
.
deliveryBatch
}
批次
</
Radio
.
Button
>
)
})
}
</
Radio
.
Group
>
</
div
>
<
div
className=
{
styles
.
header
}
>
<
Row
>
<
Col
span=
{
6
}
>
<
div
className=
{
styles
.
detailItem
}
>
<
span
className=
{
styles
.
title
}
>
发货单号
</
span
>
<
a
className=
{
styles
.
value
}
>
{
activeData
.
deliveryNo
}
</
a
>
</
div
>
<
div
>
<
span
className=
{
styles
.
title
}
>
发货时间
</
span
>
<
span
className=
{
styles
.
value
}
>
{
activeData
.
deliveryTime
&&
moment
(
activeData
.
deliveryTime
).
format
(
format
)
}
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
6
}
>
<
div
className=
{
styles
.
detailItem
}
>
<
span
className=
{
styles
.
title
}
>
物流单号
</
span
>
<
a
className=
{
styles
.
value
}
>
{
activeData
.
logisticsOrderNo
}
</
a
>
</
div
>
<
div
>
<
span
className=
{
styles
.
title
}
>
物流公司
</
span
>
<
span
className=
{
styles
.
value
}
>
{
activeData
.
logisticsCompany
}
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
6
}
>
<
div
className=
{
styles
.
detailItem
}
>
<
span
className=
{
styles
.
title
}
>
入库单号
</
span
>
<
span
className=
{
styles
.
value
}
>
{
activeData
.
storageNo
}
</
span
>
</
div
>
<
div
>
<
span
className=
{
styles
.
title
}
>
入库时间
</
span
>
<
span
className=
{
styles
.
value
}
>
{
activeData
.
storageTime
&&
moment
(
activeData
.
storageTime
).
format
(
format
)
}
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
className=
{
styles
.
status
}
>
<
div
>
<
span
className=
{
styles
.
title
}
>
内部状态
</
span
>
<
span
className=
{
styles
.
value
}
>
{
INNER_TEXT
[
`${activeData.deliverStatus}_${activeData.receiveStatus}_${activeData.receiptStatus}`
]
}
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
2
}
className=
{
styles
.
action
}
>
<
Popconfirm
title=
{
`是否${TEXT_MAP[`
$
{
currentPage
}
_$
{
activeData
[
currentPage
]}
`]}`
}
onConfirm=
{
()
=>
confirm
(
{
produceNoticeOrderId
:
activeData
.
produceNoticeOrderId
,
pnoReceiveDeliverDetailId
:
activeData
.
id
},
`${currentPage}_${activeData[currentPage]}`
)
}
okText=
"是"
cancelText=
"否"
>
<
a
href=
"#"
>
{
TEXT_MAP
[
`${currentPage}_${activeData[currentPage]}`
]
}
</
a
>
</
Popconfirm
>
</
Col
>
</
Row
>
</
div
>
<
Table
dataSource=
{
activeData
.
pnoReceiveDeliverDetailProductBOList
}
rowKey=
{
"orderNo"
}
columns=
{
columns
}
/>
</
div
>
)
}
export
default
DetailTab
;
\ No newline at end of file
src/pages/handling/components/ReceiptDeliveryDetails/ReceiptDeliveryDetailsCard.tsx
0 → 100644
View file @
21aae1ff
import
React
from
'react'
;
import
{
Card
,
Tabs
}
from
'antd'
;
const
TabPane
=
Tabs
.
TabPane
interface
Iprops
{};
const
ReceiptDeliveryDetailsCard
:
React
.
FC
<
Iprops
>
=
(
props
)
=>
{
const
newChildren
=
React
.
Children
.
map
(
props
.
children
,
(
child
:
any
)
=>
{
if
(
child
&&
child
.
type
)
{
return
(
<
TabPane
tab=
{
child
.
props
.
tab
}
>
{
child
}
</
TabPane
>
)
}
else
{
return
child
}
})
return
(
<
Card
bodyStyle=
{
{
padding
:
'10px 24px 24px 24px'
}
}
>
<
Tabs
>
{
newChildren
}
</
Tabs
>
</
Card
>
)
}
export
default
ReceiptDeliveryDetailsCard
\ No newline at end of file
src/pages/handling/components/ReceiptDeliveryDetails/StatisticsTab.tsx
0 → 100644
View file @
21aae1ff
import
React
from
'react'
;
import
{
Table
}
from
'antd'
;
import
{
ColumnsType
}
from
'antd/es/table'
;
interface
Iprops
{
tab
:
string
,
columns
:
ColumnsType
<
any
>
,
dataSource
:
any
[],
}
const
StatisticsTab
:
React
.
FC
<
Iprops
>
=
(
props
)
=>
{
const
{
columns
,
dataSource
}
=
props
;
return
(
<
Table
rowKey=
{
"id"
}
columns=
{
columns
}
dataSource=
{
dataSource
}
/>
)
}
export
default
StatisticsTab
\ No newline at end of file
src/pages/handling/components/ReceiptDeliveryDetails/index.tsx
View file @
21aae1ff
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
Card
,
Tabs
,
Table
,
Radio
,
Row
,
Col
,
Popconfirm
}
from
'antd'
;
import
styles
from
'./index.less'
;
import
moment
from
'moment'
;
import
{
DELIEVER_AND_RECEIVE_INNER_STATUS
,
DELIEVER_AND_RECEIVE_INNER_STATUS_TEXT
,
DELIEVER_AND_RECEIVE_INNER_BTN_TEXT
}
from
'../../common'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
FlagFilled
}
from
'@ant-design/icons'
;
const
TabPane
=
Tabs
.
TabPane
;
const
format
=
'YYYY-MM-DD HH:mm:ss'
;
const
TEXT_MAP
=
{
"deliverStatus_1"
:
1
,
"deliverStatus_2"
:
2
,
"receiveStatus_1"
:
3
,
"receiveStatus_2"
:
4
,
"receiptStatus_1"
:
5
,
"receiptStatus_2"
:
6
}
const
ReceiptDeliveryDetails
=
(
props
)
=>
{
const
{
statisticsColumn
,
statisticsData
,
pnoReceiveDeliverDetailDOList
=
[],
pnoReceiveDeliverDetailColumns
,
outerStatus
}
=
props
;
const
[
activeBatch
,
setActiveBatch
]
=
useState
(
0
);
const
[
activeData
,
setActiveData
]
=
useState
<
any
>
({});
const
[
currentTarget
,
setCurrentTarget
]
=
useState
(
"deliverStatus"
);
useEffect
(()
=>
{
if
(
pnoReceiveDeliverDetailDOList
&&
pnoReceiveDeliverDetailDOList
.
length
>
0
)
{
setActiveData
(
pnoReceiveDeliverDetailDOList
[
0
])
}
},
[
pnoReceiveDeliverDetailDOList
])
const
handleOnChange
=
(
e
)
=>
{
setActiveBatch
(
e
.
target
.
value
)
setActiveData
(
pnoReceiveDeliverDetailDOList
[
e
.
target
.
value
])
}
const
confirm
=
(
params
,
type
)
=>
{
props
.
handleConfirm
(
params
,
type
);
}
useEffect
(()
=>
{
// 小于等于5 取deliverStatus, 小于等于7, 取,receiveStatus, 大于7取receiptStatus
const
range
=
[
5
,
7
,
8
];
const
value
=
[
"deliverStatus"
,
"receiveStatus"
,
"receiptStatus"
];
let
flag
=
false
;
for
(
let
i
=
0
;
i
<
range
.
length
;
i
++
)
{
if
(
outerStatus
==
range
[
i
])
{
setCurrentTarget
(
value
[
i
]);
flag
=
true
;
break
;
}
}
// if(!flag) {
// setCurrentTarget("receiptStatus");
// }
},
[
outerStatus
])
return
(
<
Card
bodyStyle=
{
{
padding
:
'10px 24px 24px 24px'
}
}
>
<
Tabs
>
<
TabPane
tab=
"收发货统计"
key=
"1"
>
<
Table
rowKey=
{
"id"
}
columns=
{
statisticsColumn
}
dataSource=
{
statisticsData
}
/>
</
TabPane
>
<
TabPane
tab=
"收发货明细"
key=
"2"
>
<
div
>
<
Radio
.
Group
value=
{
activeBatch
}
onChange=
{
handleOnChange
}
>
{
pnoReceiveDeliverDetailDOList
&&
pnoReceiveDeliverDetailDOList
.
map
((
item
,
key
)
=>
{
return
(
<
Radio
.
Button
key=
{
item
.
deliveryBatch
}
value=
{
key
}
>
第
{
item
.
deliveryBatch
}
批次
</
Radio
.
Button
>
)
})
}
</
Radio
.
Group
>
</
div
>
<
div
>
<
div
className=
{
styles
.
header
}
>
<
Row
>
<
Col
span=
{
6
}
>
<
div
className=
{
styles
.
detailItem
}
>
<
span
className=
{
styles
.
title
}
>
发货单号
</
span
>
<
a
className=
{
styles
.
value
}
>
{
activeData
.
deliveryNo
}
</
a
>
</
div
>
<
div
>
<
span
className=
{
styles
.
title
}
>
发货时间
</
span
>
<
span
className=
{
styles
.
value
}
>
{
activeData
.
deliveryTime
&&
moment
(
activeData
.
deliveryTime
).
format
(
format
)
}
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
6
}
>
<
div
className=
{
styles
.
detailItem
}
>
<
span
className=
{
styles
.
title
}
>
物流单号
</
span
>
<
a
className=
{
styles
.
value
}
>
{
activeData
.
logisticsOrderNo
}
</
a
>
</
div
>
<
div
>
<
span
className=
{
styles
.
title
}
>
物流公司
</
span
>
<
span
className=
{
styles
.
value
}
>
{
activeData
.
logisticsCompany
}
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
6
}
>
<
div
className=
{
styles
.
detailItem
}
>
<
span
className=
{
styles
.
title
}
>
入库单号
</
span
>
<
span
className=
{
styles
.
value
}
>
{
activeData
.
storageNo
}
</
span
>
</
div
>
<
div
>
<
span
className=
{
styles
.
title
}
>
入库时间
</
span
>
<
span
className=
{
styles
.
value
}
>
{
activeData
.
storageTime
&&
moment
(
activeData
.
storageTime
).
format
(
format
)
}
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
className=
{
styles
.
status
}
>
<
div
>
<
span
className=
{
styles
.
title
}
>
内部状态
</
span
>
<
span
className=
{
styles
.
value
}
>
{
DELIEVER_AND_RECEIVE_INNER_STATUS_TEXT
[
TEXT_MAP
[
`${currentTarget}_${activeData[currentTarget]}`
]]
}
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
2
}
className=
{
styles
.
action
}
>
<
Popconfirm
title=
{
`是否${DELIEVER_AND_RECEIVE_INNER_BTN_TEXT[TEXT_MAP[`
$
{
currentTarget
}
_$
{
activeData
[
currentTarget
]}
`]]}`
}
onConfirm=
{
()
=>
confirm
(
{
produceNoticeOrderId
:
activeData
.
produceNoticeOrderId
,
pnoReceiveDeliverDetailId
:
activeData
.
id
},
`${outerStatus}_${activeData[currentTarget]}`
)
}
okText=
"是"
cancelText=
"否"
>
<
a
href=
"#"
>
{
DELIEVER_AND_RECEIVE_INNER_BTN_TEXT
[
TEXT_MAP
[
`${outerStatus}_${activeData[currentTarget]}`
]]
}
</
a
>
</
Popconfirm
>
</
Col
>
</
Row
>
</
div
>
<
Table
dataSource=
{
activeData
.
pnoReceiveDeliverDetailProductBOList
}
rowKey=
{
"orderNo"
}
columns=
{
pnoReceiveDeliverDetailColumns
}
/>
</
div
>
</
TabPane
>
</
Tabs
>
</
Card
>
)
}
export
default
ReceiptDeliveryDetails
;
\ No newline at end of file
import
ReceiptDeliveryDetailsCard
from
'./ReceiptDeliveryDetailsCard'
;
import
DetailTab
from
'./DetailTab'
;
import
StatisticsTab
from
'./StatisticsTab'
;
export
{
ReceiptDeliveryDetailsCard
,
DetailTab
,
StatisticsTab
}
\ No newline at end of file
src/pages/home/components/Centers/AfterSoldCenter.tsx
View file @
21aae1ff
...
...
@@ -2,9 +2,10 @@ import React, { useCallback } from 'react';
import
AbilityContainer
from
'./Container'
;
import
{
Row
,
Col
,
Skeleton
}
from
'antd'
;
import
styles
from
'./center.less'
import
create_shop
from
'@/assets/imgs/create_shop.png'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
Link
}
from
'umi'
import
Authorize
from
'../Authorize'
;
import
{
getAuth
}
from
'@/utils/auth'
;
interface
Iprops
{};
...
...
@@ -16,8 +17,12 @@ const KEY_TITLE = {
returnApplyList
:
'售后退货申请'
,
returnHandleList
:
'售后退货处理'
}
const
EXCHANGE_APPLICATION
=
`/memberCenter/afterService/exchangeApplication/exchangeQuery`
const
EXCHANGE_HANDLE
=
'/memberCenter/afterService/exchangeManage/exchangeQuery'
;
const
SettlementAbility
:
React
.
FC
<
Iprops
>
=
()
=>
{
const
auth
=
getAuth
();
const
roleType
=
auth
.
memberRoleType
;
const
request
=
useCallback
(
async
()
=>
{
const
res
=
await
PublicApi
.
getReportMemberHomeGetAfterSaleTally
();
return
res
;
...
...
@@ -28,7 +33,13 @@ const SettlementAbility: React.FC<Iprops> = () => {
title=
"售后中心"
tips=
"轻松完成订单售后在线换货、退货、维修环节"
extra=
{
<
a
>
进入售后中心
</
a
>
<
Authorize
url=
{
roleType
==
1
?
EXCHANGE_HANDLE
:
EXCHANGE_APPLICATION
}
>
<
div
>
<
Link
to=
{
roleType
==
1
?
EXCHANGE_HANDLE
:
EXCHANGE_APPLICATION
}
>
进入交易中心
</
Link
>
</
div
>
</
Authorize
>
}
request=
{
request
}
>
...
...
src/pages/home/components/Centers/LogisticsCenter.tsx
View file @
21aae1ff
...
...
@@ -7,8 +7,11 @@ import logistics_address from '@/assets/imgs/logistics_address.png';
import
logistics_cost
from
'@/assets/imgs/logistics_cost.png'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
Skeleton
,
Row
,
Col
}
from
'antd'
;
import
{
Link
}
from
'umi'
;
import
Authorize
from
'../Authorize'
;
interface
Iprops
{};
const
url
=
'/memberCenter/logisticsAbility/logisticsResult/orderResultSearchList'
;
const
LogisticsCenter
:
React
.
FC
<
Iprops
>
=
()
=>
{
const
request
=
useCallback
(
async
()
=>
{
...
...
@@ -43,7 +46,13 @@ const LogisticsCenter: React.FC<Iprops> = () => {
title=
"物流中心"
tips=
{
"快速完成物流派单、接单、报价、物流信息对接"
}
extra=
{
<
a
>
进入物流中心
</
a
>
<
Authorize
url=
{
url
}
>
<
div
>
<
Link
to=
{
url
}
>
进入物流中心
</
Link
>
</
div
>
</
Authorize
>
}
request=
{
request
}
>
...
...
src/pages/home/components/Centers/ProcessCenter.tsx
View file @
21aae1ff
...
...
@@ -4,8 +4,11 @@ import { Row, Col,Skeleton } from 'antd';
import
styles
from
'./center.less'
;
import
{
PublicApi
}
from
'@/services/api'
import
{
Link
}
from
'umi'
import
Authorize
from
'../Authorize'
;
interface
Iprops
{};
const
url
=
'/memberCenter/handling/assign/query'
const
KEY_TITLE
=
{
processList
:
'指派生产通知单'
,
supplierList
:
'生产通知单处理'
...
...
@@ -22,7 +25,13 @@ const ProcessCenter: React.FC<Iprops> = () => {
title=
"加工中心"
tips=
"提供外发生产、加工、装配全流程环节管控"
extra=
{
<
a
>
进入加工中心
</
a
>
<
Authorize
url=
{
url
}
>
<
div
>
<
Link
to=
{
url
}
>
加工中心
</
Link
>
</
div
>
</
Authorize
>
}
request=
{
request
}
>
...
...
src/pages/home/components/Centers/ProductCenter.tsx
View file @
21aae1ff
...
...
@@ -4,9 +4,14 @@ import { Row, Col, Space, Skeleton } from 'antd';
import
styles
from
'./center.less'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
Link
}
from
'umi'
;
import
Authorize
from
'../Authorize'
;
interface
Iprops
{};
const
ADD_REPOSITORIES
=
'/memberCenter/commodityAbility/repositories/add'
;
const
ADD_BRAND
=
"/memberCenter/commodityAbility/trademark/add"
;
const
ADD_PRODUCT
=
'/memberCenter/commodityAbility/commodity/products/add'
;
const
ProductCenter
:
React
.
FC
<
Iprops
>
=
()
=>
{
const
request
=
useCallback
(
async
()
=>
{
const
res
=
await
PublicApi
.
getReportMemberHomeGetCommodityTally
();
...
...
@@ -17,10 +22,29 @@ const ProductCenter: React.FC<Iprops> = () => {
tips=
"快速完成品牌、商品创建、发布、提供灵活的商品库存管理"
title=
"商品中心"
extra=
{
<
Space
>
<
a
>
设置库存
</
a
>
<
a
>
创建品牌
</
a
>
<
a
>
创建商品
</
a
>
<
Authorize
url=
{
ADD_REPOSITORIES
}
>
<
div
>
<
Link
to=
{
ADD_REPOSITORIES
}
>
设置库存
</
Link
>
</
div
>
</
Authorize
>
<
Authorize
url=
{
ADD_BRAND
}
>
<
div
>
<
Link
to=
{
ADD_BRAND
}
>
创建品牌
</
Link
>
</
div
>
</
Authorize
>
<
Authorize
url=
{
ADD_PRODUCT
}
>
<
div
>
<
Link
to=
{
ADD_PRODUCT
}
>
创建商品
</
Link
>
</
div
>
</
Authorize
>
</
Space
>
}
request=
{
request
}
...
...
src/pages/home/components/Centers/TradeCenter.tsx
View file @
21aae1ff
...
...
@@ -4,6 +4,8 @@ import { Row, Col, Skeleton } from 'antd';
import
styles
from
'./center.less'
import
{
PublicApi
}
from
'@/services/api'
;
import
{
Link
}
from
'umi'
import
Authorize
from
'../Authorize'
;
import
{
getAuth
}
from
'@/utils/auth'
;
interface
Iprops
{};
const
KEY_TITLE
=
{
'commodityInquiryList'
:
'商品询价'
,
...
...
@@ -16,7 +18,12 @@ const KEY_TITLE = {
'purchaseOrderList'
:
'采购订单'
}
const
PURCHASE_URL
=
'/memberCenter/tranactionAbility/purchaseOrder/orderList'
;
const
SALE_URL
=
'/memberCenter/tranactionAbility/saleOrder/orderList'
;
const
TradeCenter
:
React
.
FC
<
Iprops
>
=
()
=>
{
const
auth
=
getAuth
();
const
roleType
=
auth
.
memberRoleType
;
const
request
=
useCallback
(
async
()
=>
{
const
res
=
await
PublicApi
.
getReportMemberHomeGetTradeTally
();
return
res
;
...
...
@@ -26,9 +33,14 @@ const TradeCenter: React.FC<Iprops> = () => {
title=
"交易中心"
tips=
"提供在线发布需求,在线询价、在线报价、订单交易、签订电子合同等功能"
extra=
{
<
div
>
<
a
>
进入交易中心
</
a
>
</
div
>
<
Authorize
url=
{
roleType
==
1
?
SALE_URL
:
PURCHASE_URL
}
>
<
div
>
<
Link
to=
{
roleType
==
1
?
SALE_URL
:
PURCHASE_URL
}
>
进入交易中心
</
Link
>
</
div
>
</
Authorize
>
}
request=
{
request
}
>
...
...
src/pages/home/components/UserCenter/index.tsx
View file @
21aae1ff
...
...
@@ -46,8 +46,13 @@ const UserCenter: React.FC<Iprops> = () => {
<
div
className=
{
styles
.
content
}
>
<
Row
className=
{
styles
.
row
}
>
<
Col
span=
{
11
}
className=
{
styles
.
user
}
>
<
div
className=
{
styles
.
pic
}
style=
{
!
userAuth
.
logo
?
{
display
:
'none'
}
:
{}
}
>
<
img
src=
{
userAuth
.
logo
}
/>
<
div
className=
{
styles
.
pic
}
>
{
userAuth
.
logo
?
<
img
src=
{
userAuth
.
logo
||
''
}
/>
:
<
div
></
div
>
}
</
div
>
<
div
className=
{
styles
.
wrapper
}
>
<
div
className=
{
styles
.
company
}
>
...
...
src/pages/home/index.tsx
View file @
21aae1ff
...
...
@@ -35,7 +35,6 @@ const Home: React.FC<{}> = () => {
PublicApi
.
getReportMemberHomeGetDataLayout
()
.
then
(({
data
,
code
})
=>
{
if
(
code
===
1000
)
{
console
.
log
(
data
);
setLayout
(
data
)
}
}).
finally
(()
=>
{
...
...
@@ -55,7 +54,7 @@ const Home: React.FC<{}> = () => {
return
(
<
PageHeaderWrapper
>
<>
<
div
className=
{
styles
.
userGuaid
}
style=
{
{
display
:
visible
?
'
block
'
:
'none'
}
}
>
<
div
className=
{
styles
.
userGuaid
}
style=
{
{
display
:
visible
?
'
none
'
:
'none'
}
}
>
<
UseGuaid
/>
</
div
>
<
div
className=
{
styles
.
main
}
>
...
...
src/pages/member/memberUpgradeRule/index.tsx
View file @
21aae1ff
...
...
@@ -47,15 +47,20 @@ const MemberUpgradeRule: React.FC<[]> = () => {
align
:
'center'
,
},
{
title
:
'
项目
'
,
title
:
'
升级规则
'
,
dataIndex
:
'ruleName'
,
align
:
'center'
,
render
:
(
text
:
any
,
record
:
any
)
=>
<
span
>
{
text
}
</
span
>,
},
{
title
:
'
项目
说明'
,
title
:
'
升级规则
说明'
,
dataIndex
:
'remark'
,
align
:
'center'
,
ellipsis
:
true
,
},
{
title
:
'适用会员等级类型'
,
dataIndex
:
'levelTypeName'
,
align
:
'center'
,
},
{
title
:
'可获取的分值'
,
...
...
src/pages/transaction/enquirySubmit/addDemandOrder/components/Modal/modalAnchor.tsx
0 → 100644
View file @
21aae1ff
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
UPLOAD_TYPE
}
from
'@/constants'
import
{
Modal
,
Anchor
,
Layout
,
Menu
,
Form
,
Divider
,
Input
,
Button
,
Upload
,
Select
,
AutoComplete
,
Cascader
,
Spin
,
InputNumber
}
from
'antd'
;
import
style
from
'../index.less'
;
import
{
LinkOutlined
,
DeleteOutlined
,
UploadOutlined
}
from
'@ant-design/icons'
;
import
{
PublicApi
}
from
'@/services/api'
;
const
layout
:
any
=
{
colon
:
false
,
labelCol
:
{
style
:
{
width
:
'110px'
}
},
labelAlign
:
"left"
};
const
{
Sider
,
Content
}
=
Layout
;
const
{
Link
}
=
Anchor
;
interface
anchorParams
{
visible
?:
boolean
,
onOk
?:
Function
,
onCancel
?:
Function
,
fetchdata
?:
any
,
isEdit
?:
boolean
}
const
{
Option
}
=
Select
;
const
ModalAnchor
:
React
.
FC
<
anchorParams
>
=
(
props
)
=>
{
const
{
visible
,
onOk
,
onCancel
,
fetchdata
,
isEdit
}
=
props
;
const
[
form
]
=
Form
.
useForm
();
const
[
loading
,
setloading
]
=
useState
(
false
);
const
[
files
,
setFiles
]
=
useState
([]);
const
[
categoryById
,
setCategoryById
]
=
useState
<
any
>
({});
const
[
selected
,
setselected
]
=
useState
<
string
>
(
''
)
const
[
category
,
setcategory
]
=
useState
<
Array
<
any
>>
([]);
/**查询品类树 */
const
searchCategoryTree
=
(
id
:
any
)
=>
{
return
new
Promise
(
resolve
=>
{
PublicApi
.
getProductPlatformGetCategoryTree
({
rootNodeId
:
id
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
resolve
(
res
.
data
)
}
})
}).
then
((
data
:
any
)
=>
{
setcategory
(
data
)
})
}
/**查询品类信息--包括品类、属性、属性值 */
const
getCategoryById
=
(
val
:
any
,
selectedOptions
?:
any
)
=>
{
const
id
=
val
[
val
.
length
-
1
];
if
(
!
isEdit
&&
selectedOptions
.
length
>
0
)
{
const
name
=
selectedOptions
[
selectedOptions
.
length
-
1
];
setselected
(
name
.
title
)
}
PublicApi
.
getProductPlatformGetCategoryById
({
id
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
setCategoryById
(
res
.
data
)
}
})
}
useEffect
(()
=>
{
form
.
resetFields
();
searchCategoryTree
(
'0'
)
if
(
Object
.
keys
(
fetchdata
).
length
>
0
&&
isEdit
)
{
getCategoryById
(
fetchdata
.
ids
)
const
productAttributeJson
=
JSON
.
parse
(
fetchdata
.
productAttributeJson
);
let
obj
:
any
=
{}
let
newObj
:
any
=
{}
productAttributeJson
.
forEach
((
item
:
any
)
=>
{
obj
=
{...
obj
,
...
item
}
for
(
let
key
in
obj
)
{
newObj
=
{...
newObj
,
...{
[
`
${
key
}
__`
]:
obj
[
key
].
join
(
','
)
}}
}
})
form
.
setFieldsValue
({
model
:
fetchdata
.
model
,
brand
:
fetchdata
.
brand
,
unit
:
fetchdata
.
unit
,
purchaseCount
:
fetchdata
.
purchaseCount
,
name
:
fetchdata
.
name
,
category
:
fetchdata
.
ids
,
goodsNo
:
fetchdata
.
goodsNo
,
specialExplain
:
fetchdata
.
specialExplain
,
...
newObj
})
}
},
[
visible
])
const
onSubmit
=
(
value
:
any
)
=>
{
form
.
validateFields
().
then
(
res
=>
{
const
productAttributeJson
:
Array
<
any
>
=
[];
for
(
let
key
in
res
)
{
if
(
key
.
split
(
'__'
).
length
>
1
)
{
const
name
=
key
.
replace
(
/__/g
,
''
)
productAttributeJson
.
push
({
[
name
]:
[
res
[
key
]]
})
}
}
const
data
=
{
model
:
res
.
model
,
brand
:
res
.
brand
,
productAttributeJson
:
JSON
.
stringify
(
productAttributeJson
),
unit
:
res
.
unit
,
purchaseCount
:
res
.
purchaseCount
,
name
:
res
.
name
,
category
:
selected
,
goodsNo
:
res
.
goodsNo
,
ids
:
res
.
category
,
urls
:
files
,
specialExplain
:
res
.
specialExplain
,
}
onOk
(
data
)
form
.
resetFields
();
setCategoryById
([])
}).
catch
(
error
=>
{
console
.
log
(
error
)
})
}
return
(
<
Modal
title=
'通过平台属性添加'
width=
'800px'
maskClosable=
{
false
}
destroyOnClose
wrapClassName=
{
style
.
modal_wrap_className
}
bodyStyle=
{
{
padding
:
'0px'
}
}
visible=
{
visible
}
onCancel=
{
()
=>
onCancel
()
}
onOk=
{
onSubmit
}
>
<
Layout
>
<
Sider
width=
{
159
}
className=
{
style
.
site_layout_background
}
>
<
Anchor
bounds=
{
0
}
targetOffset=
{
120
}
affix=
{
false
}
>
<
Menu
mode=
'inline'
defaultSelectedKeys=
{
[
'1'
]
}
>
<
Menu
.
Item
key=
"1"
><
Link
href=
'#basic_info'
title=
'基本信息'
/></
Menu
.
Item
>
{
Object
.
keys
(
categoryById
).
length
>
0
&&
<
Menu
.
Item
key=
"2"
><
Link
href=
'#category'
title=
{
categoryById
.
name
}
/></
Menu
.
Item
>
}
<
Menu
.
Item
key=
"3"
><
Link
href=
'#other_demand'
title=
'其他要求'
/></
Menu
.
Item
>
<
Menu
.
Item
key=
"4"
><
Link
href=
'#procured_amount'
title=
'采购数量'
/></
Menu
.
Item
>
</
Menu
>
</
Anchor
>
</
Sider
>
<
Content
className=
{
style
.
site_content_style
}
>
<
Form
form=
{
form
}
{
...
layout
}
>
<
div
id=
'basic_info'
>
<
div
className=
{
style
.
affix_title
}
><
Divider
type=
"vertical"
className=
{
style
.
divider_style
}
/>
基本信息
</
div
>
<
Form
.
Item
label=
'商品品类'
name=
'category'
rules=
{
[{
required
:
true
,
message
:
'请选择商品品类'
}]
}
>
<
Cascader
options=
{
category
}
fieldNames=
{
{
label
:
'title'
,
value
:
'id'
,
children
:
'children'
}
}
placeholder=
"请选择品类"
notFoundContent=
{
<
Spin
size=
"small"
/>
}
onChange=
{
getCategoryById
}
/>
</
Form
.
Item
>
<
Form
.
Item
label=
'商品编号'
name=
'goodsNo'
rules=
{
[{
required
:
true
,
message
:
'请输入商品编号'
}]
}
><
Input
/></
Form
.
Item
>
<
Form
.
Item
label=
'商品名称'
name=
'name'
rules=
{
[{
required
:
true
,
message
:
'请输入商品名称'
}]
}
><
Input
/></
Form
.
Item
>
<
Form
.
Item
label=
'规格型号'
name=
'model'
rules=
{
[{
required
:
true
,
message
:
'请输入规格型号'
}]
}
><
Input
/></
Form
.
Item
>
<
Form
.
Item
label=
'规格品牌'
name=
'brand'
><
Input
/></
Form
.
Item
>
</
div
>
{
Object
.
keys
(
categoryById
).
length
>
0
&&
<
div
id=
'category'
>
<
div
className=
{
style
.
affix_title
}
><
Divider
type=
"vertical"
className=
{
style
.
divider_style
}
/>
{
categoryById
.
name
}
</
div
>
{
categoryById
.
attributeList
.
length
>
0
&&
categoryById
.
attributeList
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
Form
.
Item
label=
{
item
.
groupName
}
name=
{
`${item.groupName}__`
}
key=
{
item
.
groupId
}
rules=
{
[{
required
:
item
.
isEmpty
,
message
:
`请选择${item.groupName}`
}]
}
>
<
AutoComplete
>
{
item
.
attributeValueList
.
map
((
items
:
any
)
=>
(
<
AutoComplete
.
Option
value=
{
items
.
value
}
key=
{
items
.
id
}
>
{
items
.
value
}
</
AutoComplete
.
Option
>
))
}
</
AutoComplete
>
</
Form
.
Item
>
))
}
</
div
>
}
<
div
id=
'other_demand'
>
<
div
className=
{
style
.
affix_title
}
><
Divider
type=
"vertical"
className=
{
style
.
divider_style
}
/>
其他要求
</
div
>
<
Form
.
Item
label=
'特殊说明'
name=
'specialExplain'
><
Input
.
TextArea
rows=
{
4
}
/></
Form
.
Item
>
<
Form
.
Item
label=
'附件'
name=
'upload'
>
<
div
className=
{
style
.
upload_data
}
>
{
files
.
length
>
0
&&
files
.
map
((
v
,
index
)
=>
(
<
div
key=
{
index
}
className=
{
style
.
upload_item
}
>
<
div
className=
{
style
.
upload_left
}
>
<
LinkOutlined
/>
<
span
>
{
v
.
name
}
</
span
>
</
div
>
<
div
className=
{
style
.
upload_right
}
>
<
DeleteOutlined
/>
</
div
>
</
div
>
))
}
</
div
>
<
Upload
action=
"/api/file/file/upload"
data=
{
{
fileType
:
UPLOAD_TYPE
}
}
showUploadList=
{
false
}
accept=
'.doc,.docx,.pdf,.ppt,.pptx,.xls,.xlsx'
>
<
Button
loading=
{
loading
}
icon=
{
<
UploadOutlined
/>
}
>
上传文件
</
Button
>
<
div
style=
{
{
marginTop
:
'8px'
}
}
>
一次上传一个文件,每个附件大小不能超过 20M
</
div
>
</
Upload
>
</
Form
.
Item
>
</
div
>
<
div
id=
'procured_amount'
>
<
div
className=
{
style
.
affix_title
}
><
Divider
type=
"vertical"
className=
{
style
.
divider_style
}
/>
采购数量
</
div
>
<
Form
.
Item
label=
'单位'
name=
'unit'
rules=
{
[{
required
:
true
,
message
:
'请选择单位'
}]
}
><
Input
/></
Form
.
Item
>
<
Form
.
Item
label=
'采购数量'
name=
'purchaseCount'
rules=
{
[{
required
:
true
,
message
:
'请输入采购数量'
}]
}
><
InputNumber
min=
{
1
}
style=
{
{
width
:
'100%'
}
}
/></
Form
.
Item
>
</
div
>
</
Form
>
</
Content
>
</
Layout
>
</
Modal
>
)
}
export
default
ModalAnchor
;
\ No newline at end of file
src/pages/transaction/enquirySubmit/addDemandOrder/components/Modal/modalGoods.tsx
0 → 100644
View file @
21aae1ff
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
{
UPLOAD_TYPE
}
from
'@/constants'
import
{
Modal
,
Anchor
,
Layout
,
Menu
,
Form
,
Divider
,
Input
,
Button
,
Upload
,
Cascader
,
Spin
,
InputNumber
}
from
'antd'
;
import
style
from
'../index.less'
;
import
{
LinkOutlined
,
DeleteOutlined
,
UploadOutlined
}
from
'@ant-design/icons'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
ModalTable
from
'@/components/ModalTable'
;
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
{
useRowSelectionTable
}
from
'@/hooks/useRowSelectionTable'
;
const
layout
:
any
=
{
colon
:
false
,
labelCol
:
{
style
:
{
width
:
'110px'
}
},
labelAlign
:
"left"
};
const
{
Sider
,
Content
}
=
Layout
;
const
{
Link
}
=
Anchor
;
interface
goodsParams
{
visible
?:
boolean
,
onOk
?:
Function
,
onCancel
?:
Function
,
fetchdata
?:
any
,
isEdit
?:
boolean
}
const
ModalGoods
:
React
.
FC
<
goodsParams
>
=
(
props
)
=>
{
const
[
form
]
=
Form
.
useForm
();
const
{
visible
,
onOk
,
onCancel
,
fetchdata
,
isEdit
}
=
props
;
const
[
loading
,
setloading
]
=
useState
(
false
);
const
[
files
,
setFiles
]
=
useState
([]);
const
[
category
,
setcategory
]
=
useState
<
Array
<
any
>>
([]);
const
[
rowSelection
,
RowCtl
]
=
useRowSelectionTable
({
customKey
:
'id'
,
type
:
'radio'
});
const
[
visibleChannelGoods
,
setvisibleChannelGoods
]
=
useState
<
boolean
>
(
false
);
const
[
goods
,
setGoods
]
=
useState
<
any
>
({})
/**查询品类树 */
const
searchCategoryTree
=
(
id
:
any
)
=>
{
return
new
Promise
(
resolve
=>
{
PublicApi
.
getProductPlatformGetCategoryTree
({
rootNodeId
:
id
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
resolve
(
res
.
data
)
}
})
}).
then
((
data
:
any
)
=>
{
setcategory
(
data
)
})
}
useEffect
(()
=>
{
form
.
resetFields
();
RowCtl
.
setSelectRow
([])
RowCtl
.
setSelectedRowKeys
([])
searchCategoryTree
(
'0'
);
if
(
Object
.
keys
(
fetchdata
).
length
>
0
&&
isEdit
)
{
const
params
:
any
=
{
current
:
'1'
,
pageSize
:
'10'
,
code
:
fetchdata
.
goodsNo
}
PublicApi
.
getProductGoodsGetGoodsList
({
...
params
}).
then
(
res
=>
{
const
{
data
}
=
res
RowCtl
.
setSelectRow
(
data
.
data
)
RowCtl
.
setSelectedRowKeys
([
data
.
data
[
0
].
id
])
})
form
.
setFieldsValue
({
model
:
fetchdata
.
model
,
brand
:
fetchdata
.
brand
,
unit
:
fetchdata
.
unit
,
purchaseCount
:
fetchdata
.
purchaseCount
,
name
:
fetchdata
.
name
,
category
:
fetchdata
.
category
,
goodsNo
:
fetchdata
.
goodsNo
,
})
}
},
[
visible
])
/**提交表单 */
const
onSubmit
=
(
value
:
any
)
=>
{
form
.
validateFields
().
then
(
res
=>
{
console
.
log
(
rowSelection
,
RowCtl
,
10086
)
const
data
=
{
...
res
,
goodsId
:
goods
.
id
,
goodsName
:
goods
.
name
}
onOk
(
res
,
goods
)
}).
catch
(
error
=>
{
console
.
log
(
error
)
})
}
/**货品表头 */
const
columns
:
ColumnType
<
any
>
[]
=
[
{
title
:
'货号'
,
key
:
'code'
,
dataIndex
:
'code'
},
{
title
:
'货品名称'
,
key
:
'name'
,
dataIndex
:
'name'
},
{
title
:
'规格型号'
,
key
:
'type'
,
dataIndex
:
'type'
},
{
title
:
'品类'
,
key
:
'customerCategory'
,
dataIndex
:
'customerCategory'
,
render
:
(
text
:
any
)
=>
<
span
>
{
text
.
name
}
</
span
>
},
{
title
:
'品牌'
,
key
:
'brand'
,
dataIndex
:
'brand'
,
render
:
(
text
:
any
)
=>
<
span
>
{
text
.
name
}
</
span
>
},
{
title
:
'单位'
,
key
:
'unitName'
,
dataIndex
:
'unitName'
},
]
/** 获取货品 */
const
fetchGoodsData
=
(
params
:
any
)
=>
{
return
new
Promise
(
resolve
=>
{
PublicApi
.
getProductGoodsGetGoodsList
(
params
).
then
(
res
=>
{
const
{
data
}
=
res
resolve
(
data
)
})
})
}
/** 选择货品 */
const
handleConfirm
=
()
=>
{
setvisibleChannelGoods
(
false
)
const
data
=
RowCtl
.
selectRow
[
0
]
const
fullId
=
data
.
customerCategory
.
fullId
const
ids
=
fullId
.
replace
(
/
\b(
0+
)
/gi
,
''
).
split
(
'.'
);
setGoods
(
data
)
form
.
setFieldsValue
({
goodsNo
:
data
.
code
,
name
:
data
.
name
,
model
:
data
.
type
,
category
:
ids
.
join
(
','
).
split
(
','
),
brand
:
data
.
brand
.
name
,
unit
:
data
.
unitName
,
})
}
return
(
<>
<
Modal
title=
'通过平台属性添加'
width=
'800px'
wrapClassName=
{
style
.
modal_wrap_className
}
bodyStyle=
{
{
padding
:
'0px'
}
}
visible=
{
visible
}
onCancel=
{
()
=>
onCancel
()
}
onOk=
{
onSubmit
}
>
<
Layout
>
<
Sider
width=
{
159
}
className=
{
style
.
site_layout_background
}
>
<
Anchor
bounds=
{
0
}
targetOffset=
{
120
}
affix=
{
false
}
>
<
Menu
mode=
'inline'
defaultSelectedKeys=
{
[
'1'
]
}
>
<
Menu
.
Item
key=
"1"
><
Link
href=
'#basic_info'
title=
'基本信息'
/></
Menu
.
Item
>
<
Menu
.
Item
key=
"2"
><
Link
href=
'#procured_amount'
title=
'采购数量'
/></
Menu
.
Item
>
<
Menu
.
Item
key=
"3"
><
Link
href=
'#other_demand'
title=
'附件'
/></
Menu
.
Item
>
</
Menu
>
</
Anchor
>
</
Sider
>
<
Content
className=
{
style
.
site_content_style
}
>
<
Form
form=
{
form
}
{
...
layout
}
>
<
div
id=
'basic_info'
>
<
div
className=
{
style
.
affix_title
}
><
Divider
type=
"vertical"
className=
{
style
.
divider_style
}
/>
基本信息
</
div
>
<
Form
.
Item
label=
'货号'
name=
'goodsNo'
rules=
{
[{
required
:
true
,
message
:
'请输入商品编号'
}]
}
><
Input
.
Search
enterButton=
{
<><
LinkOutlined
/>
选择
</>
}
onSearch=
{
()
=>
setvisibleChannelGoods
(
true
)
}
/></
Form
.
Item
>
<
Form
.
Item
label=
'货品名称'
name=
'name'
rules=
{
[{
required
:
true
,
message
:
'请输入货品名称'
}]
}
><
Input
/></
Form
.
Item
>
<
Form
.
Item
label=
'规格型号'
name=
'model'
rules=
{
[{
required
:
true
,
message
:
'请输入规格型号'
}]
}
><
Input
/></
Form
.
Item
>
<
Form
.
Item
label=
'商品品类'
name=
'category'
rules=
{
[{
required
:
true
,
message
:
'请选择商品品类'
}]
}
>
<
Cascader
options=
{
category
}
fieldNames=
{
{
label
:
'title'
,
value
:
'id'
,
children
:
'children'
}
}
placeholder=
"请选择品类"
notFoundContent=
{
<
Spin
size=
"small"
/>
}
/>
</
Form
.
Item
>
<
Form
.
Item
label=
'货品品牌'
name=
'brand'
><
Input
/></
Form
.
Item
>
</
div
>
<
div
id=
'procured_amount'
>
<
div
className=
{
style
.
affix_title
}
><
Divider
type=
"vertical"
className=
{
style
.
divider_style
}
/>
采购数量
</
div
>
<
Form
.
Item
label=
'单位'
name=
'unit'
rules=
{
[{
required
:
true
,
message
:
'请选择单位'
}]
}
><
Input
/></
Form
.
Item
>
<
Form
.
Item
label=
'采购数量'
name=
'purchaseCount'
rules=
{
[{
required
:
true
,
message
:
'请输入采购数量'
}]
}
><
InputNumber
min=
{
1
}
style=
{
{
width
:
'100%'
}
}
/></
Form
.
Item
>
</
div
>
<
div
id=
'other_demand'
>
<
div
className=
{
style
.
affix_title
}
><
Divider
type=
"vertical"
className=
{
style
.
divider_style
}
/>
其他要求
</
div
>
<
Form
.
Item
label=
'附件'
name=
'upload'
>
<
div
className=
{
style
.
upload_data
}
>
{
files
.
length
>
0
&&
files
.
map
((
v
,
index
)
=>
(
<
div
key=
{
index
}
className=
{
style
.
upload_item
}
>
<
div
className=
{
style
.
upload_left
}
>
<
LinkOutlined
/>
<
span
>
{
v
.
name
}
</
span
>
</
div
>
<
div
className=
{
style
.
upload_right
}
>
<
DeleteOutlined
/>
</
div
>
</
div
>
))
}
</
div
>
<
Upload
action=
"/api/file/file/upload"
data=
{
{
fileType
:
UPLOAD_TYPE
}
}
showUploadList=
{
false
}
accept=
'.doc,.docx,.pdf,.ppt,.pptx,.xls,.xlsx'
>
<
Button
loading=
{
loading
}
icon=
{
<
UploadOutlined
/>
}
>
上传文件
</
Button
>
<
div
style=
{
{
marginTop
:
'8px'
}
}
>
一次上传一个文件,每个附件大小不能超过 20M
</
div
>
</
Upload
>
</
Form
.
Item
>
</
div
>
</
Form
>
</
Content
>
</
Layout
>
</
Modal
>
<
ModalTable
width=
{
810
}
modalTitle=
'选择货品'
columns=
{
columns
}
rowSelection=
{
rowSelection
}
visible=
{
visibleChannelGoods
}
confirm=
{
handleConfirm
}
cancel=
{
()
=>
setvisibleChannelGoods
(
false
)
}
fetchTableData=
{
params
=>
fetchGoodsData
(
params
)
}
forceRender=
{
true
}
modalType=
'goodsModalSchema'
tableProps=
{
{
rowKey
:
'id'
,
}
}
resetModal=
{
{
destroyOnClose
:
true
}
}
/>
</>
)
}
export
default
ModalGoods
;
\ No newline at end of file
src/pages/transaction/enquirySubmit/addDemandOrder/components/addGoods.tsx
View file @
21aae1ff
import
React
from
'react'
;
import
React
,
{
useState
,
ReactNode
,
useEffect
}
from
'react'
;
import
{
Form
,
Radio
,
Button
,
Table
}
from
'antd'
;
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
ModalAnchor
from
'./Modal/modalAnchor'
;
import
ModalGoods
from
'./Modal/modalGoods'
;
import
{
PlusOutlined
}
from
'@ant-design/icons'
;
import
{
PublicApi
}
from
'@/services/api'
;
const
layout
:
any
=
{
colon
:
false
,
...
...
@@ -8,22 +13,175 @@ const layout: any = {
wrapperCol
:
{
span
:
9
},
labelAlign
:
"left"
};
const
AddGoods
:
React
.
FC
<
{}
>
=
()
=>
{
export
interface
faceSetData
{
set
?:
any
,
get
?:
Function
,
currentRef
:
any
}
const
AddGoods
:
React
.
FC
<
faceSetData
>
=
(
props
)
=>
{
const
{
set
,
get
,
currentRef
}
=
props
const
[
form
]
=
Form
.
useForm
();
const
[
type
,
setType
]
=
useState
<
number
>
(
0
);
const
btnname
:
Array
<
string
>
=
[
'添加商品'
,
'选择货品'
,
'导入货品'
]
const
[
visible
,
setvisible
]
=
useState
<
Array
<
boolean
>>
([
false
,
false
,
false
,
false
]);
const
[
tabledata
,
settabledata
]
=
useState
<
any
>
([])
/**存放编辑的商品数据 */
const
[
editdata
,
seteditdata
]
=
useState
<
any
>
({});
/**是否编辑 */
const
[
isEdit
,
setisEdit
]
=
useState
<
boolean
>
(
false
);
/**编辑的下标 */
const
[
idx
,
setidx
]
=
useState
<
number
>
(
-
1
);
/** 平台属性添加表头 */
const
columns
:
ColumnType
<
Object
>
[]
=
[
{
title
:
'商品编号'
,
key
:
'goodsNo'
,
dataIndex
:
'goodsNo'
,
},
{
title
:
'商品名称'
,
key
:
'name'
,
dataIndex
:
'name'
,
},
{
title
:
'规格型号'
,
key
:
'model'
,
dataIndex
:
'model'
,
},
{
title
:
'品类'
,
key
:
'category'
,
dataIndex
:
'category'
,
},
{
title
:
'品牌'
,
key
:
'brand'
,
dataIndex
:
'brand'
,
},
{
title
:
'采购数量'
,
key
:
'purchaseCount'
,
dataIndex
:
'purchaseCount'
,
},
{
title
:
'操作'
,
key
:
'options'
,
dataIndex
:
'options'
,
render
:
(
text
:
any
,
record
:
any
,
index
:
number
)
=>
<>
<
Button
type=
'link'
onClick=
{
()
=>
handleEdit
(
record
,
index
)
}
>
编辑
</
Button
>
<
Button
type=
'link'
>
删除
</
Button
>
</>
}
]
/** 切换添加方式 */
const
changeRadio
=
(
e
:
any
)
=>
{
const
{
value
}
=
e
.
target
;
setType
(
value
);
settabledata
([]);
}
/** 按钮的文字 */
const
handleText
=
(
num
:
any
)
=>
{
let
text
:
ReactNode
=
null
;
text
=
btnname
[
num
-
1
];
return
text
}
/**
* @name: 操作弹窗
* @arg: 1.通过平台属性添加 2.选择货品添加 3.导入货品生成
* */
const
handleModal
=
(
arg
:
number
)
=>
{
visible
[
arg
]
=
!
visible
[
arg
]
setvisible
([...
visible
])
}
/** 商品添加确定 */
const
handleSubmit
=
(
data
:
any
,
record
?:
any
)
=>
{
if
(
idx
===
-
1
)
{
settabledata
([...
tabledata
,
data
])
}
else
{
const
newdata
=
[...
tabledata
]
newdata
[
idx
]
=
data
settabledata
([...
newdata
]);
setidx
(
-
1
);
}
get
([...
tabledata
,
data
])
handleModal
(
type
);
}
/** 编辑商品 */
const
handleEdit
=
(
record
:
any
,
index
:
number
)
=>
{
setidx
(
index
);
seteditdata
(
record
)
setisEdit
(
true
)
handleModal
(
type
)
}
useEffect
(()
=>
{
currentRef
.
current
=
{
get
:
()
=>
new
Promise
((
resolve
:
any
)
=>
{
form
.
validateFields
().
then
(
res
=>
{
resolve
({
state
:
true
,
name
:
'addGoods'
,
data
:
{
type
,
requisitionFormProducts
:
tabledata
,
}
})
}).
catch
(
error
=>
{
console
.
log
(
error
)
})
})
}
},
[
tabledata
])
useEffect
(()
=>
{
/**编辑回显数据 */
if
(
Object
.
keys
(
set
).
length
>
0
)
{
form
.
setFieldsValue
({
type
:
set
.
type
})
PublicApi
.
getOrderRequisitionFormProductDetails
({
id
:
set
.
id
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
setType
(
set
.
type
)
settabledata
([
res
])
}
})
}
},
[
set
])
return
(
<
Form
{
...
layout
}
form=
{
form
}
>
<
Form
.
Item
label=
'添加方式'
required
>
<
Radio
.
Group
>
<
Form
.
Item
label=
'添加方式'
name=
'type'
rules=
{
[{
required
:
true
,
message
:
'请选择添加方式'
}]
}
>
<
Radio
.
Group
onChange=
{
changeRadio
}
>
<
Radio
value=
{
1
}
>
通过平台属性添加
</
Radio
>
<
Radio
value=
{
2
}
>
选择货品添加
</
Radio
>
<
Radio
value=
{
3
}
>
导入货品生成
</
Radio
>
</
Radio
.
Group
>
</
Form
.
Item
>
<
Form
.
Item
noStyle
>
<
Button
type=
'dashed'
block
>
添加商品
</
Button
>
</
Form
.
Item
>
{
type
>
0
&&
<
Form
.
Item
noStyle
>
<
Button
onClick=
{
()
=>
{
handleModal
(
type
);
setisEdit
(
false
)}
}
type=
'dashed'
block
style=
{
{
marginBottom
:
'24px'
}
}
><
PlusOutlined
/>
{
handleText
(
type
)
}
</
Button
>
<
Table
columns=
{
columns
}
dataSource=
{
tabledata
}
rowKey=
{
(
record
,
index
)
=>
index
}
/>
</
Form
.
Item
>
}
<
ModalAnchor
fetchdata=
{
editdata
}
isEdit=
{
isEdit
}
visible=
{
visible
[
1
]
}
onOk=
{
handleSubmit
}
onCancel=
{
()
=>
handleModal
(
type
)
}
/>
<
ModalGoods
fetchdata=
{
editdata
}
isEdit=
{
isEdit
}
visible=
{
visible
[
2
]
}
onOk=
{
handleSubmit
}
onCancel=
{
()
=>
handleModal
(
type
)
}
/>
</
Form
>
)
}
...
...
src/pages/transaction/enquirySubmit/addDemandOrder/components/basicInfo.tsx
View file @
21aae1ff
...
...
@@ -11,9 +11,16 @@ const layout: any = {
labelAlign
:
"left"
};
export
interface
faceSetData
{
set
?:
any
,
get
?:
Function
,
currentRef
?:
any
}
const
{
Option
}
=
Select
;
const
BasicInfo
:
React
.
FC
<
{}
>
=
(
)
=>
{
const
BasicInfo
:
React
.
FC
<
faceSetData
>
=
(
props
)
=>
{
const
[
form
]
=
Form
.
useForm
();
const
{
set
,
get
,
currentRef
}
=
props
const
[
province
,
setprovince
]
=
useState
<
any
>
([]);
// 省列表
const
[
city
,
setcity
]
=
useState
<
any
>
([]);
// 市列表
const
[
requisitionFormAddress
,
setrequisitionFormAddress
]
=
useState
<
any
>
([{
...
...
@@ -34,21 +41,20 @@ const BasicInfo: React.FC<{}> = () => {
})
}
// 选择下拉得内容
const
handProvince
=
(
val
:
any
,
idx
:
number
,
num
:
number
)
=>
{
const
handProvince
=
async
(
val
:
any
,
idx
:
number
,
num
:
number
)
=>
{
const
result
=
[...
requisitionFormAddress
];
const
cityCode
:
Array
<
any
>
=
[]
result
.
forEach
((
item
:
any
)
=>
{
if
(
item
.
cityCode
)
{
cityCode
.
push
(
item
.
cityCode
)
}
})
setcode
([...
cityCode
]);
if
(
num
===
1
)
{
const
result
=
[...
requisitionFormAddress
];
province
.
forEach
(
item
=>
{
await
province
.
forEach
(
item
=>
{
if
(
item
.
code
===
val
)
{
PublicApi
.
getManageAreaByPcodeAll
({
pcode
:
val
}).
then
((
res
:
any
)
=>
{
if
(
res
.
code
===
1000
)
{
res
.
data
.
forEach
((
items
:
any
)
=>
{
const
fiterCode
=
code
.
filter
(
value
=>
value
===
items
.
code
);
if
(
fiterCode
[
0
]
===
items
.
code
)
{
items
.
disabled
=
true
}
else
{
items
.
disabled
=
false
}
})
result
[
idx
].
provinceCode
=
val
;
result
[
idx
].
province
=
item
.
name
;
city
[
idx
]
=
{
citydata
:
res
.
data
}
...
...
@@ -57,48 +63,124 @@ const BasicInfo: React.FC<{}> = () => {
})
}
})
setrequisitionFormAddress
(
result
);
}
else
{
const
result
=
[...
requisitionFormAddress
];
city
.
forEach
(
item
=>
{
item
.
citydata
.
forEach
(
items
=>
{
if
(
items
.
code
===
val
)
{
const
cityCode
=
code
.
find
(
it
=>
items
.
code
);
if
(
cityCode
!==
items
.
code
)
{
items
.
disabled
=
false
}
result
[
idx
].
cityCode
=
val
;
result
[
idx
].
city
=
items
.
name
;
}
})
})
setcode
([...
code
,
val
]);
setrequisitionFormAddress
(
result
);
setcity
([...
city
])
}
setrequisitionFormAddress
(
result
);
}
// 选择城市的时候下拉就调用方
const
onDropdownVisibleChange
=
()
=>
{
return
new
Promise
(
reslove
=>
reslove
(
code
)).
then
((
res
:
any
)
=>
{
city
.
forEach
((
item
:
any
)
=>
{
item
.
citydata
.
filter
(
it
=>
{
res
.
map
(
items
=>
{
if
(
items
===
it
.
code
)
{
it
.
disabled
=
true
}
})
})
})
setcity
([...
city
])
})
}
// 添加一条地址
const
addFormAddress
=
(
idx
:
number
)
=>
{
const
addFormAddress
=
(
idx
:
number
)
=>
{
const
address
:
any
=
{
provinceCode
:
''
,
province
:
''
,
cityCode
:
''
,
city
:
''
}
if
(
requisitionFormAddress
[
idx
].
provinceCode
&&
requisitionFormAddress
[
idx
].
cityCode
)
{
if
(
requisitionFormAddress
[
idx
].
provinceCode
&&
requisitionFormAddress
[
idx
].
cityCode
)
{
setrequisitionFormAddress
([...
requisitionFormAddress
,
address
])
}
else
{
message
.
error
(
'请完善适用城市信息'
)
}
}
// 删除一条地址
const
removeFormAddress
=
(
idx
:
any
)
=>
{
if
(
requisitionFormAddress
.
length
>
1
)
{
const
requisitionFormAddressFilter
=
requisitionFormAddress
.
filter
((
item
:
any
,
index
:
number
)
=>
index
!==
idx
);
const
cityFilter
=
city
.
filter
((
item
:
any
,
index
:
number
)
=>
index
!==
idx
);
form
.
resetFields
();
requisitionFormAddressFilter
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
const
cityCode
=
code
.
find
(
it
=>
item
.
cityCode
);
if
(
cityCode
!==
item
.
cityCode
)
{
item
.
disabled
=
false
}
form
.
setFieldsValue
({
[
'province_'
+
index
]:
item
.
provinceCode
,
[
'city_'
+
index
]:
item
.
cityCode
});
})
setcity
(
cityFilter
);
setrequisitionFormAddress
(
requisitionFormAddressFilter
);
}
}
useEffect
(()
=>
{
manageProvince
().
then
(
data
=>
{
setprovince
(
data
)
})
},
[])
useEffect
(()
=>
{
/**编辑回显数据 */
if
(
Object
.
keys
(
set
).
length
>
0
)
{
setrequisitionFormAddress
([...
set
.
requisitionFormAddress
])
set
.
requisitionFormAddress
.
forEach
((
item
:
any
,
index
:
number
)
=>
{
PublicApi
.
getManageAreaByPcodeAll
({
pcode
:
item
.
provinceCode
}).
then
((
res
:
any
)
=>
{
if
(
res
.
code
===
1000
)
{
city
[
index
]
=
{
citydata
:
res
.
data
}
Promise
.
resolve
().
then
(()
=>
{
setTimeout
(()
=>
{
setcity
([...
city
])
form
.
setFieldsValue
({
details
:
set
.
details
,
[
'province_'
+
index
]:
item
.
provinceCode
,
[
'city_'
+
index
]:
item
.
cityCode
,
});
},
350
);
});
}
})
})
}
},
[
set
])
useEffect
(()
=>
{
currentRef
.
current
=
{
get
:
()
=>
new
Promise
((
resolve
:
any
)
=>
{
form
.
validateFields
().
then
(
res
=>
{
resolve
({
state
:
true
,
name
:
'basicInfo'
,
data
:
{
details
:
res
.
details
,
requisitionFormAddress
,
}
})
}).
catch
(
error
=>
{
console
.
log
(
error
)
})
})
}
},
[
requisitionFormAddress
])
return
(
<
Form
{
...
layout
}
...
...
@@ -106,7 +188,7 @@ const BasicInfo: React.FC<{}> = () => {
>
<
Form
.
Item
label=
'需求单摘要'
name=
''
name=
'
details
'
rules=
{
[{
required
:
true
,
message
:
'请输入需求单摘要'
}]
}
>
<
Input
/>
...
...
@@ -121,6 +203,7 @@ const BasicInfo: React.FC<{}> = () => {
<
Col
span=
{
12
}
>
<
Form
.
Item
name=
{
`province_${idx}`
}
>
<
Select
onDropdownVisibleChange=
{
onDropdownVisibleChange
}
onChange=
{
(
value
)
=>
{
handProvince
(
value
,
idx
,
1
)
}
}
...
...
@@ -136,9 +219,9 @@ const BasicInfo: React.FC<{}> = () => {
<
Col
span=
{
12
}
>
<
Form
.
Item
name=
{
`city_${idx}`
}
rules=
{
[{
required
:
item
.
provinceCode
?
true
:
false
,
message
:
'选择三级分类'
}]
}
>
<
Select
onDropdownVisibleChange=
{
onDropdownVisibleChange
}
onChange=
{
(
value
)
=>
{
handProvince
(
value
,
idx
,
2
)
}
}
...
...
@@ -172,27 +255,27 @@ const BasicInfo: React.FC<{}> = () => {
<
Form
.
Item
label=
'需求单号'
>
<
span
>
SPTY12
</
span
>
<
span
>
{
set
.
requisitionFormNo
&&
set
.
requisitionFormNo
}
</
span
>
</
Form
.
Item
>
<
Form
.
Item
label=
'会员名称'
>
<
span
>
温州龙昌手袋有限公司
</
span
>
<
span
>
{
set
.
memberName
&&
set
.
memberName
}
</
span
>
</
Form
.
Item
>
<
Form
.
Item
label=
'单据时间'
>
<
span
>
2020-08-20 12:56:25
</
span
>
<
span
>
{
set
.
voucherTime
&&
set
.
voucherTime
}
</
span
>
</
Form
.
Item
>
<
Form
.
Item
label=
'外部状态'
>
<
span
>
待提交需求单
</
span
>
<
span
>
{
set
.
externalState
&&
set
.
externalState
}
</
span
>
</
Form
.
Item
>
<
Form
.
Item
label=
'
外
部状态'
label=
'
内
部状态'
>
<
span
>
待提交审核
</
span
>
<
span
>
{
set
.
interiorState
&&
set
.
interiorState
}
</
span
>
</
Form
.
Item
>
</
Form
>
)
...
...
src/pages/transaction/enquirySubmit/addDemandOrder/components/demandDbutted.tsx
0 → 100644
View file @
21aae1ff
import
React
,
{
useState
}
from
'react'
;
import
{
Form
,
Radio
,
Tooltip
,
Row
,
Col
,
Checkbox
,
Avatar
,
Space
,
Button
,
Table
}
from
'antd'
;
import
{
QuestionCircleOutlined
,
PlusOutlined
}
from
'@ant-design/icons'
;
import
style
from
'./index.less'
;
import
{
StandardTable
}
from
'god'
;
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
const
layout
:
any
=
{
colon
:
false
,
labelCol
:
{
style
:
{
width
:
'174px'
}
},
wrapperCol
:
{
span
:
9
},
labelAlign
:
"left"
};
export
interface
faceSetData
{
set
?:
any
,
get
?:
Function
}
const
DemandDbutted
:
React
.
FC
<
faceSetData
>
=
(
props
)
=>
{
const
{
set
,
get
}
=
props
const
[
shopId
,
setShopId
]
=
useState
<
Number
>
(
0
)
// 系统匹配表头
const
columns
:
ColumnType
<
any
>
[]
=
[
{
title
:
'序号'
,
key
:
'id'
,
dataIndex
:
'id'
,
},
{
title
:
'会员名称'
,
key
:
'memberName'
,
dataIndex
:
'memberName'
,
},
{
title
:
'会员类型'
,
key
:
'memberTypeName'
,
dataIndex
:
'memberTypeName'
,
},
{
title
:
'会员角色'
,
key
:
'roleName'
,
dataIndex
:
'roleName'
,
},
{
title
:
'会员等级'
,
key
:
'levelTag'
,
dataIndex
:
'levelTag'
,
},
{
title
:
'是否归属会员'
,
key
:
'membershipOrNot'
,
dataIndex
:
'membershipOrNot'
,
},
{
title
:
'状态'
,
key
:
'state'
,
dataIndex
:
'state'
,
},
{
title
:
'操作'
,
key
:
'options'
,
dataIndex
:
'options'
,
},
]
// 指定会员表头
const
memberColumns
:
ColumnType
<
any
>
[]
=
[
{
title
:
'序号'
,
key
:
'memberId'
,
dataIndex
:
'memberId'
,
},
{
title
:
'会员名称'
,
key
:
'name'
,
dataIndex
:
'name'
,
},
{
title
:
'会员类型'
,
key
:
'memberTypeName'
,
dataIndex
:
'memberTypeName'
,
},
{
title
:
'会员角色'
,
key
:
'roleName'
,
dataIndex
:
'roleName'
,
},
{
title
:
'会员等级'
,
key
:
'levelTag'
,
dataIndex
:
'levelTag'
,
}
]
// 选择系统匹配的列表数据
const
[
selectedRowKeys
,
setSelectedRowKeys
]
=
useState
<
Array
<
any
>>
([]);
const
rowSelection
=
{
selectedRowKeys
,
onChange
:
setSelectedRowKeys
};
// 切换添加方式
const
changeRadio
=
(
e
:
any
)
=>
{
const
{
value
}
=
e
.
target
;
setShopId
(
value
)
}
// 请求系统匹配列表数据
const
fetchSystemMateData
=
(
params
:
any
)
=>
{
}
return
(
<
Form
{
...
layout
}
>
<
Form
.
Item
label=
'添加方式'
required
>
<
Radio
.
Group
onChange=
{
changeRadio
}
>
<
Radio
value=
{
1
}
><
Tooltip
placement=
"topLeft"
title=
{
<>
需求发布至企业商城求购频道
</>
}
>
发布类型
<
QuestionCircleOutlined
style=
{
{
marginLeft
:
'5px'
}
}
/></
Tooltip
></
Radio
>
<
Radio
value=
{
2
}
><
Tooltip
placement=
"topLeft"
title=
{
<>
系统通过需求单品类、商品属性、适用地市与平台会员发布的商品品类、商品属性、归属地区进行匹配,推荐满足条件的平台会员
</>
}
>
系统匹配
<
QuestionCircleOutlined
style=
{
{
marginLeft
:
'5px'
}
}
/></
Tooltip
></
Radio
>
<
Radio
value=
{
3
}
><
Tooltip
placement=
"topLeft"
title=
{
<>
选择与当前会员有归属关系的会员且角色类型为服务提供的会员(供应商),需求只发送给指定会员
</>
}
>
指定会员
<
QuestionCircleOutlined
style=
{
{
marginLeft
:
'5px'
}
}
/></
Tooltip
></
Radio
>
</
Radio
.
Group
>
</
Form
.
Item
>
{
shopId
===
1
&&
// 发布至平台
<
Form
.
Item
label=
'发布至平台'
wrapperCol=
{
{
span
:
24
}
}
>
<
Checkbox
.
Group
className=
{
style
.
checkbox_wrap_style
}
>
<
Row
>
<
Col
span=
{
6
}
>
<
Checkbox
value=
"A"
>
<
Space
>
<
Avatar
>
LOGO
</
Avatar
>
<
span
>
名称
</
span
>
</
Space
>
</
Checkbox
>
</
Col
>
</
Row
>
</
Checkbox
.
Group
>
</
Form
.
Item
>
}
{
shopId
===
2
&&
// 系统匹配
<
Form
.
Item
noStyle
>
<
StandardTable
rowSelection=
{
rowSelection
}
columns=
{
columns
}
// fetchTableData=
{(
params
)
=
>
fetchSystemMateData(params)}
/
>
</
Form
.
Item
>
}
{
shopId
===
3
&&
// 指定会员
<
Form
.
Item
noStyle
>
{
/* <Button type='dashed' block style={{ marginBottom: '24px' }}><PlusOutlined />选择会员</Button> */
}
<
StandardTable
rowSelection=
{
rowSelection
}
columns=
{
memberColumns
}
// fetchTableData=
{(
params
)
=
>
fetchSystemMateData(params)}
/
>
</
Form
.
Item
>
}
</
Form
>
)
}
export
default
DemandDbutted
;
\ No newline at end of file
src/pages/transaction/enquirySubmit/addDemandOrder/components/flowRecord.tsx
View file @
21aae1ff
import
React
,
{
useState
}
from
'react'
;
import
React
,
{
useState
,
useEffect
}
from
'react'
;
import
styles
from
'./index.less'
;
import
{
Radio
}
from
'antd'
;
import
PolymericTable
from
'@/components/PolymericTable'
;
import
{
EditableColumns
}
from
'@/components/PolymericTable/interface'
;
import
moment
from
'moment'
;
const
FlowRecord
:
React
.
FC
<
{}
>
=
()
=>
{
export
interface
faceSetData
{
set
?:
any
,
get
?:
Function
}
const
FlowRecord
:
React
.
FC
<
faceSetData
>
=
(
props
)
=>
{
const
{
set
,
get
}
=
props
const
[
radio
,
setRadio
]
=
useState
<
string
>
(
'outer'
);
//切换单据
const
format
=
(
text
)
=>
{
return
<>
{
moment
(
text
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
}
</>
...
...
@@ -15,6 +18,7 @@ const FlowRecord: React.FC<{}> = () => {
const
outerColumns
:
EditableColumns
[]
=
[{
title
:
'序号'
,
dataIndex
:
'inquiryListId'
,
render
:
(
texr
:
any
,
record
:
any
,
index
:
number
)
=>
<
span
>
{
index
+
1
}
</
span
>
},
{
title
:
'操作角色'
,
dataIndex
:
'roleName'
,
...
...
@@ -23,7 +27,7 @@ const FlowRecord: React.FC<{}> = () => {
dataIndex
:
'state'
,
},
{
title
:
'操作'
,
dataIndex
:
'operation'
,
dataIndex
:
'operation
alProcess
'
,
},
{
title
:
'操作时间'
,
dataIndex
:
'operationTime'
,
...
...
@@ -35,6 +39,7 @@ const FlowRecord: React.FC<{}> = () => {
const
insideColumns
:
EditableColumns
[]
=
[{
title
:
'序号'
,
dataIndex
:
'inquiryListId'
,
render
:
(
texr
:
any
,
record
:
any
,
index
:
number
)
=>
<
span
>
{
index
+
1
}
</
span
>
},
{
title
:
'操作人'
,
dataIndex
:
'roleName'
,
...
...
@@ -49,7 +54,7 @@ const FlowRecord: React.FC<{}> = () => {
dataIndex
:
'state'
,
},
{
title
:
'操作'
,
dataIndex
:
'operation'
,
dataIndex
:
'operation
alProcess
'
,
},
{
title
:
'操作时间'
,
dataIndex
:
'operationTime'
,
...
...
@@ -61,6 +66,7 @@ const FlowRecord: React.FC<{}> = () => {
const
onChange
=
(
e
:
any
)
=>
{
setRadio
(
e
.
target
.
value
)
}
return
(
<
div
>
<
Radio
.
Group
defaultValue=
"outer"
buttonStyle=
"solid"
onChange=
{
onChange
}
>
...
...
@@ -72,12 +78,14 @@ const FlowRecord: React.FC<{}> = () => {
columns=
{
outerColumns
}
loading=
{
false
}
pagination=
{
null
}
dataSource=
{
Object
.
keys
(
set
).
length
>
0
&&
set
.
externalRequisitionFormStateResponses
}
/>
:
<
PolymericTable
columns=
{
insideColumns
}
loading=
{
false
}
pagination=
{
null
}
dataSource=
{
Object
.
keys
(
set
).
length
>
0
&&
set
.
interiorRequisitionFormStateResponses
}
/>
}
</
div
>
...
...
src/pages/transaction/enquirySubmit/addDemandOrder/components/index.less
View file @
21aae1ff
...
...
@@ -18,3 +18,125 @@
}
}
}
.modal_wrap_className {
.site_layout_background {
background-color: #fff;
border-right: 1px solid #EEF0F3;
}
.site_content_style {
background-color: #fff;
padding: 24px;
height: 600px;
overflow-y: scroll;
.affix_title {
font-size: 14px;
margin-bottom: 24px;
.divider_style {
width: 2px;
height: 16px;
margin: 0px 5px 0px 0px ;
background-color: #00B37A;
}
}
.upload_item {
padding: 5px 8px;
margin-bottom: 16px;
display: flex;
align-items: center;
justify-content: space-between;
background-color: #FAFBFC;
.upload_left {
display: flex;
align-items: center;
color: #303133;
:global {
.anticon-file-word {
color: #4279df;
font-size: 20px;
margin-right: 8px;
}
}
}
.upload_right {
color: #00B37A;
cursor: pointer;
:global {
.anticon-delete {
margin-left: 19px;
color: #C0C4CC;
}
}
}
}
}
:global {
.ant-anchor-wrapper {
margin-left: 0 !important;
padding-left: 0 !important;
}
.ant-menu-item {
margin-top: 0 !important;
margin-bottom: 0 !important;
&:after {
left: 0;
border-right: none;
border-left: 2px solid #00B37A;
height: 80%;
margin: auto;
}
.ant-anchor-link {
padding: 0px !important;
line-height: 40px !important;
}
}
.ant-menu-item-selected {
color: #303133;
font-weight: 600;
background-color: transparent !important;
}
}
}
.checkbox_wrap_style {
width: 100%;
:global {
.ant-checkbox-wrapper {
width: 100%;
border: 1px solid #ccc;
padding: 8px 18px;
.ant-checkbox {
display: none;
}
> span {
display: flex;
align-items: center;
padding: 0px 0px;
.checkbox_avatar {
width: 32px;
height: 32px;
margin-right: 8px;
}
}
}
.ant-checkbox-wrapper-checked {
border-color: #00b37a!important;
color: #00b37a;
position: relative;
&:after {
content: "";
position: absolute;
width: 12px;
height: 11px;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAALCAYAAABLcGxfAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAADKADAAQAAAABAAAACwAAAAChLCZNAAAA6klEQVQoFWNgIAVsruliJkr9/1XMDCZqcxkY/mczEtSwv4GD4euvlQz/GfxAavFr2N3Bz/Dz8yaG///tYAbj1rC1QYLh/+8dQMX6MMW4bdjSoMTA8Gs30BlAGhUwoXKBvM21QBN/H0VWbMovzXDSOgOsFFXD1mo7Bsa/B5U5BSVgBoEUrzaOZMi5shkshAjWLTWgUNgINJlnh1k8AysTEzhEQIpDzy5nOP3xKVgDxNNbqxIY/jHMAYqADRBi5WTYY5HEIMbGzRB4ZilcMUgHI8PWqlKg4i6wdiRCgIWDQYSNi+HOt3dIogwMANgLQif9hMeFAAAAAElFTkSuQmCC);
right: 0;
bottom: 0;
}
}
}
}
\ No newline at end of file
src/pages/transaction/enquirySubmit/addDemandOrder/components/tradingConditions.tsx
View file @
21aae1ff
...
...
@@ -9,11 +9,17 @@ const layout: any = {
wrapperCol
:
{
span
:
24
},
labelAlign
:
"left"
};
const
TradingConditions
:
React
.
FC
<
{}
>
=
()
=>
{
export
interface
faceSetData
{
set
?:
any
,
get
?:
Function
,
currentRef
?:
any
}
const
TradingConditions
:
React
.
FC
<
faceSetData
>
=
(
props
)
=>
{
const
{
set
,
get
,
currentRef
}
=
props
const
[
TradingConditionsForm
]
=
Form
.
useForm
();
const
[
address
,
setAddress
]
=
useState
([]);
const
[
selectAddress
,
setselectAddress
]
=
useState
<
any
>
({});
useEffect
(()
=>
{
// 获取交付地址
PublicApi
.
getLogisticsSelectListReceiverAddress
().
then
(
res
=>
{
...
...
@@ -21,10 +27,59 @@ const TradingConditions: React.FC<{}> = () => {
})
},
[])
useEffect
(()
=>
{
currentRef
.
current
=
{
get
:
()
=>
new
Promise
((
resolve
:
any
)
=>
{
TradingConditionsForm
.
validateFields
().
then
(
res
=>
{
console
.
log
(
res
,
selectAddress
)
resolve
({
state
:
true
,
name
:
'tradingConditions'
,
data
:
{
deliveryTime
:
moment
(
res
.
deliveryTime
).
format
(
'x'
),
quotationAsTime
:
moment
(
res
.
quotationAsTime
).
format
(
'x'
),
addresId
:
res
.
addresId
,
addres
:
selectAddress
.
children
,
logistics
:
res
.
logistics
,
offer
:
res
.
offer
,
otherRequire
:
res
.
otherRequire
,
packRequire
:
res
.
packRequire
,
paymentType
:
res
.
paymentType
,
taxes
:
res
.
taxes
,
}
})
}).
catch
(
error
=>
{
console
.
log
(
error
)
})
})
}
},
[
selectAddress
])
const
disabledDate
=
(
current
)
=>
{
return
current
&&
current
<
moment
().
endOf
(
'day'
);
}
const
onSelect
=
(
val
:
any
,
option
:
any
)
=>
{
console
.
log
(
option
)
setselectAddress
(
option
)
}
useEffect
(()
=>
{
if
(
Object
.
keys
(
set
).
length
>
0
)
{
TradingConditionsForm
.
setFieldsValue
({
deliveryTime
:
moment
(
set
.
deliveryTime
),
addresId
:
set
.
addresId
,
quotationAsTime
:
moment
(
set
.
quotationAsTime
),
offer
:
set
.
offer
,
paymentType
:
set
.
paymentType
,
taxes
:
set
.
taxes
,
logistics
:
set
.
logistics
,
packRequire
:
set
.
packRequire
,
otherRequire
:
set
.
otherRequire
})
setselectAddress
({
children
:
set
.
addres
});
}
},
[
set
])
return
(
<
Form
...
...
@@ -35,13 +90,13 @@ const TradingConditions: React.FC<{}> = () => {
<
Col
span=
{
12
}
>
<
Form
.
Item
label=
'交付日期'
name=
'deliveryTime'
rules=
{
[{
required
:
true
,
message
:
'请选择交付日期'
}]
}
>
<
DatePicker
style=
{
{
width
:
'100%'
}
}
style=
{
{
width
:
'100%'
}
}
disabledDate=
{
disabledDate
}
format=
"YYYY-MM-DD HH:mm:ss"
format=
"YYYY-MM-DD HH:mm:ss"
/>
</
Form
.
Item
>
<
Form
.
Item
label=
'交付地址'
name=
'
fullAddres
sId'
rules=
{
[{
required
:
true
,
message
:
'请选择交付地址'
}]
}
>
<
Select
>
<
Form
.
Item
label=
'交付地址'
name=
'
addre
sId'
rules=
{
[{
required
:
true
,
message
:
'请选择交付地址'
}]
}
>
<
Select
onSelect=
{
onSelect
}
>
{
address
.
map
(
v
=>
(
<
Select
.
Option
key=
{
v
.
id
}
value=
{
v
.
id
}
>
{
v
.
fullAddress
}
</
Select
.
Option
>
))
}
...
...
@@ -49,7 +104,7 @@ const TradingConditions: React.FC<{}> = () => {
</
Form
.
Item
>
<
Form
.
Item
label=
'报价截止时间'
name=
'quotationAsTime'
rules=
{
[{
required
:
true
,
message
:
'请选择报价截止时间'
}]
}
>
<
DatePicker
style=
{
{
width
:
'100%'
}
}
style=
{
{
width
:
'100%'
}
}
format=
"YYYY-MM-DD HH:mm:ss"
disabledDate=
{
disabledDate
}
/>
...
...
src/pages/transaction/enquirySubmit/addDemandOrder/data.ts
0 → 100644
View file @
21aae1ff
export
const
setUpdata
=
{
requisitionFormAddress
:
[],
/** 需求单地址列表 ,RequisitionFormAddresRequest */
requisitionFormProducts
:
[],
/** 商品列表 ,RequisitionFormProductRequest */
demandDockings
:
[],
/** 需求对接-系统匹配列表 ,DemandDockingRequest */
shopIds
:
[],
/** 需求对接-发布至平台 ,Long */
memberIds
:
[],
/** 需求对接-指定会员ID列表 ,Long */
details
:
''
,
/** 需求摘要 */
deliveryTime
:
''
,
/** 交付日期 */
quotationAsTime
:
''
,
/** 报价截止时间 */
voucherTime
:
''
,
/** 单据时间 */
defaultAddres
:
null
,
/** 适用地市:1.默认全部省市区 0.选中项 */
addres
:
''
,
/** 交付地址 */
addresId
:
null
,
/** 交付地址Id */
offer
:
''
,
/** 报价要求 */
paymentType
:
''
,
/** 付款方式 */
taxes
:
''
,
/** 税费要求 */
logistics
:
''
,
/** 物流要求 */
packRequire
:
''
,
/** 包装要求 */
otherRequire
:
''
,
/** 其他要求 */
type
:
null
,
/** 需求对接类型:1.发布至平台 2.系统匹配 3.指定会员 */
}
\ No newline at end of file
src/pages/transaction/enquirySubmit/addDemandOrder/index.tsx
View file @
21aae1ff
import
React
from
'react'
;
import
React
,
{
useState
,
useRef
,
useEffect
}
from
'react'
;
import
{
history
}
from
'umi'
;
import
ReutrnEle
from
'@/components/ReturnEle'
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
...
...
@@ -7,33 +7,116 @@ import BasicInfo from './components/basicInfo';
import
TradingConditions
from
'./components/tradingConditions'
import
FlowRecord
from
'./components/flowRecord'
;
import
AddGoods
from
'./components/addGoods'
;
import
DemandDbutted
from
'./components/demandDbutted'
;
import
{
PublicApi
}
from
'@/services/api'
;
const
{
TabPane
}
=
Tabs
;
const
AddDemandOrder
:
React
.
FC
<
{}
>
=
()
=>
{
const
{
id
}
=
history
.
location
.
query
;
const
[
fetchdata
,
setfetchdata
]
=
useState
<
any
>
({});
const
basic
=
useRef
<
any
>
();
const
goods
=
useRef
<
any
>
();
const
trading
=
useRef
<
any
>
();
/**get子组件的数据 */
/**提交数据 */
const
onSubmit
=
async
()
=>
{
const
basicRef
=
await
basic
.
current
.
get
();
const
goodsRef
=
await
goods
.
current
.
get
();
const
tradingRef
=
await
trading
.
current
.
get
();
if
(
basicRef
.
state
&&
tradingRef
.
state
&&
goodsRef
.
state
)
{
const
data
=
{
...
basicRef
.
data
,
...
tradingRef
.
data
,
...
goodsRef
.
data
,
type
:
1
,
shopIds
:
[
1
]
}
if
(
basicRef
.
data
.
requisitionFormAddress
.
length
>
0
)
{
data
.
defaultAddres
=
0
}
else
{
data
.
defaultAddres
=
1
}
if
(
id
)
{
data
.
id
=
fetchdata
.
id
;
PublicApi
.
postOrderRequisitionFormUpdate
(
data
).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
history
.
goBack
()
}
})
}
else
{
PublicApi
.
postOrderRequisitionFormAdd
(
data
).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
history
.
goBack
()
}
})
}
}
}
useEffect
(()
=>
{
if
(
id
)
{
new
Promise
(
resolve
=>
{
PublicApi
.
getOrderRequisitionFormDetails
({
id
,
current
:
'1'
,
pageSize
:
'10'
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
resolve
(
res
.
data
)
}
})
}).
then
((
res
:
any
)
=>
{
// let obj: any = {}
// for (let key in fetchdata) {
// for (let keys in res) {
// if (key === keys) {
// obj = {
// ...obj, ...{
// [keys]: res[keys]
// }
// }
// }
// }
// }
setfetchdata
(
res
)
})
}
},
[
id
])
return
(
<
PageHeaderWrapper
onBack=
{
()
=>
history
.
goBack
()
}
backIcon=
{
<
ReutrnEle
description=
"返回"
/>
}
extra=
{
<
Button
type=
"primary"
>
保存
</
Button
>
<
Button
type=
"primary"
onClick=
{
onSubmit
}
>
保存
</
Button
>
}
>
<
Card
>
<
Tabs
type=
'card'
>
<
TabPane
forceRender
tab=
'基本信息'
key=
'1'
>
<
BasicInfo
/>
<
BasicInfo
set=
{
fetchdata
}
currentRef=
{
basic
}
/>
</
TabPane
>
<
TabPane
forceRender
tab=
'添加商品'
key=
'2'
>
<
AddGoods
/>
<
AddGoods
set=
{
fetchdata
}
currentRef=
{
goods
}
/>
</
TabPane
>
<
TabPane
forceRender
tab=
'交易条件'
key=
'3'
>
<
TradingConditions
/>
<
TradingConditions
set=
{
fetchdata
}
currentRef=
{
trading
}
/>
</
TabPane
>
<
TabPane
forceRender
tab=
'需求对接'
key=
'4'
>
<
DemandDbutted
set=
{
fetchdata
}
/>
</
TabPane
>
<
TabPane
forceRender
tab=
'流转记录'
key=
'5'
>
<
FlowRecord
/>
<
FlowRecord
set=
{
fetchdata
}
/>
</
TabPane
>
</
Tabs
>
</
Card
>
...
...
src/pages/transaction/enquirySubmit/toAddSubmit/index.tsx
View file @
21aae1ff
...
...
@@ -158,7 +158,7 @@ const List: React.FC<{}> = () => {
},
[])
const
toEdit
=
(
id
:
number
|
string
)
=>
{
history
.
push
(
`/memberCenter/tranactionAbility/enquirySubmit/
toAddSubmitList
/edit?id=
${
id
}
`
)
history
.
push
(
`/memberCenter/tranactionAbility/enquirySubmit/
addDemandOrder
/edit?id=
${
id
}
`
)
}
/**
* @description: 删除
...
...
@@ -223,7 +223,7 @@ const List: React.FC<{}> = () => {
const
controllerBtns
=
<
Row
>
<
Col
span=
{
24
}
>
<
Space
direction=
"horizontal"
size=
{
16
}
>
<
Button
type=
"primary"
onClick=
{
()
=>
history
.
push
(
'/memberCenter/tranactionAbility/enquirySubmit/
toAddSubmitList
/add'
)
}
icon=
{
<
PlusOutlined
/>
}
>
新建
</
Button
>
<
Button
type=
"primary"
onClick=
{
()
=>
history
.
push
(
'/memberCenter/tranactionAbility/enquirySubmit/
addDemandOrder
/add'
)
}
icon=
{
<
PlusOutlined
/>
}
>
新建
</
Button
>
<
Button
onClick=
{
()
=>
handleSubmitAll
(
selectedRowKeys
)
}
>
批量提交审核
</
Button
>
<
Dropdown
.
Button
overlay=
{
menu
}
...
...
@@ -238,28 +238,28 @@ const List: React.FC<{}> = () => {
const
[
externalState
,
setExternalState
]
=
useState
<
any
>
([]);
const
[
interiorState
,
setInteriorState
]
=
useState
<
any
>
([]);
useEffect
(()
=>
{
const
external
=
new
Promise
(
resolve
=>
{
//查询需求单外部状态枚举列表
PublicApi
.
getOrderRequisitionFormExternalStateEnum
().
then
((
res
:
any
)
=>
{
if
(
res
.
code
===
1000
)
{
resolve
(
res
.
data
)
}
})
})
const
interior
=
new
Promise
(
resolve
=>
{
// 查询需求单内部状态枚举列表
PublicApi
.
getOrderRequisitionFormInteriorStateEnum
().
then
((
res
:
any
)
=>
{
if
(
res
.
code
===
1000
)
{
resolve
(
res
.
data
)
}
})
})
Promise
.
all
([
external
,
interior
]).
then
(
res
=>
{
setExternalState
(
res
[
0
])
setInteriorState
(
res
[
1
])
})
},
[])
//
useEffect(() => {
//
const external = new Promise(resolve => {
//
//查询需求单外部状态枚举列表
//
PublicApi.getOrderRequisitionFormExternalStateEnum().then((res: any) => {
//
if (res.code === 1000) {
//
resolve(res.data)
//
}
//
})
//
})
//
const interior = new Promise(resolve => {
//
// 查询需求单内部状态枚举列表
//
PublicApi.getOrderRequisitionFormInteriorStateEnum().then((res: any) => {
//
if (res.code === 1000) {
//
resolve(res.data)
//
}
//
})
//
})
//
Promise.all([external, interior]).then(res => {
//
setExternalState(res[0])
//
setInteriorState(res[1])
//
})
//
}, [])
return
(
<
PageHeaderWrapper
>
...
...
src/pages/transaction/goodsOffer/addEnquiryOrder/components/attached.tsx
View file @
21aae1ff
...
...
@@ -30,7 +30,7 @@ const Attached: React.FC<parmas> = (props) => {
}
// 上传回调
const
handleChange
=
({
file
})
=>
{
const
arr
:
any
=
[]
;
const
arr
:
any
=
files
;
setloading
(
true
);
if
(
file
.
response
)
{
if
(
file
.
response
.
code
===
1000
)
{
...
...
@@ -41,7 +41,7 @@ const Attached: React.FC<parmas> = (props) => {
setloading
(
false
);
}
}
setFiles
([...
files
,
...
arr
])
setFiles
([...
arr
])
handleGetEnclosureUrls
(
arr
);
}
// 删除附件
...
...
src/pages/transaction/goodsOffer/addEnquiryOrder/components/basicInfo.tsx
View file @
21aae1ff
...
...
@@ -12,7 +12,7 @@ import moment from 'moment';
const
layout
:
any
=
{
colon
:
false
,
labelCol
:
{
style
:
{
width
:
'1
74
px'
}
},
labelCol
:
{
style
:
{
width
:
'1
00
px'
}
},
wrapperCol
:
{
span
:
9
},
labelAlign
:
"left"
};
...
...
src/pages/transaction/inquiryQuote/addInquiryOrder/components/attached.tsx
View file @
21aae1ff
...
...
@@ -19,6 +19,7 @@ export interface parmas {
const
Attached
:
React
.
FC
<
parmas
>
=
(
props
)
=>
{
const
{
handleGetEnclosureUrls
,
editData
}
=
props
;
const
[
files
,
setFiles
]
=
useState
<
Array
<
any
>>
([]);
const
[
loading
,
setloading
]
=
useState
(
false
);
/**判断文件类型和大小 */
const
beforeDocUpload
=
(
file
:
UploadFile
)
=>
{
const
isLt20M
=
file
.
size
/
1024
/
1024
<
20
;
...
...
@@ -30,12 +31,14 @@ const Attached: React.FC<parmas> = (props) => {
// 上传回调
const
handleChange
=
({
file
})
=>
{
const
arr
:
any
=
files
;
setloading
(
true
);
if
(
file
.
response
)
{
if
(
file
.
response
.
code
===
1000
)
{
arr
.
push
({
name
:
file
.
name
,
url
:
file
.
response
.
data
})
setloading
(
false
);
}
}
setFiles
([...
arr
])
...
...
@@ -82,7 +85,7 @@ const Attached: React.FC<parmas> = (props) => {
beforeUpload=
{
beforeDocUpload
}
onChange=
{
handleChange
}
>
<
Button
icon=
{
<
UploadOutlined
/>
}
>
上传文件
</
Button
>
<
Button
loading=
{
loading
}
icon=
{
<
UploadOutlined
/>
}
>
上传文件
</
Button
>
<
div
style=
{
{
marginTop
:
'8px'
}
}
>
一次上传一个文件,每个附件大小不能超过 20M
</
div
>
</
Upload
>
</
Form
.
Item
>
...
...
src/pages/transaction/stockSellStorage/bills/components/BillsForm/effects/useBusinessEffects.ts
View file @
21aae1ff
This diff is collapsed.
Click to expand it.
src/pages/transaction/stockSellStorage/bills/components/BillsForm/index.tsx
View file @
21aae1ff
...
...
@@ -330,6 +330,8 @@ const BillsForm: React.FC<BillsFormProps> = ({
]
:
[]
,
deliveryType
,
transport
:
DELIVERY_TYPE
[
deliveryType
],
});
}).
finally
(()
=>
{
setInfoLoading
(
false
);
...
...
@@ -374,6 +376,8 @@ const BillsForm: React.FC<BillsFormProps> = ({
]
:
[]
,
deliveryType
,
transport
:
DELIVERY_TYPE
[
deliveryType
],
});
}).
finally
(()
=>
{
setInfoLoading
(
false
);
...
...
@@ -383,7 +387,59 @@ const BillsForm: React.FC<BillsFormProps> = ({
// 退货发货单
case
DOC_TYPE_RETURN_INVOICE
:
{
switch
(
+
relevanceInvoices
)
{
// 换货申请单
case
DEPENDENT_DOC_EXCHANGE
:
{
setInfoLoading
(
true
);
PublicApi
.
getAsReplaceGoodsGetDetailByConsumer
({
replaceId
:
relevanceInvoicesId
,
}).
then
(
res
=>
{
if
(
res
.
code
!==
1000
)
{
return
;
}
const
{
supplierName
,
returnGoodsAddress
,
applyNo
,
parentMemberId
,
parentMemberRoleId
,
}
=
res
.
data
;
setBillInfo
({
invoicesTypeId
:
intInvoicesTypeId
,
relevanceInvoices
:
+
relevanceInvoices
,
orderNo
:
relevanceInvoicesId
?
[
{
orderNo
:
applyNo
,
id
:
+
relevanceInvoicesId
,
deliveryAddresId
:
returnGoodsAddress
.
receiveId
,
memberName
:
supplierName
,
fullAddress
:
returnGoodsAddress
.
receiveAddress
||
''
,
receiverName
:
returnGoodsAddress
.
receiveUserName
||
''
,
phone
:
returnGoodsAddress
.
receiveUserTel
||
''
,
}
]
:
[]
,
deliveryType
:
returnGoodsAddress
.
deliveryType
,
transport
:
DELIVERY_TYPE
[
returnGoodsAddress
.
deliveryType
],
supplyMembersName
:
supplierName
,
supplyMembersId
:
parentMemberId
,
supplyMembersRoleId
:
parentMemberRoleId
,
});
}).
finally
(()
=>
{
setInfoLoading
(
false
);
});
break
;
}
// 退货申请单
case
DEPENDENT_DOC_RETURN
:
{
break
;
}
}
break
;
}
...
...
@@ -443,6 +499,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
const
handleSubmit
=
value
=>
{
const
{
invoicesTypeId
,
invoicesTypeCode
,
orderNo
,
transactionTime
,
address
,
...
...
@@ -461,8 +518,6 @@ const BillsForm: React.FC<BillsFormProps> = ({
}));
const
newTransactionTime
=
transactionTime
?
moment
(
transactionTime
).
valueOf
()
:
null
;
console
.
log
(
'value'
,
value
);
setSubmitLoading
(
true
);
switch
(
invoicesTypeId
)
{
// 采购入库单
...
...
@@ -491,7 +546,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
return
{
...
rest
,
...
extraRest
,
itemNma
e
:
itemName
,
goodsNam
e
:
itemName
,
};
}),
supplyMembersName
:
memberName
,
...
...
@@ -533,7 +588,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
return
{
...
rest
,
...
extraRest
,
itemNma
e
:
itemName
,
goodsNam
e
:
itemName
,
};
}),
})
...
...
@@ -578,7 +633,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
return
{
...
rest
,
...
extraRest
,
itemNma
e
:
itemName
,
goodsNam
e
:
itemName
,
};
}),
createMemberName
:
memberName
,
...
...
@@ -620,7 +675,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
return
{
...
rest
,
...
extraRest
,
itemNma
e
:
itemName
,
goodsNam
e
:
itemName
,
};
}),
})
...
...
@@ -709,7 +764,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
...
rest
}
=
item
;
return
{
...
item
,
...
rest
,
produceNoticeOrderDetailId
:
extraData
.
id
,
orderNo
:
extraData
.
orderNo
,
processNum
:
extraData
.
processNum
,
...
...
@@ -739,18 +794,72 @@ const BillsForm: React.FC<BillsFormProps> = ({
break
;
}
// 退货发货单
case
DOC_TYPE_RETURN_INVOICE
:
{
break
;
}
// 退货入库单
// 退货发货单、退货入库单
case
DOC_TYPE_RETURN_INVOICE
:
case
DOC_TYPE_RETURN_RECEIPT
:
{
if
(
!
id
)
{
if
(
isEdit
)
{
return
;
}
PublicApi
.
postWarehouseInvoicesAdd
({
invoicesTypeCode
:
invoicesTypeCode
,
invoicesAbstract
:
rest
.
invoicesAbstract
,
memberName
:
memberName
,
inventoryId
:
rest
.
inventoryId
,
inventoryRole
:
rest
.
inventoryRole
,
transactionTime
:
newTransactionTime
,
orderNo
:
orderNo
[
0
].
orderNo
,
deliveryAddresId
:
orderNo
[
0
].
deliveryAddresId
,
receiverName
:
rest
.
receiverName
,
fullAddress
:
rest
.
fullAddress
,
phone
:
rest
.
phone
,
deliveryType
:
rest
.
deliveryType
,
invoicesDetailsRequests
:
newInvoicesDetailsRequests
.
map
(
item
=>
{
const
{
extraData
=
{},
amount
,
productCount
,
itemName
,
...
rest
}
=
item
;
return
{
...
rest
,
goodsName
:
itemName
,
productModel
:
rest
.
specifications
,
productName
:
extraData
.
productName
,
storageCount
:
0
,
shipmentQuantity
:
productCount
,
productCount
:
extraData
.
goodsCount
,
};
}),
relevanceInvoicesId
:
orderNo
[
0
].
id
,
relevanceInvoices
:
rest
.
relevanceInvoices
,
supplyMembersName
:
billInfo
.
supplyMembersName
,
supplyMembersId
:
billInfo
.
supplyMembersId
,
supplyMembersRoleId
:
billInfo
.
supplyMembersRoleId
,
invoicesTypeId
,
})
.
then
(
res
=>
{
if
(
res
.
code
!==
1000
)
{
return
;
}
setUnsaved
(
false
);
setTimeout
(()
=>
{
history
.
goBack
();
},
800
);
}).
finally
(()
=>
{
setSubmitLoading
(
false
);
});
}
else
{
// update action
if
(
!
isEdit
)
{
return
;
}
}
break
;
}
// 换货发货单
case
DOC_TYPE_EXCHANGE_INVOICE
:
{
...
...
src/pages/transaction/stockSellStorage/bills/components/BillsForm/schema/index.ts
View file @
21aae1ff
...
...
@@ -232,6 +232,10 @@ export const addBillSchema: ISchema = {
},
required
:
true
,
},
invoicesTypeCode
:
{
type
:
'string'
,
display
:
false
,
},
inventoryId
:
{
type
:
'string'
,
title
:
'对应仓库'
,
...
...
src/pages/transaction/stockSellStorage/inventory/index.tsx
View file @
21aae1ff
...
...
@@ -34,9 +34,9 @@ const Inventory: React.FC<{}> = () => {
const
columns
:
ColumnType
<
any
>
[]
=
[
{
title
:
'
ID
'
,
title
:
'
货号
'
,
align
:
'center'
,
dataIndex
:
'i
d
'
,
dataIndex
:
'i
temNo
'
,
},
{
title
:
'货品名称'
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment