Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
jinfa-platform
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陈智峰
jinfa-platform
Commits
64dd5050
Commit
64dd5050
authored
Apr 27, 2021
by
前端-黄佳鑫
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
🐞
fix: 修复采购报价Bug
parent
9e24e282
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
170 additions
and
42 deletions
+170
-42
index.tsx
...lity/components/detail/components/bidInfoLayout/index.tsx
+20
-2
index.tsx
...lity/components/detail/components/contrastLyout/index.tsx
+1
-1
index.tsx
...ity/components/detail/components/contrastLyout1/index.tsx
+1
-1
offer.tsx
...ion/purchaseAbility/offter/addOffter/components/offer.tsx
+24
-1
crossSellProducts.tsx
...chaseAbility/offter/addOffter/modal/crossSellProducts.tsx
+76
-31
selectProduct.tsx
.../purchaseAbility/offter/addOffter/modal/selectProduct.tsx
+10
-2
index.tsx
...pages/transaction/purchaseAbility/offter/demand/index.tsx
+18
-2
index.tsx
...pages/transaction/purchaseAbility/offter/detail/index.tsx
+1
-0
index.tsx
...ages/transaction/purchaseAbility/offter/inquiry/index.tsx
+1
-0
index.tsx
...nsaction/purchaseAbility/purchaseInquiry/detail/index.tsx
+18
-2
No files found.
src/pages/transaction/purchaseAbility/components/detail/components/bidInfoLayout/index.tsx
View file @
64dd5050
...
...
@@ -5,6 +5,8 @@ import Card from '../../../card';
import
{
PublicApi
}
from
'@/services/api'
;
import
style
from
'./index.less'
;
import
{
CaretDownOutlined
,
CaretRightOutlined
}
from
'@ant-design/icons'
;
import
CrossSellProducts
from
'@/pages/transaction/purchaseAbility/offter/addOffter/modal/crossSellProducts'
;
import
{
truncate
}
from
'lodash'
;
export
type
effectType
=
{
/** 报价轮次 */
...
...
@@ -34,7 +36,9 @@ const BidInfoLayout: React.FC<BidInfoProps> = (props: any) => {
const
context
=
useContext
(
Context
);
const
[
dataSource
,
setDataSource
]
=
useState
<
any
>
([]);
const
[
turn
,
setTurn
]
=
useState
<
Array
<
number
>>
([]);
const
[
totalAmount
,
setTotalAmount
]
=
useState
<
number
>
(
0
)
const
[
totalAmount
,
setTotalAmount
]
=
useState
<
number
>
(
0
);
const
[
visible
,
setVisible
]
=
useState
<
boolean
>
(
false
);
const
[
product
,
setProduct
]
=
useState
<
any
>
({});
/** 轮次 */
const
handleTurn
=
(
num
:
number
)
=>
{
...
...
@@ -143,6 +147,14 @@ const BidInfoLayout: React.FC<BidInfoProps> = (props: any) => {
return
arr
[
num
]
}
const
handleCheck
=
(
item
:
any
)
=>
{
setVisible
(
true
)
setProduct
({
...
item
,
customerCategoryName
:
splitProductAttributeJson
(
item
.
productAttributeJson
,
1
),
})
}
return
(
<
Card
id=
'bidInfoLayout'
...
...
@@ -186,7 +198,7 @@ const BidInfoLayout: React.FC<BidInfoProps> = (props: any) => {
<
div
className=
{
style
.
childrenContent
}
>
<
Button
type=
'link'
>
查看
</
Button
>
<
Button
type=
'link'
onClick=
{
()
=>
handleCheck
(
record
)
}
>
查看
</
Button
>
</
div
>
</
Col
>
</
Row
>
...
...
@@ -205,6 +217,12 @@ const BidInfoLayout: React.FC<BidInfoProps> = (props: any) => {
</
Tabs
.
TabPane
>
))
}
</
Tabs
>
<
CrossSellProducts
preview
visible=
{
visible
}
record=
{
product
}
onClose=
{
()
=>
setVisible
(
false
)
}
/>
</
Card
>
)
}
...
...
src/pages/transaction/purchaseAbility/components/detail/components/contrastLyout/index.tsx
View file @
64dd5050
...
...
@@ -323,7 +323,7 @@ const ContrastLyout: React.FC<ContrastProps> = (props: any) => {
{
context
.
urls
&&
context
.
urls
.
map
((
item
,
index
)
=>
(
<
p
key=
{
`urls_${index + 1}`
}
className=
{
style
[
'card-list_file'
]
}
>
<
FilePdfOutlined
className=
{
style
[
`card-list_fileicon`
]
}
/>
<
Typography
.
Link
href=
{
item
.
url
}
>
{
item
.
name
}
</
Typography
.
Link
>
<
Typography
.
Link
href=
{
item
.
url
}
target=
"_blank"
>
{
item
.
name
}
</
Typography
.
Link
>
</
p
>
))
}
</
Col
>
...
...
src/pages/transaction/purchaseAbility/components/detail/components/contrastLyout1/index.tsx
View file @
64dd5050
...
...
@@ -321,7 +321,7 @@ const ContrastLyout1: React.FC<IProps> = (props: any) => {
{
context
.
urls
&&
context
.
urls
.
map
((
item
,
index
)
=>
(
<
p
key=
{
`urls_${index + 1}`
}
className=
{
style
[
'card-list_file'
]
}
>
<
FilePdfOutlined
className=
{
style
[
`card-list_fileicon`
]
}
/>
<
Typography
.
Link
href=
{
item
.
url
}
>
{
item
.
name
}
</
Typography
.
Link
>
<
Typography
.
Link
href=
{
item
.
url
}
target=
"_blank"
>
{
item
.
name
}
</
Typography
.
Link
>
</
p
>
))
}
</
Col
>
...
...
src/pages/transaction/purchaseAbility/offter/addOffter/components/offer.tsx
View file @
64dd5050
...
...
@@ -65,6 +65,27 @@ const OfferInfo: React.FC<IProps> = (props: any) => {
}
setTabs
(
tabs
.
reverse
())
}
/** 查看 */
const
handleCheck
=
(
item
:
any
)
=>
{
setVisible
(
true
)
setRecord
({
...
item
,
customerCategoryName
:
splitProductAttributeJson
(
item
.
productAttributeJson
,
1
),
})
}
/** 关联 */
const
handleRel
=
(
item
:
any
)
=>
{
setVisible
(
true
)
if
(
item
.
productAttributeJson
)
{
setRecord
({
...
item
,
customerCategoryName
:
splitProductAttributeJson
(
item
.
productAttributeJson
,
1
),
})
return
}
setRecord
(
item
)
}
const
columns
=
[
{
title
:
'物料编号/名称'
,
...
...
@@ -171,7 +192,7 @@ const OfferInfo: React.FC<IProps> = (props: any) => {
type=
'link'
onClick=
{
()
=>
{
setIndex
(
index
);
setRecord
(
record
);
count
!==
tabs
[
0
]
?
handleCheck
(
record
)
:
handleRel
(
record
);
setVisible
(
true
);
}
}
>
...
...
@@ -379,6 +400,8 @@ const OfferInfo: React.FC<IProps> = (props: any) => {
}
}
/>
<
CrossSellProducts
rel=
{
count
===
tabs
[
0
]
?
true
:
false
}
preview=
{
count
!==
tabs
[
0
]
?
true
:
false
}
visible=
{
visible
}
record=
{
record
}
onClose=
{
()
=>
setVisible
(
false
)
}
...
...
src/pages/transaction/purchaseAbility/offter/addOffter/modal/crossSellProducts.tsx
View file @
64dd5050
import
React
,
{
useState
}
from
'react'
;
import
React
,
{
use
Effect
,
use
State
}
from
'react'
;
import
{
Drawer
,
Anchor
,
...
...
@@ -21,9 +21,9 @@ import { UPLOAD_TYPE } from '@/constants'
const
{
Sider
,
Content
}
=
Layout
;
const
{
Text
}
=
Typography
;
const
{
Link
}
=
Anchor
;
const
{
SubMenu
}
=
Menu
;
export
interface
IProps
{
rel
?:
boolean
,
preview
?:
boolean
,
visible
:
boolean
,
record
:
any
,
onClose
?:
()
=>
void
,
...
...
@@ -38,6 +38,8 @@ const layout: any = {
const
CrossSellProducts
:
React
.
FC
<
IProps
>
=
(
props
:
any
)
=>
{
const
{
rel
,
preview
,
visible
,
record
,
onClose
,
...
...
@@ -48,10 +50,16 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
const
[
attribute
,
setAttribute
]
=
useState
<
any
>
([]);
const
[
files
,
setFiles
]
=
useState
([]);
const
[
loading
,
setloading
]
=
useState
(
false
);
const
[
productId
,
setProductId
]
=
useState
<
number
>
(
0
)
const
handleAnchorClick
=
(
e
)
=>
{
e
.
preventDefault
()
};
const
resetValue
=
()
=>
{
setProduct
({});
setAttribute
([])
}
/**报价商品属性 */
const
GetCommodityAttribute
=
(
id
)
=>
{
PublicApi
.
getProductCommodityGetCommodityAttributeByUnitPriceAndPicId
({
unitPriceAndPicId
:
id
}).
then
(
res
=>
{
...
...
@@ -72,6 +80,7 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
/** 关闭 */
const
handleClose
=
()
=>
{
onClose
()
resetValue
()
}
/** 确定 */
const
handleConfirm
=
()
=>
{
...
...
@@ -80,9 +89,9 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
attribute
,
files
,
})
resetValue
()
}
/**判断文件类型和大小 */
const
beforeDocUpload
=
(
file
:
any
)
=>
{
const
isLt20M
=
file
.
size
/
1024
/
1024
<
20
;
...
...
@@ -114,6 +123,31 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
setFiles
(
arr
);
}
useEffect
(()
=>
{
if
(
preview
&&
Object
.
keys
(
record
).
length
>
0
)
{
setProduct
({
name
:
record
.
productName
,
brandName
:
record
.
productBrand
,
customerCategoryName
:
record
.
customerCategoryName
})
GetCommodityAttribute
(
record
.
productId
);
}
},
[
preview
,
record
])
useEffect
(()
=>
{
if
(
rel
&&
Object
.
keys
(
record
).
length
>
0
)
{
setProduct
({
productId
:
record
.
productId
,
name
:
record
.
productName
,
brandName
:
record
.
productBrand
,
customerCategoryName
:
record
.
customerCategoryName
})
if
(
record
.
productId
)
{
GetCommodityAttribute
(
record
.
productId
);
}
}
},
[
rel
,
record
])
return
(
<>
<
Drawer
...
...
@@ -123,19 +157,25 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
className=
{
style
.
drawer
}
visible=
{
visible
}
onClose=
{
handleClose
}
destroyOnClose
footer=
{
<
div
style=
{
{
textAlign
:
'right'
,
}
}
>
<
Button
onClick=
{
handleClose
}
style=
{
{
marginRight
:
8
}
}
>
取消
</
Button
>
<
Button
onClick=
{
handleConfirm
}
type=
"primary"
>
确定
</
Button
>
</
div
>
<>
{
!
preview
&&
(
<
div
style=
{
{
textAlign
:
'right'
,
}
}
>
<
Button
onClick=
{
handleClose
}
style=
{
{
marginRight
:
8
}
}
>
取消
</
Button
>
<
Button
onClick=
{
handleConfirm
}
type=
"primary"
>
确定
</
Button
>
</
div
>
)
}
</>
}
>
<
Layout
>
...
...
@@ -240,10 +280,12 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
</
div
>
</>
)
}
<
Button
onClick=
{
()
=>
setFlag
(
true
)
}
block
type=
"dashed"
style=
{
{
margin
:
'16px 0px'
}
}
>
<
PlusSquareOutlined
/>
选择商品
</
Button
>
{
!
preview
&&
(
<
Button
onClick=
{
()
=>
{
setFlag
(
true
);
setProductId
(
product
.
productId
);
console
.
log
(
product
)
}
}
block
type=
"dashed"
style=
{
{
margin
:
'16px 0px'
}
}
>
<
PlusSquareOutlined
/>
选择商品
</
Button
>
)
}
</
div
>
</
div
>
</
div
>
...
...
@@ -327,17 +369,19 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
</
div
>
))
}
</
div
>
<
Upload
action=
"/api/file/file/upload"
data=
{
{
fileType
:
UPLOAD_TYPE
}
}
showUploadList=
{
false
}
accept=
'.doc,.docx,.pdf,.ppt,.pptx,.xls,.xlsx'
beforeUpload=
{
beforeDocUpload
}
onChange=
{
handleChange
}
>
<
Button
loading=
{
loading
}
icon=
{
<
UploadOutlined
/>
}
>
上传文件
</
Button
>
<
div
style=
{
{
marginTop
:
'8px'
}
}
>
一次上传一个文件,每个附件大小不能超过 20M
</
div
>
</
Upload
>
{
!
preview
&&
(
<
Upload
action=
"/api/file/file/upload"
data=
{
{
fileType
:
UPLOAD_TYPE
}
}
showUploadList=
{
false
}
accept=
'.doc,.docx,.pdf,.ppt,.pptx,.xls,.xlsx'
beforeUpload=
{
beforeDocUpload
}
onChange=
{
handleChange
}
>
<
Button
loading=
{
loading
}
icon=
{
<
UploadOutlined
/>
}
>
上传文件
</
Button
>
<
div
style=
{
{
marginTop
:
'8px'
}
}
>
一次上传一个文件,每个附件大小不能超过 20M
</
div
>
</
Upload
>
)
}
</
Form
.
Item
>
</
div
>
</
Form
>
...
...
@@ -345,6 +389,7 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
</
Layout
>
</
Drawer
>
<
SelectProduct
id=
{
productId
}
visible=
{
flag
}
onclose=
{
()
=>
setFlag
(
false
)
}
confirm=
{
handleSelectPrduct
}
...
...
src/pages/transaction/purchaseAbility/offter/addOffter/modal/selectProduct.tsx
View file @
64dd5050
import
React
,
{
useRef
}
from
'react'
;
import
React
,
{
use
Effect
,
use
Ref
}
from
'react'
;
import
{
Drawer
,
Button
...
...
@@ -20,6 +20,7 @@ import { ISchema} from '@formily/antd';
const
formActions
=
createFormActions
();
interface
Iprops
{
id
?:
number
,
visible
:
boolean
,
onclose
?(),
confirm
?(
e
:
any
),
...
...
@@ -27,7 +28,7 @@ interface Iprops {
const
SelectProduct
:
React
.
FC
<
Iprops
>
=
(
props
:
any
)
=>
{
const
ref
=
useRef
<
any
>
({});
const
{
visible
,
onclose
,
confirm
}
=
props
;
const
{
id
,
visible
,
onclose
,
confirm
}
=
props
;
const
[
rowSelection
,
RowCtl
]
=
useRowSelectionTable
({
customKey
:
'id'
,
type
:
'radio'
});
const
columns
:
ColumnType
<
any
>
[]
=
[
{
...
...
@@ -157,6 +158,13 @@ const SelectProduct: React.FC<Iprops> = (props: any) => {
ref
.
current
.
reload
(
values
);
}
useEffect
(()
=>
{
console
.
log
(
id
)
if
(
!!
id
)
{
RowCtl
.
setSelectedRowKeys
([
id
]);
}
},
[
id
])
return
(
<
Drawer
visible=
{
visible
}
...
...
src/pages/transaction/purchaseAbility/offter/demand/index.tsx
View file @
64dd5050
import
React
,
{
Fragment
,
useEffect
,
useState
}
from
'react'
;
import
{
Tag
,
Badge
,
Tooltip
}
from
'antd'
;
import
{
Tag
,
Badge
,
Tooltip
,
Typography
}
from
'antd'
;
import
{
history
}
from
'umi'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
Context
}
from
'../../components/detail/components/context'
;
...
...
@@ -16,7 +16,7 @@ import {
OFFTER_INTERNALSTATE
,
OFFTER_INTERNALSTATE_COLOR
}
from
'../../constants'
;
import
{
QuestionCircleOutlined
}
from
'@ant-design/icons'
;
import
{
LinkOutlined
,
QuestionCircleOutlined
}
from
'@ant-design/icons'
;
import
MaterialLayout
from
'../../components/detail/components/materialLayout'
;
import
DemandLayout
from
'../../components/detail/components/demandLayout'
;
...
...
@@ -101,6 +101,22 @@ const DemandDetailed = () => {
{
label
:
'交付日期'
,
extra
:
format
(
data
.
deliveryTime
)
},
{
label
:
'交付地址'
,
extra
:
data
.
address
},
{
label
:
'截止日期'
,
extra
:
format
(
data
.
offerEndTime
)
},
{
label
:
'附件'
,
extra
:
<>
{
data
.
transactionUurls
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
Typography
.
Link
style=
{
{
display
:
'block'
,
paddingBottom
:
'8px'
}
}
key=
{
`link_${index + 1}`
}
target=
"_blank"
href=
{
`/api/order/contractTemplate/downloadContract?contractName=${item.name}&contractUrl=${item.url}`
}
>
<
LinkOutlined
/>
{
item
.
name
}
</
Typography
.
Link
>
))
}
</>
},
]
},
{
...
...
src/pages/transaction/purchaseAbility/offter/detail/index.tsx
View file @
64dd5050
...
...
@@ -90,6 +90,7 @@ const QuoteDetails = () => {
extra
:
<>
{
data
.
enclosureUrls
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
Typography
.
Link
target=
"_blank"
key=
{
`link_${index + 1}`
}
href=
{
`/api/order/contractTemplate/downloadContract?contractName=${item.name}&contractUrl=${item.url}`
}
>
...
...
src/pages/transaction/purchaseAbility/offter/inquiry/index.tsx
View file @
64dd5050
...
...
@@ -58,6 +58,7 @@ const Inquiry = () => {
dataIndex
:
'operate'
,
render
:
(
text
:
any
,
record
:
any
)
=>
<
Button
disabled=
{
!!
record
.
isQuotedPrice
}
onClick=
{
()
=>
history
.
push
(
`/memberCenter/procurementAbility/offter/quote?id=${record.id}&number=${record.purchaseInquiryNo}`
)
}
type=
'link'
>
...
...
src/pages/transaction/purchaseAbility/purchaseInquiry/detail/index.tsx
View file @
64dd5050
import
React
,
{
Fragment
,
useEffect
,
useState
}
from
'react'
;
import
{
Tag
,
Badge
,
Tooltip
,
Button
}
from
'antd'
;
import
{
Tag
,
Badge
,
Tooltip
,
Button
,
Typography
}
from
'antd'
;
import
{
history
}
from
'umi'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
GlobalConfig
}
from
'@/global/config'
...
...
@@ -17,7 +17,7 @@ import {
OFFTER_INTERNALSTATE
,
OFFTER_INTERNALSTATE_COLOR
}
from
'../../constants'
;
import
{
CheckCircleOutlined
,
QuestionCircleOutlined
}
from
'@ant-design/icons'
;
import
{
CheckCircleOutlined
,
LinkOutlined
,
QuestionCircleOutlined
}
from
'@ant-design/icons'
;
import
MaterialLayout
from
'../../components/detail/components/materialLayout'
;
import
DemandLayout
from
'../../components/detail/components/demandLayout'
;
import
ModalOperate
from
'../../components/modalOperate'
;
...
...
@@ -108,6 +108,22 @@ const DemandDetailed = () => {
{
label
:
'交付日期'
,
extra
:
format
(
data
.
deliveryTime
)
},
{
label
:
'交付地址'
,
extra
:
data
.
address
},
{
label
:
'截止日期'
,
extra
:
format
(
data
.
offerEndTime
)
},
{
label
:
'附件'
,
extra
:
<>
{
data
.
transactionUurls
.
map
((
item
:
any
,
index
:
number
)
=>
(
<
Typography
.
Link
style=
{
{
display
:
'block'
,
paddingBottom
:
'8px'
}
}
key=
{
`link_${index + 1}`
}
href=
{
`/api/order/contractTemplate/downloadContract?contractName=${item.name}&contractUrl=${item.url}`
}
target=
"_blank"
>
<
LinkOutlined
/>
{
item
.
name
}
</
Typography
.
Link
>
))
}
</>
},
]
},
{
...
...
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