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
linweijiong
jinfa-platform
Commits
ae76195d
Commit
ae76195d
authored
May 07, 2021
by
前端-钟卫鹏
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 商品添加是否税率功能
parent
c246086e
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
1706 additions
and
212 deletions
+1706
-212
priceAttributeForm.tsx
...commodity/products/addProductsItem/priceAttributeForm.tsx
+34
-0
context.ts
src/pages/procurement/_public/bid/context.ts
+2
-0
index.less
...llForBids/readyConfirmBid/components/basicInfo/index.less
+9
-0
index.tsx
...allForBids/readyConfirmBid/components/basicInfo/index.tsx
+101
-0
index.less
.../components/bidConfirm/components/givenBidItem/index.less
+0
-0
index.tsx
...d/components/bidConfirm/components/givenBidItem/index.tsx
+78
-0
index.less
...d/components/bidConfirm/components/totalAmount/index.less
+0
-0
index.tsx
...id/components/bidConfirm/components/totalAmount/index.tsx
+166
-0
index.less
...lForBids/readyConfirmBid/components/bidConfirm/index.less
+77
-0
index.tsx
...llForBids/readyConfirmBid/components/bidConfirm/index.tsx
+169
-0
index.less
...ids/readyConfirmBid/components/participateInfo/index.less
+27
-0
index.tsx
...Bids/readyConfirmBid/components/participateInfo/index.tsx
+126
-0
index.less
...ids/readyConfirmBid/components/remarkBidReport/index.less
+165
-0
index.tsx
...Bids/readyConfirmBid/components/remarkBidReport/index.tsx
+302
-0
index.tsx
...rocurement/callForBids/readyConfirmBid/constant/index.tsx
+111
-0
index.tsx
.../procurement/callForBids/readyConfirmBid/detail/index.tsx
+126
-18
useConfirmDetail.ts
...t/callForBids/readyConfirmBid/effects/useConfirmDetail.ts
+92
-0
index.tsx
...rocurement/callForBids/readyExpertRemark/detail/index.tsx
+3
-2
index.tsx
...s/procurement/callForBids/readySubmitBid/detail/index.tsx
+3
-2
index.tsx
...rocurement/callForBids/readySubmitReport/detail/index.tsx
+3
-2
index.tsx
...ges/procurement/callForBids/tenderSearch/detail/index.tsx
+17
-12
index.tsx
src/pages/procurement/components/bidParticulars/index.tsx
+14
-33
index.tsx
src/pages/procurement/components/descriptionsInfo/index.tsx
+7
-23
index.less
src/pages/procurement/components/remarkBidReport/index.less
+8
-1
index.tsx
src/pages/procurement/components/remarkBidReport/index.tsx
+13
-90
useSelfTable.tsx
...ement/tender/readyQualifityChecked/model/useSelfTable.tsx
+16
-5
index.tsx
src/pages/procurement/tender/tenderSearch/detail/index.tsx
+17
-11
useSelfTable.tsx
...es/procurement/tender/tenderSearch/model/useSelfTable.tsx
+12
-11
index.tsx
...rder/orderCollect/components/contractModalTable/index.tsx
+3
-0
index.tsx
...Order/orderCollect/components/materialTableCell/index.tsx
+3
-0
index.tsx
...transaction/purchaseOrder/orderCollect/constant/index.tsx
+2
-2
No files found.
src/pages/commodity/products/addProductsItem/priceAttributeForm.tsx
View file @
ae76195d
...
...
@@ -53,6 +53,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
const
[
isBatchSetting
,
setIsBatchSetting
]
=
useState
<
boolean
>
(
false
)
//是否点击批量设置
const
flagRef
=
useRef
<
boolean
>
(
false
)
const
[
isChangePriceType
,
setIsChangePriceType
]
=
useState
<
boolean
>
(
false
)
// 价格类型是否有变动
const
[
isTax
,
setIsTax
]
=
useState
<
boolean
>
(
true
)
// 是否含税
const
[
combineAttributeChangeFatories
,
setCombineAttributeChangeFatories
]
=
useState
<
number
>
(
0
)
...
...
@@ -660,6 +661,10 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
},
{})
}
const
onChangeTax
=
(
e
)
=>
{
setIsTax
(
e
.
target
.
checked
)
}
return
(<>
<
Form
{
...
layout
}
...
...
@@ -773,9 +778,38 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
</
span
>
}
valuePropName=
"checked"
initialValue=
{
true
}
>
<
Checkbox
disabled=
{
planPrice
!==
1
}
>
允许使用会员折扣价购买
</
Checkbox
>
</
Form
.
Item
>
<
Form
.
Item
name=
"isTax"
label=
"是否含税"
valuePropName=
"checked"
initialValue=
{
true
}
>
<
Checkbox
onChange=
{
onChangeTax
}
>
是
</
Checkbox
>
</
Form
.
Item
>
{
isTax
?
<
Form
.
Item
name=
"tax"
label=
"税率"
rules=
{
[
{
required
:
true
,
message
:
'税率必须填写'
,
},
{
pattern
:
/^
\d
+
(\.\d
{1,2}
)?
$/
,
message
:
'税率仅限两位小数'
,
},
]
}
>
<
Input
suffix=
"%"
/>
</
Form
.
Item
>
:
null
}
</
Form
>
{
/* 批量设置按钮 */
}
{
...
...
src/pages/procurement/_public/bid/context.ts
View file @
ae76195d
...
...
@@ -12,3 +12,5 @@ export const RemarkDetailContext = createContext<any>({})
// 待提交评标报告详情
export
const
ReportDetailContext
=
createContext
<
any
>
({})
// 待定标详情
export
const
ReadyConfirmBidContext
=
createContext
<
any
>
({})
src/pages/procurement/callForBids/readyConfirmBid/components/basicInfo/index.less
0 → 100644
View file @
ae76195d
.card-list {
font-size: 12px;
line-height: 20px;
margin-top: 24px;
}
.card-list_title {
font-size: 12px;
color: #909399;
}
src/pages/procurement/callForBids/readyConfirmBid/components/basicInfo/index.tsx
0 → 100644
View file @
ae76195d
import
React
,
{
useContext
,
useState
}
from
'react'
import
{
Row
,
Col
}
from
'antd'
import
MellowCard
from
'@/components/MellowCard'
import
{
ReadyConfirmBidContext
}
from
'@/pages/procurement/_public/bid/context'
;
import
{
formatTimeString
}
from
'@/utils'
import
style
from
'./index.less'
import
{
CaretDownOutlined
,
CaretUpOutlined
}
from
'@ant-design/icons'
;
import
{
BidInStateTexts
,
BidOutStateTexts
,
PURCHASE_TYPE
}
from
'@/constants'
;
/**
* 基本信息
*/
interface
IBasicInfo
{
title
?:
string
;
}
const
BasicInfo
:
React
.
FC
<
IBasicInfo
>
=
({
title
})
=>
{
const
bidDetailContext
=
useContext
(
ReadyConfirmBidContext
)
const
{
data
,
ctl
}
=
bidDetailContext
const
[
showMore
,
setShowMore
]
=
useState
<
boolean
>
(
false
)
const
toogleMore
=
()
=>
{
setShowMore
(
!
showMore
)
}
// 基本信息
const
basicColumnList
=
[
{
span
:
8
,
fieldList
:
[
{
title
:
'招标编号:'
,
name
:
'code'
},
{
title
:
'外部状态:'
,
name
:
'tenderOutStatus'
,
render
:
(
text
)
=>
BidOutStateTexts
[
text
]},
{
title
:
'内部状态:'
,
name
:
'inviteTenderInStatus'
,
render
:
(
text
)
=>
BidInStateTexts
[
text
]
},
{
title
:
'发布时间:'
,
name
:
'createTime'
,
render
:
(
text
)
=>
formatTimeString
(
text
)
},
]
},
{
span
:
8
,
fieldList
:
[
{
title
:
'招标项目:'
,
name
:
'projectName'
},
{
title
:
'项目预算:'
,
name
:
'budget'
},
{
title
:
'采购类型:'
,
name
:
'purchaseType'
,
render
:
(
text
)
=>
PURCHASE_TYPE
[
text
]
},
{
title
:
'招标会员:'
,
name
:
'memberName'
},
]
},
{
span
:
8
,
fieldList
:
[
{
title
:
'招标摘要:'
,
name
:
'remark'
},
{
title
:
'适用地址:'
,
name
:
'inviteTenderAreaList'
,
render
:
(
t
,
r
)
=>
{
const
showDataSource
=
showMore
?
data
[
'inviteTenderAreaList'
]
:
[...
data
[
'inviteTenderAreaList'
]].
splice
(
0
,
3
)
return
<>
<
p
>
{
showDataSource
.
map
((
_item
,
_i
)
=>
<
p
key=
{
`address${_i}`
}
>
{
_item
.
provinceName
+
'/'
+
(
_item
.
cityName
||
''
)
}
</
p
>)
}
</
p
>
{
data
.
length
>
3
&&
<
p
onClick=
{
toogleMore
}
style=
{
{
cursor
:
'pointer'
}
}
className=
"commonPickColor"
>
展开
{
showMore
?
<
CaretDownOutlined
/>
:
<
CaretUpOutlined
/>
}
</
p
>
}
</>
}
},
]
}
]
const
RenderBasicInfoColumns
=
({
infoList
=
[],
dataSource
})
=>
<
Row
>
{
infoList
.
map
(({
span
,
fieldList
=
[]},
index
)
=>
(<
Col
key=
{
index
}
span=
{
span
}
>
{
fieldList
.
length
?
fieldList
.
map
((
_v
,
_i
)
=>
<
Row
key=
{
_v
.
name
}
className=
{
style
[
'card-list'
]
}
style=
{
_v
.
rowStyle
}
>
{
_v
?.
noTitle
?
null
:
<
Col
span=
{
6
}
className=
{
style
[
'card-list_title'
]
}
>
{
_v
.
title
}
</
Col
>
}
<
Col
>
{
_v
.
render
?
_v
.
render
(
dataSource
[
_v
.
name
],
dataSource
)
:
dataSource
[
_v
.
name
]
}
</
Col
>
</
Row
>)
:
null
}
</
Col
>))
}
</
Row
>
return
(
<
MellowCard
title=
{
title
}
style=
{
{
marginTop
:
24
}
}
bordered=
{
false
}
fullHeight
>
<
RenderBasicInfoColumns
infoList=
{
basicColumnList
}
dataSource=
{
data
}
/>
</
MellowCard
>)
}
BasicInfo
.
defaultProps
=
{}
export
default
BasicInfo
src/pages/procurement/callForBids/readyConfirmBid/components/bidConfirm/components/givenBidItem/index.less
0 → 100644
View file @
ae76195d
src/pages/procurement/callForBids/readyConfirmBid/components/bidConfirm/components/givenBidItem/index.tsx
0 → 100644
View file @
ae76195d
import
React
,
{
useState
,
useRef
,
useContext
,
useEffect
}
from
'react'
import
{
Form
,
Input
,
Checkbox
,
Row
,
Col
,
InputNumber
}
from
'antd'
;
import
style
from
'../../index.less'
/**
* 招标定标表格中 授标的每一项 待定标专用
*/
export
interface
GivenBidItemProps
{
}
export
const
GivenBidItem
:
React
.
FC
<
GivenBidItemProps
>
=
({})
=>
{
const
onChangeInput
=
(
v
)
=>
{
console
.
log
(
v
,
'改变'
)
}
const
chanegChecked
=
(
e
)
=>
{
if
(
e
.
target
.
checked
)
{
e
.
nativeEvent
.
target
.
parentElement
.
parentElement
.
parentElement
.
parentElement
.
parentElement
.
parentElement
.
parentElement
.
style
.
border
=
'1px solid #00B37A'
e
.
nativeEvent
.
target
.
parentElement
.
parentElement
.
nextSibling
.
style
.
display
=
'inline-block'
}
else
{
e
.
nativeEvent
.
target
.
parentElement
.
parentElement
.
parentElement
.
parentElement
.
parentElement
.
parentElement
.
parentElement
.
style
.
border
=
'none'
e
.
nativeEvent
.
target
.
parentElement
.
parentElement
.
nextSibling
.
style
.
display
=
'none'
}
}
return
<
div
className=
{
style
.
throwBidInfo
}
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
含税单价:
</
p
></
Col
>
<
Col
><
p
>
¥19.00
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
含税金额:
</
p
></
Col
>
<
Col
><
p
>
¥30000
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
是否含税:
</
p
></
Col
>
<
Col
><
p
>
是
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
税率:
</
p
></
Col
>
<
Col
><
p
>
7%
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
授标:
</
p
></
Col
>
<
Col
>
<
p
>
<
Checkbox
defaultChecked=
{
false
}
style=
{
{
marginRight
:
16
}
}
onChange=
{
chanegChecked
}
/>
<
InputNumber
defaultValue=
{
100
}
min=
{
0
}
max=
{
100
}
formatter=
{
value
=>
`${value}%`
}
parser=
{
value
=>
value
.
replace
(
'%'
,
''
)
}
onChange=
{
onChangeInput
}
style=
{
{
display
:
'none'
}
}
/>
</
p
>
</
Col
>
</
Row
>
</
div
>
</
div
>
}
GivenBidItem
.
defaultProps
=
{}
export
default
GivenBidItem
src/pages/procurement/callForBids/readyConfirmBid/components/bidConfirm/components/totalAmount/index.less
0 → 100644
View file @
ae76195d
src/pages/procurement/callForBids/readyConfirmBid/components/bidConfirm/components/totalAmount/index.tsx
0 → 100644
View file @
ae76195d
import
React
,
{
useState
,
useRef
,
useContext
,
useEffect
}
from
'react'
import
{
Form
,
Input
,
Divider
,
Row
,
Col
}
from
'antd'
;
import
style
from
'../../index.less'
/**
* 招标定标表格底部的 合计模块 待定标专用
*/
export
interface
TotalAmountProps
{
}
export
const
TotalAmount
:
React
.
FC
<
TotalAmountProps
>
=
({})
=>
{
return
<
div
className=
{
style
.
totalWrapper
}
>
<
Row
>
<
Col
span=
{
4
}
></
Col
>
<
Col
span=
{
4
}
></
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
报价小计:
</
p
></
Col
>
<
Col
><
p
>
¥156,000.00(含税)
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
报价排名:
</
p
></
Col
>
<
Col
><
p
>
1
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
最低标价:
</
p
></
Col
>
<
Col
><
p
>
3
</
p
></
Col
>
</
Row
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
报价小计:
</
p
></
Col
>
<
Col
><
p
>
¥158,000.00(含税)
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
报价排名:
</
p
></
Col
>
<
Col
><
p
>
2
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
最低标价:
</
p
></
Col
>
<
Col
><
p
>
2
</
p
></
Col
>
</
Row
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
报价小计:
</
p
></
Col
>
<
Col
><
p
>
¥168,000.00(含税)
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
报价排名:
</
p
></
Col
>
<
Col
><
p
>
3
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
最低标价:
</
p
></
Col
>
<
Col
><
p
>
0
</
p
></
Col
>
</
Row
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
报价小计:
</
p
></
Col
>
<
Col
><
p
>
¥176,000.00(含税)
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
报价排名:
</
p
></
Col
>
<
Col
><
p
>
4
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
最低标价:
</
p
></
Col
>
<
Col
><
p
>
3
</
p
></
Col
>
</
Row
>
</
div
>
</
Col
>
</
Row
>
<
Divider
dashed=
{
true
}
style=
{
{
margin
:
0
,
marginBottom
:
8
}
}
/>
<
Row
>
<
Col
span=
{
4
}
></
Col
>
<
Col
span=
{
4
}
></
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
授标数量:
</
p
></
Col
>
<
Col
><
p
>
3
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
授标总额:
</
p
></
Col
>
<
Col
><
p
>
¥100,000.00(含税)
</
p
></
Col
>
</
Row
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
授标数量:
</
p
></
Col
>
<
Col
><
p
>
1
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
授标总额:
</
p
></
Col
>
<
Col
><
p
>
¥54,000.00(含税)
</
p
></
Col
>
</
Row
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
授标数量:
</
p
></
Col
>
<
Col
><
p
>
0
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
授标总额:
</
p
></
Col
>
<
Col
><
p
>
0
</
p
></
Col
>
</
Row
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
授标数量:
</
p
></
Col
>
<
Col
><
p
>
3
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
授标总额:
</
p
></
Col
>
<
Col
><
p
>
0
</
p
></
Col
>
</
Row
>
</
div
>
</
Col
>
</
Row
>
</
div
>
}
TotalAmount
.
defaultProps
=
{}
export
default
TotalAmount
src/pages/procurement/callForBids/readyConfirmBid/components/bidConfirm/index.less
0 → 100644
View file @
ae76195d
.card-list {
font-size: 12px;
// line-height: 20px;
// margin-top: 24px;
// border: 1px solid #F4F5F7;
// padding: 12px;
p {
margin-bottom: 8px;
}
}
.card-list_title {
font-size: 12px;
color: #909399;
}
.bidConfirmWrapper {
:global {
.ant-row {
.ant-col {
.ant-row {
.ant-col-4 {
padding-top: 0;
padding-bottom: 0;
margin-bottom: 2px;
margin-top: 2px;
}
}
}
}
}
background: #F4F5F7;
.bidTableHead {
height: 32px;
line-height: 32px;
background: #F4F5F7;
border: 4px solid #F4F5F7;
color: #303133;
padding-left: 16px;
img {
width: 24px;
height: 24px;
}
.levelCircle {
display: inline-block;
width: 20px;
height: 20px;
line-height: 20px;
background: #EBECF0;
border-radius: 50%;
color: #909399;
margin-right: 8px;
text-align: center;
}
}
.materialInfo, .amountInfo, .throwBidInfo, .totalWrapper {
height: 162px;
background-color: #fff;
padding: 16px;
position: relative;
overflow: hidden;
}
.rankNumber {
width: 32px;
height: 32px;
font-size: 12px;
font-weight: 500;
color: #606266;
line-height: 44px;
border-radius: 50%;
background-color: #F4F5F7;
position: absolute;
top: -16px;
left: -16px;
text-align: right;
padding-right: 6px;
}
}
src/pages/procurement/callForBids/readyConfirmBid/components/bidConfirm/index.tsx
0 → 100644
View file @
ae76195d
import
React
,
{
useContext
,
useState
}
from
'react'
import
{
Row
,
Col
}
from
'antd'
import
MellowCard
from
'@/components/MellowCard'
import
{
BidDetailContext
}
from
'@/pages/procurement/_public/bid/context'
;
import
style
from
'./index.less'
import
level1
from
'@/assets/imgs/rank1.png'
import
level2
from
'@/assets/imgs/rank2.png'
import
level3
from
'@/assets/imgs/rank3.png'
import
TotalAmount
from
'./components/totalAmount'
;
import
GivenBidItem
from
'./components/givenBidItem'
;
/**
* 招标定标 待定标专用
*/
export
interface
BidConfirmProps
{
cardTitle
?:
string
;
}
const
BidConfirm
:
React
.
FC
<
BidConfirmProps
>
=
({
cardTitle
})
=>
{
const
bidDetailContext
=
useContext
(
BidDetailContext
)
const
{
data
,
ctl
}
=
bidDetailContext
return
(
<
div
id=
"bidConfirm"
>
<
MellowCard
title=
{
cardTitle
}
style=
{
{
marginTop
:
24
}
}
bordered=
{
false
}
fullHeight
>
<
div
className=
{
style
.
bidConfirmWrapper
}
>
<
Row
gutter=
{
[
0
,
4
]
}
>
<
Col
span=
{
24
}
>
<
Row
>
<
Col
span=
{
4
}
><
p
className=
{
style
.
bidTableHead
}
>
采购物料
</
p
></
Col
>
<
Col
span=
{
4
}
><
p
className=
{
style
.
bidTableHead
}
>
采购数量
</
p
></
Col
>
<
Col
span=
{
4
}
><
p
className=
{
style
.
bidTableHead
}
><
img
src=
{
level1
}
alt=
"排名一"
/>
广州白马皮具交易中心
</
p
></
Col
>
<
Col
span=
{
4
}
><
p
className=
{
style
.
bidTableHead
}
><
img
src=
{
level2
}
alt=
"排名二"
/>
东莞绿洲皮具有限公司
</
p
></
Col
>
<
Col
span=
{
4
}
><
p
className=
{
style
.
bidTableHead
}
><
img
src=
{
level3
}
alt=
"排名三"
/>
江门华飞皮具有限公司
</
p
></
Col
>
<
Col
span=
{
4
}
><
p
className=
{
style
.
bidTableHead
}
><
span
className=
{
style
.
levelCircle
}
>
4
</
span
>
广州万福皮具有限公司
</
p
></
Col
>
</
Row
>
<
Row
gutter=
{
[
0
,
4
]
}
style=
{
{
margin
:
'0 4px'
}
}
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
.
materialInfo
}
>
<
span
className=
{
style
.
rankNumber
}
>
1
</
span
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
物料编号:
</
p
></
Col
>
<
Col
><
p
>
Q89YTE1
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
物料名称:
</
p
></
Col
>
<
Col
><
p
>
进口头层牛皮荔枝纹
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
规格型号:
</
p
></
Col
>
<
Col
><
p
>
红色/XL/厚1.5mm
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
品类:
</
p
></
Col
>
<
Col
><
p
>
牛皮
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
品牌:
</
p
></
Col
>
<
Col
><
p
>
PELLE
</
p
></
Col
>
</
Row
>
</
div
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
.
amountInfo
}
>
<
span
>
3000
</
span
>
<
br
/>
<
span
style=
{
{
color
:
"#909399"
}
}
>
(次)
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
GivenBidItem
/>
</
Col
>
<
Col
span=
{
4
}
>
<
GivenBidItem
/>
</
Col
>
<
Col
span=
{
4
}
>
<
GivenBidItem
/>
</
Col
>
<
Col
span=
{
4
}
>
<
GivenBidItem
/>
</
Col
>
</
Row
>
<
Row
gutter=
{
[
0
,
4
]
}
style=
{
{
margin
:
'0 4px'
}
}
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
.
materialInfo
}
>
<
span
className=
{
style
.
rankNumber
}
>
2
</
span
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
物料编号:
</
p
></
Col
>
<
Col
><
p
>
Q89YTE1
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
物料名称:
</
p
></
Col
>
<
Col
><
p
>
进口头层牛皮荔枝纹
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
规格型号:
</
p
></
Col
>
<
Col
><
p
>
红色/XL/厚1.5mm
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
品类:
</
p
></
Col
>
<
Col
><
p
>
牛皮
</
p
></
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
品牌:
</
p
></
Col
>
<
Col
><
p
>
PELLE
</
p
></
Col
>
</
Row
>
</
div
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
.
amountInfo
}
>
<
span
>
3000
</
span
>
<
br
/>
<
span
style=
{
{
color
:
"#909399"
}
}
>
(次)
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
GivenBidItem
/>
</
Col
>
<
Col
span=
{
4
}
>
<
GivenBidItem
/>
</
Col
>
<
Col
span=
{
4
}
>
<
GivenBidItem
/>
</
Col
>
<
Col
span=
{
4
}
>
<
GivenBidItem
/>
</
Col
>
</
Row
>
<
Row
gutter=
{
[
0
,
4
]
}
style=
{
{
margin
:
'0 4px'
}
}
>
<
Col
span=
{
24
}
>
<
TotalAmount
/>
</
Col
>
</
Row
>
</
Col
>
</
Row
>
</
div
>
</
MellowCard
>
</
div
>)
}
BidConfirm
.
defaultProps
=
{}
export
default
BidConfirm
src/pages/procurement/callForBids/readyConfirmBid/components/participateInfo/index.less
0 → 100644
View file @
ae76195d
.card-list {
font-size: 12px;
line-height: 20px;
margin-top: 24px;
// border: 1px solid #F4F5F7;
// padding: 12px;
}
.card-list_title {
font-size: 12px;
color: #909399;
}
.participateContent {
border: 1px solid #F4F5F7;
padding: 12px;
margin-bottom: 16px;
border-top: 1px solid #00B37A;
}
.amount {
font-weight: bold;
border-bottom: 1px dashed #EBECF0;
margin-bottom: 0;
padding-bottom: 12px;
span {
color: #909399
}
}
src/pages/procurement/callForBids/readyConfirmBid/components/participateInfo/index.tsx
0 → 100644
View file @
ae76195d
import
React
,
{
useContext
,
useState
}
from
'react'
import
{
Table
,
Button
,
Radio
,
Tooltip
,
Row
,
Col
}
from
'antd'
import
MellowCard
from
'@/components/MellowCard'
import
{
BidDetailContext
}
from
'@/pages/procurement/_public/bid/context'
;
import
{
QuestionCircleOutlined
,
UserOutlined
}
from
'@ant-design/icons'
;
import
style
from
'./index.less'
import
CustomTag
from
'@/pages/procurement/components/CustomTag'
;
/**
* 会员参标信息 待定标专用
*/
export
interface
ParticipateInfoProps
{
cardTitle
?:
string
;
}
const
ParticipateInfo
:
React
.
FC
<
ParticipateInfoProps
>
=
({
cardTitle
})
=>
{
const
bidDetailContext
=
useContext
(
BidDetailContext
)
const
{
data
,
ctl
}
=
bidDetailContext
const
mockData
=
[
{
company
:
'广州第三个官方工地公司'
,
amount
:
13516
,
isTax
:
true
,
status
:
1
,
createTime
:
'2012-12-14 23:35:43'
,
no
:
'HEGF05495'
,
},
{
company
:
'广州第三个官方工地公司'
,
amount
:
13516
,
isTax
:
false
,
status
:
1
,
createTime
:
'2012-12-14 23:35:43'
,
no
:
'HEGF05495'
,
},
{
company
:
'广州第三个官方工地公司'
,
amount
:
13516
,
isTax
:
false
,
status
:
2
,
createTime
:
'2012-12-14 23:35:43'
,
no
:
'HEGF05495'
,
},
{
company
:
'广州第三个官方工地公司'
,
amount
:
13516
,
isTax
:
true
,
status
:
1
,
createTime
:
'2012-12-14 23:35:43'
,
no
:
'HEGF05495'
,
},
{
company
:
'广州第三个官方工地公司'
,
amount
:
13516
,
isTax
:
true
,
status
:
0
,
createTime
:
'2012-12-14 23:35:43'
,
no
:
'HEGF05495'
,
},
{
company
:
'广州第三个官方工地公司'
,
amount
:
13516
,
isTax
:
true
,
status
:
1
,
createTime
:
'2012-12-14 23:35:43'
,
no
:
'HEGF05495'
,
},
{
company
:
'广州第三个官方工地公司'
,
amount
:
13516
,
isTax
:
true
,
status
:
2
,
createTime
:
'2012-12-14 23:35:43'
,
no
:
'HEGF05495'
,
},
]
return
(
<
div
id=
"participateInfo"
>
<
MellowCard
title=
{
cardTitle
}
style=
{
{
marginTop
:
24
}
}
bordered=
{
false
}
fullHeight
>
<
div
className=
{
style
.
participateWrapper
}
>
<
Row
gutter=
{
[
16
,
0
]
}
>
{
mockData
.
map
((
item
,
index
)
=>
(<
Col
span=
{
4
}
key=
{
index
}
>
<
div
className=
{
style
.
participateContent
}
>
<
div
className=
{
style
.
topWrapper
}
>
<
h3
>
{
item
.
company
}
</
h3
>
<
p
className=
{
style
.
amount
}
>
¥
{
item
.
amount
}
<
span
>
{
item
.
isTax
?
' (含税)'
:
' (不含税)'
}
</
span
></
p
>
</
div
>
<
div
className=
{
style
.
contentWrapper
}
>
<
Row
className=
{
style
[
'card-list'
]
}
>
<
Col
span=
{
8
}
className=
{
style
[
'card-list_title'
]
}
>
环节状态:
</
Col
>
<
Col
>
<
CustomTag
type=
"out"
status=
{
item
.
status
}
/>
</
Col
>
</
Row
>
<
Row
className=
{
style
[
'card-list'
]
}
>
<
Col
span=
{
8
}
className=
{
style
[
'card-list_title'
]
}
>
投标时间:
</
Col
>
<
Col
>
{
item
.
createTime
}
</
Col
>
</
Row
>
<
Row
className=
{
style
[
'card-list'
]
}
>
<
Col
span=
{
8
}
className=
{
style
[
'card-list_title'
]
}
>
投标单号:
</
Col
>
<
Col
>
{
item
.
no
}
</
Col
>
</
Row
>
</
div
>
</
div
>
</
Col
>
))
}
</
Row
>
</
div
>
</
MellowCard
>
</
div
>)
}
ParticipateInfo
.
defaultProps
=
{}
export
default
ParticipateInfo
src/pages/procurement/callForBids/readyConfirmBid/components/remarkBidReport/index.less
0 → 100644
View file @
ae76195d
.card-list {
font-size: 12px;
line-height: 20px;
margin-top: 24px;
border: 1px solid #F4F5F7;
padding: 12px;
&:hover {
.deleteMember {
display: block;
}
}
}
.card-list-dash {
font-size: 12px;
line-height: 20px;
margin-top: 24px;
border: 1px dashed #D8DDE6;
padding: 12px;
cursor: pointer;
position: relative;
}
.deleteMember {
display: none;
width: 24px;
height: 24px;
text-align: center;
position: absolute;
right: 12px;
top: 24px;
border: none;
color: #fff;
background-color: rgba(0,0,0,0.4);
}
.card-list_title {
font-size: 12px;
color: #909399;
}
.headColor {
font-weight: 500;
color: #909399;
}
.rankContainer {
.levelCircle {
display: inline-block;
width: 20px;
height: 20px;
background: #EBECF0;
border-radius: 50%;
color: #909399;
margin-right: 8px;
text-align: center;
}
p {
display: flex;
justify-content: space-between;
margin-left: 8px;
}
h5 {
margin-left: 8px;
}
}
// .remarkBidReportWrapper {
// // 评标委员会
// .remarkCommitteeContainer {
// margin-bottom: 24px;
.committeeItem {
position: relative;
display: flex;
background-color: #FAFBFC;
text-align: center;
padding-top: 12px;
padding-left: 12px;
p {
align-items: center;
height: 56px;
line-height: 56px;
}
.avater {
width: 72px;
img {
width: 32px;
height: 32px;
}
p {
height: 12px;
font-size: 12px;
font-weight: 400;
color: #909399;
line-height: 12px;
}
}
.status {
position: absolute;
right: 0;
top: 0;
height: 12px;
font-size: 12px;
font-weight: 400;
color: #00B37A;
line-height: 12px;
padding: 2px 4px;
background-color: #E4F7EF;
}
.statusInfo {
color: #5243AA;
background-color: #6554C0;
}
.statusReceive {
color: #2266EE;
background-color: #F0F7FF;
}
.statusReject {
color: #D32F2F;
background-color: #FFF2F0;
}
}
// }
// 评标记录
.remarkRecordContainer {
.rankContent {
display: flex;
p {
img {
display: inline-block;
width: 24px;
height: 24px;
}
span {
&:first-child {
margin-right: 14px;
}
}
}
}
.remarkRecordHead {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}
:global {
.ant-radio-button-wrapper:hover {
color: #606266;
}
.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {
color: #fff;
background: #6B778C;
border-color: #6B778C;
}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before {
background-color: #6B778C;
}
.ant-table-thead > tr > th {
color: #909399;
}
}
.remarkFile {
.card-list {
margin-top: 12px;
border: none;
}
}
}
// }
src/pages/procurement/callForBids/readyConfirmBid/components/remarkBidReport/index.tsx
0 → 100644
View file @
ae76195d
import
React
,
{
useContext
,
useEffect
,
useRef
,
useState
}
from
'react'
import
{
Table
,
Button
,
Radio
,
Row
,
Col
,
message
}
from
'antd'
import
MellowCard
from
'@/components/MellowCard'
import
{
UserOutlined
,
DeleteOutlined
}
from
'@ant-design/icons'
;
import
style
from
'./index.less'
import
imgLink
from
'@/assets/imgs/default_avatar.png'
import
level1
from
'@/assets/imgs/rank1.png'
import
level2
from
'@/assets/imgs/rank2.png'
import
level3
from
'@/assets/imgs/rank3.png'
import
{
ISchemaFormActions
,
ISchemaFormAsyncActions
}
from
'@formily/antd'
;
import
{
ExpertRectractStatus
}
from
'@/constants'
;
import
cx
from
'classnames'
import
{
groupBy
}
from
'../../../readySubmitReport/constant'
;
import
{
EditableCell
,
EditableRow
}
from
'../../../readySubmitReport/components/remarkTableCell'
;
import
{
ReadyConfirmBidContext
}
from
'@/pages/procurement/_public/bid/context'
;
/**
* 评标报告 待定标专用
*/
export
interface
RemarkBidReportProps
{
cardTitle
?:
string
;
addSchemaAction
?:
ISchemaFormActions
|
ISchemaFormAsyncActions
;
}
const
RemarkBidReport
:
React
.
FC
<
RemarkBidReportProps
>
=
({
cardTitle
})
=>
{
const
{
data
,
submitData
,
submitCtl
}
=
useContext
(
ReadyConfirmBidContext
)
const
[
transferRadio
,
setTransferRadio
]
=
useState
<
number
>
(
0
)
const
{
fileList
,
recommandList
,
childTableData
}
=
submitData
const
{
setFileList
,
setRecommandList
,
setChildrenTableData
}
=
submitCtl
const
[
evaluationRecord
,
setEvaluationRecord
]
=
useState
<
any
>
([])
const
[
childTableColumns
,
setChildrenTableColumns
]
=
useState
<
any
>
([])
useEffect
(()
=>
{
// if(data?.evaluationTenderRecommendList.length) {
// setRecommandList(data.evaluationTenderRecommendList)
// }
if
(
data
?.
memberList
.
length
)
{
// 转换数据 生成评分项radio和所有分块表格
let
dataSource
:
any
=
[],
tempObject
:
any
=
{}
const
{
memberList
}
=
data
for
(
let
i
=
0
;
i
<
memberList
.
length
;
i
++
)
{
let
item
=
memberList
[
i
]
tempObject
.
id
=
item
.
id
tempObject
.
memberId
=
item
.
memberId
tempObject
.
memberName
=
item
.
memberName
// for(let j = 0; j < item.evaluationTenderList.length; j++) {
// let _item = item['evaluationTenderList'][j]
// tempObject.expertExtractRecordId = _item['expertExtractRecord']['id']
// tempObject.score = _item['score']
// tempObject.sort = _item['sort']
// tempObject.standard = _item['standard']
// tempObject.standardScore = _item['standardScore']
// tempObject.term = _item['term']
// dataSource.push({...tempObject})
// }
}
// 计算总分 计算平均分
const
computedData
=
groupBy
(
dataSource
,
'memberName'
)
const
computedScore
=
Object
.
keys
(
computedData
).
map
((
item
,
index
)
=>
{
let
expertNumber
=
Object
.
keys
(
groupBy
(
computedData
[
item
],
'expertExtractRecordId'
)).
length
let
total
=
computedData
[
item
].
reduce
((
a
,
b
)
=>
a
+
b
.
score
,
0
)
return
{
memberName
:
item
,
total
,
average
:
total
/
expertNumber
,
expertNumber
,
}
})
const
dataBySort
=
groupBy
(
dataSource
,
'sort'
)
setEvaluationRecord
(
dataBySort
)
// 根据评标sort分类后的数据 遍历 分子表格
let
childrenTableDataSource
=
[]
// table data
let
childTableDataColumns
=
[]
// table columns
Object
.
keys
(
dataBySort
).
forEach
((
item
,
index
)
=>
{
let
childTableData
=
[]
let
childTableColumns
=
[{
title
:
'会员'
,
dataIndex
:
'memberName'
,
key
:
'memberName'
,
render
:
(
t
,
r
,
i
)
=>
renderRanking
(
t
,
r
,
++
i
)
},
{
title
:
'修正总分'
,
dataIndex
:
'total'
,
key
:
'total'
,
editable
:
true
,
},
{
title
:
'平均分'
,
dataIndex
:
'average'
,
key
:
'average'
,
className
:
'commonHide'
}]
let
childTableColumnResult
=
[]
const
childDataSource
=
groupBy
(
dataBySort
[
item
],
'memberName'
)
Object
.
keys
(
childDataSource
).
forEach
((
_item
,
_index
)
=>
{
// 动态子表格列 // 合并同会员下的专家评标
// 相同同会员名下的分数数据 只需要取一个
const
computedMemberScoreItem
=
computedScore
.
filter
(
_v
=>
_v
.
memberName
===
_item
)[
0
]
let
objectItem
:
any
=
{
memberId
:
childDataSource
[
_item
][
0
][
'memberId'
],
memberName
:
_item
,
total
:
computedMemberScoreItem
[
'total'
],
average
:
computedMemberScoreItem
[
'average'
],
expertNumber
:
computedMemberScoreItem
[
'expertNumber'
],
}
let
columns
:
any
=
[]
childDataSource
[
_item
].
forEach
((
__item
,
__index
)
=>
{
columns
.
push
({
title
:
<><
UserOutlined
/>
{
__item
[
'expertExtractRecordId'
]
}
</>,
dataIndex
:
__item
[
'expertExtractRecordId'
],
key
:
__item
[
'expertExtractRecordId'
],
})
objectItem
[
__item
[
'expertExtractRecordId'
]]
=
__item
[
'score'
]
})
childTableData
.
push
(
objectItem
)
childTableColumnResult
=
childTableColumns
.
concat
(
columns
)
})
childrenTableDataSource
.
push
(
childTableData
.
sort
((
a
,
b
)
=>
b
.
total
-
a
.
total
))
childTableDataColumns
.
push
(
childTableColumnResult
)
})
setChildrenTableData
(
childrenTableDataSource
)
setChildrenTableColumns
(
childTableDataColumns
)
}
},
[
data
])
const
renderRanking
=
(
t
,
r
,
i
)
=>
{
if
(
i
===
1
)
{
return
(<
div
className=
{
style
.
rankContainer
}
>
<
div
className=
{
style
.
rankContent
}
>
<
p
>
<
img
src=
{
level1
}
alt=
"排名一"
/>
</
p
>
<
div
>
<
h5
>
{
t
}
</
h5
>
<
p
><
span
>
总分:
{
r
.
total
}
</
span
><
span
>
平均分:
{
r
.
average
}
</
span
></
p
>
</
div
>
</
div
>
</
div
>)
}
else
if
(
i
===
2
){
return
(<
div
className=
{
style
.
rankContainer
}
>
<
div
className=
{
style
.
rankContent
}
>
<
p
>
<
img
src=
{
level2
}
alt=
"排名二"
/>
</
p
>
<
div
>
<
h5
>
{
t
}
</
h5
>
<
p
><
span
>
总分:
{
r
.
total
}
</
span
><
span
>
平均分:
{
r
.
average
}
</
span
></
p
>
</
div
>
</
div
>
</
div
>)
}
else
if
(
i
===
3
)
{
return
(<
div
className=
{
style
.
rankContainer
}
>
<
div
className=
{
style
.
rankContent
}
>
<
p
>
<
img
src=
{
level3
}
alt=
"排名三"
/>
</
p
>
<
div
>
<
h5
>
{
t
}
</
h5
>
<
p
><
span
>
总分:
{
r
.
total
}
</
span
><
span
>
平均分:
{
r
.
average
}
</
span
></
p
>
</
div
>
</
div
>
</
div
>)
}
else
{
return
(<
div
className=
{
style
.
rankContainer
}
>
<
div
className=
{
style
.
rankContent
}
>
<
p
>
<
span
className=
{
style
.
levelCircle
}
>
{
i
}
</
span
>
</
p
>
<
div
>
<
h5
>
{
t
}
</
h5
>
<
p
><
span
>
总分:
{
r
.
total
}
</
span
><
span
>
平均分:
{
r
.
average
}
</
span
></
p
>
</
div
>
</
div
>
</
div
>)
}
}
const
handleChangeType
=
(
e
)
=>
{
setTransferRadio
(
e
.
target
.
value
)
}
const
deleteMemeber
=
(
mid
,
index
)
=>
{
setRecommandList
(()
=>
{
return
mid
?
recommandList
.
filter
(
item
=>
item
.
id
!==
mid
)
:
recommandList
.
filter
((
item
,
_i
)
=>
_i
!==
index
)
})
}
const
components
=
{
body
:
{
row
:
EditableRow
,
cell
:
EditableCell
,
},
}
const
handleSave
=
(
row
,
index
)
=>
{
// 双重遍历childTableData数据 改变total和average
setChildrenTableData
(()
=>
{
return
childTableData
.
map
(
element
=>
{
return
element
.
map
(
_e
=>
{
if
(
_e
.
memberName
===
row
.
memberName
)
{
return
{
...
_e
,
total
:
Number
(
row
.
total
),
average
:
Number
(
row
.
total
)
/
row
.
expertNumber
}
}
else
{
return
_e
}
})
})
})
}
return
(<>
<
div
id=
"remarkBidReport"
className=
{
style
.
remarkRecordContainer
}
>
<
MellowCard
title=
{
cardTitle
}
style=
{
{
marginTop
:
24
}
}
bordered=
{
false
}
fullHeight
>
<
div
className=
{
style
.
remarkRecordHead
}
>
<
h3
className=
"commonPanelTitle"
>
评标记录
</
h3
>
<
Radio
.
Group
value=
{
transferRadio
}
buttonStyle=
"solid"
size=
"small"
onChange=
{
handleChangeType
}
>
{
Object
.
keys
(
evaluationRecord
).
map
((
item
,
index
)
=>
(<
Radio
.
Button
key=
{
index
}
value=
{
index
}
>
{
item
}
</
Radio
.
Button
>))
}
</
Radio
.
Group
>
</
div
>
{
Object
.
keys
(
evaluationRecord
).
map
((
item
,
index
)
=>
{
// 处理列
const
columns
=
childTableColumns
[
index
].
map
(
col
=>
{
if
(
!
col
.
editable
)
{
return
col
;
}
return
{
...
col
,
onCell
:
(
record
:
any
)
=>
({
record
,
editable
:
col
.
editable
,
dataIndex
:
col
.
dataIndex
,
title
:
col
.
title
,
handleSave
:
(
row
)
=>
handleSave
(
row
,
index
),
}),
};
});
if
(
transferRadio
===
index
)
{
return
<
Table
key=
{
index
}
components=
{
components
}
dataSource=
{
childTableData
[
index
]
}
columns=
{
columns
}
pagination=
{
{
size
:
"small"
}
}
/>
}
})
}
<
div
className=
{
style
.
remarkBidMember
}
>
<
h3
className=
"commonPanelTitle"
>
推荐中标会员
</
h3
>
<
Row
gutter=
{
[
16
,
0
]
}
>
{
recommandList
?.
length
?
recommandList
.
map
((
item
,
index
)
=>
(<
Col
key=
{
item
.
id
}
span=
{
4
}
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
会员:
</
p
></
Col
>
<
Col
><
p
>
{
item
.
memberName
}
</
p
></
Col
>
</
Row
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
推荐人:
</
p
></
Col
>
<
Col
><
p
>
{
item
.
userName
}
</
p
></
Col
>
</
Row
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
理由:
</
p
></
Col
>
<
Col
><
p
>
{
item
.
reason
}
</
p
></
Col
>
</
Row
>
{
item
?.
id
?
null
:
<
span
className=
{
style
.
deleteMember
}
onClick=
{
()
=>
deleteMemeber
(
item
.
id
,
index
)
}
><
DeleteOutlined
/></
span
>
}
</
div
>
</
Col
>
))
:
null
}
</
Row
>
</
div
>
<
div
className=
{
style
.
remarkFile
}
>
<
h3
className=
"commonPanelTitle"
>
评标附件
</
h3
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
4
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
附件:
</
p
></
Col
>
<
Col
><
p
>
2513561516
</
p
></
Col
>
</
Row
>
</
div
>
</
div
>
</
MellowCard
>
</
div
>
</>)
}
RemarkBidReport
.
defaultProps
=
{}
export
default
RemarkBidReport
src/pages/procurement/callForBids/readyConfirmBid/constant/index.tsx
0 → 100644
View file @
ae76195d
import
React
,
{
useEffect
}
from
'react'
import
CustomTag
from
'@/pages/procurement/components/CustomTag'
import
{
BidInOpeartTexts
,
BidOutOpeartTexts
}
from
"@/constants"
import
{
formatTimeString
}
from
"@/utils"
export
const
anchorTitleList
=
[
{
title
:
'流转进度'
,
id
:
'transferProcess'
,
componentName
:
'TransferProcess'
},
{
title
:
'基本信息'
,
id
:
'baseicInfo'
,
type
:
'basicInfo'
},
{
title
:
'评标报告'
,
id
:
'remarkBidReport'
,
componentName
:
'RemarkBidReport'
},
{
title
:
'会员参标信息'
,
id
:
'participateInfo'
,
componentName
:
'ParticipateInfo'
},
{
title
:
'招标定标'
,
id
:
'bidConfirm'
,
componentName
:
'BidConfirm'
},
{
title
:
'流转记录'
,
id
:
'transferRecord'
,
componentName
:
"BidTransformRecord"
},
]
export
const
outReocrdCols
:
any
[]
=
[
{
title
:
'流转顺序号'
,
dataIndex
:
'no'
,
align
:
'center'
,
key
:
'no'
,
render
:
(
_
,
__
,
index
:
number
)
=>
index
+
1
},
{
title
:
'操作角色'
,
dataIndex
:
'memberRoleName'
,
align
:
'center'
,
key
:
'memberRoleName'
,
},
{
title
:
'状态'
,
dataIndex
:
'status'
,
align
:
'center'
,
key
:
'status'
,
render
:
text
=>
<
CustomTag
status=
{
text
}
type=
'out'
/>
},
{
title
:
'操作'
,
dataIndex
:
'operation'
,
align
:
'center'
,
key
:
'operation'
,
render
:
text
=>
BidOutOpeartTexts
[
text
]
},
{
title
:
'操作时间'
,
dataIndex
:
'createTime'
,
align
:
'center'
,
key
:
'createTime'
,
render
:
time
=>
formatTimeString
(
time
)
},
{
title
:
'审核意见'
,
dataIndex
:
'checkRemark'
,
align
:
'center'
,
key
:
'checkRemark'
,
},
]
export
const
insideRecordCols
:
any
[]
=
[
{
title
:
'流转记录'
,
dataIndex
:
'no'
,
align
:
'center'
,
key
:
'no'
,
render
:
(
_
,
__
,
index
:
number
)
=>
index
+
1
},
{
title
:
'操作人'
,
dataIndex
:
'memberRoleName'
,
align
:
'center'
,
key
:
'memberRoleName'
,
},
{
title
:
'部门'
,
dataIndex
:
'department'
,
align
:
'center'
,
key
:
'department'
,
},
{
title
:
'职位'
,
dataIndex
:
'position'
,
align
:
'center'
,
key
:
'position'
,
},
{
title
:
'状态'
,
dataIndex
:
'status'
,
align
:
'center'
,
key
:
'status'
,
render
:
text
=>
<
CustomTag
status=
{
text
}
type=
'inside'
/>
},
{
title
:
'操作'
,
dataIndex
:
'operation'
,
align
:
'center'
,
key
:
'operation'
,
render
:
text
=>
BidInOpeartTexts
[
text
]
},
{
title
:
'操作时间'
,
dataIndex
:
'createTime'
,
align
:
'center'
,
key
:
'createTime'
,
render
:
text
=>
formatTimeString
(
text
)
},
{
title
:
'审核意见'
,
dataIndex
:
'checkRemark'
,
align
:
'center'
,
key
:
'checkRemark'
,
},
]
src/pages/procurement/callForBids/readyConfirmBid/detail/index.tsx
View file @
ae76195d
import
React
,
{
useState
,
useCallback
,
useRef
,
useContext
,
useEffect
,
createRef
}
from
'react'
;
import
{
history
}
from
'umi'
import
{
Button
}
from
'antd'
;
import
{
Button
,
Col
,
Row
,
Radio
,
Table
}
from
'antd'
;
import
style
from
'./index.less'
import
OrderDetailWrapper
from
'@/pages/transaction/components/OrderDetailWrapper'
;
import
PreLoading
from
'@/components/PreLoading'
;
import
OrderPayModal
from
'@/pages/transaction/components/orderPayModal'
;
import
{
BidDetailContext
}
from
'@/pages/procurement/_public/bid/context'
;
import
{
useBidDetail
}
from
'@/pages/procurement/_public/bid/effects/useBidDetail'
;
import
{
ReadyConfirmBidContext
}
from
'@/pages/procurement/_public/bid/context'
;
import
BidDetailHeader
from
'@/pages/procurement/components/bidDetailHeader'
;
import
BidDetailSection
from
'@/pages/procurement/components/bidDetailSection'
;
import
{
SendOutlined
}
from
'@ant-design/icons'
;
import
{
anchorTitleList
,
insideRecordCols
,
outReocrdCols
}
from
'../constant'
;
import
{
useConfirmDetail
}
from
'../effects/useConfirmDetail'
;
import
TransferProcess
,
{
TransferEnum
}
from
'@/pages/procurement/components/transferProcess'
;
import
{
findLastIndexFlowState
}
from
'@/utils'
;
import
MellowCard
from
'@/components/MellowCard'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
BasicInfo
from
'../components/basicInfo'
;
import
RemarkBidReport
from
'../components/remarkBidReport'
;
import
ParticipateInfo
from
'../components/participateInfo'
;
import
BidConfirm
from
'../components/bidConfirm'
;
const
ReadyQualifityCheckedDetail
:
React
.
FC
=
()
=>
{
const
{
formContext
,
id
}
=
use
Bid
Detail
({
type
:
'callForBid'
})
const
{
data
}
=
formContext
const
{
formContext
,
id
}
=
use
Confirm
Detail
({
type
:
'callForBid'
})
const
{
data
,
externalProcurementOrderLogResponses
,
interiorProcurementOrderLogResponses
,
submitData
}
=
formContext
const
payRef
=
useRef
<
any
>
({})
const
anchorTitleList
=
[
{
title
:
'流转进度'
,
id
:
'transferProcess'
,
componentName
:
'TransferProcess'
},
{
title
:
'基本信息'
,
id
:
'baseicInfo'
,
type
:
'basicInfo'
},
{
title
:
'评标报告'
,
id
:
'remarkBidReport'
,
componentName
:
'RemarkBidReport'
},
{
title
:
'会员参标信息'
,
id
:
'participateInfo'
,
componentName
:
'ParticipateInfo'
},
{
title
:
'招标定标'
,
id
:
'bidConfirm'
,
componentName
:
'BidConfirm'
},
{
title
:
'流转记录'
,
id
:
'transferRecord'
,
componentName
:
"BidTransformRecord"
},
]
const
[
transferRadio
,
setTransferRadio
]
=
useState
<
TransferEnum
>
(
TransferEnum
.
Outer
)
const
[
loading
,
setLoading
]
=
useState
<
boolean
>
(
false
)
const
RenderBasicInfoColumns
=
({
infoList
=
[],
dataSource
})
=>
<
Row
>
{
infoList
.
map
(({
span
,
fieldList
=
[]},
index
)
=>
(<
Col
key=
{
index
}
span=
{
span
}
>
{
fieldList
.
length
?
fieldList
.
map
((
_v
,
_i
)
=>
<
Row
key=
{
_v
.
name
}
className=
{
style
[
'card-list'
]
}
style=
{
_v
.
rowStyle
}
>
{
_v
?.
noTitle
?
null
:
<
Col
span=
{
6
}
className=
{
style
[
'card-list_title'
]
}
>
{
_v
.
title
}
</
Col
>
}
<
Col
>
{
_v
.
render
?
_v
.
render
(
dataSource
[
_v
.
name
],
dataSource
)
:
dataSource
[
_v
.
name
]
}
</
Col
>
</
Row
>)
:
null
}
</
Col
>))
}
</
Row
>
const
handleChangeType
=
(
e
)
=>
{
setTransferRadio
(
e
.
target
.
value
)
}
const
handleSubmit
=
()
=>
{
setLoading
(
true
)
console
.
log
(
submitData
)
const
{
fileList
,
recommandList
,
childTableData
}
=
submitData
let
params
:
any
=
{
id
}
params
.
evaluationTenderRecommendList
=
recommandList
.
filter
(
item
=>
!
item
?.
id
)
params
.
evaluationTenderFile
=
fileList
params
.
evaluationTenderReportMemberList
=
childTableData
[
0
].
map
(
item
=>
({
memberId
:
item
.
memberId
,
correctScore
:
item
.
total
}))
PublicApi
.
postPurchaseExpertExtractReportSubmitEvaluationTenderReport
(
params
).
then
(
res
=>
{
setLoading
(
true
)
if
(
res
.
code
===
1000
)
{
history
.
goBack
()
}
else
{
setLoading
(
false
)
}
})
}
return
(
<
div
>
<
BidDetail
Context
.
Provider
value=
{
formContext
}
>
<
ReadyConfirmBid
Context
.
Provider
value=
{
formContext
}
>
<
BidDetailHeader
formContext=
{
formContext
}
anchorList=
{
anchorTitleList
}
extraRight=
{
<
Button
type=
'primary'
>
单据审核
<
Button
type=
'primary'
icon=
{
<
SendOutlined
/>
}
>
提交定标
</
Button
>
}
/>
<
OrderDetailWrapper
>
<
PreLoading
loading=
{
!
formContext
.
data
}
active
paragraph=
{
{
rows
:
6
}
}
>
<
BidDetailSection
formContext=
{
formContext
}
anchorList=
{
anchorTitleList
}
type=
"callForBid"
/>
<
div
id=
"transferProcess"
>
<
TransferProcess
cardTitle=
'流转进度'
customTitleKey=
'name'
customKey=
'id'
outerVerifyCurrent=
{
findLastIndexFlowState
(
formContext
.
externalWorkflowFlowRecordLogResponses
)
}
innerVerifyCurrent=
{
findLastIndexFlowState
(
formContext
.
interiorWorkflowFlowRecordLogResponses
)
}
outerVerifySteps=
{
formContext
.
externalWorkflowFlowRecordLogResponses
?
formContext
.
externalWorkflowFlowRecordLogResponses
.
map
(
item
=>
({
...
item
,
status
:
item
.
isActive
?
'finish'
:
'wait'
,
}))
:
[]
}
innerVerifySteps=
{
formContext
.
interiorWorkflowFlowRecordLogResponses
?
formContext
.
interiorWorkflowFlowRecordLogResponses
.
map
(
item
=>
({
...
item
,
status
:
item
.
isActive
?
'finish'
:
'wait'
,
}))
:
[]
}
></
TransferProcess
>
</
div
>
<
div
id=
"baseicInfo"
>
<
BasicInfo
title=
"基本信息"
/>
</
div
>
{
/* 评标报告 */
}
<
RemarkBidReport
cardTitle=
"评标报告"
/>
{
/* 会员参标信息 */
}
<
ParticipateInfo
cardTitle=
"会员参标信息"
/>
{
/* 招标定标 */
}
<
BidConfirm
cardTitle=
"招标定标"
/>
<
div
id=
"transferRecord"
>
<
MellowCard
title=
'流转记录'
style=
{
{
marginTop
:
24
}
}
bordered=
{
false
}
extra=
{
<
Radio
.
Group
value=
{
transferRadio
}
buttonStyle=
"solid"
size=
"small"
onChange=
{
handleChangeType
}
>
{
externalProcurementOrderLogResponses
?.
length
?
<
Radio
.
Button
value=
{
TransferEnum
.
Outer
}
>
外部流转
</
Radio
.
Button
>
:
null
}
{
interiorProcurementOrderLogResponses
?.
length
?
<
Radio
.
Button
value=
{
TransferEnum
.
Interior
}
>
内部流转
</
Radio
.
Button
>
:
null
}
</
Radio
.
Group
>
}
className=
{
style
.
cardWrap
}
>
{
(
externalProcurementOrderLogResponses
?.
length
&&
transferRadio
===
TransferEnum
.
Outer
)
?
<
Table
columns=
{
outReocrdCols
}
dataSource=
{
externalProcurementOrderLogResponses
}
pagination=
{
{
size
:
"small"
}
}
rowKey=
"id"
/>
:
null
}
{
(
interiorProcurementOrderLogResponses
?.
length
&&
transferRadio
===
TransferEnum
.
Interior
)
?
<
Table
columns=
{
insideRecordCols
}
dataSource=
{
interiorProcurementOrderLogResponses
}
pagination=
{
{
size
:
"small"
}
}
rowKey=
"id"
/>
:
null
}
</
MellowCard
>
</
div
>
</
PreLoading
>
</
OrderDetailWrapper
>
<
OrderPayModal
currentRef=
{
payRef
}
/>
</
BidDetail
Context
.
Provider
>
</
ReadyConfirmBid
Context
.
Provider
>
</
div
>
);
};
...
...
src/pages/procurement/callForBids/readyConfirmBid/effects/useConfirmDetail.ts
0 → 100644
View file @
ae76195d
import
React
from
'react'
import
{
useCallback
,
useState
,
useEffect
}
from
'react'
import
{
usePageStatus
}
from
'@/hooks/usePageStatus'
import
{
PublicApi
}
from
'@/services/api'
import
{
message
}
from
'antd'
export
const
useConfirmDetail
=
(
options
:
{})
=>
{
// 详情数据
const
[
formData
,
setFormData
]
=
useState
<
any
>
(
null
)
// 流转记录数据(内/外)
const
[
interiorProcurementOrderLogResponses
,
setInteriorProcurementOrderLogResponses
]
=
useState
<
any
>
(
null
)
const
[
externalProcurementOrderLogResponses
,
setExternalProcurementOrderLogResponses
]
=
useState
<
any
>
(
null
)
// 流程状态数据(内/外)
const
[
interiorWorkflowFlowRecordLogResponses
,
setInteriorWorkflowFlowRecordLogResponses
]
=
useState
<
any
>
(
null
)
const
[
externalWorkflowFlowRecordLogResponses
,
setExternalWorkflowFlowRecordLogResponses
]
=
useState
<
any
>
(
null
)
// 提交报告的表单数据
const
[
fileList
,
setFileList
]
=
useState
<
any
>
([])
const
[
recommandList
,
setRecommandList
]
=
useState
<
any
>
()
const
[
childTableData
,
setChildrenTableData
]
=
useState
<
any
>
([])
const
{
id
}
=
usePageStatus
()
useEffect
(()
=>
{
reloadFormData
()
},
[])
const
reloadFormData
=
useCallback
(
async
()
=>
{
if
(
id
)
{
const
{
code
,
data
,
message
:
msg
}
=
await
PublicApi
.
getPurchaseInviteTenderGetCheckFinishTender
({
inviteTenderId
:
id
},
{
ctlType
:
"none"
})
if
(
code
===
1000
)
{
setFormData
(
data
)
}
else
{
message
.
error
(
msg
)
}
const
searchId
=
data
.
id
// 流转记录(内/外)
// 招投标
const
inCheckRecordFn
=
PublicApi
.
getPurchaseInviteTenderInCheckRecordGetInviteTenderInCheckRecord
const
inReocrdRes
=
await
inCheckRecordFn
({
inviteTenderId
:
searchId
})
if
(
inReocrdRes
.
code
===
1000
)
{
setInteriorProcurementOrderLogResponses
(
inReocrdRes
.
data
)
}
const
outCheckRecordFn
=
PublicApi
.
getPurchaseTenderOutCheckRecordGetTenderOutCheckRecord
const
outRecordRes
=
await
outCheckRecordFn
({
inviteTenderId
:
searchId
})
if
(
outRecordRes
.
code
===
1000
)
{
setExternalProcurementOrderLogResponses
(
outRecordRes
.
data
)
}
// 流程状态(内/外)
// 招投标
const
processRes
=
await
PublicApi
.
getPurchaseInviteTenderGetInviteTenderProcess
({
inviteTenderId
:
searchId
})
if
(
processRes
.
code
===
1000
&&
processRes
.
data
)
{
setInteriorWorkflowFlowRecordLogResponses
(
processRes
.
data
.
subProcess
.
userTaskList
)
setExternalWorkflowFlowRecordLogResponses
(
processRes
.
data
.
userTaskList
)
}
}
},
[
id
])
// 需共享的状态
const
formContext
=
{
data
:
formData
,
interiorProcurementOrderLogResponses
,
externalProcurementOrderLogResponses
,
interiorWorkflowFlowRecordLogResponses
,
externalWorkflowFlowRecordLogResponses
,
ctl
:
{
setData
:
setFormData
,
},
reloadFormData
,
// 提交报告的表单数据
submitData
:
{
fileList
,
recommandList
,
childTableData
},
submitCtl
:
{
setFileList
,
setRecommandList
,
setChildrenTableData
}
}
return
{
formContext
,
id
,
}
}
src/pages/procurement/callForBids/readyExpertRemark/detail/index.tsx
View file @
ae76195d
...
...
@@ -14,6 +14,7 @@ import MellowCard from '@/components/MellowCard';
import
{
anchorTitleList
,
basicColumnList
,
evaluationColumnList
,
insideRecordCols
,
outReocrdCols
}
from
'../constant'
;
import
OnlineRemark
from
'../components/onlineRemark'
;
import
{
createFormActions
}
from
'@formily/antd'
;
import
{
SendOutlined
}
from
'@ant-design/icons'
;
const
addSchemaAction
=
createFormActions
()
...
...
@@ -89,8 +90,8 @@ const ReadyExpertRemarkDetail: React.FC = () => {
formContext=
{
formContext
}
anchorList=
{
anchorTitleList
}
extraRight=
{
<
Button
type=
'primary'
onClick=
{
()
=>
addSchemaAction
.
submit
()
}
>
单据审核
<
Button
type=
'primary'
onClick=
{
()
=>
addSchemaAction
.
submit
()
}
icon=
{
<
SendOutlined
/>
}
>
提交报告
</
Button
>
}
/>
...
...
src/pages/procurement/callForBids/readySubmitBid/detail/index.tsx
View file @
ae76195d
...
...
@@ -11,6 +11,7 @@ import ApprovedModal from '@/pages/procurement/components/approvedModal';
import
{
usePageStatus
}
from
'@/hooks/usePageStatus'
;
import
{
useHttpRequest
}
from
'@/hooks/useHttpRequest'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
SendOutlined
}
from
'@ant-design/icons'
;
const
ReadySubmitBidDetail
:
React
.
FC
=
()
=>
{
const
{
formContext
,
id
}
=
useBidDetail
({
type
:
'callForBid'
})
...
...
@@ -69,8 +70,8 @@ const ReadySubmitBidDetail: React.FC = () => {
formContext=
{
formContext
}
anchorList=
{
anchorTitleList
}
extraRight=
{
action
?
<
Button
type=
'primary'
onClick=
{
handleClick
}
>
单据审核
action
?
<
Button
type=
'primary'
onClick=
{
handleClick
}
icon=
{
<
SendOutlined
/>
}
>
提交招标
</
Button
>
:
null
}
/>
...
...
src/pages/procurement/callForBids/readySubmitReport/detail/index.tsx
View file @
ae76195d
...
...
@@ -14,6 +14,7 @@ import { findLastIndexFlowState } from '@/utils';
import
RemarkBidReport
from
'../components/remarkBidReport'
;
import
{
createFormActions
}
from
'@formily/antd'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
SendOutlined
}
from
'@ant-design/icons'
;
const
addSchemaAction
=
createFormActions
()
...
...
@@ -66,8 +67,8 @@ const readySubmitReportDetail: React.FC = () => {
formContext=
{
formContext
}
anchorList=
{
anchorTitleList
}
extraRight=
{
<
Button
type=
'primary'
onClick=
{
handleSubmit
}
loading=
{
loading
}
>
单据审核
<
Button
type=
'primary'
onClick=
{
handleSubmit
}
loading=
{
loading
}
icon=
{
<
SendOutlined
/>
}
>
提交报告
</
Button
>
}
/>
...
...
src/pages/procurement/callForBids/tenderSearch/detail/index.tsx
View file @
ae76195d
import
React
,
{
useState
,
useCallback
,
useRef
}
from
'react'
;
import
{
Button
}
from
'antd'
;
import
OrderDetailWrapper
from
'@/pages/transaction/components/OrderDetailWrapper'
;
import
PreLoading
from
'@/components/PreLoading'
;
import
OrderPayModal
from
'@/pages/transaction/components/orderPayModal'
;
...
...
@@ -7,24 +6,30 @@ import { BidDetailContext } from '@/pages/procurement/_public/bid/context';
import
{
useBidDetail
}
from
'@/pages/procurement/_public/bid/effects/useBidDetail'
;
import
BidDetailHeader
from
'@/pages/procurement/components/bidDetailHeader'
;
import
BidDetailSection
from
'@/pages/procurement/components/bidDetailSection'
;
import
{
BidOuterWorkState
}
from
'@/constants'
;
const
TenderSearchDetail
:
React
.
FC
=
()
=>
{
const
{
formContext
,
id
}
=
useBidDetail
({
type
:
'callForBidInTender'
})
const
{
data
}
=
formContext
const
{
data
}
=
formContext
const
payRef
=
useRef
<
any
>
({})
const
contentRef
=
useRef
<
any
>
({})
const
anchorTitleList
=
[
{
title
:
'流转进度'
,
id
:
'transferProcess'
,
componentName
:
"TransferProcess"
},
{
title
:
'中标结果'
,
id
:
'bidResult'
,
type
:
"bidResult"
},
{
title
:
'中标明细'
,
id
:
'bidParticulars'
,
componentName
:
"BidParticulars"
},
{
title
:
'基本信息'
,
id
:
'baseicInfo'
,
type
:
"basicInfo"
},
{
title
:
'投标要求'
,
id
:
'tenderNeed'
,
type
:
"bidNeed"
},
{
title
:
'投标其他要求'
,
id
:
'tenderOtherNeed'
,
type
:
"bidNeed"
},
{
title
:
'投标商品'
,
id
:
'tenderParticulars'
,
componentName
:
"BidParticulars"
},
{
title
:
'流转记录'
,
id
:
'transferRecord'
,
componentName
:
"BidTransformRecord"
},
]
const
anchorTitleList
=
[
{
title
:
'流转进度'
,
id
:
'transferProcess'
,
componentName
:
"TransferProcess"
},
{
title
:
'中标结果'
,
id
:
'bidResult'
,
type
:
"bidResult"
},
{
title
:
'中标明细'
,
id
:
'bidParticulars'
,
componentName
:
"BidParticulars"
},
{
title
:
'基本信息'
,
id
:
'baseicInfo'
,
type
:
"basicInfo"
},
{
title
:
'投标要求'
,
id
:
'tenderNeed'
,
type
:
"bidNeed"
},
{
title
:
'投标其他要求'
,
id
:
'tenderOtherNeed'
,
type
:
"bidNeed"
},
{
title
:
'投标商品'
,
id
:
'tenderParticulars'
,
componentName
:
"BidParticulars"
},
{
title
:
'流转记录'
,
id
:
'transferRecord'
,
componentName
:
"BidTransformRecord"
},
]
// 没有完成的标 隐藏中标结果、中标明细
if
(
data
?.
inviteTender
?.
tenderOutStatus
!==
BidOuterWorkState
.
Finish_Invite_Tender
)
{
anchorTitleList
.
splice
(
1
,
2
)
}
return
(
<
div
>
...
...
src/pages/procurement/components/bidParticulars/index.tsx
View file @
ae76195d
...
...
@@ -5,6 +5,7 @@ import { BidDetailContext } from '@/pages/procurement/_public/bid/context';
import
style
from
'./index.less'
import
{
CaretDownOutlined
,
CaretRightOutlined
}
from
'@ant-design/icons'
;
import
{
columns
}
from
'./constant'
;
import
{
PublicApi
}
from
'@/services/api'
;
/**
* 中标明细和投标物料嵌套表格
...
...
@@ -53,17 +54,10 @@ const BidParticulars: React.FC<BidParticularsProps> = ({cardTitle}) => {
return
tempCol
})
const
dataSource
=
[
{
key
:
1
,
name
:
<
span
>
Q89YTE1
<
br
/>
进口头层牛皮荔枝纹
</
span
>,
age
:
'红色/XL/厚1.5mm'
,
address
:
'牛皮'
,
brand
:
'PELLE'
,
number
:
<
span
>
2000
<
br
/>
个
</
span
>,
tax
:
<
span
>
是
<
br
/>
6%
</
span
>,
price
:
"¥18.00"
,
amount
:
"¥38,000.00"
,
const
onExpandRender
=
async
(
e
,
r
)
=>
{
setTableData
(()
=>
[...
tableData
].
map
(
item
=>
({
...
item
,
description
:
<
div
className=
{
style
.
childrenWrap
}
>
<
Row
>
<
Col
span=
{
3
}
>
...
...
@@ -74,42 +68,29 @@ const BidParticulars: React.FC<BidParticularsProps> = ({cardTitle}) => {
</
Col
>
<
Col
span=
{
6
}
>
<
div
className=
{
style
.
childrenContent
}
>
<
p
><
span
>
商品编号:
</
span
>
Q89YTE1
</
p
>
<
p
><
span
>
商品名称:
</
span
>
进口头层黄牛皮荔枝纹
</
p
>
<
p
><
span
>
商品编号:
</
span
>
{
r
.
code
}
</
p
>
<
p
><
span
>
商品名称:
</
span
>
{
r
.
name
}
</
p
>
</
div
>
</
Col
>
<
Col
span=
{
6
}
>
<
div
className=
{
style
.
childrenContent
}
>
<
p
><
span
>
规格型号:
</
span
>
Q89YTE1
</
p
>
<
p
><
span
>
品类:
</
span
>
进口头层黄牛皮荔枝纹
</
p
>
<
p
><
span
>
规格型号:
</
span
>
{
r
.
type
}
</
p
>
<
p
><
span
>
品类:
</
span
>
{
r
.
categoryName
}
</
p
>
</
div
>
</
Col
>
<
Col
span=
{
6
}
>
<
div
className=
{
style
.
childrenContent
}
>
<
p
><
span
>
品牌:
</
span
>
Q89YTE1
</
p
>
<
p
><
span
>
品牌:
</
span
>
{
r
.
brandName
}
</
p
>
</
div
>
</
Col
>
<
Col
span=
{
3
}
>
{
/*
<Col span={3}>
<div className={style.childrenContent}>
<p><a>查看</a></p>
</div>
</
Col
>
</Col>
*/
}
</
Row
>
</
div
>,
},
{
key
:
2
,
name
:
'Jim Green'
,
age
:
42
,
address
:
'London No. 1 Lake Park'
,
description
:
'My name is Jim Green, I am 42 years old, living in London No. 1 Lake Park.'
,
},
];
// @todo 根据后端返回的commodityId查询商品信息渲染表格嵌套信息
const
onExpandRender
=
(
e
,
r
)
=>
{
console
.
log
(
e
,
r
)
</
div
>
})))
}
return
(<>
...
...
src/pages/procurement/components/descriptionsInfo/index.tsx
View file @
ae76195d
...
...
@@ -455,33 +455,17 @@ const DescriptionsInfo: React.FC<BasicInfoProps> = ({cardTitle, type}) => {
<
RenderBasicInfoColumns
infoList=
{
Type_Data_Map
[
type
]
}
dataSource=
{
data
}
/>
{
type
===
'remarkNeed'
?
<
div
className=
{
style
[
'card-list'
]
}
>
<
p
className=
{
style
[
'card-list_title'
]
}
>
评标专家列表:
</
p
>
_data
?.
expertExtractList
?.
expertExtractList
[
0
]?.
expertExtractRecordList
[
0
]?.
expert
.
map
((
item
,
index
)
=>
(<
div
key=
{
item
.
id
}
className=
{
style
[
'card-list'
]
}
>
<
p
className=
{
style
[
'card-list_title'
]
}
>
评标专家列表:
</
p
>
<
p
style=
{
{
backgroundColor
:
'#fafbfc'
}
}
>
<
Row
>
<
Col
span=
{
1
}
>
1
</
Col
>
<
Col
span=
{
2
}
>
大佬
</
Col
>
<
Col
span=
{
4
}
>
kuaimeizheng@qq.com
</
Col
>
<
Col
span=
{
4
}
>
全球总监
</
Col
>
<
Col
span=
{
1
}
>
{
++
index
}
</
Col
>
<
Col
span=
{
2
}
>
{
item
.
name
}
</
Col
>
<
Col
span=
{
4
}
>
{
item
.
phone
}
</
Col
>
<
Col
span=
{
4
}
>
{
item
.
userJobTitle
}
</
Col
>
</
Row
>
</
p
>
<
p
style=
{
{
backgroundColor
:
'#fafbfc'
}
}
>
<
Row
>
<
Col
span=
{
1
}
>
1
</
Col
>
<
Col
span=
{
2
}
>
大佬
</
Col
>
<
Col
span=
{
4
}
>
kuaimeizheng@qq.com
</
Col
>
<
Col
span=
{
4
}
>
宇宙总监
</
Col
>
</
Row
>
</
p
>
<
p
style=
{
{
backgroundColor
:
'#fafbfc'
}
}
>
<
Row
>
<
Col
span=
{
1
}
>
1
</
Col
>
<
Col
span=
{
2
}
>
大佬
</
Col
>
<
Col
span=
{
4
}
>
kuaimeizheng@qq.com
</
Col
>
<
Col
span=
{
4
}
>
宇宙总监
</
Col
>
</
Row
>
</
p
>
</
div
>
</
div
>))
:
null
}
<
Modal
...
...
src/pages/procurement/components/remarkBidReport/index.less
View file @
ae76195d
.card-list {
font-size: 12px;
line-height: 20px;
margin-top:
24px;
margin-top:
12px; // 24
border: 1px solid #F4F5F7;
padding: 12px;
}
...
...
@@ -102,4 +102,11 @@
}
}
}
// 评标附件
.remarkFileContainer {
margin-top: 20px;
.card-list {
border: none;
}
}
}
src/pages/procurement/components/remarkBidReport/index.tsx
View file @
ae76195d
...
...
@@ -10,7 +10,7 @@ import level2 from '@/assets/imgs/rank2.png'
import
level3
from
'@/assets/imgs/rank3.png'
/**
* 评标报告
* 评标报告
仅待定标后续使用
*/
export
interface
RemarkBidReportProps
{
...
...
@@ -150,71 +150,6 @@ const RemarkBidReport: React.FC<RemarkBidReportProps> = ({cardTitle}) => {
fullHeight
>
<
div
className=
{
style
.
remarkBidReportWrapper
}
>
<
div
className=
{
style
.
remarkCommitteeContainer
}
>
<
h3
className=
"commonPanelTitle"
>
评标委员会
</
h3
>
<
Row
gutter=
{
[
16
,
0
]
}
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
.
committeeItem
}
>
<
div
className=
{
style
.
avater
}
>
<
img
src=
{
imgLink
}
alt=
"专家头像"
/>
<
p
>
系统抽取
</
p
>
</
div
>
<
p
><
span
className=
{
style
[
'card-list_title'
]
}
>
评委专家编号:
</
span
>
135
</
p
>
<
span
className=
{
style
.
status
}
>
已评标
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
.
committeeItem
}
>
<
div
className=
{
style
.
avater
}
>
<
img
src=
{
imgLink
}
alt=
"专家头像"
/>
<
p
>
系统抽取
</
p
>
</
div
>
<
p
><
span
className=
{
style
[
'card-list_title'
]
}
>
评委专家编号:
</
span
>
135
</
p
>
<
span
className=
{
style
.
status
}
>
已评标
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
.
committeeItem
}
>
<
div
className=
{
style
.
avater
}
>
<
img
src=
{
imgLink
}
alt=
"专家头像"
/>
<
p
>
系统抽取
</
p
>
</
div
>
<
p
><
span
className=
{
style
[
'card-list_title'
]
}
>
评委专家编号:
</
span
>
135
</
p
>
<
span
className=
{
style
.
status
}
>
已评标
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
.
committeeItem
}
>
<
div
className=
{
style
.
avater
}
>
<
img
src=
{
imgLink
}
alt=
"专家头像"
/>
<
p
>
系统抽取
</
p
>
</
div
>
<
p
><
span
className=
{
style
[
'card-list_title'
]
}
>
评委专家编号:
</
span
>
135
</
p
>
<
span
className=
{
style
.
status
}
>
已评标
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
.
committeeItem
}
>
<
div
className=
{
style
.
avater
}
>
<
img
src=
{
imgLink
}
alt=
"专家头像"
/>
<
p
>
系统抽取
</
p
>
</
div
>
<
p
><
span
className=
{
style
[
'card-list_title'
]
}
>
评委专家编号:
</
span
>
135
</
p
>
<
span
className=
{
style
.
status
}
>
已评标
</
span
>
</
div
>
</
Col
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
.
committeeItem
}
>
<
div
className=
{
style
.
avater
}
>
<
img
src=
{
imgLink
}
alt=
"专家头像"
/>
<
p
>
系统抽取
</
p
>
</
div
>
<
p
><
span
className=
{
style
[
'card-list_title'
]
}
>
评委专家编号:
</
span
>
135
</
p
>
<
span
className=
{
style
.
status
}
>
已评标
</
span
>
</
div
>
</
Col
>
</
Row
>
</
div
>
<
div
className=
{
style
.
remarkRecordContainer
}
>
<
div
className=
{
style
.
remarkRecordHead
}
>
<
h3
className=
"commonPanelTitle"
>
评标记录
</
h3
>
...
...
@@ -271,32 +206,20 @@ const RemarkBidReport: React.FC<RemarkBidReportProps> = ({cardTitle}) => {
</
Col
>
</
Row
>
</
div
>
</
div
>
{
/* <div className={style['card-list']}>
<Row>
<Col span={2}><p className={style['card-list_title']}>招标方式</p></Col>
<Col><p>{callForWay === 1 ? '系统匹配' : '公开招标'}</p></Col>
</Row>
</div>
{
callForWay === 1 ?
<Table dataSource={dataSource} columns={columns} pagination={{size: "small"}} />
:
<div className={style['card-list']}>
<Row>
<Col span={6}><p className={style['card-list_title']}>招标方式</p></Col>
<Col><p>{callForWay === 1 ? '系统匹配' : '公开招标'}</p></Col>
</Row>
<Row>
<Col span={6}><p className={style['card-list_title']}>招标方式</p></Col>
<Col><p>{callForWay === 1 ? '系统匹配' : '公开招标'}</p></Col>
</Row>
<Row>
<Col span={6}><p className={style['card-list_title']}>招标方式</p></Col>
<Col><p>{callForWay === 1 ? '系统匹配' : '公开招标'}</p></Col>
<
div
className=
{
style
.
remarkFileContainer
}
>
<
h3
className=
"commonPanelTitle"
>
评标附件
</
h3
>
<
Row
gutter=
{
[
16
,
0
]
}
>
<
Col
span=
{
4
}
>
<
div
className=
{
style
[
'card-list'
]
}
>
<
Row
>
<
Col
span=
{
8
}
><
p
className=
{
style
[
'card-list_title'
]
}
>
附件:
</
p
></
Col
>
<
Col
><
p
>
1234564566
</
p
></
Col
>
</
Row
>
</
div
>
</
Col
>
</
Row
>
</
div
>
} */
}
</
div
>
</
MellowCard
>)
}
...
...
src/pages/procurement/tender/readyQualifityChecked/model/useSelfTable.tsx
View file @
ae76195d
...
...
@@ -47,14 +47,25 @@ export const useSelfTable = () => {
render
:
(
text
,
record
)
=>
formatTimeString
(
record
.
inviteTender
.
createTime
),
width
:
180
},
// {
// title: '报名开始/截止时间',
// align: 'left',
// dataIndex: 'memberRoleId',
// key: 'memberRoleId',
// render: (text, record) => <>
// <div><PlayCircleOutlined /> {formatTimeString(record.inviteTender.registerStartTime)}</div>
// <div><PoweroffOutlined /> {formatTimeString(record.inviteTender.registerEndTime)}</div>
// </>,
// width: 180
// },
{
title
:
'
报名
开始/截止时间'
,
title
:
'
资格预审
开始/截止时间'
,
align
:
'left'
,
dataIndex
:
'
memberRoleId
'
,
key
:
'
memberRoleId
'
,
dataIndex
:
'
createTime
'
,
key
:
'
createTime
'
,
render
:
(
text
,
record
)
=>
<>
<
div
><
PlayCircleOutlined
/>
{
formatTimeString
(
record
.
inviteTender
.
register
StartTime
)
}
</
div
>
<
div
><
PoweroffOutlined
/>
{
formatTimeString
(
record
.
inviteTender
.
register
EndTime
)
}
</
div
>
<
div
><
PlayCircleOutlined
/>
{
formatTimeString
(
record
.
inviteTender
.
preCheck
StartTime
)
}
</
div
>
<
div
><
PoweroffOutlined
/>
{
formatTimeString
(
record
.
inviteTender
.
preCheck
EndTime
)
}
</
div
>
</>,
width
:
180
},
...
...
src/pages/procurement/tender/tenderSearch/detail/index.tsx
View file @
ae76195d
...
...
@@ -6,23 +6,29 @@ import { BidDetailContext } from '@/pages/procurement/_public/bid/context';
import
{
useBidDetail
}
from
'@/pages/procurement/_public/bid/effects/useBidDetail'
;
import
BidDetailHeader
from
'@/pages/procurement/components/bidDetailHeader'
;
import
BidDetailSection
from
'@/pages/procurement/components/bidDetailSection'
;
import
{
BidOuterWorkState
}
from
'@/constants'
;
const
TenderSearchDetail
:
React
.
FC
=
()
=>
{
const
{
formContext
,
id
}
=
useBidDetail
({
type
:
'tender'
})
const
{
data
}
=
formContext
const
{
data
}
=
formContext
const
payRef
=
useRef
<
any
>
({})
const
anchorTitleList
=
[
{
title
:
'流转进度'
,
id
:
'transferProcess'
,
componentName
:
"TransferProcess"
},
{
title
:
'中标结果'
,
id
:
'bidResult'
,
type
:
"bidResult"
},
{
title
:
'中标明细'
,
id
:
'bidParticulars'
,
componentName
:
"BidParticulars"
},
{
title
:
'基本信息'
,
id
:
'baseicInfo'
,
type
:
"basicInfo"
},
{
title
:
'投标要求'
,
id
:
'tenderNeed'
,
type
:
"bidNeed"
},
{
title
:
'投标其他要求'
,
id
:
'tenderOtherNeed'
,
type
:
"bidNeed"
},
{
title
:
'投标商品'
,
id
:
'tenderParticulars'
,
componentName
:
"BidParticulars"
},
{
title
:
'流转记录'
,
id
:
'transferRecord'
,
componentName
:
"BidTransformRecord"
},
]
const
anchorTitleList
=
[
{
title
:
'流转进度'
,
id
:
'transferProcess'
,
componentName
:
"TransferProcess"
},
{
title
:
'中标结果'
,
id
:
'bidResult'
,
type
:
"bidResult"
},
{
title
:
'中标明细'
,
id
:
'bidParticulars'
,
componentName
:
"BidParticulars"
},
{
title
:
'基本信息'
,
id
:
'baseicInfo'
,
type
:
"basicInfo"
},
{
title
:
'投标要求'
,
id
:
'tenderNeed'
,
type
:
"bidNeed"
},
{
title
:
'投标其他要求'
,
id
:
'tenderOtherNeed'
,
type
:
"bidNeed"
},
{
title
:
'投标商品'
,
id
:
'tenderParticulars'
,
componentName
:
"BidParticulars"
},
{
title
:
'流转记录'
,
id
:
'transferRecord'
,
componentName
:
"BidTransformRecord"
},
]
// 没有完成的标 隐藏中标结果、中标明细
if
(
data
?.
inviteTender
?.
tenderOutStatus
!==
BidOuterWorkState
.
Finish_Invite_Tender
)
{
anchorTitleList
.
splice
(
1
,
2
)
}
return
(
<
div
>
...
...
src/pages/procurement/tender/tenderSearch/model/useSelfTable.tsx
View file @
ae76195d
...
...
@@ -6,13 +6,14 @@ import { formatTimeString } from '@/utils'
import
{
PlayCircleOutlined
,
PoweroffOutlined
}
from
'@ant-design/icons'
import
CustomTag
from
'@/pages/procurement/components/CustomTag'
import
CustomBadge
from
'@/pages/procurement/components/customBadge'
import
{
BidOuterWorkState
,
TenderInsideWorkState
}
from
'@/constants'
// 投标查询
export
const
useSelfTable
=
()
=>
{
const
ref
=
useRef
<
any
>
({})
const
handle
Preview
=
(
param
)
=>
{
history
.
push
(
`/memberCenter/procurementAbility/tender/
tenderSearch/detail?id=
${
param
.
inviteTender
.
id
}
`
)
const
handle
Edit
=
(
param
)
=>
{
history
.
push
(
`/memberCenter/procurementAbility/tender/
readyAddTender/edit?id=
${
param
.
id
}
`
)
}
const
callForBidColumns
:
any
[]
=
[
...
...
@@ -87,15 +88,15 @@ export const useSelfTable = () => {
key
:
'isSubMember'
,
render
:
(
t
,
r
)
=>
<
CustomBadge
status=
{
r
.
submitTenderInStatus
}
type=
'tenderInside'
/>
},
//
{
//
title: '操作',
//
align: 'left',
//
dataIndex: 'ctl',
//
key: 'ctl',
// render: (text, record) => <>
// <Button type='link' onClick={() => handlePreview(record)}>查看</Button>
// </
>
//
}
{
title
:
'操作'
,
align
:
'left'
,
dataIndex
:
'ctl'
,
key
:
'ctl'
,
render
:
(
text
,
record
)
=>
record
.
submitTenderInStatus
===
TenderInsideWorkState
.
Submitted_Submit_Tender
&&
record
.
tenderOutStatus
===
BidOuterWorkState
.
Not_Open_Tender
&&
<
Button
type=
'link'
onClick=
{
()
=>
handleEdit
(
record
)
}
>
修改
</
Button
>
}
]
return
{
...
...
src/pages/transaction/purchaseOrder/orderCollect/components/contractModalTable/index.tsx
View file @
ae76195d
...
...
@@ -127,6 +127,9 @@ const ContractModalTable:React.FC<ContractModalTableProps> = (props) => {
tableProps=
{
{
rowKey
:
'id'
}
}
resetModal=
{
{
destroyOnClose
:
true
,
}
}
{
...
restProps
}
/>
)
...
...
src/pages/transaction/purchaseOrder/orderCollect/components/materialTableCell/index.tsx
View file @
ae76195d
...
...
@@ -105,6 +105,9 @@ export const MaterialTableCell:React.FC<MaterialTableCellProps> = ({
if
(
isNaN
(
_value
)
||
_value
<
Number
(
record
[
"minOrder"
]))
{
throw
new
Error
(
`数量不小于最小起订数
${
record
[
"minOrder"
]}
`
)
}
if
(
_value
>
Number
.
MAX_SAFE_INTEGER
)
{
throw
new
Error
(
'数值溢出'
)
}
callback
()
}
catch
(
err
)
{
callback
(
err
)
...
...
src/pages/transaction/purchaseOrder/orderCollect/constant/index.tsx
View file @
ae76195d
...
...
@@ -132,8 +132,8 @@ export const orderTypeLabelMap = {
// "24": "积分兑换",
// "25": "渠道积分兑换",
"32"
:
"采购询价合同"
,
"33"
:
"采购
竞价
合同"
,
"34"
:
"采购
招标
合同"
,
"33"
:
"采购
招标
合同"
,
"34"
:
"采购
竞价
合同"
,
}
// 支付方式
...
...
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