Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dsk-cr20g
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
Administrator
dsk-cr20g
Commits
389c8cde
Commit
389c8cde
authored
Jun 06, 2023
by
caixingbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*
parent
229b68ff
Changes
14
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
806 additions
and
104 deletions
+806
-104
dealings.js
dsk-operate-ui/src/api/detail/party-a/dealings.js
+9
-0
CustomMoneySelect.vue
.../src/views/detail/party-a/component/CustomMoneySelect.vue
+364
-0
CustomTimeSelect.vue
...i/src/views/detail/party-a/component/CustomTimeSelect.vue
+320
-0
HeadForm.vue
...perate-ui/src/views/detail/party-a/component/HeadForm.vue
+23
-0
bidagency.vue
...perate-ui/src/views/detail/party-a/dealings/bidagency.vue
+2
-2
bidrecords.vue
...erate-ui/src/views/detail/party-a/dealings/bidrecords.vue
+27
-28
custom.vue
dsk-operate-ui/src/views/detail/party-a/dealings/custom.vue
+3
-3
hiscontract.vue
...rate-ui/src/views/detail/party-a/dealings/hiscontract.vue
+38
-56
supplier.vue
...operate-ui/src/views/detail/party-a/dealings/supplier.vue
+3
-3
mixin.js
dsk-operate-ui/src/views/detail/party-a/mixins/mixin.js
+5
-0
announcement.vue
...erate-ui/src/views/detail/party-a/opport/announcement.vue
+2
-2
bond.vue
dsk-operate-ui/src/views/detail/party-a/opport/bond.vue
+5
-5
landtransaction.vue
...te-ui/src/views/detail/party-a/opport/landtransaction.vue
+2
-2
proposed.vue
dsk-operate-ui/src/views/detail/party-a/opport/proposed.vue
+3
-3
No files found.
dsk-operate-ui/src/api/detail/party-a/dealings.js
View file @
389c8cde
...
...
@@ -71,3 +71,12 @@ export function historySendProvince(data) {
data
:
data
})
}
// 投标记录列表
export
function
tenderPage
(
data
)
{
return
request
({
url
:
'/enterpriseBussiness/tenderPage'
,
method
:
'post'
,
data
:
data
})
}
dsk-operate-ui/src/views/detail/party-a/component/CustomMoneySelect.vue
0 → 100644
View file @
389c8cde
<
template
>
<div
:ref=
"refStr"
class=
"custom-money-select screen-popper"
id=
"custom-money-select"
>
<div
:class=
"['input-block', isSelectOption?'rote':'']"
>
<div
class=
"block"
@
click=
"isSelectOption=!isSelectOption"
@
mouseenter=
"handleMouseenter"
@
mouseleave=
"handleMouseleave"
>
<el-input
class=
"custom-money-input"
v-model=
"value"
:placeholder=
"placeholder"
readonly
>
<template
slot=
"suffix"
>
<span
@
click
.
stop=
"handleClear"
:class=
"[isClear&&isHover?'el-icon-circle-close':'el-icon-arrow-down']"
></span>
</
template
>
</el-input>
</div>
<div
class=
"options-block"
v-if=
"isSelectOption"
>
<div
class=
"arrow"
></div>
<div
@
click=
"handleClick(option)"
:class=
"['option', value==option?'active':'']"
:key=
"i"
v-for=
"(option, i) in options"
>
<
template
v-if=
"option == '自定义'"
>
<div
class=
"number-box"
>
<input
type=
"number"
v-model=
"startMoney"
class=
"number-input"
clearable
>
至
<input
v-model=
"endMoney"
class=
"number-input"
type=
"text"
clearable
>
万元
<el-button
@
click
.
stop=
"handleConfirm"
class=
"number-button"
type=
"primary"
>
确定
</el-button>
</div>
</
template
>
<
template
v-else
>
<span>
{{
option
}}
</span>
<span
v-if=
"value==option"
class=
"el-icon-check"
></span>
</
template
>
</div>
</div>
</div>
</div>
</template>
<
script
>
export
default
{
props
:
{
'placeholder'
:
{
type
:
String
,
default
:
'请选择'
},
'ref-str'
:
{
type
:
String
,
default
:
`timeselect
${
String
(
Math
.
random
(
0
,
100
)).
slice
(
2
)}
`
,
},
permissions
:
{
//文本权限相关字段
type
:
Array
,
default
:
()
=>
{},
},
powerLabel
:
{
type
:
String
,
default
:
''
},
moneyList
:
{
type
:
Array
,
default
:
()
=>
[],
}
},
computed
:
{
isClear
()
{
if
(
!
this
.
isSelectOption
&&
this
.
value
)
{
return
true
}
else
{
return
false
}
}
},
data
()
{
return
{
value
:
''
,
options
:
[
'一亿以上'
,
'5000万-1亿'
,
'1000万-5000万'
,
'1000万以下'
,
'自定义'
],
isSelectOption
:
false
,
startMoney
:
''
,
endMoney
:
''
,
isHover
:
false
}
},
mounted
()
{
this
.
handleAppClick
()
if
(
this
.
moneyList
&&
this
.
moneyList
.
length
>
0
){
this
.
options
=
this
.
moneyList
}
},
destroyed
()
{
const
app
=
document
.
getElementById
(
'app'
)
app
.
removeEventListener
(
'click'
,
()
=>
{},
true
)
},
methods
:
{
// 判断是否点击的为组件内部
handleAppClick
()
{
const
app
=
document
.
getElementById
(
'app'
)
app
.
addEventListener
(
'click'
,
(
e
)
=>
{
const
dom
=
this
.
$refs
[
this
.
refStr
]
const
flag
=
dom
&&
dom
.
contains
(
e
.
target
)
// const flag = document.getElementById('custom-money-select').contains(e.target)
!
flag
?
this
.
isSelectOption
=
false
:
''
if
(
this
.
value
==
'自定义'
&&
!
this
.
startMoney
&&
!
this
.
endMoney
)
{
this
.
value
=
''
this
.
$emit
(
'input'
,
''
)
this
.
$emit
(
'handle-search'
)
}
},
true
)
},
// 清除
handleClear
()
{
if
(
this
.
isClear
&&
this
.
isHover
)
{
this
.
value
=
''
this
.
startMoney
=
''
this
.
endMoney
=
''
this
.
$emit
(
'input'
,
''
)
this
.
$emit
(
'handle-search'
)
}
else
{
this
.
isSelectOption
=
true
}
},
// 鼠标移入后的回调
handleMouseenter
()
{
this
.
isHover
=
true
},
// 鼠标离开后的回调
handleMouseleave
()
{
this
.
isHover
=
false
},
// 选项点击后的回调
handleClick
(
value
)
{
this
.
value
=
value
let
moneyStr
=
''
if
(
value
==
'自定义'
)
{
this
.
value
=
'自定义'
}
else
{
this
.
startMoney
=
''
this
.
endMoney
=
''
this
.
isSelectOption
=
false
switch
(
value
)
{
case
'一亿以上'
:
moneyStr
=
[
10000
]
break
;
case
'5000万-1亿'
:
moneyStr
=
[
5000
,
10000
]
break
;
case
'1000万-5000万'
:
moneyStr
=
[
1000
,
5000
]
break
;
case
'10亿以上'
:
moneyStr
=
[
100000
]
break
;
case
'1亿-10亿'
:
moneyStr
=
[
10000
,
100000
]
break
;
case
'2000万-1亿'
:
moneyStr
=
[
2000
,
10000
]
break
;
case
'400万-2000万'
:
moneyStr
=
[
400
,
2000
]
break
;
case
'400万以下'
:
moneyStr
=
[,
400
]
break
;
default
:
moneyStr
=
[,
1000
]
break
;
}
this
.
$emit
(
'input'
,
moneyStr
)
this
.
$emit
(
'handle-search'
)
}
},
// 自定义确认点击后的回调
handleConfirm
()
{
this
.
isSelectOption
=
false
if
(
!
this
.
startMoney
&&
!
this
.
endMoney
)
{
this
.
value
=
''
this
.
$emit
(
'input'
,
''
)
}
else
{
if
(
this
.
endMoney
&&
this
.
startMoney
)
{
this
.
value
=
`
${
this
.
startMoney
}
-
${
this
.
endMoney
}
万`
}
else
{
if
(
this
.
startMoney
)
{
this
.
value
=
`大于等于
${
this
.
startMoney
}
万`
}
if
(
this
.
endMoney
)
{
this
.
value
=
`小于等于
${
this
.
endMoney
}
万`
}
}
let
moneyStr
=
[
this
.
startMoney
,
this
.
endMoney
]
this
.
$emit
(
'input'
,
moneyStr
)
}
this
.
$emit
(
'handle-search'
)
}
}
}
</
script
>
<
style
lang=
"scss"
>
.custom-money-select
{
width
:
120px
;
height
:
34px
;
position
:
relative
;
.input-block
{
margin
:
0
;
width
:
100%
;
height
:
100%
;
cursor
:
pointer
;
.block
{
width
:
100%
;
height
:
100%
;
>
.custom-money-input.el-input
{
width
:
100%
;
height
:
100%
;
>
input
{
width
:
100%
;
height
:
100%
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
border-radius
:
2px
;
}
}
}
.el-input__suffix
{
transform
:
rotateZ
(
0
);
width
:
25px
;
height
:
100%
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
}
&
.rote
{
.el-input__suffix
{
transform
:
rotateZ
(
180deg
);
}
}
}
.options-block
{
position
:
absolute
;
margin-top
:
12px
;
min-width
:
120px
;
font-size
:
14px
;
color
:
#666666
;
background-color
:
#fff
;
border
:
1px
solid
#E4E7ED
;
padding
:
6px
0
;
border-radius
:
4px
;
z-index
:
9
;
// .arrow {
// position: absolute;
// width: 0;
// height: 0;
// top: -12px;
// left: 35px;
// border: 6px solid transparent;
// border-bottom-color: #E4E7ED;
// &::after {
// position: absolute;
// display: inline-block;
// left: -4px;
// top: -2px;
// content: '';
// width: 0;
// height: 0;
// border: 4px solid transparent;
// border-bottom-color: #fff;
// z-index: 9;
// }
// }
.option
{
padding
:
0
24px
0
16px
;
box-sizing
:
border-box
;
width
:
400px
;
height
:
36px
;
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
.number-box
{
display
:
flex
;
align-items
:
center
;
>
span
{
margin
:
0
10px
;
}
.number-input
{
padding
:
0
24px
0
10px
;
width
:
100px
!
important
;
height
:
30px
;
line-height
:
30px
;
border
:
none
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
width
:
206px
;
border
:
1px
solid
#DCDCDC
;
border-radius
:
2px
;
&
:
:-
webkit-outer-spin-button
,
&::-
webkit-inner-spin-button
{
-webkit-appearance
:
none
;
}
&
[
type
=
"number"
]
{
-moz-appearance
:
textfield
;
}
}
.number-button
{
padding
:
0
;
width
:
60px
;
height
:
30px
;
line-height
:
30px
;
margin-left
:
10px
;
}
}
>
span
{
display
:
inline-block
;
}
&
.active
{
background-color
:
#F2F7FF
;
color
:
#0381FA
;
}
&
:hover
{
background-color
:
#F5F7FA
;
}
}
}
.number-input
{
padding
:
0
24px
0
10px
;
width
:
60px
!
important
;
height
:
30px
;
line-height
:
30px
;
border
:
none
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
width
:
206px
;
border
:
1px
solid
#DCDCDC
;
border-radius
:
2px
;
&
:
:-
webkit-outer-spin-button
,
&::-
webkit-inner-spin-button
{
-webkit-appearance
:
none
;
}
&
[
type
=
"number"
]
{
-moz-appearance
:
textfield
;
}
}
.number-button
{
padding
:
0
;
width
:
60px
;
height
:
30px
;
line-height
:
30px
;
margin-left
:
10px
;
}
}
</
style
>
dsk-operate-ui/src/views/detail/party-a/component/CustomTimeSelect.vue
0 → 100644
View file @
389c8cde
<
template
>
<div
:ref=
"refStr"
class=
"custom-time-select screen-popper"
id=
"custom-time-select"
>
<div
:class=
"['input-block', isSelectOption?'rote':'']"
>
<div
class=
"block"
@
click=
"isSelectOption=!isSelectOption"
@
mouseenter=
"handleMouseenter"
@
mouseleave=
"handleMouseleave"
>
<el-input
class=
"custom-time-input"
v-model=
"value"
:placeholder=
"placeholder"
readonly
>
<template
slot=
"suffix"
>
<span
@
click
.
stop=
"handleClear"
:class=
"[isClear&&isHover?'el-icon-circle-close':'el-icon-arrow-down']"
></span>
</
template
>
</el-input>
</div>
<div
class=
"options-block"
v-if=
"isSelectOption"
>
<div
class=
"arrow"
></div>
<div
@
click=
"handleClick(option)"
:class=
"['option', value==option?'active':'']"
:key=
"i"
v-for=
"(option, i) in options"
>
<
template
v-if=
"option == '自定义'"
>
<div
style=
"position: relative"
>
自定义
<el-date-picker
ref=
"picker"
:default-value=
"defaultValue"
style=
"position: absolute;opacity: 0;"
v-model=
"pickerValue"
type=
"daterange"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
value-format=
"yyyy-MM-dd"
:picker-options=
"pickerOptions"
@
change=
"changePicker"
>
</el-date-picker>
</div>
</
template
>
<
template
v-else
>
<span>
{{
option
}}
</span>
<span
v-if=
"value==option"
class=
"el-icon-check"
></span>
</
template
>
</div>
</div>
</div>
<div
v-if=
"isSelectOption"
class=
"picker-block"
ref=
"picker-block"
></div>
</div>
</template>
<
script
>
export
default
{
props
:
{
'placeholder'
:
{
type
:
String
,
default
:
'请选择'
,
},
'ref-str'
:
{
type
:
String
,
default
:
`timeselect
${
String
(
Math
.
random
(
0
,
100
)).
slice
(
2
)}
`
,
},
dateFrom
:
{
type
:
String
,
default
:
''
},
dateTo
:
{
type
:
String
,
default
:
''
}
},
computed
:
{
isClear
()
{
if
(
!
this
.
isSelectOption
&&
this
.
value
)
{
return
true
}
else
{
return
false
}
},
pickerOptions
()
{
// 用计算属性
let
_this
=
this
// 此时 this指向的就是vue实例
return
{
disabledDate
(
time
)
{
if
(
_this
.
dateFrom
){
return
time
.
getTime
()
<
new
Date
(
_this
.
dateFrom
.
replace
(
/-/g
,
'/'
)).
getTime
()
-
8.64e6
;
//如果没有后面的-8.64e6就是不可以选择今天的
}
if
(
_this
.
dateTo
){
return
time
.
getTime
()
>
new
Date
(
_this
.
dateTo
.
replace
(
/-/g
,
'/'
)).
getTime
();
//如果没有后面的-8.64e7就是不可以选择今天的
}
}
}
},
},
watch
:
{
refStr
(
refStr
)
{
return
refStr
}
},
data
()
{
return
{
value
:
''
,
options
:
[
'近1年'
,
'近2年'
,
'近3年'
,
'近5年'
,
'自定义'
,],
isSelectOption
:
false
,
isHover
:
false
,
pickerValue
:
[],
defaultValue
:
new
Date
()
}
},
mounted
()
{
if
(
this
.
dateTo
){
this
.
defaultValue
=
new
Date
(
this
.
dateTo
)
}
this
.
handleAppClick
()
},
methods
:
{
// 时间格式化
formatDate
(
timeStr
)
{
let
date
=
new
Date
(
Number
(
timeStr
))
let
year
=
date
.
getFullYear
()
let
month
=
String
(
date
.
getMonth
()
+
1
).
padStart
(
2
,
0
)
let
day
=
String
(
date
.
getDate
()).
padStart
(
2
,
0
)
return
`
${
year
}
-
${
month
}
-
${
day
}
`
},
// 判断是否点击的为组件内部
handleAppClick
()
{
const
app
=
document
.
getElementById
(
'app'
)
app
.
addEventListener
(
'click'
,
(
e
)
=>
{
const
dom
=
this
.
$refs
[
this
.
refStr
]
const
flag
=
dom
&&
dom
.
contains
(
e
.
target
)
// const flag = document.getElementById('custom-time-select').contains(e.target)
!
flag
?
this
.
isSelectOption
=
false
:
''
if
(
this
.
value
==
'自定义'
&&
(
!
this
.
pickerValue
||
!
this
.
pickerValue
.
length
))
{
this
.
value
=
''
this
.
$emit
(
'input'
,
''
)
this
.
$emit
(
'handle-search'
)
}
},
true
)
},
handleMouseenter
()
{
this
.
isHover
=
true
},
handleMouseleave
()
{
this
.
isHover
=
false
},
handleClear
()
{
if
(
this
.
isClear
&&
this
.
isHover
)
{
this
.
value
=
''
this
.
pickerValue
=
[]
this
.
$emit
(
'input'
,
''
)
this
.
$emit
(
'handle-search'
)
}
else
{
this
.
isSelectOption
=
true
}
},
handleClick
(
value
)
{
this
.
value
=
value
if
(
value
==
'自定义'
)
{
this
.
value
=
'自定义'
this
.
$refs
.
picker
&&
this
.
$refs
.
picker
.
length
&&
this
.
$refs
.
picker
[
0
].
focus
()
this
.
$nextTick
(()
=>
{
this
.
$refs
[
'picker-block'
].
appendChild
(
this
.
$refs
.
picker
[
0
].
popperElm
)
})
}
else
{
this
.
pickerValue
=
[]
this
.
isSelectOption
=
false
let
timeStr
=
[]
let
startTime
=
''
let
endTime
=
new
Date
()
switch
(
value
)
{
case
'近1年'
:
startTime
=
new
Date
().
setFullYear
(
new
Date
().
getFullYear
()
-
1
)
if
(
this
.
dateTo
){
startTime
=
new
Date
(
this
.
dateTo
).
setFullYear
(
new
Date
(
this
.
dateTo
).
getFullYear
()
-
1
)
}
timeStr
=
[
this
.
formatDate
(
startTime
),
this
.
formatDate
(
endTime
)]
break
;
case
'近2年'
:
startTime
=
new
Date
().
setFullYear
(
new
Date
().
getFullYear
()
-
2
)
if
(
this
.
dateTo
){
startTime
=
new
Date
(
this
.
dateTo
).
setFullYear
(
new
Date
(
this
.
dateTo
).
getFullYear
()
-
2
)
}
timeStr
=
[
this
.
formatDate
(
startTime
),
this
.
formatDate
(
endTime
)]
break
;
case
'近3年'
:
startTime
=
new
Date
().
setFullYear
(
new
Date
().
getFullYear
()
-
3
)
if
(
this
.
dateTo
){
startTime
=
new
Date
(
this
.
dateTo
).
setFullYear
(
new
Date
(
this
.
dateTo
).
getFullYear
()
-
3
)
}
timeStr
=
[
this
.
formatDate
(
startTime
),
this
.
formatDate
(
endTime
)]
break
;
case
'近5年'
:
startTime
=
new
Date
().
setFullYear
(
new
Date
().
getFullYear
()
-
5
)
if
(
this
.
dateTo
){
startTime
=
new
Date
(
this
.
dateTo
).
setFullYear
(
new
Date
(
this
.
dateTo
).
getFullYear
()
-
5
)
}
timeStr
=
[
this
.
formatDate
(
startTime
),
this
.
formatDate
(
endTime
)]
break
;
default
:
if
(
this
.
pickerValue
&&
this
.
pickerValue
.
length
)
{
timeStr
=
this
.
pickerValue
}
else
{
timeStr
=
[]
this
.
value
=
''
}
break
;
}
this
.
$emit
(
'input'
,
timeStr
)
this
.
$emit
(
'handle-search'
)
}
},
// 时间选择改变后的回调
changePicker
(
value
)
{
this
.
isSelectOption
=
false
if
(
value
&&
value
.
length
)
{
// this.value = '自定义'
this
.
value
=
String
(
this
.
pickerValue
)
this
.
$emit
(
'input'
,
this
.
pickerValue
)
}
else
{
this
.
value
=
''
this
.
$emit
(
'input'
,
''
)
}
this
.
$emit
(
'handle-search'
)
}
}
}
</
script
>
<
style
lang=
"scss"
>
.custom-time-select
{
width
:
120px
;
height
:
34px
;
.input-block
{
width
:
100%
;
height
:
100%
;
margin
:
0
;
cursor
:
pointer
;
.block
{
width
:
100%
;
height
:
100%
;
>
.custom-time-input.el-input
{
width
:
100%
;
height
:
100%
;
>
input
{
width
:
100%
;
height
:
100%
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
border-radius
:
2px
;
}
}
}
.el-input__suffix
{
transform
:
rotateZ
(
0
);
width
:
25px
;
height
:
100%
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
}
&
.rote
{
.el-input__suffix
{
transform
:
rotateZ
(
180deg
);
}
}
}
.options-block
{
position
:
absolute
;
margin-top
:
12px
;
min-width
:
120px
;
font-size
:
14px
;
color
:
#666666
;
background-color
:
#fff
;
border
:
1px
solid
#E4E7ED
;
padding
:
6px
0
;
border-radius
:
4px
;
z-index
:
9
;
.option
{
padding
:
0
24px
0
16px
;
box-sizing
:
border-box
;
height
:
36px
;
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
>
span
{
display
:
inline-block
;
}
&
.active
{
background-color
:
#F2F7FF
;
color
:
#0381FA
;
}
&
:hover
{
background-color
:
#F5F7FA
;
}
}
}
.picker-block
{
position
:
relative
;
&
:
:
after
{
content
:
""
;
display
:block
;
visibility
:hidden
;
clear
:both
;
}
.el-picker-panel.el-date-range-picker.el-popper
{
left
:
0
!
important
;
top
:
205px
!
important
;
}
.popper__arrow
{
left
:
30px
!
important
;
}
}
}
</
style
>
dsk-operate-ui/src/views/detail/party-a/component/HeadForm.vue
View file @
389c8cde
...
...
@@ -53,6 +53,23 @@
<el-option
v-for=
"(item, index) in form.options"
:key=
"index"
:label=
"item.name"
:value=
"item.value"
/>
</el-select>
</
template
>
<!-- 时间、自定义 -->
<
template
v-else-if=
"form.type==5"
>
<custom-time-select
v-model=
"form.value"
:placeholder=
"form.placeholder"
:dateFrom=
"form.dateFrom ? form.dateFrom : ''"
:dateTo=
"form.dateTo ? form.dateTo : ''"
@
handle-search=
"changeSelect"
/>
</
template
>
<!-- 金额 -->
<
template
v-else-if=
"form.type==6"
>
<custom-money-select
:moneyList=
"form.moneyList"
v-model=
"form.value"
:placeholder=
"form.placeholder"
@
handle-search=
"changeSelect"
/>
</
template
>
<!-- 自定义 -->
<
template
v-if=
"form.type==0"
>
<slot
name=
"slot"
></slot>
...
...
@@ -74,6 +91,8 @@
</template>
<
script
>
import
CustomTimeSelect
from
'./CustomTimeSelect'
import
CustomMoneySelect
from
'./CustomMoneySelect'
export
default
{
name
:
"HeadForm"
,
props
:
{
...
...
@@ -111,6 +130,10 @@ export default {
}
},
components
:
{
CustomTimeSelect
,
CustomMoneySelect
},
methods
:
{
changeSelect
(){
this
.
$emit
(
'handle-search'
)
...
...
dsk-operate-ui/src/views/detail/party-a/dealings/bidagency.vue
View file @
389c8cde
...
...
@@ -58,8 +58,8 @@ export default {
},
forData
:
[
{
label
:
'招标代理单位名称'
,
prop
:
'agency'
,
minWidth
:
'350'
,
slot
:
true
},
{
label
:
'合作项目/工程名称'
,
prop
:
'projectInfo'
,
minWidth
:
'400'
,
sortable
:
true
,
slot
:
true
},
{
label
:
'最近一次合作时间'
,
prop
:
'issueTime'
,
minWidth
:
'140'
,
sortable
:
true
}
{
label
:
'合作项目/工程名称'
,
prop
:
'projectInfo'
,
minWidth
:
'400'
,
sortable
:
'custom'
,
slot
:
true
},
{
label
:
'最近一次合作时间'
,
prop
:
'issueTime'
,
minWidth
:
'140'
,
sortable
:
'custom'
}
],
formData
:
[
{
type
:
3
,
fieldName
:
'keys'
,
value
:
''
,
placeholder
:
'输入企业名称查询'
,
options
:
[]},
...
...
dsk-operate-ui/src/views/detail/party-a/dealings/bidrecords.vue
View file @
389c8cde
...
...
@@ -6,6 +6,7 @@
:query-params=
"queryParams"
:total=
"tableDataTotal"
:isExcel=
"true"
@
handle-search=
"handleSearch"
/>
<tables
...
...
@@ -17,13 +18,13 @@
:queryParams=
"queryParams"
@
handle-current-change=
"handleCurrentChange"
>
<template
slot=
"
customN
ame"
slot-scope=
"scope"
>
<router-link
to=
""
tag=
"a"
class=
"a-link"
v-if=
"scope.row.
customId&&scope.row.customName"
>
{{
scope
.
row
.
customName
}}
</router-link>
<div
v-else
>
{{
scope
.
row
.
customName
||
'--'
}}
</div>
<template
slot=
"
n
ame"
slot-scope=
"scope"
>
<router-link
to=
""
tag=
"a"
class=
"a-link"
v-if=
"scope.row.
id&&scope.row.name"
v-html=
"scope.row.name"
>
</router-link>
<div
v-else
v-html=
"scope.row.name || '--'"
>
</div>
</
template
>
<
template
slot=
"
us
e"
slot-scope=
"scope"
>
<
router-link
to=
""
tag=
"a"
class=
"a-link"
v-if=
"scope.row.useId&&scope.row.use"
>
{{
scope
.
row
.
use
}}
</router-link
>
<div
v-else
>
{{
scope
.
row
.
us
e
||
'--'
}}
</div>
<
template
slot=
"
sourc
e"
slot-scope=
"scope"
>
<
span
class=
"a-link"
v-if=
"scope.row.url&&scope.row.source"
@
click=
"handlePic(scope.row.url)"
style=
"cursor: pointer;"
>
{{
scope
.
row
.
source
}}
</span
>
<div
v-else
>
{{
scope
.
row
.
sourc
e
||
'--'
}}
</div>
</
template
>
</tables>
</div>
...
...
@@ -31,7 +32,7 @@
<
script
>
import
mixin
from
'../mixins/mixin'
import
{
getList
}
from
'@/api/detail/party-a/dealings'
import
{
tenderPage
}
from
'@/api/detail/party-a/dealings'
export
default
{
name
:
'Bidrecords'
,
props
:
[
'companyId'
],
...
...
@@ -47,13 +48,15 @@ export default {
pageSize
:
10
},
forData
:
[
{
label
:
'招标代理单位名称'
,
prop
:
'customName'
,
minWidth
:
'320'
,
slot
:
true
},
{
label
:
'本企业投标报价(万元)'
,
prop
:
'way'
,
minWidth
:
'160'
},
{
label
:
'发布日期'
,
prop
:
'way'
,
minWidth
:
'100'
},
{
label
:
'中标地区'
,
prop
:
'way'
,
minWidth
:
'160'
},
{
label
:
'信息来源'
,
prop
:
'use'
,
minWidth
:
'280'
,
slot
:
true
}
{
label
:
'项目名称'
,
prop
:
'name'
,
minWidth
:
'320'
,
slot
:
true
},
{
label
:
'本企业投标报价(万元)'
,
prop
:
'tenderOffer'
,
minWidth
:
'160'
},
{
label
:
'发布日期'
,
prop
:
'publishTime'
,
minWidth
:
'100'
},
{
label
:
'项目地区'
,
prop
:
'province'
,
minWidth
:
'160'
},
{
label
:
'信息来源'
,
prop
:
'source'
,
minWidth
:
'280'
,
slot
:
true
}
],
formData
:
[
{
type
:
3
,
fieldName
:
'keys'
,
value
:
''
,
placeholder
:
'输入项目名称查询'
,
options
:
[]},
],
formData
:
[],
//列表
tableLoading
:
false
,
tableData
:[],
...
...
@@ -66,22 +69,18 @@ export default {
this
.
handleQuery
()
},
methods
:
{
handleQuery
(
)
{
async
handleQuery
(
params
)
{
this
.
tableLoading
=
true
getList
(
this
.
queryParams
).
then
((
res
)
=>
{
let
param
=
params
?
params
:
this
.
queryParams
let
res
=
await
tenderPage
(
param
)
this
.
tableLoading
=
false
this
.
tableData
=
[
{
customId
:
'1'
,
customName
:
'滨州医学院口腔医学大楼铝合金门窗供货及安装'
,
use
:
'城镇住宅用地'
,
type
:
'房地产业'
,
way
:
'挂牌出让'
,
count
:
4
if
(
res
.
code
==
200
){
this
.
tableData
=
res
.
rows
}
]
this
.
tableDataTotal
=
100
})
this
.
tableDataTotal
=
res
.
total
},
handlePic
(
url
){
window
.
open
(
url
,
"_blank"
)
}
}
}
...
...
dsk-operate-ui/src/views/detail/party-a/dealings/custom.vue
View file @
389c8cde
...
...
@@ -59,9 +59,9 @@ export default {
},
forData
:
[
{
label
:
'客户名称'
,
prop
:
'companyName'
,
minWidth
:
'350'
,
slot
:
true
},
{
label
:
'合作项目/工程名称'
,
prop
:
'projectAllName'
,
minWidth
:
'400'
,
sortable
:
true
,
slot
:
true
},
{
label
:
'合作总金额(万元)'
,
prop
:
'amount'
,
minWidth
:
'150'
,
sortable
:
true
},
{
label
:
'最近一次合作时间'
,
prop
:
'time'
,
minWidth
:
'140'
,
sortable
:
true
}
{
label
:
'合作项目/工程名称'
,
prop
:
'projectAllName'
,
minWidth
:
'400'
,
sortable
:
'custom'
,
slot
:
true
},
{
label
:
'合作总金额(万元)'
,
prop
:
'amount'
,
minWidth
:
'150'
,
sortable
:
'custom'
},
{
label
:
'最近一次合作时间'
,
prop
:
'time'
,
minWidth
:
'140'
,
sortable
:
'custom'
}
],
formData
:
[
{
type
:
3
,
fieldName
:
'keys'
,
value
:
''
,
placeholder
:
'输入企业名称查询'
,
options
:
[]},
...
...
dsk-operate-ui/src/views/detail/party-a/dealings/hiscontract.vue
View file @
389c8cde
...
...
@@ -19,13 +19,13 @@
@
handle-current-change=
"handleCurrentChange"
@
sort-change=
"sortChange"
>
<template
slot=
"
custom
Name"
slot-scope=
"scope"
>
<router-link
to=
""
tag=
"a"
class=
"a-link"
v-if=
"scope.row.
customId&&scope.row.customName"
>
{{
scope
.
row
.
custom
Name
}}
</router-link>
<div
v-else
>
{{
scope
.
row
.
customName
||
'--'
}}
</div>
<template
slot=
"
projectAll
Name"
slot-scope=
"scope"
>
<router-link
to=
""
tag=
"a"
class=
"a-link"
v-if=
"scope.row.
id&&scope.row.projectAllName "
>
{{
scope
.
row
.
projectAll
Name
}}
</router-link>
<div
v-else
>
{{
scope
.
row
.
projectAllName
||
'--'
}}
</div>
</
template
>
<
template
slot=
"
us
e"
slot-scope=
"scope"
>
<router-link
to=
""
tag=
"a"
class=
"a-link"
v-if=
"scope.row.
useId&&scope.row.use"
>
{{
scope
.
row
.
us
e
}}
</router-link>
<div
v-else
>
{{
scope
.
row
.
us
e
||
'--'
}}
</div>
<
template
slot=
"
companyNam
e"
slot-scope=
"scope"
>
<router-link
to=
""
tag=
"a"
class=
"a-link"
v-if=
"scope.row.
companyId&&scope.row.companyName"
>
{{
scope
.
row
.
companyNam
e
}}
</router-link>
<div
v-else
>
{{
scope
.
row
.
companyNam
e
||
'--'
}}
</div>
</
template
>
</tables>
</div>
...
...
@@ -33,7 +33,7 @@
<
script
>
import
mixin
from
'../mixins/mixin'
import
{
getOption
,
getList
}
from
'@/api/detail/party-a/dealings'
import
{
historySendProvince
,
historySendPage
}
from
'@/api/detail/party-a/dealings'
export
default
{
name
:
'Hiscontract'
,
props
:
[
'companyId'
],
...
...
@@ -45,25 +45,26 @@ export default {
return
{
queryParams
:
{
cid
:
this
.
companyId
,
sort
:
3
,
pageNum
:
1
,
pageSize
:
10
},
forData
:
[
{
label
:
'项目名称'
,
prop
:
'
custom
Name'
,
minWidth
:
'560'
,
slot
:
true
},
{
label
:
'中标时间'
,
prop
:
'w
ay'
,
minWidth
:
'100'
,
sortable
:
true
},
{
label
:
'中标企业'
,
prop
:
'
us
e'
,
minWidth
:
'320'
,
slot
:
true
},
{
label
:
'中标金额(万元)'
,
prop
:
'w
ay'
,
minWidth
:
'140'
,
sortable
:
true
},
{
label
:
'下浮率(%)'
,
prop
:
'
way'
,
minWidth
:
'120'
,
sortable
:
true
},
{
label
:
'项目经理 / 负责人'
,
prop
:
'
way
'
,
minWidth
:
'130'
},
{
label
:
'中标地区'
,
prop
:
'
way
'
,
minWidth
:
'160'
},
{
label
:
'工期(天)'
,
prop
:
'
way'
,
minWidth
:
'110'
,
sortable
:
true
},
{
label
:
'业绩类别'
,
prop
:
'
way
'
,
minWidth
:
'110'
}
{
label
:
'项目名称'
,
prop
:
'
projectAll
Name'
,
minWidth
:
'560'
,
slot
:
true
},
{
label
:
'中标时间'
,
prop
:
'w
inBidTime'
,
minWidth
:
'100'
,
sortable
:
'custom'
},
{
label
:
'中标企业'
,
prop
:
'
companyNam
e'
,
minWidth
:
'320'
,
slot
:
true
},
{
label
:
'中标金额(万元)'
,
prop
:
'w
inBidAmount'
,
minWidth
:
'140'
,
sortable
:
'custom'
},
{
label
:
'下浮率(%)'
,
prop
:
'
lowerRate'
,
minWidth
:
'120'
,
sortable
:
'custom'
},
{
label
:
'项目经理 / 负责人'
,
prop
:
'
staffName
'
,
minWidth
:
'130'
},
{
label
:
'中标地区'
,
prop
:
'
region
'
,
minWidth
:
'160'
},
{
label
:
'工期(天)'
,
prop
:
'
period'
,
minWidth
:
'110'
,
sortable
:
'custom'
},
{
label
:
'业绩类别'
,
prop
:
'
boundType
'
,
minWidth
:
'110'
}
],
formData
:
[
{
type
:
1
,
fieldName
:
'
region'
,
value
:
''
,
placeholder
:
'项目地区'
,
options
:
[]
},
{
type
:
1
,
fieldName
:
'time'
,
value
:
''
,
placeholder
:
'中标时间'
,
options
:
[]
},
{
type
:
1
,
fieldName
:
'amount'
,
value
:
''
,
placeholder
:
'中标金额'
,
options
:
[]
},
{
type
:
3
,
fieldName
:
'keys'
,
value
:
''
,
placeholder
:
'输入关键词查询'
,
options
:
[]
},
{
type
:
1
,
fieldName
:
'
provinceId'
,
value
:
''
,
placeholder
:
'项目地区'
,
options
:
[]
},
{
type
:
5
,
fieldName
:
'time'
,
value
:
''
,
placeholder
:
'中标时间'
,
startTime
:
'dateFrom'
,
endTime
:
'dateTo'
},
{
type
:
6
,
fieldName
:
'money'
,
value
:
''
,
placeholder
:
'中标金额'
,
startMoney
:
'amountMin'
,
endMoney
:
'amountMax'
},
{
type
:
3
,
fieldName
:
'keys'
,
value
:
''
,
placeholder
:
'输入关键词查询'
,
options
:
[]
}
],
//列表
tableLoading
:
false
,
...
...
@@ -78,45 +79,26 @@ export default {
this
.
handleQuery
()
},
methods
:
{
handleOption
(){
getOption
().
then
((
res
)
=>
{
this
.
setFormData
(
'region'
,
[
{
name
:
'类别1'
,
value
:
'1'
},
{
name
:
'类别2'
,
value
:
'2'
},
{
name
:
'类别3'
,
value
:
'3'
},
{
name
:
'类别4'
,
value
:
'4'
}
])
this
.
setFormData
(
'time'
,
[
{
name
:
'类别1'
,
value
:
'1'
},
{
name
:
'类别2'
,
value
:
'2'
},
{
name
:
'类别3'
,
value
:
'3'
},
{
name
:
'类别4'
,
value
:
'4'
}
])
this
.
setFormData
(
'amount'
,
[
{
name
:
'类别1'
,
value
:
'1'
},
{
name
:
'类别2'
,
value
:
'2'
},
{
name
:
'类别3'
,
value
:
'3'
},
{
name
:
'类别4'
,
value
:
'4'
}
])
async
handleOption
(){
let
res
=
await
historySendProvince
({
cid
:
this
.
companyId
})
if
(
res
.
code
==
200
){
let
region
=
res
.
data
.
map
(
item
=>
{
let
it
=
{
name
:
item
.
province
+
'('
+
item
.
count
+
')'
,
value
:
item
.
provinceId
}
return
it
})
this
.
setFormData
(
'provinceId'
,
region
)
}
},
handleQuery
(
params
)
{
async
handleQuery
(
params
)
{
this
.
tableLoading
=
true
let
param
=
params
?
params
:
this
.
queryParams
getList
(
param
).
then
((
res
)
=>
{
let
res
=
await
historySendPage
(
param
)
this
.
tableLoading
=
false
this
.
tableData
=
[
{
customId
:
'1'
,
customName
:
'滨州医学院口腔医学大楼铝合金门窗供货及安装'
,
use
:
'城镇住宅用地'
,
type
:
'房地产业'
,
way
:
'挂牌出让'
,
count
:
4
if
(
res
.
code
==
200
){
this
.
tableData
=
res
.
rows
}
]
this
.
tableDataTotal
=
100
})
this
.
tableDataTotal
=
res
.
total
}
}
}
...
...
dsk-operate-ui/src/views/detail/party-a/dealings/supplier.vue
View file @
389c8cde
...
...
@@ -59,9 +59,9 @@ export default {
},
forData
:
[
{
label
:
'供应商'
,
prop
:
'companyName'
,
minWidth
:
'350'
,
slot
:
true
},
{
label
:
'合作项目/工程名称'
,
prop
:
'projectAllName'
,
minWidth
:
'400'
,
sortable
:
true
,
slot
:
true
},
{
label
:
'合作总金额(万元)'
,
prop
:
'amount'
,
minWidth
:
'150'
,
sortable
:
true
},
{
label
:
'最近一次合作时间'
,
prop
:
'time'
,
minWidth
:
'140'
,
sortable
:
true
}
{
label
:
'合作项目/工程名称'
,
prop
:
'projectAllName'
,
minWidth
:
'400'
,
sortable
:
'custom'
,
slot
:
true
},
{
label
:
'合作总金额(万元)'
,
prop
:
'amount'
,
minWidth
:
'150'
,
sortable
:
'custom'
},
{
label
:
'最近一次合作时间'
,
prop
:
'time'
,
minWidth
:
'140'
,
sortable
:
'custom'
}
],
formData
:
[
{
type
:
3
,
fieldName
:
'keys'
,
value
:
''
,
placeholder
:
'输入企业名称查询'
,
options
:
[]},
...
...
dsk-operate-ui/src/views/detail/party-a/mixins/mixin.js
View file @
389c8cde
...
...
@@ -30,6 +30,11 @@ export default {
condtion
[
item
.
endTime
]
=
item
.
value
[
1
];
return
}
if
(
item
.
fieldName
==
'money'
)
{
condtion
[
item
.
startMoney
]
=
item
.
value
[
0
];
condtion
[
item
.
endMoney
]
=
item
.
value
[
1
];
return
}
condtion
[
item
.
fieldName
]
=
item
.
value
}
})
...
...
dsk-operate-ui/src/views/detail/party-a/opport/announcement.vue
View file @
389c8cde
...
...
@@ -44,8 +44,8 @@ export default {
},
forData
:
[
{
label
:
'项目名称'
,
prop
:
'porjectName'
,
minWidth
:
'300'
,
slot
:
true
},
{
label
:
'发布日期'
,
prop
:
'use'
,
sortable
:
true
,
width
:
'120'
},
{
label
:
'预算金额(万元)'
,
prop
:
'type'
,
sortable
:
true
,
width
:
'140'
},
{
label
:
'发布日期'
,
prop
:
'use'
,
sortable
:
'custom'
,
width
:
'120'
},
{
label
:
'预算金额(万元)'
,
prop
:
'type'
,
sortable
:
'custom'
,
width
:
'140'
},
{
label
:
'项目地区'
,
prop
:
'way'
,
width
:
'120'
},
{
label
:
'项目类别'
,
prop
:
'state'
,
width
:
'90'
},
{
label
:
'招采单位联系人'
,
prop
:
'money'
,
width
:
'110'
},
...
...
dsk-operate-ui/src/views/detail/party-a/opport/bond.vue
View file @
389c8cde
...
...
@@ -44,11 +44,11 @@ export default {
},
forData
:
[
{
label
:
'项目名称'
,
prop
:
'porjectName'
,
minWidth
:
'300'
,
slot
:
true
},
{
label
:
'项目总投资(亿元)'
,
prop
:
'use'
,
sortable
:
true
,
width
:
'150'
},
{
label
:
'项目资本金(亿元)'
,
prop
:
'type'
,
sortable
:
true
,
width
:
'150'
},
{
label
:
'项目收益倍数(倍)'
,
prop
:
'way'
,
sortable
:
true
,
width
:
'150'
},
{
label
:
'专项债金额(亿元)'
,
prop
:
'state'
,
sortable
:
true
,
width
:
'150'
},
{
label
:
'专项债用作资本金(亿元)'
,
prop
:
'money'
,
sortable
:
true
,
width
:
'200'
}
{
label
:
'项目总投资(亿元)'
,
prop
:
'use'
,
sortable
:
'custom'
,
width
:
'150'
},
{
label
:
'项目资本金(亿元)'
,
prop
:
'type'
,
sortable
:
'custom'
,
width
:
'150'
},
{
label
:
'项目收益倍数(倍)'
,
prop
:
'way'
,
sortable
:
'custom'
,
width
:
'150'
},
{
label
:
'专项债金额(亿元)'
,
prop
:
'state'
,
sortable
:
'custom'
,
width
:
'150'
},
{
label
:
'专项债用作资本金(亿元)'
,
prop
:
'money'
,
sortable
:
'custom'
,
width
:
'200'
}
],
formData
:
[
{
type
:
3
,
fieldName
:
'keys'
,
value
:
''
,
placeholder
:
'输入项目名称关键词查询'
,
options
:
[]},
...
...
dsk-operate-ui/src/views/detail/party-a/opport/landtransaction.vue
View file @
389c8cde
...
...
@@ -48,8 +48,8 @@ export default {
{
label
:
'行业分类'
,
prop
:
'type'
,
width
:
'100'
},
{
label
:
'供地方式'
,
prop
:
'way'
,
width
:
'100'
},
{
label
:
'土地坐落'
,
prop
:
'state'
,
width
:
'130'
},
{
label
:
'成交金额(万元)'
,
prop
:
'money'
,
sortable
:
true
,
width
:
'140'
},
{
label
:
'总面积(㎡)'
,
prop
:
'scale'
,
sortable
:
true
,
width
:
'130'
},
{
label
:
'成交金额(万元)'
,
prop
:
'money'
,
sortable
:
'custom'
,
width
:
'140'
},
{
label
:
'总面积(㎡)'
,
prop
:
'scale'
,
sortable
:
'custom'
,
width
:
'130'
},
{
label
:
'批准单位'
,
prop
:
'unit'
,
width
:
'130'
},
{
label
:
'签订日期'
,
prop
:
'date'
,
width
:
'130'
}
],
...
...
dsk-operate-ui/src/views/detail/party-a/opport/proposed.vue
View file @
389c8cde
...
...
@@ -44,10 +44,10 @@ export default {
},
forData
:
[
{
label
:
'项目名称'
,
prop
:
'porjectName'
,
minWidth
:
'300'
,
slot
:
true
},
{
label
:
'成交金额(万元)'
,
prop
:
'use'
,
sortable
:
true
,
width
:
'150'
},
{
label
:
'成交金额(万元)'
,
prop
:
'use'
,
sortable
:
'custom'
,
width
:
'150'
},
{
label
:
'项目类别'
,
prop
:
'type'
,
width
:
'100'
},
{
label
:
'计划开工日期'
,
prop
:
'way'
,
sortable
:
true
,
width
:
'130'
},
{
label
:
'计划完工日期'
,
prop
:
'state'
,
sortable
:
true
,
width
:
'130'
},
{
label
:
'计划开工日期'
,
prop
:
'way'
,
sortable
:
'custom'
,
width
:
'130'
},
{
label
:
'计划完工日期'
,
prop
:
'state'
,
sortable
:
'custom'
,
width
:
'130'
},
{
label
:
'审批结果'
,
prop
:
'money'
,
width
:
'100'
},
{
label
:
'是否为民间推介项目'
,
prop
:
'scale'
,
width
:
'150'
}
],
...
...
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