Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
jinfa-admin
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
project
jinfa-admin
Commits
cc42398d
Commit
cc42398d
authored
Apr 14, 2021
by
前端-黄佳鑫
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
🦄
refactor: 优化采购需求单 需求报价
parent
1ee04843
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
1649 additions
and
62 deletions
+1649
-62
demandBidRoute.ts
config/routes/demandBidRoute.ts
+27
-0
demandRoute.ts
config/routes/demandRoute.ts
+11
-11
index.ts
config/routes/index.ts
+3
-2
the_first.png
src/asserts/icons/the_first.png
+0
-0
the_second.png
src/asserts/icons/the_second.png
+0
-0
the_third.png
src/asserts/icons/the_third.png
+0
-0
global.d.ts
src/global/config/global.d.ts
+3
-0
global.less
src/global/styles/global.less
+5
-0
index.tsx
src/pages/demand/detail/index.tsx
+1
-1
index.less
...ity/components/detail/components/bidInfoLayout/index.less
+47
-0
index.tsx
...lity/components/detail/components/bidInfoLayout/index.tsx
+191
-0
index.tsx
...seAbility/components/detail/components/bidTable/index.tsx
+4
-4
index.tsx
...lity/components/detail/components/contrastLyout/index.tsx
+1
-1
index.less
...lity/components/detail/components/demandLayout/index.less
+10
-0
index.tsx
...ility/components/detail/components/demandLayout/index.tsx
+127
-0
index.tsx
...ity/components/detail/components/materialLayout/index.tsx
+76
-0
index.less
...ility/components/detail/components/otherLayout/index.less
+8
-0
index.tsx
...bility/components/detail/components/otherLayout/index.tsx
+37
-0
index.tsx
src/pages/purchaseAbility/components/detail/index.tsx
+5
-2
index.tsx
src/pages/purchaseAbility/components/modalOperate/index.tsx
+218
-0
index.tsx
...pages/purchaseAbility/demand/auditDemandInquiry/index.tsx
+101
-0
index.tsx
src/pages/purchaseAbility/demand/demandInquiry/index.tsx
+69
-0
index.tsx
src/pages/purchaseAbility/demand/detail/index.tsx
+214
-0
index.tsx
src/pages/purchaseAbility/demandBidMgt/demand/index.tsx
+187
-0
index.tsx
src/pages/purchaseAbility/demandBidMgt/detail/index.tsx
+0
-0
index.tsx
src/pages/purchaseAbility/demandBidMgt/offer/index.tsx
+3
-10
index.tsx
src/pages/purchaseAbility/demandBidMgt/preview/index.tsx
+147
-0
index.tsx
src/pages/purchaseAbility/demandBidMgt/quote/index.tsx
+119
-0
index.ts
src/pages/purchaseAbility/schema/index.ts
+35
-31
No files found.
config/routes/demandBidRoute.ts
View file @
cc42398d
...
...
@@ -9,6 +9,33 @@ const router = {
component
:
'@/pages/purchaseAbility/demandBidMgt/offer'
,
hidePageHeader
:
true
,
},
{
/** 需求单详情 */
path
:
'/purchase/demandBidMgt/demand/detail'
,
name
:
'报价单查询'
,
component
:
'@/pages/purchaseAbility/demandBidMgt/demand'
,
hidePageHeader
:
true
,
hideInMenu
:
true
,
noMargin
:
true
,
},
{
/** 报价详情 */
path
:
'/purchase/demandBidMgt/offer/preview'
,
name
:
'报价单查询'
,
component
:
'@/pages/purchaseAbility/demandBidMgt/preview'
,
hidePageHeader
:
true
,
hideInMenu
:
true
,
noMargin
:
true
,
},
{
/** 报价单详情 */
path
:
'/purchase/demandBidMgt/offer/quote/detail'
,
name
:
'报价单查询'
,
component
:
'@/pages/purchaseAbility/demandBidMgt/quote'
,
hidePageHeader
:
true
,
hideInMenu
:
true
,
noMargin
:
true
,
},
]
}
export
default
router
config/routes/demandRoute.ts
View file @
cc42398d
...
...
@@ -7,46 +7,46 @@
*/
const
router
=
{
path
:
'/demand'
,
path
:
'/
purchase/
demand'
,
name
:
'采购需求单审核'
,
routes
:
[
{
// 采购需求单查询
path
:
'/demand/demandInquiry'
,
path
:
'/
purchase/
demand/demandInquiry'
,
name
:
'采购需求单查询'
,
hidePageHeader
:
true
,
component
:
'@/pages/demand/demandInquiry'
,
component
:
'@/pages/
purchaseAbility/
demand/demandInquiry'
,
},
{
// 采购需求单详情
path
:
'/demand/demandInquiry/preview'
,
path
:
'/
purchase/
demand/demandInquiry/preview'
,
name
:
'采购需求单详情'
,
component
:
'@/pages/demand/detail'
,
component
:
'@/pages/
purchaseAbility/
demand/detail'
,
hidePageHeader
:
true
,
hideInMenu
:
true
,
noMargin
:
true
,
},
{
// 待审核采购需求单
path
:
'/demand/auditDemandInquiry'
,
path
:
'/
purchase/
demand/auditDemandInquiry'
,
name
:
'待审核采购需求单'
,
hidePageHeader
:
true
,
component
:
'@/pages/demand/auditDemandInquiry'
,
component
:
'@/pages/
purchaseAbility/
demand/auditDemandInquiry'
,
},
{
// 采购需求单详情 审核
path
:
'/demand/auditDemandInquiry/detail'
,
path
:
'/
purchase/
demand/auditDemandInquiry/detail'
,
name
:
'待审核采购需求单详情'
,
component
:
'@/pages/demand/detail'
,
component
:
'@/pages/
purchaseAbility/
demand/detail'
,
hidePageHeader
:
true
,
hideInMenu
:
true
,
noMargin
:
true
,
},
{
// 采购需求单详情
path
:
'/demand/auditDemandInquiry/preview'
,
path
:
'/
purchase/
demand/auditDemandInquiry/preview'
,
name
:
'待审核采购需求单详情'
,
component
:
'@/pages/demand/detail'
,
component
:
'@/pages/
purchaseAbility/
demand/detail'
,
hidePageHeader
:
true
,
hideInMenu
:
true
,
noMargin
:
true
,
...
...
config/routes/index.ts
View file @
cc42398d
...
...
@@ -12,7 +12,7 @@
// import commodity from './commodityRoute' // 商品审核路由
// import demandRoute from './demandRoute' //需求单审核
// import procurementRoute from './procurementRoute' //招标审核
import
demandBidRoute
from
'./demandBidRoute'
//需求报价单管理
//
import demandBidRoute from './demandBidRoute' //需求报价单管理
// import demandQuoteOrderRoute from './demandQuoteOrderRoute' //需求报价单管理
// import logisticsRoutes from './logisticsRoutes'
// import memberAbility from './memberAbility'
...
...
@@ -59,7 +59,8 @@ const routeList = [
// exchangeManageRoutes,
// returnManageRoute,
// repairManageRoute,
demandBidRoute
// demandRoute,
// demandBidRoute
]
const
router
=
[
...
...
src/asserts/icons/the_first.png
0 → 100644
View file @
cc42398d
1.31 KB
src/asserts/icons/the_second.png
0 → 100644
View file @
cc42398d
1.63 KB
src/asserts/icons/the_third.png
0 → 100644
View file @
cc42398d
1.67 KB
src/global/config/global.d.ts
View file @
cc42398d
...
...
@@ -22,6 +22,9 @@ export interface PayPlatformPayConfig {
wayId
?:
any
;
payType
:
number
;
isPitchOn
:
number
;
settlementWay
:
number
;
settlementDays
?:
any
;
settlementDate
?:
any
;
}
export
interface
PayConfig
{
...
...
src/global/styles/global.less
View file @
cc42398d
...
...
@@ -180,3 +180,8 @@ h6 {
top: 100%;
font-size: 12px;
}
.rate_style {
.ant-rate-star {
margin-right: 0px !important;
}
}
src/pages/demand/detail/index.tsx
View file @
cc42398d
...
...
@@ -32,7 +32,7 @@ const TYPE = {
const
Detail
:
React
.
FC
<
{}
>
=
()
=>
{
const
ref
=
useRef
({});
const
{
id
,
number
}
=
history
.
location
.
query
;
const
{
id
,
number
}
:
any
=
history
.
location
.
query
;
const
{
pathname
}
=
history
.
location
;
const
[
type
]
=
useState
(
pathname
.
split
(
'/'
)[
pathname
.
split
(
'/'
).
length
-
1
]);
const
[
modalVisible
,
setModalVisible
]
=
useState
<
boolean
>
(
false
);
...
...
src/pages/purchaseAbility/components/detail/components/bidInfoLayout/index.less
0 → 100644
View file @
cc42398d
.tableStyle {
:global {
.ant-table-thead {
tr {
th {
padding: 10px;
.ant-space-item {
margin-bottom: 0;
}
}
}
}
.ant-table-expanded-row td {
padding: 0;
}
}
}
.childrenWrap {
background-color: #fff;
.childrenTitle {
height: 100%;
background: linear-gradient(to left, #FFFFFF, #DAF2E7);
color: #00B37A;
p {
padding-left: 16px;
margin: 0;
font-size: 12px;
height: 14px;
line-height: 14px;
}
padding: 12px 0;
}
.childrenContent {
margin-top: 8px;
p {
margin: 0;
span {
height: 12px;
font-size: 12px;
font-weight: 400;
color: #909399;
line-height: 12px;
padding-right: 10px;
}
}
}
}
src/pages/purchaseAbility/components/detail/components/bidInfoLayout/index.tsx
0 → 100644
View file @
cc42398d
import
React
,
{
useContext
,
useEffect
,
useState
}
from
'react'
;
import
{
Tabs
,
Table
,
Row
,
Col
,
Space
,
Typography
,
Button
}
from
'antd'
;
import
{
Context
}
from
'../context'
;
import
Card
from
'../../../card'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
style
from
'./index.less'
;
import
{
CaretDownOutlined
,
CaretRightOutlined
}
from
'@ant-design/icons'
;
export
interface
BidInfoProps
{
fetch
?:
()
=>
Promise
<
unknown
>
,
effect
?:
any
,
}
const
chNum
:
{
[
key
:
number
]:
string
}
=
{
1
:
'一'
,
2
:
'二'
,
3
:
'三'
,
4
:
'四'
,
5
:
'五'
,
6
:
'六'
,
7
:
'七'
,
8
:
'八'
,
9
:
'九'
,
}
const
BidInfoLayout
:
React
.
FC
<
BidInfoProps
>
=
(
props
:
any
)
=>
{
const
{
effect
,
fetch
}
=
props
const
context
=
useContext
(
Context
);
const
[
dataSource
,
setDataSource
]
=
useState
<
any
>
([]);
const
[
turn
,
setTurn
]
=
useState
<
Array
<
number
>>
([]);
const
[
totalAmount
,
setTotalAmount
]
=
useState
<
number
>
(
0
)
/** 轮次 */
const
handleTurn
=
(
num
:
number
)
=>
{
let
isTurn
:
Array
<
number
>
=
[];
for
(
let
i
=
0
;
i
<
num
;
i
+=
1
)
{
isTurn
.
push
(
i
+
1
)
}
setTurn
(
isTurn
.
reverse
());
}
const
columns
=
[
{
title
:
'物料编号/名称'
,
key
:
'number'
,
dataIndex
:
'number'
},
{
title
:
'规格'
,
key
:
'model'
,
dataIndex
:
'model'
},
{
title
:
'品类'
,
key
:
'category'
,
dataIndex
:
'category'
},
{
title
:
'品牌'
,
key
:
'brand'
,
dataIndex
:
'brand'
},
{
title
:
'采购数量/单位'
,
key
:
'purchaseCount'
,
dataIndex
:
'purchaseCount'
,
render
:
(
text
:
any
,
record
:
any
)
=>
(
<>
<
Typography
.
Text
>
{
text
}
</
Typography
.
Text
>
<
Typography
.
Text
type=
"secondary"
>
{
`(${record.unit})`
}
</
Typography
.
Text
>
</>
)
},
{
title
:
'含税/税率'
,
key
:
'isTax'
,
dataIndex
:
'isTax'
},
{
title
:
'单价(含税)'
,
key
:
'taxUnitPrice'
,
dataIndex
:
'taxUnitPrice'
},
{
title
:
(
<
Space
direction=
'vertical'
>
<
Typography
.
Text
>
金额(含税)
</
Typography
.
Text
>
<
Typography
.
Text
>
合计: ¥
{
totalAmount
.
toFixed
(
2
)
}
</
Typography
.
Text
>
</
Space
>
),
key
:
'taxPrice'
,
dataIndex
:
'taxPrice'
}
]
/** 物料信息 */
const
fetchDataSource
=
(
params
:
any
)
=>
{
fetch
({
...
params
}).
then
((
res
:
any
)
=>
{
if
(
res
.
code
!==
1000
)
{
return
}
const
{
data
}
=
res
.
data
setDataSource
(
data
)
let
total
:
number
=
0
;
data
.
forEach
((
item
)
=>
{
total
+=
item
.
taxPrice
})
setTotalAmount
(
total
)
})
}
/** 物料信息 */
useEffect
(()
=>
{
if
(
effect
.
turn
)
{
fetchDataSource
({
id
:
effect
.
id
,
turn
:
effect
.
turn
,
current
:
'1'
,
pageSize
:
'10'
,
})
handleTurn
(
effect
.
turn
)
}
},
[
effect
.
turn
])
return
(
<
Card
id=
'bidInfoLayout'
title=
'报价信息'
>
<
Tabs
defaultActiveKey=
"1"
>
{
turn
.
map
((
item
)
=>
(
<
Tabs
.
TabPane
key=
{
`trun${item}`
}
tab=
{
`第${chNum[item]}轮`
}
>
<
Table
className=
{
style
.
tableStyle
}
columns=
{
columns
}
rowKey=
'id'
expandable=
{
{
expandedRowRender
:
record
=>
(
<
div
className=
{
style
.
childrenWrap
}
>
<
Row
>
<
Col
span=
{
3
}
>
<
div
className=
{
style
.
childrenTitle
}
>
<
p
>
对应
</
p
>
<
p
>
招标商品
</
p
>
</
div
>
</
Col
>
<
Col
span=
{
6
}
>
<
div
className=
{
style
.
childrenContent
}
>
<
p
><
span
>
商品ID:
</
span
>
{
record
.
productId
}
</
p
>
<
p
><
span
>
商品名称:
</
span
>
{
record
.
productName
}
</
p
>
</
div
>
</
Col
>
<
Col
span=
{
6
}
>
<
div
className=
{
style
.
childrenContent
}
>
<
p
><
span
>
规格:
</
span
>
-
</
p
>
<
p
><
span
>
品类:
</
span
>
-
</
p
>
</
div
>
</
Col
>
<
Col
span=
{
6
}
>
<
div
className=
{
style
.
childrenContent
}
>
<
p
><
span
>
品牌:
</
span
>
{
record
.
productBrand
}
</
p
>
</
div
>
</
Col
>
<
Col
span=
{
3
}
>
<
div
className=
{
style
.
childrenContent
}
>
<
Button
type=
'link'
>
查看
</
Button
>
</
div
>
</
Col
>
</
Row
>
</
div
>
),
expandIcon
:
({
expanded
,
onExpand
,
record
})
=>
expanded
?
(
<
CaretDownOutlined
onClick=
{
e
=>
onExpand
(
record
,
e
)
}
/>
)
:
(
<
CaretRightOutlined
onClick=
{
e
=>
onExpand
(
record
,
e
)
}
/>
)
}
}
dataSource=
{
dataSource
}
pagination=
{
{
size
:
"small"
}
}
/>
</
Tabs
.
TabPane
>
))
}
</
Tabs
>
</
Card
>
)
}
export
default
BidInfoLayout
src/pages/purchaseAbility/components/detail/components/bidTable/index.tsx
View file @
cc42398d
...
...
@@ -2,10 +2,10 @@ import React, { useContext } from 'react';
import
{
Row
,
Col
,
Checkbox
,
InputNumber
,
Divider
,
Form
,
Typography
}
from
'antd'
;
import
style
from
'./index.less'
;
import
{
useBidTable
}
from
'../../../effects/useBidTable'
;
import
{
BidDetailContext
}
from
'../context'
import
level1
from
'@/assets/icons/the_first.png'
;
import
level2
from
'@/assets/icons/the_second.png'
;
import
level3
from
'@/assets/icons/the_third.png'
;
import
{
BidDetailContext
}
from
'../context'
;
import
level1
from
'@/asse
r
ts/icons/the_first.png'
;
import
level2
from
'@/asse
r
ts/icons/the_second.png'
;
import
level3
from
'@/asse
r
ts/icons/the_third.png'
;
import
{
CheckCircleOutlined
}
from
'@ant-design/icons'
;
export
interface
ReduxProps
{
...
...
src/pages/purchaseAbility/components/detail/components/contrastLyout/index.tsx
View file @
cc42398d
...
...
@@ -44,7 +44,7 @@ const ContrastLyout: React.FC<ContrastProps> = (props: any) => {
dataIndex
:
'quotedPriceNo'
,
render
:
(
text
:
any
,
record
:
any
)
=>
(
<
Space
direction=
'vertical'
>
<
EyePreview
>
{
text
}
</
EyePreview
>
<
EyePreview
url=
{
`/memberCenter/procurementAbility/confirmOffer/quote/detail?id=${record.id}&number=${record.quotedPriceNo}`
}
>
{
text
}
</
EyePreview
>
<
Typography
.
Text
>
{
record
.
details
}
</
Typography
.
Text
>
</
Space
>
)
...
...
src/pages/purchaseAbility/components/detail/components/demandLayout/index.less
0 → 100644
View file @
cc42398d
.list {
display: flex;
h5 {
margin-bottom: 2em;
}
.listLable {
flex: 0 0 25%;
color: #909399;
}
}
src/pages/purchaseAbility/components/detail/components/demandLayout/index.tsx
0 → 100644
View file @
cc42398d
import
React
,
{
useContext
}
from
'react'
;
import
{
Row
,
Col
,
Image
,
Table
,
Tooltip
}
from
'antd'
;
import
Card
from
'../../../card'
;
import
{
Context
}
from
'../context'
;
import
style
from
'./index.less'
;
import
{
QuestionCircleOutlined
}
from
'@ant-design/icons'
;
const
TYPE
=
{
1
:
'发布至平台'
,
2
:
'系统匹配'
,
3
:
'指定会员'
,
}
const
ColStyle
=
{
display
:
'flex'
,
alignItems
:
'center'
,
border
:
'1px solid #1fbf87'
,
paddingTop
:
' 6px'
,
paddingBottom
:
'6px'
,
margin
:
'5px'
,
borderRadius
:
'4px'
,
}
const
TextStyle
=
{
color
:
'#1fbf87'
,
marginLeft
:
'10px'
,
}
export
interface
DemandLayoutIProps
{
storeList
?:
any
}
const
DemandLayout
:
React
.
FC
<
DemandLayoutIProps
>
=
(
props
:
any
)
=>
{
const
{
storeList
}
=
props
;
const
context
=
useContext
(
Context
);
const
columns
=
[
{
title
:
'序号'
,
key
:
'number'
,
dataIndex
:
'number'
,
render
:
(
text
:
any
,
record
:
any
,
index
:
number
)
=>
<>
{
index
+
1
}
</>
},
{
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
:
(
<>
<
span
>
需求发送
</
span
>
<
Tooltip
placement=
"top"
title=
'打开开关,审核通过后,将发送需求至选择的归属会员'
>
<
QuestionCircleOutlined
style=
{
{
marginLeft
:
'5px'
,
fontSize
:
'14px'
,
color
:
'#909399'
}
}
/>
</
Tooltip
>
</>
),
key
:
'state'
,
dataIndex
:
'state'
,
},
{
title
:
'操作'
,
key
:
'operate'
,
dataIndex
:
'operate'
,
},
]
return
(
<
Card
id=
'demandLayout'
title=
'需求对接'
>
<
div
className=
{
style
.
list
}
>
<
h5
className=
{
style
.
listLable
}
style=
{
{
flex
:
'0 0 100px'
}
}
>
发布方式:
</
h5
>
<
h5
className=
{
style
.
listContent
}
>
{
TYPE
[
context
.
type
]
}
</
h5
>
</
div
>
{
context
.
type
===
1
&&
(
<
Row
gutter=
{
[
16
,
16
]
}
>
{
storeList
.
map
(
item
=>
(
<
Col
span=
{
6
}
key=
{
item
.
id
}
style=
{
ColStyle
}
>
<
Image
width=
{
32
}
height=
{
32
}
src=
{
item
.
logoUrl
}
/>
<
span
style=
{
TextStyle
}
>
{
item
.
name
}
</
span
>
</
Col
>
))
}
</
Row
>
)
}
{
context
.
type
!==
1
&&
(
<
Table
dataSource=
{
context
.
demandMembers
}
columns=
{
columns
}
rowKey=
'id'
/>
)
}
</
Card
>
)
}
export
default
DemandLayout
;
src/pages/purchaseAbility/components/detail/components/materialLayout/index.tsx
0 → 100644
View file @
cc42398d
import
React
,
{
useRef
}
from
'react'
;
import
{
StandardTable
}
from
'god'
;
import
Card
from
'../../../card'
;
import
EyePreview
from
'@/components/EyePreview'
;
export
interface
IPROPS
{
id
?:
number
,
number
?:
number
,
fetch
?:
()
=>
Promise
<
unknown
>
,
}
const
MaterialLayout
:
React
.
FC
<
IPROPS
>
=
(
props
:
any
)
=>
{
const
{
id
,
number
,
fetch
}
=
props
;
const
currentRef
=
useRef
({});
const
columns
=
[
{
title
:
'物料编号'
,
key
:
'number'
,
dataIndex
:
'number'
,
},
{
title
:
'物料名称'
,
key
:
'name'
,
dataIndex
:
'name'
,
render
:
(
text
:
any
,
record
:
any
)
=>
<
EyePreview
type=
'button'
>
{
text
}
</
EyePreview
>
},
{
title
:
'规格型号'
,
key
:
'model'
,
dataIndex
:
'model'
,
},
{
title
:
'品类'
,
key
:
'category'
,
dataIndex
:
'category'
,
},
{
title
:
'品牌'
,
key
:
'brand'
,
dataIndex
:
'brand'
,
},
{
title
:
'单位'
,
key
:
'unit'
,
dataIndex
:
'unit'
,
},
{
title
:
'采购数量'
,
key
:
'purchaseCount'
,
dataIndex
:
'purchaseCount'
,
},
];
const
productlist
=
(
params
:
any
)
=>
{
return
new
Promise
(
resolve
=>
{
fetch
({
id
,
number
,
...
params
}).
then
((
res
:
any
)
=>
{
resolve
(
res
.
data
)
})
})
}
return
(
<
Card
id=
'materialLayout'
title=
'采购材料'
>
<
StandardTable
currentRef=
{
currentRef
}
columns=
{
columns
}
tableProps=
{
{
rowKew
:
'id'
}
}
fetchTableData=
{
(
params
:
any
)
=>
productlist
(
params
)
}
/>
</
Card
>
)
}
export
default
MaterialLayout
;
src/pages/purchaseAbility/components/detail/components/otherLayout/index.less
0 → 100644
View file @
cc42398d
.cell {
display: flex;
h5 { margin-bottom: 2em; }
.label {
flex: 0 0 25%;
color: #909399;
}
}
src/pages/purchaseAbility/components/detail/components/otherLayout/index.tsx
0 → 100644
View file @
cc42398d
/** 详情通用 - 基本信息 */
import
React
from
'react'
;
import
{
Row
,
Col
}
from
'antd'
;
import
Card
from
'../../../card'
;
import
style
from
'./index.less'
;
export
interface
OtherInfoProps
{
effect
?:
any
,
}
const
count
=
0
;
const
OtherLayout
:
React
.
FC
<
OtherInfoProps
>
=
(
props
:
any
)
=>
{
const
{
effect
}
=
props
;
return
(
<
Card
id=
'otherLayout'
title=
'其他说明'
>
<
Row
gutter=
{
[
8
,
8
]
}
>
{
effect
.
length
>
count
&&
effect
.
map
((
item
,
index
)
=>
(
<
Col
key=
{
`effect_${index + 1}`
}
span=
{
8
}
>
{
item
.
col
.
map
((
it
,
idx
)
=>
(
<
div
className=
{
style
.
cell
}
key=
{
`effect_col_${idx + 1}`
}
>
<
h5
className=
{
style
.
label
}
>
{
it
.
label
}
:
</
h5
>
<
h5
className=
{
style
.
content
}
>
{
it
.
extra
}
</
h5
>
</
div
>
))
}
</
Col
>
))
}
</
Row
>
</
Card
>
)
}
export
default
OtherLayout
src/pages/purchaseAbility/components/detail/index.tsx
View file @
cc42398d
...
...
@@ -15,6 +15,8 @@ export type tabLink = {
export
interface
IProps
{
/** 单号 */
no
?:
string
,
/** 详情描述 */
detail
?:
string
,
/** 锚点Link */
tabLink
?:
Array
<
tabLink
>
,
/** 审核操作按钮放这 */
...
...
@@ -26,6 +28,7 @@ export interface IProps {
const
PeripheralLayout
:
React
.
FC
<
IProps
>
=
(
props
:
any
)
=>
{
const
{
no
,
detail
,
tabLink
,
effect
,
components
,
...
...
@@ -67,8 +70,8 @@ const PeripheralLayout: React.FC<IProps> = (props: any) => {
<
div
className=
{
style
.
titleBox
}
>
<
ArrowLeftOutlined
className=
{
style
.
goBack
}
onClick=
{
()
=>
history
.
goBack
()
}
/>
<
span
className=
{
style
.
titleContext
}
>
{
dataSource
.
details
}
|
{
d
etail
?
detail
:
d
ataSource
.
details
}
|
{
no
}
</
span
>
</
div
>
...
...
src/pages/purchaseAbility/components/modalOperate/index.tsx
0 → 100644
View file @
cc42398d
import
React
,
{
useEffect
}
from
'react'
;
import
{
Modal
}
from
'antd'
;
import
{
SchemaForm
,
SchemaMarkupField
as
Field
,
createFormActions
,
FormEffectHooks
,
}
from
'@formily/antd'
import
{
Input
,
Radio
,
DatePicker
,
Checkbox
}
from
'@formily/antd-components'
import
moment
from
'moment'
;
const
actions
=
createFormActions
()
const
{
onFieldChange$
}
=
FormEffectHooks
;
export
interface
IProps
{
title
:
string
,
visible
:
boolean
,
id
:
number
,
modalType
:
'audit'
|
'abandon'
|
'date'
|
'next'
|
'key'
,
onCancel
?:
()
=>
void
,
onOk
?:
()
=>
void
,
fetch
?:
()
=>
Promise
<
unknown
>
,
}
const
ModalOperate
:
React
.
FC
<
IProps
>
=
(
props
:
any
)
=>
{
const
{
title
,
visible
,
id
,
onCancel
,
onOk
,
modalType
,
fetch
,
}
=
props
;
const
useFormEffects
=
()
=>
{
const
{
setFieldState
}
=
createFormActions
()
if
(
modalType
===
'audit'
)
{
onFieldChange$
(
'state'
).
subscribe
(({
value
})
=>
{
setFieldState
(
'auditOpinion'
,
state
=>
{
if
(
value
==
1
)
{
state
.
visible
=
false
}
else
{
state
.
visible
=
true
}
})
})
}
if
(
modalType
===
'date'
)
{
onFieldChange$
(
'checkbox'
).
subscribe
(({
value
})
=>
{
if
(
value
&&
value
.
length
>
0
)
{
actions
.
setFieldValue
(
'quotedPriceTime'
,
moment
().
format
());
}
else
{
actions
.
setFieldValue
(
'quotedPriceTime'
,
undefined
);
}
})
}
}
const
disabledDate
=
(
current
)
=>
{
return
current
&&
current
<=
moment
().
startOf
(
'day'
);
}
const
modalText
=
modalType
===
'audit'
?
'审核不通过原因'
:
'作废原因'
;
const
modalNode
=
()
=>
{
switch
(
modalType
)
{
case
'audit'
:
return
<
Field
enum=
{
[
{
label
:
'审核通过'
,
value
:
1
},
{
label
:
'审核不通过'
,
value
:
0
}
]
}
name=
'state'
required
x
-
component=
"Radio"
x
-
component
-
props=
{
{}
}
/>
case
'abandon'
:
return
<
Field
title=
"作废时间"
name=
"reasonTime"
required
x
-
component=
"DatePicker"
x
-
component
-
props=
{
{
style
:
{
width
:
'100%'
},
format
:
'YYYY-MM-DD HH:mm:ss'
,
disabledDate
,
}
}
/>
case
'date'
:
return
<>
<
Field
title=
"报价截止时间"
name=
"quotedPriceTime"
required
x
-
component=
"DatePicker"
x
-
component
-
props=
{
{
style
:
{
width
:
'100%'
},
format
:
'YYYY-MM-DD HH:mm:ss'
,
disabledDate
,
}
}
/>
<
Field
name=
"checkbox"
x
-
component=
"CheckboxGroup"
description=
"勾选后供应商不能再提交报价单"
enum=
{
[{
label
:
'立即截止报价'
,
value
:
1
}]
}
/>
</>
case
'next'
:
return
<
Field
title=
"下轮报价截止时间"
name=
"quotedPriceTime"
required
x
-
component=
"DatePicker"
x
-
component
-
props=
{
{
style
:
{
width
:
'100%'
},
format
:
'YYYY-MM-DD HH:mm:ss'
,
disabledDate
,
}
}
/>
case
'key'
:
return
<
Field
title=
"请输入解密密钥"
x
-
component=
"Input"
name=
"password"
required
x
-
component
-
props=
{
{}
}
/>
}
}
useEffect
(()
=>
{
if
(
modalType
===
'next'
)
{
actions
.
setFieldValue
(
'quotedPriceTime'
,
moment
().
format
())
}
},
[])
const
handleSubmit
=
(
val
:
any
)
=>
{
let
value
=
{
...
val
}
let
params
:
any
=
{}
if
(
modalType
===
'audit'
)
{
params
.
state
=
value
.
state
;
value
.
state
!==
1
&&
(
params
.
auditOpinion
=
value
.
auditOpinion
);
}
else
if
(
modalType
===
'abandon'
)
{
params
.
reason
=
value
.
reason
params
.
reasonTime
=
new
Date
(
value
.
reasonTime
).
getTime
();
}
else
if
(
modalType
===
'date'
)
{
params
.
quotedPriceTime
=
new
Date
(
value
.
quotedPriceTime
).
getTime
();
}
else
if
(
modalType
===
'next'
)
{
params
.
quotedPriceTime
=
new
Date
(
value
.
quotedPriceTime
).
getTime
();
}
else
{
params
.
password
=
value
.
password
;
}
fetch
({
id
,
...
params
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
onOk
()
}
})
}
const
handleClose
=
()
=>
{
onCancel
();
actions
.
reset
();
}
return
(
<
Modal
width=
{
600
}
title=
{
title
}
visible=
{
visible
}
onCancel=
{
handleClose
}
onOk=
{
()
=>
actions
.
submit
()
}
afterClose=
{
()
=>
actions
.
reset
()
}
>
<
SchemaForm
layout=
"vertical"
labelCol=
{
6
}
components=
{
{
Input
,
Radio
:
Radio
.
Group
,
TextArea
:
Input
.
TextArea
,
DatePicker
,
Checkbox
,
CheckboxGroup
:
Checkbox
.
Group
}
}
actions=
{
actions
}
effects=
{
()
=>
useFormEffects
()
}
onSubmit=
{
(
values
)
=>
handleSubmit
(
values
)
}
initialValues=
{
{
state
:
1
}
}
>
{
modalNode
()
}
{
(
modalType
===
'audit'
||
modalType
===
'abandon'
)
&&
(<
Field
title=
{
modalText
}
name=
{
modalType
===
'audit'
?
'auditOpinion'
:
'reason'
}
x
-
component=
"TextArea"
required
x
-
component
-
props=
{
{
placeholder
:
'在此输入你的内容,最多60个汉字'
}
}
x
-
rules=
{
{
max
:
60
,
message
:
'原因最多60个汉字'
}
}
/>)
}
</
SchemaForm
>
</
Modal
>
)
}
export
default
ModalOperate
;
src/pages/purchaseAbility/demand/auditDemandInquiry/index.tsx
0 → 100644
View file @
cc42398d
import
React
,
{
useRef
,
useState
}
from
'react'
;
import
Table
from
'../../components/table'
import
{
history
}
from
'umi'
;
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
EyePreview
from
'@/components/EyePreview'
;
import
moment
from
'moment'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
Row
,
Col
,
Button
,
Tag
,
Typography
,
Space
}
from
'antd'
;
import
{
OFFTER_EXTERNALSTATE
,
OFFTER_EXTERNALSTATE_COLOR
,
}
from
'../../constants'
;
const
{
Text
}
=
Typography
;
const
AuditInquiryOne
=
()
=>
{
const
ref
=
useRef
<
any
>
({});
const
format
=
(
text
)
=>
{
return
<>
{
moment
(
text
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
}
</>
}
const
[
rowkeys
,
setRowKeys
]
=
useState
<
Array
<
number
>>
([]);
/** 批量审核 */
const
fetchSubmitBatch
=
async
()
=>
{
const
res
=
await
PublicApi
.
postPurchasePlatformPurchaseInquiryExamineBatch
({
ids
:
rowkeys
});
if
(
res
.
code
===
1000
)
{
ref
.
current
.
reload
();
}
}
const
columns
:
ColumnType
<
any
>
[]
=
[{
title
:
'需求单号/摘要'
,
key
:
'purchaseInquiryNo'
,
dataIndex
:
'purchaseInquiryNo'
,
render
:
(
text
:
any
,
record
:
any
)
=>
(
<
Space
direction=
'vertical'
>
<
EyePreview
url=
{
`/purchase/demand/auditDemandInquiry/preview?id=${record.id}&number=${record.purchaseInquiryNo}`
}
>
{
text
}
</
EyePreview
>
<
Text
type=
"secondary"
>
{
record
.
details
}
</
Text
>
</
Space
>
)
},
{
title
:
'需求会员'
,
key
:
'memberName'
,
dataIndex
:
'memberName'
,
},
{
title
:
'交付日期'
,
key
:
'deliveryTime'
,
dataIndex
:
'deliveryTime'
,
render
:
(
text
:
any
,
record
:
any
)
=>
format
(
text
)
},
{
title
:
'报价截止时间'
,
key
:
'quotationAsTime'
,
dataIndex
:
'quotationAsTime'
,
render
:
(
text
:
any
,
record
:
any
)
=>
format
(
text
)
},
{
title
:
'单据时间'
,
key
:
'voucherTime'
,
dataIndex
:
'voucherTime'
,
render
:
(
text
:
any
,
record
:
any
)
=>
format
(
text
)
},
{
title
:
'外部状态'
,
key
:
'externalState'
,
dataIndex
:
'externalState'
,
render
:
(
text
:
any
,
record
:
any
)
=>
<
Tag
color=
{
OFFTER_EXTERNALSTATE_COLOR
[
text
]
}
>
{
OFFTER_EXTERNALSTATE
[
text
]
}
</
Tag
>
},
{
title
:
'操作'
,
key
:
'operate'
,
dataIndex
:
'operate'
,
render
:
(
text
:
any
,
record
:
any
)
=>
(
<>
<
Button
type=
'link'
onClick=
{
()
=>
history
.
push
(
`/purchase/demand/auditDemandInquiry/detail?id=${record.id}&number=${record.purchaseInquiryNo}`
)
}
>
审核
</
Button
>
</>
)
}];
return
(
<
Table
selectedRow
reload=
{
ref
}
schemaType=
"PurchaseDemandPublic"
columns=
{
columns
}
effects=
"purchaseInquiryNo"
fetch=
{
PublicApi
.
getPurchasePlatformPurchaseInquiryExamineList
}
fetchRowkeys=
{
(
e
)
=>
setRowKeys
(
e
)
}
controllerBtns=
{
<
Row
>
<
Col
span=
{
6
}
>
<
Button
disabled=
{
rowkeys
.
length
===
0
}
onClick=
{
fetchSubmitBatch
}
>
批量提交审核
</
Button
>
</
Col
>
</
Row
>
}
/>
)
}
export
default
AuditInquiryOne
src/pages/purchaseAbility/demand/demandInquiry/index.tsx
0 → 100644
View file @
cc42398d
import
React
,
{
useRef
}
from
'react'
;
import
Table
from
'../../components/table'
;
import
{
Tag
,
Typography
,
Space
}
from
'antd'
;
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
EyePreview
from
'@/components/EyePreview'
;
import
moment
from
'moment'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
OFFTER_EXTERNALSTATE
,
OFFTER_EXTERNALSTATE_COLOR
,
}
from
'../../constants'
;
const
{
Text
}
=
Typography
;
const
Inquiry
=
()
=>
{
const
ref
=
useRef
<
any
>
({});
const
format
=
(
text
)
=>
{
return
<>
{
moment
(
text
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
}
</>
}
const
columns
:
ColumnType
<
any
>
[]
=
[{
title
:
'需求单号/摘要'
,
key
:
'purchaseInquiryNo'
,
dataIndex
:
'purchaseInquiryNo'
,
render
:
(
text
:
any
,
record
:
any
)
=>
(
<
Space
direction=
'vertical'
>
<
EyePreview
url=
{
`/purchase/demand/demandInquiry/preview?id=${record.id}&number=${record.purchaseInquiryNo}`
}
>
{
text
}
</
EyePreview
>
<
Text
type=
"secondary"
>
{
record
.
details
}
</
Text
>
</
Space
>
)
},
{
title
:
'需求会员'
,
key
:
'memberName'
,
dataIndex
:
'memberName'
,
},
{
title
:
'交付日期'
,
key
:
'deliveryTime'
,
dataIndex
:
'deliveryTime'
,
render
:
(
text
:
any
,
record
:
any
)
=>
format
(
text
)
},
{
title
:
'报价截止时间'
,
key
:
'quotationAsTime'
,
dataIndex
:
'quotationAsTime'
,
render
:
(
text
:
any
,
record
:
any
)
=>
format
(
text
)
},
{
title
:
'单据时间'
,
key
:
'voucherTime'
,
dataIndex
:
'voucherTime'
,
render
:
(
text
:
any
,
record
:
any
)
=>
format
(
text
)
},
{
title
:
'外部状态'
,
key
:
'externalState'
,
dataIndex
:
'externalState'
,
render
:
(
text
:
any
,
record
:
any
)
=>
<
Tag
color=
{
OFFTER_EXTERNALSTATE_COLOR
[
text
]
}
>
{
OFFTER_EXTERNALSTATE
[
text
]
}
</
Tag
>
}];
return
(
<>
<
Table
schemaType=
"PurchaseDemand"
columns=
{
columns
}
effects=
"purchaseInquiryNo"
fetch=
{
PublicApi
.
getPurchasePlatformPurchaseInquiryList
}
reload=
{
ref
}
/>
</>
)
}
export
default
Inquiry
src/pages/purchaseAbility/demand/detail/index.tsx
0 → 100644
View file @
cc42398d
import
React
,
{
Fragment
,
useEffect
,
useState
}
from
'react'
;
import
{
Tag
,
Badge
,
Tooltip
,
Button
}
from
'antd'
;
import
{
history
}
from
'umi'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
GlobalConfig
}
from
'@/global/config'
import
{
Context
}
from
'../../components/detail/components/context'
;
import
PeripheralLayout
from
'../../components/detail'
;
import
ProgressLayout
from
'../../components/detail/components/progressLayout'
;
import
BasicLayout
from
'../../components/detail/components/basicLayout'
;
import
ConditionLayout
from
'../../components/detail/components/conditionLayout'
;
import
RecordLyout
from
'../../components/detail/components/recordLyout'
;
import
moment
from
'moment'
;
import
{
OFFTER_EXTERNALSTATE
,
OFFTER_EXTERNALSTATE_COLOR
,
OFFTER_INTERNALSTATE
,
OFFTER_INTERNALSTATE_COLOR
}
from
'../../constants'
;
import
{
CheckCircleOutlined
,
QuestionCircleOutlined
}
from
'@ant-design/icons'
;
import
MaterialLayout
from
'../../components/detail/components/materialLayout'
;
import
DemandLayout
from
'../../components/detail/components/demandLayout'
;
import
ModalOperate
from
'../../components/modalOperate'
;
const
ICON_STYLE
:
any
=
{
color
:
'#C0C4CC'
,
fontSize
:
'14px'
,
marginLeft
:
'5px'
}
const
TABLINK
=
[
{
id
:
'progressLayout'
,
title
:
'流转进度'
},
{
id
:
'basicLayout'
,
title
:
'基本信息'
},
{
id
:
'materialLayout'
,
title
:
'采购材料'
},
{
id
:
'conditionLayout'
,
title
:
'交易条件'
},
{
id
:
'demandLayout'
,
title
:
'需求对接'
},
{
id
:
'recordLyout'
,
title
:
'流转记录'
},
]
const
DemandDetailed
=
()
=>
{
const
format
=
(
text
)
=>
{
return
<>
{
moment
(
text
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
}
</>
}
const
{
query
:
{
id
,
number
},
pathname
,
}:
any
=
history
.
location
;
const
[
path
]
=
useState
(
pathname
.
split
(
'/'
)[
pathname
.
split
(
'/'
).
length
-
1
]);
const
[
visible
,
setVisible
]
=
useState
<
boolean
>
(
false
);
const
[
dataSource
,
setDataSource
]
=
useState
<
any
>
({});
const
[
basicEffect
,
setBasicEffect
]
=
useState
<
any
>
([]);
const
[
conditionEffect
,
setConditionEffect
]
=
useState
<
any
>
([]);
const
[
areas
,
setAreas
]
=
useState
<
any
>
([]);
const
[
storeList
,
setStoreList
]
=
useState
<
Array
<
any
>>
([]);
const
handleBasicEffect
=
(
data
:
any
)
=>
{
setBasicEffect
([
{
col
:
[
{
label
:
'需求单号'
,
extra
:
data
.
purchaseInquiryNo
},
{
label
:
'外部状态'
,
extra
:
<
Tag
color=
{
OFFTER_EXTERNALSTATE_COLOR
[
data
.
externalState
]
}
>
{
OFFTER_EXTERNALSTATE
[
data
.
externalState
]
}
</
Tag
>
},
{
label
:
'内部状态'
,
extra
:
<
Badge
status=
{
OFFTER_INTERNALSTATE_COLOR
[
data
.
interiorState
]
}
text=
{
OFFTER_INTERNALSTATE
[
data
.
interiorState
]
}
/>
},
{
label
:
'单据时间'
,
extra
:
format
(
data
.
createTime
)
},
]
},
{
col
:
[
{
label
:
'需求摘要'
,
extra
:
data
.
details
},
{
label
:
'采购类型'
,
extra
:
(
<
Tooltip
placement=
"top"
title=
'有固定采购金额:采购金额固定,合同期内不可超过采购金额,无固定采购金额:采购金额不固定,可在合同期内按需采购'
>
{
data
.
purchaseType
===
1
?
'有固定采购金额'
:
'无固定采购金额'
}
<
QuestionCircleOutlined
style=
{
ICON_STYLE
}
/>
</
Tooltip
>
)
},
{
label
:
'比价方式'
,
extra
:
(
<
Tooltip
placement=
"top"
title=
'密封比价:只能看到供应商是否有报价,不能看到供应商的报价明细,只能解封后才能看到报价明细,非密封比价:可以在供应商报完价后立即看到报价明细,无须解封'
>
{
data
.
priceContrast
===
1
?
'密封比价'
:
'非密封比价'
}
<
QuestionCircleOutlined
style=
{
ICON_STYLE
}
/>
</
Tooltip
>
)
},
{
label
:
'会员名称'
,
extra
:
data
.
memberName
},
]
},
{
col
:
[
{
label
:
'适用地市'
,
extra
:
(
<
div
>
{
areas
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
p
key=
{
`areas${index + 1}`
}
>
{
item
}
</
p
>
))
}
</
div
>
)
},
]
},
])
}
const
handleConditionEffect
=
(
data
:
any
)
=>
{
setConditionEffect
([
{
col
:
[
{
label
:
'交付日期'
,
extra
:
format
(
data
.
deliveryTime
)
},
{
label
:
'交付地址'
,
extra
:
data
.
address
},
{
label
:
'截止日期'
,
extra
:
format
(
data
.
offerEndTime
)
},
]
},
{
col
:
[
{
label
:
'报价要求'
,
extra
:
data
.
offer
},
{
label
:
'付款方式'
,
extra
:
data
.
paymentType
},
{
label
:
'税费要求'
,
extra
:
data
.
taxes
},
]
},
{
col
:
[
{
label
:
'物流要求'
,
extra
:
data
.
logistics
},
{
label
:
'包装要求'
,
extra
:
data
.
packRequire
},
{
label
:
'其他要求'
,
extra
:
data
.
otherRequire
},
]
},
])
}
const
fetchDataSource
=
async
()
=>
{
let
shopList
=
GlobalConfig
.
web
.
shopInfo
.
filter
(
v
=>
v
.
type
==
1
).
map
(
v
=>
v
)
const
params
=
{
id
,
number
,
current
:
'1'
,
pageSize
:
'1'
}
await
PublicApi
.
getPurchasePlatformPurchaseInquiryDetails
({
...
params
}).
then
((
res
:
any
)
=>
{
if
(
res
.
code
!==
1000
)
{
history
.
goBack
();
return
;
}
const
{
data
}
=
res
;
const
areas
:
string
[]
=
[];
if
(
data
.
areas
)
{
data
.
areas
.
forEach
(
item
=>
{
areas
.
push
(
`
${
item
.
province
}
/
${
item
.
city
}
`
)
})
setAreas
(
areas
);
}
if
(
data
.
shopIds
)
{
const
ids
=
data
.
shopIds
;
const
filterStore
=
shopList
.
filter
(
item
=>
ids
.
indexOf
(
item
.
id
)
!==
-
1
);
setStoreList
([...
filterStore
]);
}
setDataSource
(
data
);
handleBasicEffect
(
data
);
handleConditionEffect
(
data
);
})
}
useEffect
(()
=>
{
fetchDataSource
();
},
[])
return
(
<
Context
.
Provider
value=
{
dataSource
}
>
<
PeripheralLayout
no=
{
dataSource
.
purchaseInquiryNo
}
tabLink=
{
TABLINK
}
effect=
{
<>
{
path
===
'detail'
&&
(
<
Button
onClick=
{
()
=>
setVisible
(
true
)
}
type=
'primary'
>
<
CheckCircleOutlined
/>
单据审核
</
Button
>
)
}
</>
}
components=
{
<
Fragment
>
<
ProgressLayout
/>
<
BasicLayout
effect=
{
basicEffect
}
/>
<
MaterialLayout
id=
{
id
}
number=
{
number
}
fetch=
{
PublicApi
.
getPurchasePurchaseInquiryProductlistList
}
/>
<
ConditionLayout
effect=
{
conditionEffect
}
/>
<
DemandLayout
storeList=
{
storeList
}
/>
<
RecordLyout
/>
</
Fragment
>
}
/>
<
ModalOperate
id=
{
id
}
title=
"单据审核"
modalType=
"audit"
visible=
{
visible
}
fetch=
{
PublicApi
.
postPurchasePlatformPurchaseInquiryExamine
}
onCancel=
{
()
=>
setVisible
(
false
)
}
onOk=
{
()
=>
history
.
goBack
()
}
/>
</
Context
.
Provider
>
)
}
export
default
DemandDetailed
;
src/pages/purchaseAbility/demandBidMgt/demand/index.tsx
0 → 100644
View file @
cc42398d
import
React
,
{
Fragment
,
useEffect
,
useState
}
from
'react'
;
import
{
Tag
,
Badge
,
Tooltip
}
from
'antd'
;
import
{
history
}
from
'umi'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
GlobalConfig
}
from
'@/global/config'
import
{
Context
}
from
'../../components/detail/components/context'
;
import
PeripheralLayout
from
'../../components/detail'
;
import
ProgressLayout
from
'../../components/detail/components/progressLayout'
;
import
BasicLayout
from
'../../components/detail/components/basicLayout'
;
import
ConditionLayout
from
'../../components/detail/components/conditionLayout'
;
import
RecordLyout
from
'../../components/detail/components/recordLyout'
;
import
moment
from
'moment'
;
import
{
OFFTER_EXTERNALSTATE
,
OFFTER_EXTERNALSTATE_COLOR
,
OFFTER_INTERNALSTATE
,
OFFTER_INTERNALSTATE_COLOR
}
from
'../../constants'
;
import
{
QuestionCircleOutlined
}
from
'@ant-design/icons'
;
import
MaterialLayout
from
'../../components/detail/components/materialLayout'
;
import
DemandLayout
from
'../../components/detail/components/demandLayout'
;
const
ICON_STYLE
:
any
=
{
color
:
'#C0C4CC'
,
fontSize
:
'14px'
,
marginLeft
:
'5px'
}
const
TABLINK
=
[
{
id
:
'progressLayout'
,
title
:
'流转进度'
},
{
id
:
'basicLayout'
,
title
:
'基本流程'
},
{
id
:
'materialLayout'
,
title
:
'采购材料'
},
{
id
:
'conditionLayout'
,
title
:
'交易条件'
},
{
id
:
'demandLayout'
,
title
:
'需求对接'
},
{
id
:
'recordLyout'
,
title
:
'流转记录'
},
]
const
DemandDetailed
=
()
=>
{
const
format
=
(
text
)
=>
{
return
<>
{
moment
(
text
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
}
</>
}
const
{
query
:
{
id
,
number
},
}:
any
=
history
.
location
;
const
[
dataSource
,
setDataSource
]
=
useState
<
any
>
({});
const
[
basicEffect
,
setBasicEffect
]
=
useState
<
any
>
([]);
const
[
conditionEffect
,
setConditionEffect
]
=
useState
<
any
>
([]);
const
[
areas
,
setAreas
]
=
useState
<
any
>
([]);
const
[
storeList
,
setStoreList
]
=
useState
<
Array
<
any
>>
([]);
const
handleBasicEffect
=
(
data
:
any
)
=>
{
setBasicEffect
([
{
col
:
[
{
label
:
'需求单号'
,
extra
:
data
.
purchaseInquiryNo
},
{
label
:
'外部状态'
,
extra
:
<
Tag
color=
{
OFFTER_EXTERNALSTATE_COLOR
[
data
.
externalState
]
}
>
{
OFFTER_EXTERNALSTATE
[
data
.
externalState
]
}
</
Tag
>
},
{
label
:
'内部状态'
,
extra
:
<
Badge
status=
{
OFFTER_INTERNALSTATE_COLOR
[
data
.
interiorState
]
}
text=
{
OFFTER_INTERNALSTATE
[
data
.
interiorState
]
}
/>
},
{
label
:
'单据时间'
,
extra
:
format
(
data
.
createTime
)
},
]
},
{
col
:
[
{
label
:
'需求摘要'
,
extra
:
data
.
details
},
{
label
:
'采购类型'
,
extra
:
(
<
Tooltip
placement=
"top"
title=
'有固定采购金额:采购金额固定,合同期内不可超过采购金额,无固定采购金额:采购金额不固定,可在合同期内按需采购'
>
{
data
.
purchaseType
===
1
?
'有固定采购金额'
:
'无固定采购金额'
}
<
QuestionCircleOutlined
style=
{
ICON_STYLE
}
/>
</
Tooltip
>
)
},
{
label
:
'比价方式'
,
extra
:
(
<
Tooltip
placement=
"top"
title=
'密封比价:只能看到供应商是否有报价,不能看到供应商的报价明细,只能解封后才能看到报价明细,非密封比价:可以在供应商报完价后立即看到报价明细,无须解封'
>
{
data
.
priceContrast
===
1
?
'密封比价'
:
'非密封比价'
}
<
QuestionCircleOutlined
style=
{
ICON_STYLE
}
/>
</
Tooltip
>
)
},
{
label
:
'会员名称'
,
extra
:
data
.
memberName
},
]
},
{
col
:
[
{
label
:
'适用地市'
,
extra
:
(
<
div
>
{
areas
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
p
key=
{
`areas${index + 1}`
}
>
{
item
}
</
p
>
))
}
</
div
>
)
},
]
},
])
}
const
handleConditionEffect
=
(
data
:
any
)
=>
{
setConditionEffect
([
{
col
:
[
{
label
:
'交付日期'
,
extra
:
format
(
data
.
deliveryTime
)
},
{
label
:
'交付地址'
,
extra
:
data
.
address
},
{
label
:
'截止日期'
,
extra
:
format
(
data
.
offerEndTime
)
},
]
},
{
col
:
[
{
label
:
'报价要求'
,
extra
:
data
.
offer
},
{
label
:
'付款方式'
,
extra
:
data
.
paymentType
},
{
label
:
'税费要求'
,
extra
:
data
.
taxes
},
]
},
{
col
:
[
{
label
:
'物流要求'
,
extra
:
data
.
logistics
},
{
label
:
'包装要求'
,
extra
:
data
.
packRequire
},
{
label
:
'其他要求'
,
extra
:
data
.
otherRequire
},
]
},
])
}
const
fetchDataSource
=
async
()
=>
{
let
shopList
=
GlobalConfig
.
web
.
shopInfo
.
filter
(
v
=>
v
.
type
==
1
).
map
(
v
=>
v
)
const
params
=
{
id
,
number
,
current
:
'1'
,
pageSize
:
'1'
}
await
PublicApi
.
getPurchasePurchaseInquiryDetails
({
...
params
}).
then
(
res
=>
{
if
(
res
.
code
!==
1000
)
{
history
.
goBack
();
return
;
}
const
{
data
}
=
res
;
const
areas
:
string
[]
=
[];
if
(
data
.
areas
)
{
data
.
areas
.
forEach
(
item
=>
{
areas
.
push
(
`
${
item
.
province
}
/
${
item
.
city
}
`
)
})
setAreas
(
areas
);
}
if
(
data
.
shopIds
)
{
const
ids
=
data
.
shopIds
;
const
filterStore
=
shopList
.
filter
(
item
=>
ids
.
indexOf
(
item
.
id
)
!==
-
1
);
setStoreList
([...
filterStore
]);
}
setDataSource
(
data
);
handleBasicEffect
(
data
);
handleConditionEffect
(
data
);
})
}
useEffect
(()
=>
{
fetchDataSource
();
},
[])
return
(
<
Context
.
Provider
value=
{
dataSource
}
>
<
PeripheralLayout
no=
{
dataSource
.
purchaseInquiryNo
}
tabLink=
{
TABLINK
}
components=
{
<
Fragment
>
<
ProgressLayout
/>
<
BasicLayout
effect=
{
basicEffect
}
/>
<
MaterialLayout
id=
{
id
}
number=
{
number
}
fetch=
{
PublicApi
.
getPurchasePurchaseInquiryProductlistList
}
/>
<
ConditionLayout
effect=
{
conditionEffect
}
/>
<
DemandLayout
storeList=
{
storeList
}
/>
<
RecordLyout
/>
</
Fragment
>
}
/>
</
Context
.
Provider
>
)
}
export
default
DemandDetailed
;
src/pages/purchaseAbility/demandBidMgt/detail/index.tsx
deleted
100644 → 0
View file @
1ee04843
src/pages/purchaseAbility/demandBidMgt/offer/index.tsx
View file @
cc42398d
...
...
@@ -26,7 +26,7 @@ const Offter = () => {
key
:
'purchaseInquiryNo'
,
dataIndex
:
'purchaseInquiryNo'
,
render
:
(
text
:
any
,
record
:
any
)
=>
(
<
EyePreview
>
{
text
}
</
EyePreview
>
<
EyePreview
url=
{
`/purchase/demandBidMgt/demand/detail?id=${record.purchaseInquiryId}&number=${record.purchaseInquiryNo}`
}
>
{
text
}
</
EyePreview
>
)
},
{
title
:
'需求摘要'
,
...
...
@@ -81,20 +81,13 @@ const Offter = () => {
title
:
'内部状态'
,
key
:
'interiorState'
,
dataIndex
:
'interiorState'
,
render
:
(
text
:
any
,
record
:
any
)
=>
(
<>
{
record
.
externalState
===
OFFTER_EXTERNALSTATE_TYPE
.
WAITSUBMIOFFER_TYPE
?
<
Tag
color=
{
OFFTER_INTERNALSTATE_COLOR
[
text
]
}
>
{
record
.
interiorStateName
}
</
Tag
>
:
<
Tag
color=
{
OFFTER_CONFIRMINTERIORSTATE_COLOR
[
record
.
confirmInteriorState
]
}
>
{
record
.
confirmInteriorStateName
}
</
Tag
>
}
</>
)
render
:
(
text
:
any
,
record
:
any
)
=>
<
Tag
color=
{
OFFTER_INTERNALSTATE_COLOR
[
text
]
}
>
{
record
.
interiorStateName
}
</
Tag
>
},
{
title
:
'操作'
,
key
:
'operate'
,
dataIndex
:
'operate'
,
render
:
(
text
:
any
,
record
:
any
)
=>
(
<
Button
type=
'link'
onClick=
{
()
=>
history
.
push
(
`/
memberCenter/procurementAbility/confirmOffer/offerInquire/preview?id=${record.id
}&turn=${record.turn}`
)
}
>
查看
</
Button
>
<
Button
type=
'link'
onClick=
{
()
=>
history
.
push
(
`/
purchase/demandBidMgt/offer/preview?id=${record.id}&number=${record.quotedPriceNo
}&turn=${record.turn}`
)
}
>
查看
</
Button
>
)
}];
...
...
src/pages/purchaseAbility/demandBidMgt/preview/index.tsx
View file @
cc42398d
import
React
,
{
useState
,
useEffect
,
Fragment
}
from
'react'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
Tag
,
Badge
,
Tooltip
}
from
'antd'
;
import
{
Context
}
from
'../../components/detail/components/context'
;
import
{
history
}
from
'umi'
;
import
PeripheralLayout
from
'../../components/detail'
;
import
ProgressLayout
from
'../../components/detail/components/progressLayout'
;
import
BasicLayout
from
'../../components/detail/components/basicLayout'
;
import
ConditionLayout
from
'../../components/detail/components/conditionLayout'
;
import
ContrastLyout
from
'../../components/detail/components/contrastLyout'
;
import
RecordLyout
from
'../../components/detail/components/recordLyout'
;
import
{
OFFTER_EXTERNALSTATE
,
OFFTER_EXTERNALSTATE_COLOR
,
OFFTER_INTERNALSTATE
,
OFFTER_INTERNALSTATE_COLOR
,
}
from
'../../constants'
;
import
{
QuestionCircleOutlined
}
from
'@ant-design/icons'
;
import
moment
from
'moment'
;
const
ICONSTYLE
:
any
=
{
color
:
'#C0C4CC'
,
fontSize
:
'14px'
,
marginLeft
:
'5px'
}
const
TABLINK
=
[
{
id
:
'progressLayout'
,
title
:
'流转进度'
},
{
id
:
'basicLayout'
,
title
:
'基本信息'
},
{
id
:
'conditionLayout'
,
title
:
'交易条件'
},
{
id
:
'contrastLyout'
,
title
:
'报价信息'
},
{
id
:
'recordLyout'
,
title
:
'流转记录'
},
]
const
ContrastPreview
=
()
=>
{
const
format
=
(
text
)
=>
{
return
<>
{
moment
(
text
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
}
</>
}
const
{
query
:
{
id
,
number
,
turn
}
}:
any
=
history
.
location
;
const
[
dataSource
,
setDataSource
]
=
useState
<
any
>
({});
const
[
basicEffect
,
setBasicEffect
]
=
useState
<
any
>
([]);
const
[
conditionEffect
,
setConditionEffect
]
=
useState
<
any
>
([]);
const
handleBasicEffect
=
(
data
:
any
)
=>
{
setBasicEffect
([
{
col
:
[
{
label
:
'需求单号'
,
extra
:
data
.
purchaseInquiryNo
},
{
label
:
'需求摘要'
,
extra
:
data
.
details
},
{
label
:
'外部状态'
,
extra
:
<
Tag
color=
{
OFFTER_EXTERNALSTATE_COLOR
[
data
.
externalState
]
}
>
{
OFFTER_EXTERNALSTATE
[
data
.
externalState
]
}
</
Tag
>
},
{
label
:
'内部状态'
,
extra
:
<
Badge
status=
{
OFFTER_INTERNALSTATE_COLOR
[
data
.
interiorState
]
}
text=
{
OFFTER_INTERNALSTATE
[
data
.
interiorState
]
}
/>
},
]
},
{
col
:
[
{
label
:
'采购类型'
,
extra
:
(
<
Tooltip
placement=
"top"
title=
'有固定采购金额:采购金额固定,合同期内不可超过采购金额,无固定采购金额:采购金额不固定,可在合同期内按需采购'
>
{
data
.
purchaseType
===
1
?
'有固定采购金额'
:
'无固定采购金额'
}
<
QuestionCircleOutlined
style=
{
ICONSTYLE
}
/>
</
Tooltip
>
)
},
{
label
:
'比价方式'
,
extra
:
(
<
Tooltip
placement=
"top"
title=
'密封比价:只能看到供应商是否有报价,不能看到供应商的报价明细,只能解封后才能看到报价明细,非密封比价:可以在供应商报完价后立即看到报价明细,无须解封'
>
{
data
.
priceContrast
===
1
?
'密封比价'
:
'非密封比价'
}
<
QuestionCircleOutlined
style=
{
ICONSTYLE
}
/>
</
Tooltip
>
)
},
{
label
:
'会员名称'
,
extra
:
data
.
memberName
},
]
},
{
col
:
[
{
label
:
'单据时间'
,
extra
:
format
(
data
.
createTime
)
},
{
label
:
'适用地市'
,
extra
:
'-'
},
]
},
])
}
const
handleConditionEffect
=
(
data
:
any
)
=>
{
setConditionEffect
([
{
col
:
[
{
label
:
'交付日期'
,
extra
:
format
(
data
.
deliveryTime
)
},
{
label
:
'交付地址'
,
extra
:
data
.
address
},
{
label
:
'报价截止时间'
,
extra
:
format
(
data
.
offerEndTime
)
},
]
},
{
col
:
[
{
label
:
'报价要求'
,
extra
:
data
.
offer
},
{
label
:
'付款方式'
,
extra
:
data
.
paymentType
},
{
label
:
'税费要求'
,
extra
:
data
.
taxes
},
]
},
{
col
:
[
{
label
:
'物流要求'
,
extra
:
data
.
logistics
},
{
label
:
'包装要求'
,
extra
:
data
.
packRequire
},
{
label
:
'其他要求'
,
extra
:
data
.
otherRequire
},
]
},
])
}
const
handleGetDataSource
=
async
()
=>
{
const
parmas
=
{
id
,
number
}
await
PublicApi
.
getPurchaseQuotedPricePlatformDetails
({
...
parmas
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
const
{
data
}
=
res
;
setDataSource
(
data
)
handleBasicEffect
(
data
);
handleConditionEffect
(
data
);
}
})
}
useEffect
(()
=>
{
handleGetDataSource
()
},
[])
return
(
<
Context
.
Provider
value=
{
dataSource
}
>
<
PeripheralLayout
no=
{
dataSource
.
purchaseInquiryNo
}
tabLink=
{
TABLINK
}
components=
{
<
Fragment
>
<
ProgressLayout
/>
<
BasicLayout
effect=
{
basicEffect
}
/>
<
ConditionLayout
effect=
{
conditionEffect
}
/>
<
ContrastLyout
preview=
{
true
}
effect=
{
{
id
,
turn
}
}
/>
<
RecordLyout
/>
</
Fragment
>
}
/>
</
Context
.
Provider
>
)
}
export
default
ContrastPreview
src/pages/purchaseAbility/demandBidMgt/quote/index.tsx
0 → 100644
View file @
cc42398d
import
React
,
{
useState
,
useEffect
,
Fragment
,
useCallback
}
from
'react'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
history
}
from
'umi'
;
import
moment
from
'moment'
;
import
{
Tag
}
from
'antd'
;
import
{
Context
}
from
'../../components/detail/components/context'
;
import
PeripheralLayout
from
'../../components/detail'
;
import
BasicLayout
from
'../../components/detail/components/basicLayout'
;
import
OtherLayout
from
'../../components/detail/components/otherLayout'
;
import
BidInfoLayout
from
'../../components/detail/components/bidInfoLayout'
;
import
{
OFFTER_EXTERNALSTATE
,
OFFTER_EXTERNALSTATE_COLOR
,
}
from
'../../constants'
;
const
TABLINK
=
[
{
id
:
'basicLayout'
,
title
:
'基本信息'
},
{
id
:
'contrastLyout'
,
title
:
'报价信息'
},
{
id
:
'otherLyout'
,
title
:
'其他说明'
},
]
const
QuoteDetails
=
()
=>
{
const
format
=
(
text
)
=>
{
return
<>
{
moment
(
text
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
}
</>
}
const
{
query
:
{
id
,
number
},
pathname
}:
any
=
history
.
location
;
const
[
dataSource
,
setDataSource
]
=
useState
<
any
>
({});
const
[
basicEffect
,
setBasicEffect
]
=
useState
<
any
>
([]);
const
[
otherEffect
,
setOtherEffect
]
=
useState
<
any
>
([]);
const
handleBasicEffect
=
(
data
:
any
)
=>
{
setBasicEffect
([
{
col
:
[
{
label
:
'报价单号'
,
extra
:
data
.
quotedPriceNo
},
{
label
:
'报价摘要'
,
extra
:
data
.
quotedDetails
},
{
label
:
'报价会员'
,
extra
:
data
.
createMemberName
},
{
label
:
'外部状态'
,
extra
:
<
Tag
color=
{
OFFTER_EXTERNALSTATE_COLOR
[
data
.
externalState
]
}
>
{
OFFTER_EXTERNALSTATE
[
data
.
externalState
]
}
</
Tag
>
}
]
},
{
col
:
[
{
label
:
'对应需求单号'
,
extra
:
data
.
purchaseInquiryNo
},
{
label
:
'联系人姓名'
,
extra
:
'缺少字段'
},
{
label
:
'联系人手机'
,
extra
:
'缺少字段'
},
]
},
{
col
:
[
{
label
:
'报价截止时间'
,
extra
:
format
(
data
.
offerEndTime
)
},
{
label
:
'单据时间'
,
extra
:
format
(
data
.
createTime
)
},
]
},
])
}
const
handleOtherEffect
=
(
data
:
any
)
=>
{
setOtherEffect
([
{
col
:
[
{
label
:
'交付说明'
,
extra
:
'缺少字段'
},
{
label
:
'付款说明'
,
extra
:
data
.
payDetails
},
{
label
:
'税费说明'
,
extra
:
data
.
taxes
},
]
},
{
col
:
[
{
label
:
'物流说明'
,
extra
:
data
.
logistics
},
{
label
:
'包装说明'
,
extra
:
data
.
packRequire
},
{
label
:
'其他说明'
,
extra
:
data
.
otherRequire
},
]
},
{
col
:
[
{
label
:
'附件'
,
extra
:
'缺少字段'
},
]
},
])
}
const
fetchDataSource
=
useCallback
(
async
()
=>
{
await
PublicApi
.
getPurchaseQuotedPricePlatformDetails
({
id
,
number
,
current
:
'1'
,
pageSize
:
'1'
}).
then
(
res
=>
{
if
(
res
.
code
!==
1000
)
{
return
;
}
const
{
data
}
=
res
;
setDataSource
(
data
);
handleBasicEffect
(
data
);
handleOtherEffect
(
data
)
})
},
[])
useEffect
(()
=>
{
fetchDataSource
()
},
[])
return
(
<
Context
.
Provider
value=
{
dataSource
}
>
<
PeripheralLayout
no=
{
dataSource
.
quotedPriceNo
}
detail=
{
dataSource
.
quotedDetails
}
tabLink=
{
TABLINK
}
components=
{
<
Fragment
>
<
BasicLayout
effect=
{
basicEffect
}
/>
<
BidInfoLayout
fetch=
{
PublicApi
.
getPurchaseConfirmQuotedPriceMaterielDetailed
}
effect=
{
{
turn
:
dataSource
.
count
,
id
}
}
/>
<
OtherLayout
effect=
{
otherEffect
}
/>
</
Fragment
>
}
/>
</
Context
.
Provider
>
)
}
export
default
QuoteDetails
;
src/pages/purchaseAbility/schema/index.ts
View file @
cc42398d
...
...
@@ -186,7 +186,7 @@ export const PurchaseDemandSchema: ISchema = {
type
:
'object'
,
"x-component"
:
'mega-layout'
,
properties
:
{
requisitionForm
No
:
{
purchaseInquiry
No
:
{
type
:
'string'
,
"x-component"
:
"Search"
,
"x-mega-props"
:
{
...
...
@@ -222,34 +222,44 @@ export const PurchaseDemandSchema: ISchema = {
inline
:
true
},
properties
:
{
"[start
DocumentsTime,endDocuments
Time]"
:
{
"[start
Time,end
Time]"
:
{
type
:
'string'
,
"x-component"
:
"dateSelect"
,
"x-component-props"
:
{
placeholder
:
'单据时间(全部)'
,
}
},
externalStat
e
:
{
memberNam
e
:
{
type
:
'string'
,
"x-component"
:
'Select'
,
"x-component-props"
:
{
placeholder
:
'外部状态'
,
className
:
'fixed-ant-selected-down'
,
// 该类强制将显示的下拉框出现在s
style
:
{
width
:
160
}
},
placeholder
:
'需求会员'
}
},
interiorState
:
{
type
:
'string'
,
"x-component"
:
'Select'
,
"x-component-props"
:
{
placeholder
:
'内部状态'
,
className
:
'fixed-ant-selected-down'
,
// 该类强制将显示的下拉框出现在s
style
:
{
width
:
160
}
externalState
:{
type
:
'string'
,
"x-component-props"
:{
placeholder
:
'外部状态'
},
enum
:
[
{
label
:
'作废'
,
value
:
-
1
},
{
label
:
'已完成'
,
value
:
99
},
{
label
:
'待提交需求单'
,
value
:
1
},
{
label
:
'待审核需求单'
,
value
:
2
},
{
label
:
'待提交报价单'
,
value
:
3
},
{
label
:
'待确认授标结果'
,
value
:
4
}
]
},
}
},
...
...
@@ -284,7 +294,7 @@ export const PurchaseDemandPublicSchema: ISchema = {
children
:
"{{controllerBtns}}"
}
},
requisitionForm
No
:
{
purchaseInquiry
No
:
{
type
:
'string'
,
"x-component"
:
"Search"
,
"x-mega-props"
:
{
...
...
@@ -324,23 +334,17 @@ export const PurchaseDemandPublicSchema: ISchema = {
placeholder
:
'需求摘要'
}
},
category
:
{
"[startTime,endTime]"
:
{
type
:
'string'
,
"x-component"
:
'SearchSelect'
,
"x-component"
:
"dateSelect"
,
"x-component-props"
:
{
placeholder
:
'请选择品类'
,
className
:
'fixed-ant-selected-down'
,
// 该类强制将显示的下拉框出现在select下, 只有这里出现问题, ??
fetchSearch
:
PublicApi
.
getProductSelectGetSelectCustomerCategory
,
style
:
{
width
:
160
}
placeholder
:
'单据时间(全部)'
,
}
},
"[startDocumentsTime,endDocumentsTime]"
:
{
memberName
:
{
type
:
'string'
,
"x-component"
:
"dateSelect"
,
"x-component-props"
:
{
placeholder
:
'
单据时间(全部)'
,
placeholder
:
'
需求会员'
}
},
}
...
...
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