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
e53eeeda
Commit
e53eeeda
authored
Mar 16, 2021
by
alwayOnlie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
合同
parent
db88053d
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
1575 additions
and
138 deletions
+1575
-138
contracRoute.ts
config/routes/contracRoute.ts
+15
-1
addGoods.tsx
src/pages/commodity/goods/addGoods.tsx
+0
-0
colorTag.ts
src/pages/contract/common/colorTag.ts
+18
-9
index.less
src/pages/contract/components/AddressFormItem/index.less
+50
-0
index.tsx
src/pages/contract/components/AddressFormItem/index.tsx
+113
-0
QueryListdetails.tsx
src/pages/contract/manage/QueryList/QueryListdetails.tsx
+0
-0
index.css
src/pages/contract/manage/QueryList/index.css
+159
-0
index.less
src/pages/contract/manage/QueryList/index.less
+176
-0
index.tsx
src/pages/contract/manage/QueryList/index.tsx
+83
-25
index.css
src/pages/contract/manage/add/index.css
+57
-0
index.less
src/pages/contract/manage/add/index.less
+67
-0
index.tsx
src/pages/contract/manage/add/index.tsx
+348
-0
index.ts
src/pages/contract/manage/add/schema/index.ts
+0
-0
index.tsx
src/pages/contract/manage/bidding/index.tsx
+108
-23
index.tsx
src/pages/contract/manage/examine/index.tsx
+204
-0
index.tsx
src/pages/contract/manage/purchase/index.tsx
+82
-23
index.css
src/pages/contract/template/addContract/index.css
+39
-0
index.less
src/pages/contract/template/addContract/index.less
+5
-6
index.tsx
...rocurement/callForBids/callForBidsSearch/detail/index.tsx
+8
-8
index.tsx
src/pages/procurement/components/bidDetailHeader/index.tsx
+43
-43
No files found.
config/routes/contracRoute.ts
View file @
e53eeeda
...
...
@@ -83,10 +83,24 @@ const contracRoute = {
component
:
'@/pages/contract/manage/QueryList'
,
},
{
path
:
'/memberCenter/contract/manage/QueryListdetails'
,
path
:
'/memberCenter/contract/manage/QueryList
/QueryList
details'
,
name
:
'合同查询详情'
,
hideInMenu
:
true
,
component
:
'@/pages/contract/manage/QueryList/QueryListdetails'
,
},
{
path
:
'/memberCenter/contract/manage/add'
,
name
:
'待新增合同'
,
component
:
'@/pages/contract/manage/add'
,
},
// 待提交审核合同
{
path
:
'/memberCenter/contract/manage/examine'
,
name
:
'待提交审核合同'
,
component
:
'@/pages/contract/manage/examine'
,
},
],
},
],
...
...
src/pages/commodity/goods/addGoods.tsx
View file @
e53eeeda
This diff is collapsed.
Click to expand it.
src/pages/contract/common/colorTag.ts
View file @
e53eeeda
...
...
@@ -3,24 +3,26 @@
* @Date: 2020-07-30 17:23:48
* @LastEditors: LeeJiancong
* @LastEditTime: 2020-09-28 16:12:37
*/
*/
export
default
{
default
:
{
padding
:
'2px 5px'
,
background
:
'rgba(244,245,247,1)'
,
borderRadius
:
'4px'
borderRadius
:
'4px'
,
},
confirm
:
{
color
:
'#3F7ED2'
,
padding
:
'2px 5px'
,
background
:
'rgba(240, 248, 255, 1)'
,
borderRadius
:
'4px'
borderRadius
:
'4px'
,
},
success
:
{
color
:
'#00B37A'
,
padding
:
'2px 5px'
,
background
:
'rgba(235,247,242,1)'
,
borderRadius
:
'4px'
borderRadius
:
'4px'
,
cursor
:
'pointer'
,
},
// warn: {
// color: '#E63F3B',
...
...
@@ -32,12 +34,20 @@ export default {
color
:
'#E63F3B'
,
padding
:
'2px 5px'
,
background
:
'rgb(255, 235, 230)'
,
borderRadius
:
'4px'
borderRadius
:
'4px'
,
},
Error
:
{
color
:
'red'
,
padding
:
'2px 5px'
,
background
:
'rgba(255,247,227,1)'
,
borderRadius
:
'4px'
}
}
\ No newline at end of file
borderRadius
:
'4px'
,
},
point
:
{
width
:
10
,
height
:
10
,
background
:
'#41CC9E'
,
display
:
'inline-block'
,
borderRadius
:
'50%'
,
marginRight
:
10
,
},
};
src/pages/contract/components/AddressFormItem/index.less
0 → 100644
View file @
e53eeeda
.addressList {
padding: 0;
margin: 0;
&-item {
padding: 8px 14px;
width: 549px;
margin-bottom: 20px;
position: relative;
line-height: 28px;
list-style: none;
border: 1px solid #EEF0F3;
color: #303133;
cursor: pointer;
&-detail {
color: #909399;
}
&.active {
border: 1px solid #00B382;
&::after {
content: '';
position: absolute;
width: 0;
height: 0;
border-bottom: 12px solid #00B37A;
border-left: 12px solid transparent;
bottom: 0;
right: 0;
z-index: 5;
}
}
&.disabled {
cursor: not-allowed;
}
&.hide {
display: none;
}
}
}
.more {
text-align: center;
cursor: pointer;
}
\ No newline at end of file
src/pages/contract/components/AddressFormItem/index.tsx
0 → 100644
View file @
e53eeeda
/*
* @Author: XieZhiXiong
* @Date: 2020-11-05 10:30:54
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-06 14:18:10
* @Description: 地址 Form Item
*/
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
ISchemaFieldComponentProps
}
from
'@formily/antd'
;
import
{
CaretDownOutlined
,
CaretUpOutlined
}
from
'@ant-design/icons'
;
import
classNames
from
'classnames'
;
import
styles
from
'./index.less'
;
interface
AddressItem
{
id
:
string
;
// 收件人
receiverName
?:
string
;
// 收件人
shipperName
?:
string
;
// 电话
phone
:
string
;
// 详细地址
fullAddress
:
string
;
};
interface
AddressFormItemProps
{
value
:
AddressItem
;
dataSource
:
AddressItem
[];
// 默认展示的条数
showCount
?:
number
;
onChange
:
(
id
:
string
)
=>
{};
// 禁用的
disabled
?:
boolean
;
/**
* 只读的
*/
readOnly
?:
boolean
;
};
const
AddressFormItem
:
React
.
FC
<
AddressFormItemProps
>
&
{
isFieldComponent
:
boolean
}
=
(
props
)
=>
{
const
{
value
,
showCount
=
3
,
dataSource
=
[],
onChange
,
disabled
=
false
,
readOnly
,
}
=
props
;
const
[
showMore
,
setShowMore
]
=
useState
(
false
);
// useEffect(() => {
// // 默认选中第一个
// if (dataSource && dataSource.length && !value) {
// if (onChange) {
// onChange(dataSource[0].id);
// }
// }
// }, [dataSource]);
const
showDataSource
=
!
showMore
&&
!
readOnly
?
[...
dataSource
].
splice
(
0
,
showCount
)
:
dataSource
;
const
handleToogleMore
=
()
=>
{
setShowMore
(
!
showMore
)
};
const
handleSelectItem
=
record
=>
{
if
(
onChange
&&
!
disabled
)
{
onChange
(
record
);
}
};
return
(
<
div
className=
{
styles
.
addressee
}
>
<
ul
className=
{
styles
.
addressList
}
>
{
showDataSource
.
map
(
item
=>
(
<
li
className=
{
classNames
(
styles
[
'addressList-item'
],
{
[
styles
.
active
]:
item
.
id
===
(
value
&&
value
.
id
),
[
styles
.
disabled
]:
disabled
,
[
styles
.
hide
]:
readOnly
&&
item
.
id
!==
(
value
&&
value
.
id
),
})
}
onClick=
{
()
=>
handleSelectItem
(
item
)
}
key=
{
item
.
id
}
>
<
div
>
{
`${item.receiverName || item.shipperName} / ${item.phone}`
}
</
div
>
<
div
className=
{
styles
[
'addressList-item-detail'
]
}
>
{
item
.
fullAddress
}
</
div
>
</
li
>
))
}
</
ul
>
{
(
dataSource
.
length
>
showCount
)
&&
!
readOnly
&&
(
<
div
className=
{
styles
.
more
}
onClick=
{
handleToogleMore
}
>
{
!
showMore
?
'显示更多'
:
'隐藏更多'
}
{
!
showMore
?
<
CaretDownOutlined
/>
:
<
CaretUpOutlined
/>
}
</
div
>
)
}
</
div
>
);
};
AddressFormItem
.
defaultProps
=
{};
AddressFormItem
.
isFieldComponent
=
false
;
export
default
AddressFormItem
;
\ No newline at end of file
src/pages/contract/manage/QueryList/QueryListdetails.tsx
View file @
e53eeeda
This diff is collapsed.
Click to expand it.
src/pages/contract/manage/QueryList/index.css
0 → 100644
View file @
e53eeeda
.anchorWrap
:global
.ant-anchor
{
display
:
flex
;
}
.anchorWrap
:global
.ant-anchor
.ant-anchor-ink
{
display
:
none
;
}
.anchorWrap
:global
.ant-anchor
.ant-anchor-link
{
padding
:
14px
0
!important
;
margin
:
0
16px
;
}
.anchorWrap
:global
.ant-anchor
.ant-anchor-link
.ant-anchor-link-title
{
font-size
:
14px
;
color
:
#909399
;
}
.anchorWrap
:global
.ant-anchor
.ant-anchor-link-active
{
position
:
relative
;
border-bottom
:
2px
solid
#00B37A
;
box-sizing
:
border-box
;
}
.anchorWrap
:global
.ant-anchor
.ant-anchor-link-active
.ant-anchor-link-title
{
font-weight
:
500
;
color
:
#303133
;
}
.anchorWrap
.titleBox
{
padding
:
8px
16px
;
}
.anchorWrap
.anchorBox
{
display
:
flex
;
padding
:
0
16px
;
}
/** 卡片样式 */
.card
{
margin
:
24px
;
}
.card
:global
.ant-card
{
margin-bottom
:
24px
;
}
.card
:global
.ant-card
.ant-card-head
>
.ant-card-head-wrapper
{
padding
:
12px
0
;
}
.card
:global
.ant-card
.ant-card-extra
{
padding
:
0
0
;
}
.card
:global
.ant-card
.ant-card-extra
.ant-radio-button-wrapper
{
height
:
24px
;
line-height
:
23px
;
}
.card
:global
.ant-card
.ant-card-extra
.ant-radio-button-wrapper
:hover
{
color
:
#606266
;
}
.card
:global
.ant-card
.ant-card-extra
.ant-radio-button-wrapper-checked
:not
(
.ant-radio-button-wrapper-disabled
)
{
color
:
#fff
;
background
:
#6B778C
;
border-color
:
#6B778C
;
}
.card
:global
.god-table-control
{
margin-bottom
:
0
;
}
.card
.list
{
display
:
flex
;
}
.card
.list
h5
{
margin-bottom
:
2em
;
}
.card
.list
.listLable
{
flex
:
0
0
25%
;
color
:
#909399
;
}
.listItem
{
display
:
flex
;
}
.listItem
.label
{
flex
:
0.2
;
padding
:
0
16px
;
background
:
linear-gradient
(
270deg
,
#ffffff
0%
,
#daf2e7
100%
);
}
.listItem
.text
{
padding
:
0px
0px
;
flex
:
1
;
}
.listItem
p
{
margin-bottom
:
0
;
}
.warp
{
display
:
flex
;
width
:
100%
;
}
.warp
.warp_item
{
width
:
20%
;
border
:
1px
solid
#F4F5F7
;
border-radius
:
10px
;
padding
:
16px
;
margin-right
:
10px
;
}
.warp
.warp_item
.title
{
font-size
:
12px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#909399
;
}
.warp
.warp_item
.proportion
{
font-size
:
24px
;
font-family
:
PingFangSC-Medium
,
PingFang
SC
;
font-weight
:
500
;
color
:
#303133
;
padding
:
12px
0
;
}
.warp
.warp_item
.Price
{
font-size
:
16px
;
font-family
:
PingFangSC-Medium
,
PingFang
SC
;
font-weight
:
500
;
color
:
#303133
;
}
.warp
.warp_item
.warp_List
{
margin-top
:
32px
;
}
.warp
.warp_item
.warp_List
.warp_ListItem
{
display
:
flex
;
margin-bottom
:
16px
;
}
.warp
.warp_item
.warp_List
.warp_ListItem
.label
{
font-size
:
12px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#909399
;
flex
:
0.5
;
}
.warp
.warp_item
.warp_List
.warp_ListItem
.text
{
font-size
:
12px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#303133
;
flex
:
1
;
}
.upload_item
{
margin-bottom
:
16px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
}
.upload_item
.upload_left
{
display
:
flex
;
align-items
:
center
;
color
:
#303133
;
background-color
:
#fafbfc
;
}
.upload_item
.upload_left
:global
.anticon-file-word
{
color
:
#4279df
;
font-size
:
18px
;
margin-right
:
8px
;
}
.upload_item
.upload_right
{
color
:
#00b37a
;
cursor
:
pointer
;
}
.upload_item
.upload_right
:global
.anticon-delete
{
margin-left
:
19px
;
color
:
#c0c4cc
;
}
src/pages/contract/manage/QueryList/index.less
0 → 100644
View file @
e53eeeda
.anchorWrap {
:global {
.ant-anchor {
display: flex;
.ant-anchor-ink {
display: none;
}
.ant-anchor-link {
padding: 14px 0 !important;
margin: 0 16px;
.ant-anchor-link-title {
font-size: 14px;
color: #909399;
}
}
.ant-anchor-link-active {
position: relative;
border-bottom: 2px solid #00B37A;
box-sizing: border-box;
.ant-anchor-link-title {
font-weight: 500;
color: #303133;
}
}
}
}
.titleBox {
padding: 8px 16px;
}
.anchorBox {
display: flex;
padding: 0 16px;
}
}
/** 卡片样式 */
.card {
margin: 24px;
:global {
.ant-card {
margin-bottom: 24px;
.ant-card-head {
> .ant-card-head-wrapper {
padding: 12px 0;
}
}
.ant-card-extra {
padding: 0 0;
.ant-radio-button-wrapper {
height: 24px;
line-height: 23px;
}
.ant-radio-button-wrapper:hover {
color: #606266;
}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {
color: #fff;
background: #6B778C;
border-color: #6B778C;
}
}
}
.god-table-control {
margin-bottom: 0;
}
}
.list {
display: flex;
h5 {
margin-bottom: 2em;
}
.listLable {
flex: 0 0 25%;
color: #909399;
}
}
}
.listItem {
display: flex;
.label {
flex: 0.2;
padding: 0 16px;
background: linear-gradient(270deg, #ffffff 0%, #daf2e7 100%);
}
.text {
padding: 0px 0px;
flex: 1;
}
p {
margin-bottom: 0;
}
}
.warp{
display: flex;
width: 100%;
.warp_item{
width: 20%;
border: 1px solid #F4F5F7;
border-radius: 10px;
padding: 16px;
margin-right: 10px;
.title{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #909399;
}
.proportion{
font-size: 24px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #303133;
padding: 12px 0;
}
.Price{
font-size: 16px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #303133;
}
.warp_List{
margin-top: 32px;
.warp_ListItem{
display: flex;
margin-bottom: 16px;
.label{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #909399;
flex: 0.5;
}
.text{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #303133;
flex: 1;
}
}
}
}
}
.upload_item {
margin-bottom: 16px;
display: flex;
align-items: center;
justify-content: space-between;
.upload_left {
display: flex;
align-items: center;
color: #303133;
background-color: #fafbfc;
:global {
.anticon-file-word {
color: #4279df;
font-size: 18px;
margin-right: 8px;
}
}
}
.upload_right {
color: #00b37a;
cursor: pointer;
:global {
.anticon-delete {
margin-left: 19px;
color: #c0c4cc;
}
}
}
}
src/pages/contract/manage/QueryList/index.tsx
View file @
e53eeeda
import
React
,
{
useState
,
useRef
,
ReactNode
}
from
'react'
import
React
,
{
useRef
}
from
'react'
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
Card
}
from
'antd'
;
import
statuStyle
from
'../../common/colorTag'
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
{
StandardTable
}
from
'god'
;
import
{
PublicApi
}
from
'@/services/api
'
import
EyePreview
from
'@/components/EyePreview
'
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
import
{
tableListSchema
}
from
'../schema'
import
StatusTag
from
'@/components/StatusTag'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
import
Submit
from
'@/components/NiceForm/components/Submit'
import
DateRangePickerUnix
from
'@/components/NiceForm/components/DateRangePickerUnix'
const
QueryList
=
()
=>
{
const
ref
=
useRef
<
any
>
({});
const
[
filterParams
,
setFilterParams
]
=
useState
<
any
>
({})
//表头
const
columns
:
ColumnType
<
any
>
[]
=
[{
title
:
'需求单号/摘要'
,
dataIndex
:
'
id
'
,
dataIndex
:
'
No
'
,
align
:
'center'
,
render
:
(
text
,
record
)
=>
<
div
>
<
EyePreview
url=
{
`/memberCenter/contract/manage/QueryList/QueryListdetails`
}
>
{
text
}
</
EyePreview
>
<
p
>
{
record
.
name
}
</
p
>
</
div
>
},
{
title
:
'
需求发布时间
'
,
dataIndex
:
'n
ame
'
,
title
:
'
投标编号
'
,
dataIndex
:
'n
umber
'
,
align
:
'center'
,
},
{
title
:
'
合同乙方
'
,
dataIndex
:
'
description
'
,
title
:
'
中标会员
'
,
dataIndex
:
'
memberName
'
,
align
:
'center'
,
},
{
title
:
'
合同总金额
'
,
dataIndex
:
'
description
'
,
title
:
'
中标通知时间
'
,
dataIndex
:
'
time
'
,
align
:
'center'
,
},
{
title
:
'
对应单据/寻源类型
'
,
dataIndex
:
'
description
'
,
title
:
'
中标金额
'
,
dataIndex
:
'
Price
'
,
align
:
'center'
,
},
{
title
:
'外部状态'
,
dataIndex
:
'
description
'
,
dataIndex
:
'
status
'
,
align
:
'center'
,
render
:
(
text
)
=>
{
let
title
:
any
=
[
{},
{
name
:
'已完成'
,
type
:
"success"
},
{
name
:
'未完成'
,
type
:
"primary"
},
]
return
(
<
StatusTag
type=
{
title
[
text
].
type
}
title=
{
title
[
text
].
name
}
/>
)
}
},
{
title
:
'内部状态'
,
dataIndex
:
'
description
'
,
dataIndex
:
'
insidestatus
'
,
align
:
'center'
,
render
:
(
text
)
=>
{
let
title
:
any
=
[
{},
{
name
:
'已完成'
,
type
:
"success"
},
{
name
:
'未完成'
,
type
:
"primary"
},
]
return
(
<
div
>
<
span
style=
{
statuStyle
.
point
}
>
</
span
>
<
span
>
{
title
[
text
].
name
}
</
span
>
</
div
>
)
}
},
{
title
:
'操作'
,
dataIndex
:
'state'
,
align
:
'center'
,
render
:
(
text
:
any
,
reconds
:
any
)
=>
{
let
component
:
ReactNode
=
null
;
if
(
text
===
1
)
{
component
=
<><
span
style=
{
statuStyle
.
success
}
>
有效
</
span
></>
}
return
component
render
:
(
record
)
=>
{
console
.
log
(
record
)
return
(
<
span
style=
{
statuStyle
.
success
}
>
创建采购招标合同
</
span
>
)
}
}]
...
...
@@ -66,9 +95,38 @@ const QueryList = () => {
const
fetchData
=
(
params
?:
any
)
=>
{
console
.
log
(
params
)
//可以直接打印参数
return
new
Promise
((
resolve
,
reject
)
=>
{
PublicApi
.
getOrderContractParamPage
({
...
filterParams
,
...
params
}).
then
(
res
=>
{
resolve
(
res
.
data
)
})
let
data
=
{
totalCount
:
1
,
data
:
[
{
id
:
'1'
,
No
:
'ZPTY12'
,
name
:
'进口头层黄牛皮荔枝纹'
,
number
:
'ZPTY12'
,
memberName
:
'温州龙昌手袋有限公司'
,
time
:
'2020-12-25 09:00'
,
Price
:
'¥50,000.00'
,
status
:
1
,
insidestatus
:
1
,
addText
:
'创建采购招标合同'
,
state
:
''
,
},
{
id
:
'2'
,
No
:
'ZPTY12'
,
name
:
'进口头层黄牛皮荔枝纹'
,
number
:
'ZPTY12'
,
memberName
:
'温州龙昌手袋有限公司'
,
time
:
'2020-12-25 09:00'
,
Price
:
'¥50,000.00'
,
status
:
1
,
insidestatus
:
1
,
addText
:
'创建采购招标合同'
,
state
:
''
,
}
]
}
resolve
(
data
)
})
}
return
(
...
...
src/pages/contract/manage/add/index.css
0 → 100644
View file @
e53eeeda
.box
{
width
:
100%
;
}
.box
:global
.ant-table-expanded-row-level-1
.ant-table-cell
{
padding
:
0px
!important
;
background-color
:
#ffffff
;
}
.box
.listItem
{
display
:
flex
;
}
.box
.listItem
.label
{
flex
:
0.2
;
padding
:
0
16px
;
background
:
linear-gradient
(
270deg
,
#ffffff
0%
,
#daf2e7
100%
);
}
.box
.listItem
.text
{
padding
:
0px
0px
;
flex
:
1
;
}
.box
.listItem
p
{
margin-bottom
:
0
;
}
.flex
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
}
.flex
span
{
background
:
#e4e6eb
;
padding
:
7px
12px
;
color
:
#c0c4cc
;
}
.upload_item
{
margin-bottom
:
16px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
}
.upload_item
.upload_left
{
display
:
flex
;
align-items
:
center
;
color
:
#303133
;
background-color
:
#fafbfc
;
}
.upload_item
.upload_left
:global
.anticon-file-word
{
color
:
#4279df
;
font-size
:
18px
;
margin-right
:
8px
;
}
.upload_item
.upload_right
{
color
:
#00b37a
;
cursor
:
pointer
;
}
.upload_item
.upload_right
:global
.anticon-delete
{
margin-left
:
19px
;
color
:
#c0c4cc
;
}
src/pages/contract/manage/add/index.less
0 → 100644
View file @
e53eeeda
.box {
width: 100%;
:global {
.ant-table-expanded-row-level-1 .ant-table-cell {
padding: 0px !important;
background-color: #ffffff;
}
}
.listItem {
display: flex;
.label {
flex: 0.2;
padding: 0 16px;
background: linear-gradient(270deg, #ffffff 0%, #daf2e7 100%);
}
.text {
padding: 0px 0px;
flex: 1;
}
p {
margin-bottom: 0;
}
}
}
.flex {
display: flex;
align-items: center;
justify-content: center;
span {
background: #e4e6eb;
padding: 7px 12px;
color: #c0c4cc;
}
}
.upload_item {
margin-bottom: 16px;
display: flex;
align-items: center;
justify-content: space-between;
.upload_left {
display: flex;
align-items: center;
color: #303133;
background-color: #fafbfc;
:global {
.anticon-file-word {
color: #4279df;
font-size: 18px;
margin-right: 8px;
}
}
}
.upload_right {
color: #00b37a;
cursor: pointer;
:global {
.anticon-delete {
margin-left: 19px;
color: #c0c4cc;
}
}
}
}
src/pages/contract/manage/add/index.tsx
0 → 100644
View file @
e53eeeda
import
React
,
{
useState
}
from
'react'
import
{
Button
,
Card
,
message
,
Table
,
Input
,
Select
,
DatePicker
,
Form
,
Checkbox
}
from
'antd'
import
{
ArrayTable
}
from
'@formily/antd-components'
;
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
import
NiceForm
from
'@/components/NiceForm'
;
import
StatusTag
from
'@/components/StatusTag'
;
import
styles
from
'./index.less'
import
AddressFormItem
from
'../../components/AddressFormItem'
;
import
{
createFormActions
}
from
'@formily/antd'
;
import
{
SaveOutlined
,
PlusOutlined
,
FileWordFilled
}
from
'@ant-design/icons'
import
{
addBillSchema
}
from
'./schema'
;
const
addSchemaAction
=
createFormActions
();
const
{
Option
}
=
Select
;
const
{
TextArea
}
=
Input
const
Add
:
React
.
FC
<
{}
>
=
(
props
)
=>
{
const
[
checkNick
,
setCheckNick
]
=
useState
(
true
);
// ArrayTable自定义渲染
const
renderListTableRemove
=
(
index
:
number
)
=>
(
<>
<
a
style=
{
{
color
:
'#ff4d4f'
,
}
}
>
删除
</
a
>
</>
);
const
OuterStatus
=
(
<
StatusTag
type=
"primary"
title=
'外部状态'
/>
);
const
InnerStatus
=
(
<
p
>
111111
</
p
>
);
const
columns
:
any
=
[
{
title
:
'物料编号/名称'
,
dataIndex
:
'name'
,
key
:
'name'
,
align
:
'center'
,
},
{
title
:
'规格型号'
,
dataIndex
:
'age'
,
key
:
'age'
,
align
:
'center'
,
},
{
title
:
'品类'
,
dataIndex
:
'address'
,
key
:
'address'
,
align
:
'center'
,
},
{
title
:
'品牌'
,
dataIndex
:
'address'
,
key
:
'address'
,
align
:
'center'
,
},
{
title
:
'单位'
,
dataIndex
:
'address'
,
key
:
'address'
,
align
:
'center'
,
},
{
title
:
'采购数量'
,
dataIndex
:
'address'
,
key
:
'address'
,
align
:
'center'
,
render
:
()
=>
<
Input
style=
{
{
width
:
120
,
}
}
placeholder=
""
/>
},
{
title
:
'含税'
,
dataIndex
:
'address'
,
key
:
'address'
,
align
:
'center'
,
render
:
()
=>
<
Select
style=
{
{
width
:
80
}
}
>
<
Option
value=
"是"
key=
{
1
}
>
是
</
Option
>
<
Option
value=
"否"
key=
{
2
}
>
否
</
Option
>
</
Select
>
},
{
title
:
'税率'
,
dataIndex
:
'address'
,
key
:
'address'
,
align
:
'center'
,
render
:
()
=>
<
div
className=
{
styles
.
flex
}
>
<
Input
style=
{
{
width
:
80
,
}
}
placeholder=
""
/>
<
span
>
%
</
span
>
</
div
>
},
{
title
:
'单价(含税)'
,
dataIndex
:
'address'
,
key
:
'address'
,
align
:
'center'
,
render
:
()
=>
<
div
className=
{
styles
.
flex
}
>
<
span
>
¥
</
span
>
<
Input
style=
{
{
width
:
80
,
}
}
placeholder=
""
/>
</
div
>
},
{
title
:
'授标数量'
,
dataIndex
:
'address'
,
key
:
'address'
,
align
:
'center'
,
render
:
()
=>
<
Input
style=
{
{
width
:
120
,
}
}
placeholder=
""
/>
},
{
title
:
'金额(不含税)'
,
dataIndex
:
'address'
,
key
:
'address'
,
align
:
'center'
,
},
{
title
:
'操作'
,
dataIndex
:
''
,
align
:
'center'
,
key
:
'x'
,
render
:
()
=>
<
a
>
Delete
</
a
>,
},
];
const
data
=
[
{
key
:
1
,
name
:
'John Brown'
,
age
:
32
,
address
:
'New York No. 1 Lake Park'
,
description
:
'My name is John Brown, I am 32 years old, living in New York No. 1 Lake Park.'
,
},
{
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.'
,
},
{
key
:
3
,
name
:
'Not Expandable'
,
age
:
29
,
address
:
'Jiangsu No. 1 Lake Park'
,
description
:
'This not expandable'
,
},
{
key
:
4
,
name
:
'Joe Black'
,
age
:
32
,
address
:
'Sidney No. 1 Lake Park'
,
description
:
'My name is Joe Black, I am 32 years old, living in Sidney No. 1 Lake Park.'
,
},
];
/* 下拉的子元素 */
const
listItem
=
(
record
)
=>
(
<
div
className=
{
styles
.
listItem
}
>
<
div
className=
{
styles
.
label
}
>
<
p
>
{
record
.
name
}
</
p
>
<
p
>
{
record
.
name
}
</
p
>
</
div
>
<
div
className=
{
styles
.
text
}
>
<
p
>
{
record
.
name
}
</
p
>
<
p
>
{
record
.
name
}
</
p
>
</
div
>
<
div
className=
{
styles
.
text
}
>
<
p
>
{
record
.
name
}
</
p
>
<
p
>
{
record
.
name
}
</
p
>
</
div
>
<
div
className=
{
styles
.
text
}
>
<
p
>
{
record
.
name
}
</
p
>
</
div
>
</
div
>
)
/* 列表 */
const
List
:
any
=
(
<
div
className=
{
styles
.
box
}
>
<
div
style=
{
{
paddingTop
:
12
,
paddingBottom
:
12
,
}
}
>
<
Button
block
type=
'dashed'
><
PlusOutlined
/>
选择采购物料
</
Button
>
</
div
>
<
Table
columns=
{
columns
}
expandable=
{
{
expandedRowRender
:
record
=>
listItem
(
record
),
}
}
dataSource=
{
data
}
style=
{
{
width
:
"100%"
}
}
/>
</
div
>
)
/* 第三个tab */
const
tabcolumns
:
any
=
[
{
title
:
'付款次数'
,
dataIndex
:
'name'
,
key
:
'name'
,
align
:
'center'
,
},
{
title
:
'付款阶段'
,
dataIndex
:
'age'
,
key
:
'age'
,
align
:
'center'
,
render
:
()
=>
<
TextArea
rows=
{
1
}
/>
},
{
title
:
'预计付款时间'
,
dataIndex
:
'address'
,
key
:
'address'
,
align
:
'center'
,
render
:
()
=>
<
DatePicker
style=
{
{
width
:
'100%'
}
}
format=
"YYYY-MM-DD HH:mm:ss"
/>
},
{
title
:
'付款比例'
,
dataIndex
:
'address'
,
key
:
'address'
,
align
:
'center'
,
render
:
()
=>
<
div
className=
{
styles
.
flex
}
>
<
Input
style=
{
{
width
:
150
,
}
}
placeholder=
""
/>
<
span
>
%
</
span
>
</
div
>
},
{
title
:
'付款方式'
,
dataIndex
:
'address'
,
key
:
'address'
,
align
:
'center'
,
render
:
()
=>
<
div
className=
{
styles
.
flex
}
>
<
span
>
¥
</
span
>
<
Input
style=
{
{
width
:
130
,
}
}
placeholder=
""
/>
</
div
>
},
{
title
:
'操作'
,
dataIndex
:
''
,
align
:
'center'
,
key
:
'x'
,
render
:
()
=>
<
a
>
Delete
</
a
>,
},
];
const
datas
=
[
{
key
:
1
,
name
:
'John Brown'
,
age
:
32
,
address
:
'New York No. 1 Lake Park'
,
description
:
'My name is John Brown, I am 32 years old, living in New York No. 1 Lake Park.'
,
},
{
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.'
,
},
{
key
:
3
,
name
:
'Not Expandable'
,
age
:
29
,
address
:
'Jiangsu No. 1 Lake Park'
,
description
:
'This not expandable'
,
},
{
key
:
4
,
name
:
'Joe Black'
,
age
:
32
,
address
:
'Sidney No. 1 Lake Park'
,
description
:
'My name is Joe Black, I am 32 years old, living in Sidney No. 1 Lake Park.'
,
},
];
const
table
:
any
=
(
<
Table
columns=
{
tabcolumns
}
dataSource=
{
datas
}
style=
{
{
width
:
"100%"
}
}
/>
)
const
onCheckboxChange
=
(
e
:
{
target
:
{
checked
:
boolean
}
})
=>
{
setCheckNick
(
e
.
target
.
checked
);
};
/* 第四个tab */
const
FromDom
=
(
<
div
style=
{
{
width
:
'100%'
,
}
}
>
<
Form
.
Item
label=
"单据摘要"
labelAlign=
"left"
labelCol=
{
{
span
:
2
}
}
>
<
Select
style=
{
{
width
:
600
}
}
>
<
Option
value=
"是"
key=
{
1
}
>
是
</
Option
>
<
Option
value=
"否"
key=
{
2
}
>
否
</
Option
>
</
Select
>
<
Button
type=
'link'
>
生成合同
</
Button
>
</
Form
.
Item
>
<
Form
.
Item
label=
"合同文本"
labelAlign=
"left"
labelCol=
{
{
span
:
2
}
}
>
<
div
className=
{
styles
.
upload_item
}
style=
{
{
width
:
680
}
}
>
<
div
className=
{
styles
.
upload_left
}
style=
{
{
width
:
600
}
}
>
<
FileWordFilled
/>
<
span
>
温州龙昌手袋有限公司商品购销合同.pdf
</
span
>
</
div
>
<
Button
type=
'link'
>
编辑合同
</
Button
>
</
div
>
</
Form
.
Item
>
<
Form
.
Item
label=
"电子合同"
labelAlign=
"left"
labelCol=
{
{
span
:
2
}
}
>
<
Checkbox
checked=
{
checkNick
}
onChange=
{
onCheckboxChange
}
>
使用电子合同
</
Checkbox
>
</
Form
.
Item
>
</
div
>
)
return
(
<
PageHeaderWrapper
title=
"新建合同"
extra=
{
[
<
Button
key=
"1"
type=
"primary"
icon=
{
<
SaveOutlined
/>
}
>
</
Button
>
]
}
>
<
Card
>
<
NiceForm
previewPlaceholder=
" "
expressionScope=
{
{
OuterStatus
,
InnerStatus
,
List
,
table
,
FromDom
,
renderListTableRemove
,
}
}
components=
{
{
ArrayTable
,
AddressFormItem
,
}
}
effects=
{
(
$
,
actions
)
=>
{
const
{
setFieldState
}
=
actions
;
}
}
actions=
{
addSchemaAction
}
schema=
{
addBillSchema
}
/>
</
Card
>
</
PageHeaderWrapper
>
)
}
export
default
Add
;
src/pages/contract/manage/add/schema/index.ts
0 → 100644
View file @
e53eeeda
This diff is collapsed.
Click to expand it.
src/pages/contract/manage/bidding/index.tsx
View file @
e53eeeda
import
React
,
{
use
State
,
useRef
,
ReactNode
}
from
'react'
import
React
,
{
use
Ref
}
from
'react'
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
Card
}
from
'antd'
;
import
statuStyle
from
'../../common/colorTag'
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
{
StandardTable
}
from
'god'
;
import
{
PublicApi
}
from
'@/services/api
'
import
EyePreview
from
'@/components/EyePreview
'
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
import
{
tableListSchema
}
from
'../schema'
import
StatusTag
from
'@/components/StatusTag'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
import
Submit
from
'@/components/NiceForm/components/Submit'
import
DateRangePickerUnix
from
'@/components/NiceForm/components/DateRangePickerUnix'
const
BiddingList
=
()
=>
{
const
ref
=
useRef
<
any
>
({});
const
[
filterParams
,
setFilterParams
]
=
useState
<
any
>
({})
//表头
const
columns
:
ColumnType
<
any
>
[]
=
[{
title
:
'需求单号/摘要'
,
dataIndex
:
'
id
'
,
dataIndex
:
'
No
'
,
align
:
'center'
,
render
:
(
text
,
record
)
=>
<
div
>
<
EyePreview
url=
{
`/memberCenter/payandSettle/capitalAccounts/accountLists/detail?id=${record.id}`
}
>
{
text
}
</
EyePreview
>
<
p
>
{
record
.
name
}
</
p
>
</
div
>
},
{
title
:
'
需求发布时间
'
,
dataIndex
:
'n
ame
'
,
title
:
'
投标编号
'
,
dataIndex
:
'n
umber
'
,
align
:
'center'
,
},
{
title
:
'
授
标会员'
,
dataIndex
:
'
description
'
,
title
:
'
中
标会员'
,
dataIndex
:
'
memberName
'
,
align
:
'center'
,
},
{
title
:
'
授标
时间'
,
dataIndex
:
'
description
'
,
title
:
'
中标通知
时间'
,
dataIndex
:
'
time
'
,
align
:
'center'
,
},
{
title
:
'
授
标金额'
,
dataIndex
:
'
description
'
,
title
:
'
中
标金额'
,
dataIndex
:
'
Price
'
,
align
:
'center'
,
},
{
title
:
'外部状态'
,
dataIndex
:
'
description
'
,
dataIndex
:
'
status
'
,
align
:
'center'
,
render
:
(
text
)
=>
{
let
title
:
any
=
[
{},
{
name
:
'已完成'
,
type
:
"success"
},
{
name
:
'未完成'
,
type
:
"primary"
},
]
return
(
<
StatusTag
type=
{
title
[
text
].
type
}
title=
{
title
[
text
].
name
}
/>
)
}
},
{
title
:
'内部状态'
,
dataIndex
:
'
description
'
,
dataIndex
:
'
insidestatus
'
,
align
:
'center'
,
render
:
(
text
)
=>
{
let
title
:
any
=
[
{},
{
name
:
'已完成'
,
type
:
"success"
},
{
name
:
'未完成'
,
type
:
"primary"
},
]
return
(
<
div
>
<
span
style=
{
statuStyle
.
point
}
>
</
span
>
<
span
>
{
title
[
text
].
name
}
</
span
>
</
div
>
)
}
},
{
title
:
'操作'
,
dataIndex
:
'state'
,
align
:
'center'
,
render
:
(
text
:
any
,
reconds
:
any
)
=>
{
let
component
:
ReactNode
=
null
;
if
(
text
===
1
)
{
component
=
<><
span
style=
{
statuStyle
.
success
}
>
有效
</
span
></>
}
return
component
render
:
(
record
)
=>
{
return
(
<
span
style=
{
statuStyle
.
success
}
>
创建采购招标合同
</
span
>
)
}
}]
...
...
@@ -65,9 +95,64 @@ const BiddingList = () => {
const
fetchData
=
(
params
?:
any
)
=>
{
console
.
log
(
params
)
//可以直接打印参数
return
new
Promise
((
resolve
,
reject
)
=>
{
PublicApi
.
getOrderContractParamPage
({
...
filterParams
,
...
params
}).
then
(
res
=>
{
resolve
(
res
.
data
)
})
let
data
=
{
totalCount
:
1
,
data
:
[
{
id
:
'1'
,
No
:
'ZPTY12'
,
name
:
'进口头层黄牛皮荔枝纹'
,
number
:
'ZPTY12'
,
memberName
:
'温州龙昌手袋有限公司'
,
time
:
'2020-12-25 09:00'
,
Price
:
'¥50,000.00'
,
status
:
1
,
insidestatus
:
1
,
addText
:
'创建采购招标合同'
,
state
:
''
,
},
{
id
:
'2'
,
No
:
'ZPTY12'
,
name
:
'进口头层黄牛皮荔枝纹'
,
number
:
'ZPTY12'
,
memberName
:
'温州龙昌手袋有限公司'
,
time
:
'2020-12-25 09:00'
,
Price
:
'¥50,000.00'
,
status
:
1
,
insidestatus
:
1
,
addText
:
'创建采购招标合同'
,
state
:
''
,
},
{
id
:
'1'
,
No
:
'ZPTY12'
,
name
:
'进口头层黄牛皮荔枝纹'
,
number
:
'ZPTY12'
,
memberName
:
'温州龙昌手袋有限公司'
,
time
:
'2020-12-25 09:00'
,
Price
:
'¥50,000.00'
,
status
:
1
,
insidestatus
:
1
,
addText
:
'创建采购招标合同'
,
state
:
''
,
},
{
id
:
'3'
,
No
:
'ZPTY12'
,
name
:
'进口头层黄牛皮荔枝纹'
,
number
:
'ZPTY12'
,
memberName
:
'温州龙昌手袋有限公司'
,
time
:
'2020-12-25 09:00'
,
Price
:
'¥50,000.00'
,
status
:
1
,
insidestatus
:
1
,
addText
:
'创建采购招标合同'
,
state
:
''
,
},
]
}
resolve
(
data
)
})
}
return
(
...
...
src/pages/contract/manage/examine/index.tsx
0 → 100644
View file @
e53eeeda
import
React
,
{
useRef
,
useState
}
from
'react'
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
Card
,
Space
,
Button
}
from
'antd'
;
import
statuStyle
from
'../../common/colorTag'
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
{
StandardTable
}
from
'god'
;
import
EyePreview
from
'@/components/EyePreview'
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
import
{
tableListSchema
}
from
'../schema'
import
StatusTag
from
'@/components/StatusTag'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
import
Submit
from
'@/components/NiceForm/components/Submit'
import
DateRangePickerUnix
from
'@/components/NiceForm/components/DateRangePickerUnix'
const
Examine
=
()
=>
{
const
ref
=
useRef
<
any
>
({});
const
[
selectedRowKeys
,
setSelectedRowKeys
]
=
useState
<
Array
<
string
>>
([])
const
[
selectRow
,
setSelectRow
]
=
useState
<
any
[]
>
([])
// 模态框选择的行数据
//表头
const
columns
:
ColumnType
<
any
>
[]
=
[{
title
:
'需求单号/摘要'
,
dataIndex
:
'No'
,
align
:
'center'
,
render
:
(
text
,
record
)
=>
<
div
>
<
EyePreview
url=
{
`/memberCenter/contract/manage/QueryList/QueryListdetails`
}
>
{
text
}
</
EyePreview
>
<
p
>
{
record
.
name
}
</
p
>
</
div
>
},
{
title
:
'投标编号'
,
dataIndex
:
'number'
,
align
:
'center'
,
},
{
title
:
'中标会员'
,
dataIndex
:
'memberName'
,
align
:
'center'
,
},
{
title
:
'中标通知时间'
,
dataIndex
:
'time'
,
align
:
'center'
,
},
{
title
:
'中标金额'
,
dataIndex
:
'Price'
,
align
:
'center'
,
},
{
title
:
'外部状态'
,
dataIndex
:
'status'
,
align
:
'center'
,
render
:
(
text
)
=>
{
let
title
:
any
=
[
{},
{
name
:
'已完成'
,
type
:
"success"
},
{
name
:
'未完成'
,
type
:
"primary"
},
]
return
(
<
StatusTag
type=
{
title
[
text
].
type
}
title=
{
title
[
text
].
name
}
/>
)
}
},
{
title
:
'内部状态'
,
dataIndex
:
'insidestatus'
,
align
:
'center'
,
render
:
(
text
)
=>
{
let
title
:
any
=
[
{},
{
name
:
'已完成'
,
type
:
"success"
},
{
name
:
'未完成'
,
type
:
"primary"
},
]
return
(
<
div
>
<
span
style=
{
statuStyle
.
point
}
>
</
span
>
<
span
>
{
title
[
text
].
name
}
</
span
>
</
div
>
)
}
},
{
title
:
'操作'
,
dataIndex
:
'state'
,
align
:
'center'
,
render
:
(
record
)
=>
{
console
.
log
(
record
)
return
(
<
span
style=
{
statuStyle
.
success
}
>
创建采购招标合同
</
span
>
)
}
}]
const
handleSubmitBatch
=
async
()
=>
{
}
const
controllerBtns
=
(
<
Space
>
<
Button
onClick=
{
handleSubmitBatch
}
>
批量审核通过
</
Button
>
</
Space
>
);
// 列表数据
const
fetchData
=
(
params
?:
any
)
=>
{
console
.
log
(
params
)
//可以直接打印参数
return
new
Promise
((
resolve
,
reject
)
=>
{
let
data
=
{
totalCount
:
1
,
data
:
[
{
id
:
'1'
,
No
:
'ZPTY12'
,
name
:
'进口头层黄牛皮荔枝纹'
,
number
:
'ZPTY12'
,
memberName
:
'温州龙昌手袋有限公司'
,
time
:
'2020-12-25 09:00'
,
Price
:
'¥50,000.00'
,
status
:
1
,
insidestatus
:
1
,
addText
:
'创建采购招标合同'
,
state
:
''
,
},
{
id
:
'2'
,
No
:
'ZPTY12'
,
name
:
'进口头层黄牛皮荔枝纹'
,
number
:
'ZPTY12'
,
memberName
:
'温州龙昌手袋有限公司'
,
time
:
'2020-12-25 09:00'
,
Price
:
'¥50,000.00'
,
status
:
1
,
insidestatus
:
1
,
addText
:
'创建采购招标合同'
,
state
:
''
,
}
]
}
resolve
(
data
)
})
}
const
rowSelection
:
any
=
{
selectedRowKeys
:
selectedRowKeys
,
onChange
:
(
selectedRowKeys
:
any
,
selectedRows
:
any
)
=>
{
setSelectedRowKeys
(
selectedRowKeys
)
setSelectRow
(
selectedRows
)
console
.
log
(
selectedRowKeys
,
selectedRows
,
'rowSelection'
)
}
};
return
(
<
PageHeaderWrapper
>
<
Card
>
<
StandardTable
tableProps=
{
{
rowKey
:
'id'
,
}
}
rowSelection=
{
rowSelection
}
columns=
{
columns
}
currentRef=
{
ref
}
formilyLayouts=
{
{
justify
:
'space-between'
}
}
fetchTableData=
{
(
params
:
any
)
=>
fetchData
(
params
)
}
formilyChilds=
{
{
children
:
<
Space
>
<
Button
onClick=
{
handleSubmitBatch
}
>
批量提交审核
</
Button
>
</
Space
>,
layouts
:
{
span
:
8
}
}
}
formilyProps=
{
{
ctx
:
{
inline
:
false
,
schema
:
tableListSchema
,
effects
:
(
$
,
actions
)
=>
{
useStateFilterSearchLinkageEffect
(
$
,
actions
,
'orderNo'
,
FORM_FILTER_PATH
,
);
},
components
:
{
DateRangePickerUnix
,
Submit
}
}
}
}
/>
</
Card
>
</
PageHeaderWrapper
>
)
}
export
default
Examine
src/pages/contract/manage/purchase/index.tsx
View file @
e53eeeda
import
React
,
{
use
State
,
useRef
,
ReactNode
}
from
'react'
import
React
,
{
use
Ref
}
from
'react'
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
Card
}
from
'antd'
;
import
statuStyle
from
'../../common/colorTag'
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
{
StandardTable
}
from
'god'
;
import
{
PublicApi
}
from
'@/services/api
'
import
EyePreview
from
'@/components/EyePreview
'
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
import
{
tableListSchema
}
from
'../schema'
import
StatusTag
from
'@/components/StatusTag'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
import
Submit
from
'@/components/NiceForm/components/Submit'
import
DateRangePickerUnix
from
'@/components/NiceForm/components/DateRangePickerUnix'
const
PurchaseList
=
()
=>
{
const
ref
=
useRef
<
any
>
({});
const
[
filterParams
,
setFilterParams
]
=
useState
<
any
>
({})
//表头
const
columns
:
ColumnType
<
any
>
[]
=
[{
title
:
'需求单号/摘要'
,
dataIndex
:
'
id
'
,
dataIndex
:
'
No
'
,
align
:
'center'
,
render
:
(
text
,
record
)
=>
<
div
>
<
EyePreview
url=
{
`/memberCenter/payandSettle/capitalAccounts/accountLists/detail?id=${record.id}`
}
>
{
text
}
</
EyePreview
>
<
p
>
{
record
.
name
}
</
p
>
</
div
>
},
{
title
:
'
需求发布时间
'
,
dataIndex
:
'n
ame
'
,
title
:
'
投标编号
'
,
dataIndex
:
'n
umber
'
,
align
:
'center'
,
},
{
title
:
'
授
标会员'
,
dataIndex
:
'
description
'
,
title
:
'
中
标会员'
,
dataIndex
:
'
memberName
'
,
align
:
'center'
,
},
{
title
:
'
授标
时间'
,
dataIndex
:
'
description
'
,
title
:
'
中标通知
时间'
,
dataIndex
:
'
time
'
,
align
:
'center'
,
},
{
title
:
'
授
标金额'
,
dataIndex
:
'
description
'
,
title
:
'
中
标金额'
,
dataIndex
:
'
Price
'
,
align
:
'center'
,
},
{
title
:
'外部状态'
,
dataIndex
:
'
description
'
,
dataIndex
:
'
status
'
,
align
:
'center'
,
render
:
(
text
)
=>
{
let
title
:
any
=
[
{},
{
name
:
'已完成'
,
type
:
"success"
},
{
name
:
'未完成'
,
type
:
"primary"
},
]
return
(
<
StatusTag
type=
{
title
[
text
].
type
}
title=
{
title
[
text
].
name
}
/>
)
}
},
{
title
:
'内部状态'
,
dataIndex
:
'
description
'
,
dataIndex
:
'
insidestatus
'
,
align
:
'center'
,
render
:
(
text
)
=>
{
let
title
:
any
=
[
{},
{
name
:
'已完成'
,
type
:
"success"
},
{
name
:
'未完成'
,
type
:
"primary"
},
]
return
(
<
div
>
<
span
style=
{
statuStyle
.
point
}
>
</
span
>
<
span
>
{
title
[
text
].
name
}
</
span
>
</
div
>
)
}
},
{
title
:
'操作'
,
dataIndex
:
'state'
,
align
:
'center'
,
render
:
(
text
:
any
,
reconds
:
any
)
=>
{
let
component
:
ReactNode
=
null
;
if
(
text
===
1
)
{
component
=
<><
span
style=
{
statuStyle
.
success
}
>
有效
</
span
></>
}
return
component
render
:
(
record
)
=>
{
return
(
<
span
style=
{
statuStyle
.
success
}
>
创建采购招标合同
</
span
>
)
}
}]
...
...
@@ -64,9 +94,38 @@ const PurchaseList = () => {
const
fetchData
=
(
params
?:
any
)
=>
{
console
.
log
(
params
)
//可以直接打印参数
return
new
Promise
((
resolve
,
reject
)
=>
{
PublicApi
.
getOrderContractParamPage
({
...
filterParams
,
...
params
}).
then
(
res
=>
{
resolve
(
res
.
data
)
})
let
data
=
{
totalCount
:
1
,
data
:
[
{
id
:
'1'
,
No
:
'ZPTY12'
,
name
:
'进口头层黄牛皮荔枝纹'
,
number
:
'ZPTY12'
,
memberName
:
'温州龙昌手袋有限公司'
,
time
:
'2020-12-25 09:00'
,
Price
:
'¥50,000.00'
,
status
:
1
,
insidestatus
:
1
,
addText
:
'创建采购招标合同'
,
state
:
''
,
},
{
id
:
'2'
,
No
:
'ZPTY12'
,
name
:
'进口头层黄牛皮荔枝纹'
,
number
:
'ZPTY12'
,
memberName
:
'温州龙昌手袋有限公司'
,
time
:
'2020-12-25 09:00'
,
Price
:
'¥50,000.00'
,
status
:
1
,
insidestatus
:
1
,
addText
:
'创建采购招标合同'
,
state
:
''
,
}
]
}
resolve
(
data
)
})
}
return
(
...
...
src/pages/contract/template/addContract/index.css
0 → 100644
View file @
e53eeeda
.addcontract_wrap
:global
.ant-form-item
{
width
:
748px
;
}
.addcontract_wrap
:global
.ant-form-item
.ant-form-item-label
{
width
:
172px
;
text-align
:
left
;
}
.addcontract_wrap
:global
.ant-form-item
.ant-form-item-label
>
label
{
color
:
#909399
;
}
.addcontract_wrap
:global
.ant-form-item
.ant-upload-list-item
{
margin-top
:
0px
;
}
.addcontract_wrap
.upload_item
{
padding
:
5px
8px
;
margin-bottom
:
16px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
background-color
:
#fafbfc
;
}
.addcontract_wrap
.upload_item
.upload_left
{
display
:
flex
;
align-items
:
center
;
color
:
#303133
;
}
.addcontract_wrap
.upload_item
.upload_left
:global
.anticon-file-word
{
color
:
#4279df
;
font-size
:
18px
;
margin-right
:
8px
;
}
.addcontract_wrap
.upload_item
.upload_right
{
color
:
#00b37a
;
cursor
:
pointer
;
}
.addcontract_wrap
.upload_item
.upload_right
:global
.anticon-delete
{
margin-left
:
19px
;
color
:
#c0c4cc
;
}
src/pages/contract/template/addContract/index.less
View file @
e53eeeda
...
...
@@ -22,7 +22,7 @@
display: flex;
align-items: center;
justify-content: space-between;
background-color: #
FAFBFC
;
background-color: #
fafbfc
;
.upload_left {
display: flex;
...
...
@@ -31,7 +31,7 @@
:global {
.anticon-file-word {
color: #4279df;
color: #4279df;
font-size: 18px;
margin-right: 8px;
}
...
...
@@ -39,15 +39,15 @@
}
.upload_right {
color: #00
B37A
;
color: #00
b37a
;
cursor: pointer;
:global {
.anticon-delete {
margin-left: 19px;
color: #
C0C4CC
;
color: #
c0c4cc
;
}
}
}
}
}
\ No newline at end of file
}
src/pages/procurement/callForBids/callForBidsSearch/detail/index.tsx
View file @
e53eeeda
...
...
@@ -11,8 +11,8 @@ import BidDetailHeader from '@/pages/procurement/components/bidDetailHeader';
import
BidDetailSection
from
'@/pages/procurement/components/bidDetailSection'
;
const
CallForBidsSearchDetail
:
React
.
FC
=
()
=>
{
const
{
formContext
,
id
,
detailList
}
=
useBidDetail
({
type
:
'purchaseOrder'
})
const
{
data
,
currentPayInfoId
}
=
formContext
const
{
formContext
,
id
,
detailList
}
=
useBidDetail
({
type
:
'purchaseOrder'
})
const
{
data
,
currentPayInfoId
}
=
formContext
const
payRef
=
useRef
<
any
>
({})
...
...
@@ -40,14 +40,14 @@ const CallForBidsSearchDetail: React.FC = () => {
formContext=
{
formContext
}
anchorList=
{
anchorTitleList
}
backLink=
"/memberCenter/procurementAbility/callForBids/callForBidsSearch"
// extraRight={
// <Button type='primary'>
// 去支付
// </Button>
// }
// extraRight={
// <Button type='primary'>
// 去支付
// </Button>
// }
/>
<
OrderDetailWrapper
>
<
PreLoading
loading=
{
!
formContext
.
data
}
active
paragraph=
{
{
rows
:
6
}
}
>
<
PreLoading
loading=
{
!
formContext
.
data
}
active
paragraph=
{
{
rows
:
6
}
}
>
<
BidDetailSection
formContext=
{
formContext
}
anchorList=
{
anchorTitleList
}
type=
"callForBid"
/>
</
PreLoading
>
</
OrderDetailWrapper
>
...
...
src/pages/procurement/components/bidDetailHeader/index.tsx
View file @
e53eeeda
...
...
@@ -18,7 +18,7 @@ export interface BidDetailHeaderProps {
/**
* 招标详情头部
*/
const
BidDetailHeader
:
React
.
FC
<
BidDetailHeaderProps
>
=
({
const
BidDetailHeader
:
React
.
FC
<
BidDetailHeaderProps
>
=
({
extraRight
,
detailList
=
[],
formContext
,
...
...
@@ -36,7 +36,7 @@ const BidDetailHeader:React.FC<BidDetailHeaderProps> = ({
useEffect
(()
=>
{
window
.
addEventListener
(
"scroll"
,
onScroll
)
return
(()
=>
{
return
(()
=>
{
window
.
removeEventListener
(
'scroll'
,
onScroll
)
})
},
[])
...
...
@@ -45,24 +45,24 @@ const BidDetailHeader:React.FC<BidDetailHeaderProps> = ({
let
scrollTop
=
document
.
documentElement
.
scrollTop
||
document
.
body
.
scrollTop
;
let
floors
=
document
.
querySelectorAll
(
".anchorContent>div"
)
floors
.
forEach
((
floor
:
any
,
index
:
any
)
=>
{
if
(
floor
.
offsetTop
-
100
<=
scrollTop
)
{
if
(
floor
.
offsetTop
-
100
<=
scrollTop
)
{
setCurrent
(
index
)
}
})
// 锚点导航距离顶端距离
let
navDom
:
any
=
document
.
getElementById
(
"anchorTitle"
)
if
(
navDom
)
{
let
distance
=
navDom
.
offsetTop
-
document
.
documentElement
.
scrollTop
if
(
!
flagRef
.
current
.
flag
)
{
if
(
navDom
)
{
let
distance
=
navDom
.
offsetTop
-
document
.
documentElement
.
scrollTop
if
(
!
flagRef
.
current
.
flag
)
{
flagRef
.
current
.
distanceTop
=
navDom
.
offsetTop
flagRef
.
current
.
flag
=
true
}
if
(
distance
<=
0
)
{
if
(
distance
<=
0
)
{
setIsFixed
(
true
)
}
if
(
document
.
documentElement
.
scrollTop
<=
flagRef
.
current
.
distanceTop
)
{
if
(
document
.
documentElement
.
scrollTop
<=
flagRef
.
current
.
distanceTop
)
{
setIsFixed
(
false
)
}
}
...
...
@@ -75,31 +75,31 @@ const BidDetailHeader:React.FC<BidDetailHeaderProps> = ({
behavior
:
"smooth"
})
let
dom
=
document
.
documentElement
||
document
.
body
if
(
formContext
.
offsetTopList
[
index
]
-
189
+
dom
.
clientHeight
>=
dom
.
scrollHeight
)
{
if
(
formContext
.
offsetTopList
[
index
]
-
189
+
dom
.
clientHeight
>=
dom
.
scrollHeight
)
{
setCurrent
(
index
)
}
}
return
(
<
div
className=
{
isFixed
?
[
style
.
detailHeader
,
style
.
anchorTitleFixed
].
join
(
' '
):
style
.
detailHeader
}
id=
"detailHeader"
>
<
div
className=
{
isFixed
?
[
style
.
detailHeader
,
style
.
anchorTitleFixed
].
join
(
' '
)
:
style
.
detailHeader
}
id=
"detailHeader"
>
{
isLoading
?
<
Row
>
{
<>
<
Col
span=
{
22
}
>
<
Row
align=
'middle'
>
<
Col
>
<
ArrowLeftOutlined
onClick=
{
()
=>
backLink
?
history
.
push
(
backLink
)
:
history
.
goBack
()
}
/>
</
Col
>
<
Col
>
<
div
className=
{
style
.
titleAvatorText
}
>
订单号:
{
formContext
.
data
.
orderNo
}
</
div
>
</
Col
>
</
Row
>
<
Row
>
<
Col
>
<
div
className=
{
style
.
anchorTitle
}
id=
"anchorTitle"
>
{
/* <ul className={style.anchorUl}>
isLoading
?
<
Row
>
{
<>
<
Col
span=
{
22
}
>
<
Row
align=
'middle'
>
<
Col
>
<
ArrowLeftOutlined
onClick=
{
()
=>
backLink
?
history
.
push
(
backLink
)
:
history
.
goBack
()
}
/>
</
Col
>
<
Col
>
<
div
className=
{
style
.
titleAvatorText
}
>
订单号:
{
formContext
.
data
.
orderNo
}
</
div
>
</
Col
>
</
Row
>
<
Row
>
<
Col
>
<
div
className=
{
style
.
anchorTitle
}
id=
"anchorTitle"
>
{
/* <ul className={style.anchorUl}>
{
anchorList.map((item, index) => (
<li key={index} onClick={()=>clickItem(index)}>
...
...
@@ -109,23 +109,23 @@ const BidDetailHeader:React.FC<BidDetailHeaderProps> = ({
}
</ul> */
}
<
Anchor
onClick=
{
(
e
)
=>
e
.
preventDefault
()
}
showInkInFixed=
{
false
}
targetOffset=
{
200
}
>
{
anchorList
.
map
((
item
,
index
)
=>
(
<
Link
key=
{
index
}
href=
{
`#${item['id']}`
}
title=
{
item
[
'title'
]
}
/>
))
}
</
Anchor
>
</
div
>
<
Anchor
onClick=
{
(
e
)
=>
e
.
preventDefault
()
}
showInkInFixed=
{
false
}
targetOffset=
{
200
}
>
{
anchorList
.
map
((
item
,
index
)
=>
(
<
Link
key=
{
index
}
href=
{
`#${item['id']}`
}
title=
{
item
[
'title'
]
}
/>
))
}
</
Anchor
>
</
div
>
</
Col
>
</
Row
>
</
Col
>
</
Row
>
</
Col
>
<
Col
span=
{
2
}
>
{
extraRight
}
</
Col
>
</>
}
</
Row
>
:
<
Skeleton
avatar=
{
{
shape
:
'square'
}
}
active
paragraph=
{
{
rows
:
3
}
}
/>
}
<
Col
span=
{
2
}
>
{
extraRight
}
</
Col
>
</>
}
</
Row
>
:
<
Skeleton
avatar=
{
{
shape
:
'square'
}
}
active
paragraph=
{
{
rows
:
3
}
}
/>
}
</
div
>
)
}
...
...
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