Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dsk-operate-sys-cscec
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
fulixin
dsk-operate-sys-cscec
Commits
248d4a76
Commit
248d4a76
authored
Aug 17, 2023
by
liuChang
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev20230707' of 192.168.60.201:root/dsk-operate-sys into dev20230707
parents
1c54f95b
33bdb548
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
809 additions
and
84 deletions
+809
-84
CustomerOverviewController.java
...k/web/controller/customer/CustomerOverviewController.java
+1
-1
index.js
dsk-operate-ui/src/api/index.js
+20
-0
index.scss
dsk-operate-ui/src/assets/styles/index.scss
+11
-0
CustomMoneySelect.vue
dsk-operate-ui/src/views/component/CustomMoneySelect.vue
+442
-0
members.vue
...te-ui/src/views/detail/groupAccount/component/members.vue
+37
-10
performance.vue
...i/src/views/detail/groupAccount/component/performance.vue
+15
-0
qualifications.vue
...rc/views/detail/groupAccount/component/qualifications.vue
+16
-1
qualificationsDetail.vue
...ws/detail/groupAccount/component/qualificationsDetail.vue
+4
-2
CustomMoneySelect.vue
.../src/views/detail/party-a/component/CustomMoneySelect.vue
+2
-2
HeadForm.vue
...perate-ui/src/views/detail/party-a/component/HeadForm.vue
+12
-7
index.vue
dsk-operate-ui/src/views/index.vue
+226
-59
CustomerMapper.java
...m/src/main/java/com/dsk/system/mapper/CustomerMapper.java
+3
-0
ICustomerOverviewService.java
...java/com/dsk/system/service/ICustomerOverviewService.java
+3
-1
CustomerOverviewServiceImpl.java
.../dsk/system/service/impl/CustomerOverviewServiceImpl.java
+6
-0
CustomerMapper.xml
.../main/resources/mapper/system/customer/CustomerMapper.xml
+11
-1
No files found.
dsk-admin/src/main/java/com/dsk/web/controller/customer/CustomerOverviewController.java
View file @
248d4a76
...
...
@@ -43,6 +43,6 @@ public class CustomerOverviewController extends BaseController {
*/
@GetMapping
(
"/credit/level"
)
public
AjaxResult
creditLevel
(){
return
AjaxResult
.
success
(
baseService
.
c
ooperationTop
(
new
CustomerSearchDto
()));
return
AjaxResult
.
success
(
baseService
.
c
reditLevel
(
new
CustomerSearchDto
()));
}
}
dsk-operate-ui/src/api/index.js
0 → 100644
View file @
248d4a76
import
request
from
"@/utils/request"
;
// 大项目最新中标
export
function
bigWinningBidsPage
(
data
)
{
return
request
({
url
:
'/index/bigWinningBidsPage'
,
method
:
'post'
,
data
:
data
})
}
// 大项目最新招标
export
function
bigBidPage
(
data
)
{
return
request
({
url
:
'/index/bigBidPage'
,
method
:
'post'
,
data
:
data
})
}
dsk-operate-ui/src/assets/styles/index.scss
View file @
248d4a76
...
...
@@ -233,6 +233,17 @@ ul, li {
.el-select
.el-input
.el-select__caret
{
color
:
#232323
;
}
.el-cascader
.el-input
.el-icon-arrow-down
{
color
:
#232323
;
}
.custom-money-select
.el-input
.el-icon-arrow-down
{
color
:
#232323
;
font-size
:
14px
;
}
.custom-time-select
.el-input
.el-icon-arrow-down
{
color
:
#232323
;
font-size
:
14px
;
}
.query-box
{
justify-content
:
space-between
;
}
...
...
dsk-operate-ui/src/views/component/CustomMoneySelect.vue
0 → 100644
View file @
248d4a76
<
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>
-->
<div
style=
"position: relative"
>
自定义
<div
class=
"popper_box"
style=
"position: absolute"
v-if=
"value === '自定义'"
>
<div
class=
"popper_wrap"
>
从
<el-input
class=
"popper_input"
type=
"number"
clearable
v-model=
"startMoney"
></el-input>
万
</div>
<div
class=
"popper_wrap"
>
到
<el-input
class=
"popper_input"
type=
"number"
clearable
v-model=
"endMoney"
></el-input>
万
</div>
<div
style=
""
>
<el-button
size=
"mini"
@
click
.
stop=
"cancellation"
>
取消
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click
.
stop=
"handleConfirm"
>
确定
</el-button>
</div>
</div>
</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
'10亿以上'
:
moneyStr
=
[
100000
]
break
;
case
'一亿以上'
:
moneyStr
=
[
10000
]
break
;
case
'5亿-10亿'
:
moneyStr
=
[
50000
,
100000
]
break
;
case
'1亿-10亿'
:
moneyStr
=
[
10000
,
100000
]
break
;
case
'1亿-5亿'
:
moneyStr
=
[
10000
,
50000
]
break
;
case
'5000万-1亿'
:
moneyStr
=
[
5000
,
10000
]
break
;
case
'1000万-5000万'
:
moneyStr
=
[
1000
,
5000
]
break
;
case
'2000万-1亿'
:
moneyStr
=
[
2000
,
10000
]
break
;
case
'400万-2000万'
:
moneyStr
=
[
400
,
2000
]
break
;
case
'5000万以下'
:
moneyStr
=
[,
5000
]
break
;
case
'1000万以下'
:
moneyStr
=
[,
1000
]
break
;
case
'400万以下'
:
moneyStr
=
[,
400
]
break
;
default
:
moneyStr
=
[,
1000
]
break
;
}
this
.
$emit
(
'input'
,
moneyStr
)
this
.
$emit
(
'handle-search'
)
}
},
// 自定义取消
cancellation
(){
this
.
isSelectOption
=
false
this
.
value
=
''
this
.
$emit
(
'input'
,
''
)
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
:
10
;
// .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
:
140px
;
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
;
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
;
}
.popper_box
{
position
:
absolute
;
left
:
128px
;
bottom
:
-15px
;
background
:
#ffffff
;
width
:
186px
;
color
:
#606266
;
text-indent
:
0
;
padding
:
16px
;
padding-top
:
0px
;
border
:
1px
solid
#e0e0e0
;
.popper_wrap
{
margin-top
:
16px
;
display
:
inline-block
;
.popper_input
{
width
:
100px
;
display
:
inline-block
;
margin
:
0px
8px
;
line-height
:
34px
;
}
.el-input__inner
{
width
:
100px
;
}
}
input
:
:-
webkit-outer-spin-button
,
input
::-
webkit-inner-spin-button
{
-webkit-appearance
:
none
!
important
;
}
input
[
type
=
'number'
]
{
-moz-appearance
:
textfield
;
}
}
.popper_box
div
:last-child
{
display
:
flex
;
justify-content
:
center
;
margin-top
:
16px
;
}
}
</
style
>
dsk-operate-ui/src/views/detail/groupAccount/component/members.vue
View file @
248d4a76
...
...
@@ -13,8 +13,8 @@
<span
class=
"search-box-t"
:class=
" queryParams.companyType||
queryParams.companyTypes.length > 0 ? 'search-box-ta' : ''"
@
click=
"handleSearch1"
>
筛选
<i
:class=
"searchState ? 'el-icon-
caret-top' : 'el-icon-caret-bottom
'"
></i></span>
<div
v-show=
"searchState"
ref
=
"showContent"
class=
"search-main"
>
@
click=
"handleSearch1"
>
筛选
<i
:class=
"searchState ? 'el-icon-
arrow-up' : 'el-icon-arrow-down
'"
></i></span>
<div
v-show=
"searchState"
id
=
"showContent"
class=
"search-main"
>
<div
class=
"item"
>
<span
class=
"wrap_label"
>
科技型企业
</span>
<div
class=
"item_ckquery"
>
...
...
@@ -167,7 +167,8 @@
moneyList
:
[
'1000万以下'
,
'1000万-5000万'
,
'5000万-1亿'
,
'1亿-10亿'
,
'10亿以上'
,
'自定义'
],
qyType
:[],
cgblList
:[
'100%'
,
'50%以上'
,
'20%以上'
,
'5%以上'
,
'1%-5%'
],
cgblName
:
''
cgblName
:
''
,
paramsData
:[],
//储存组件筛选的条件
}
},
watch
:{
...
...
@@ -218,13 +219,16 @@
// 筛选
handleSearch1
(
event
){
// this.searchState=!this.searchState;
let
dom
=
this
.
$refs
.
showContent
;
if
(
!
dom
.
contains
(
event
.
target
))
{
this
.
searchState
=
!
this
.
searchState
;
document
.
removeEventListener
(
'click'
,
this
.
handleQuery
);
let
dom
=
document
.
getElementById
(
"showContent"
);
if
(
dom
){
if
(
!
dom
.
contains
(
event
.
target
))
{
this
.
searchState
=
!
this
.
searchState
;
document
.
removeEventListener
(
'click'
,
this
.
handleQuery
);
}
}
},
handleQuery
(
params
){
this
.
paramsData
=
params
;
let
data
=
this
.
getAreaList
(
params
||
this
.
queryParams
)
memberList
(
data
).
then
(
res
=>
{
this
.
isSkeleton
=
false
...
...
@@ -292,8 +296,9 @@
}
else
{
this
.
queryParams
[
name
]
=
[]
}
this
.
handleQuery
();
// this.$forceUpdate();
this
.
paramsData
.
companyType
=
this
.
queryParams
.
companyType
this
.
paramsData
.
companyTypes
=
this
.
queryParams
.
companyTypes
this
.
handleQuery
(
this
.
paramsData
);
},
handleChange
(
key
,
name
)
{
if
(
key
===
'1'
){
...
...
@@ -354,6 +359,9 @@
provinceIds
.
length
>
0
?
params
.
provinceIds
=
provinceIds
:
''
cityIds
.
length
>
0
?
params
.
cityIds
=
cityIds
:
''
districtIds
.
length
>
0
?
params
.
districtIds
=
districtIds
:
''
// provinceIds.length>0?this.queryParams.provinceIds = provinceIds:''
// cityIds.length>0?this.queryParams.cityIds = cityIds:''
// districtIds.length>0?this.queryParams.districtIds = districtIds:''
}
return
params
},
...
...
@@ -396,7 +404,7 @@
font-size
:
14px
;
font-weight
:
400
;
line-height
:
32px
;
color
:
#
232323
;
color
:
#
999999
;
margin-right
:
8px
;
text-align
:
center
;
width
:
82px
;
...
...
@@ -470,5 +478,24 @@
}
}
}
::v-deep
.el-table
{
.has-gutter
{
tr
{
th
:nth-last-child
(
2
)
{
border-right
:
0
;
}
td
:nth-last-child
(
2
)
{
border-right
:
0
;
}
}
}
.el-table__cell.gutter
{
background
:
#F0F3FA
;
}
}
::v-deep
.el-icon-arrow-down
,
.el-icon-arrow-up
{
font-size
:
14px
;
color
:
#232323
!
important
;
}
}
</
style
>
dsk-operate-ui/src/views/detail/groupAccount/component/performance.vue
View file @
248d4a76
...
...
@@ -253,5 +253,20 @@
margin-right
:
24px
;
}
}
::v-deep
.el-table
{
.has-gutter
{
tr
{
th
:nth-last-child
(
2
)
{
border-right
:
0
;
}
td
:nth-last-child
(
2
)
{
border-right
:
0
;
}
}
}
.el-table__cell.gutter
{
background
:
#F0F3FA
;
}
}
}
</
style
>
dsk-operate-ui/src/views/detail/groupAccount/component/qualifications.vue
View file @
248d4a76
...
...
@@ -60,7 +60,7 @@
{
label
:
'拥有该资质成员'
,
prop
:
'companyCount'
,
slot
:
true
},
],
formData
:
[
{
type
:
1
,
fieldName
:
'qualificationType'
,
value
:
''
,
placeholder
:
'筛选'
,
options
:[]},
{
type
:
1
,
fieldName
:
'qualificationType'
,
value
:
''
,
placeholder
:
'筛选'
,
options
:[]
,
width
:
260
},
],
tableData
:[],
tableDataTotal
:
0
,
...
...
@@ -117,5 +117,20 @@
margin-right
:
24px
;
}
}
::v-deep
.el-table
{
.has-gutter
{
tr
{
th
:nth-last-child
(
2
)
{
border-right
:
0
;
}
td
:nth-last-child
(
2
)
{
border-right
:
0
;
}
}
}
.el-table__cell.gutter
{
background
:
#F0F3FA
;
}
}
}
</
style
>
dsk-operate-ui/src/views/detail/groupAccount/component/qualificationsDetail.vue
View file @
248d4a76
...
...
@@ -19,8 +19,10 @@
style=
"margin: 12px;"
>
<template
slot=
"companyName"
slot-scope=
"scope"
>
<router-link
:to=
"scope.row.uipId?`/enterprise/$
{encodeStr(scope.row.companyId)}`:`/company/${encodeStr(scope.row.companyId)}`" tag="a" class="a-link" v-if="scope.row.companyId
&&
scope.row.companyName" v-html="scope.row.companyName">
</router-link>
<div
v-else
v-html=
"scope.row.companyName || '--'"
></div>
<div
@
click=
"cancel"
>
<router-link
:to=
"scope.row.uipId?`/enterprise/$
{encodeStr(scope.row.companyId)}`:`/company/${encodeStr(scope.row.companyId)}`" tag="a" class="a-link" v-if="scope.row.companyId
&&
scope.row.companyName" v-html="scope.row.companyName">
</router-link>
</div>
<!--
<div
v-else
v-html=
"scope.row.companyName || '--'"
></div>
-->
</
template
>
</tables>
</el-drawer>
...
...
dsk-operate-ui/src/views/detail/party-a/component/CustomMoneySelect.vue
View file @
248d4a76
...
...
@@ -399,7 +399,7 @@ export default {
.popper_box
{
position
:
absolute
;
left
:
12
8
px
;
left
:
12
5
px
;
bottom
:
-15px
;
background
:
#ffffff
;
width
:
186px
;
...
...
@@ -407,7 +407,7 @@ export default {
text-indent
:
0
;
padding
:
16px
;
padding-top
:
0px
;
border
:
1px
solid
#
e0e0e0
;
border
:
1px
solid
#
E4E7ED
;
.popper_wrap
{
margin-top
:
16px
;
display
:
inline-block
;
...
...
dsk-operate-ui/src/views/detail/party-a/component/HeadForm.vue
View file @
248d4a76
...
...
@@ -179,6 +179,9 @@ export default {
height
:
34px
;
line-height
:
34px
;
padding-right
:
27px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
}
::v-deep
.el-form-item
{
margin-right
:
8px
!
important
;
...
...
@@ -213,12 +216,12 @@ export default {
display
:
flex
;
border-radius
:
2px
0px
0px
2px
;
border
:
1px
solid
#D9D9D9
;
line-height
:
3
2
px
;
height
:
3
2
px
;
line-height
:
3
4
px
;
height
:
3
4
px
;
span
{
width
:
60px
;
height
:
3
0
px
;
line-height
:
28
px
;
height
:
3
2
px
;
line-height
:
32
px
;
font-size
:
14px
;
background
:
#F5F5F5
;
text-align
:
center
;
...
...
@@ -240,11 +243,13 @@ export default {
}
::v-deep
.el-input__inner
{
border
:
0
;
line-height
:
3
0
px
;
height
:
3
0
px
;
line-height
:
3
2
px
;
height
:
3
2
px
;
position
:
absolute
;
top
:
0
;
padding-right
:
32px
;
padding-right
:
22px
;
font-size
:
12px
;
padding-left
:
8px
;
}
}
.fromTime
{
...
...
dsk-operate-ui/src/views/index.vue
View file @
248d4a76
...
...
@@ -53,12 +53,12 @@
<div
class=
"search"
>
<el-form
ref=
"queryForm"
:model=
"queryParams"
:inline=
"true"
size=
"small"
>
<el-form-item
prop=
"address"
>
<el-select
v-model=
"queryParams.address"
placeholder=
"项目地区"
>
<el-select
v-model=
"queryParams.address"
placeholder=
"项目地区"
style=
"width: 150px;"
>
<el-option
v-for=
"(item,index) in addressList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
prop=
"type"
>
<el-select
v-model=
"queryParams.type"
placeholder=
"项目类型
"
>
<el-select
v-model=
"queryParams.type"
multiple
collapse-tags
clearable
placeholder=
"项目类型"
:class=
"queryParams.type.length > 1 ? 'selectTag' : ''"
style=
"width: 170px;
"
>
<el-option
v-for=
"(item,index) in typeList"
:key=
"index"
:label=
"item"
:value=
"item"
></el-option>
</el-select>
</el-form-item>
...
...
@@ -99,19 +99,27 @@
<el-col
:span=
"10"
>
<div
class=
"search"
>
<el-form
ref=
"queryForm"
:model=
"queryParams"
:inline=
"true"
size=
"small"
>
<el-form-item
prop=
"money"
>
<custom-money-select
:moneyList=
"moneyList"
v-model=
"queryParams.money"
placeholder=
"中标金额"
@
handle-search=
"changeSelect"
/>
</el-form-item>
<el-form-item
prop=
"address"
>
<el-select
v-model=
"queryParams.address"
placeholder=
"项目地区"
>
<el-select
v-model=
"queryParams.address"
placeholder=
"项目地区"
style=
"width: 150px;"
>
<el-option
v-for=
"(item,index) in addressList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
prop=
"type"
>
<el-select
v-model=
"queryParams.type"
placeholder=
"项目类型
"
>
<el-select
v-model=
"queryParams.type"
multiple
collapse-tags
clearable
placeholder=
"项目类型"
:class=
"queryParams.type.length > 1 ? 'selectTag' : ''"
style=
"width: 170px;
"
>
<el-option
v-for=
"(item,index) in typeList"
:key=
"index"
:label=
"item"
:value=
"item"
></el-option>
</el-select>
</el-form-item>
<el-form-item
prop=
"time"
>
<custom-time-select
:timeList=
"timeList"
v-model=
"queryParams.time"
placeholder=
"中标日期"
@
handle-search=
"changeSelect"
/>
</el-form-item>
...
...
@@ -133,22 +141,62 @@
</el-col>
</el-row>
</div>
<!--
<div
class=
"content content_wap3"
>
-->
<!--
<div
class=
"head"
></div>
-->
<!--
<div
class=
"list"
>
-->
<!--
<div
class=
"item"
v-for=
"(item,index) in projectList"
:key=
"index"
>
-->
<!--
<h3>
{{
item
.
projectName
}}
</h3>
-->
<!--
<p>
-->
<!--
<span>
中标企业:
</span>
-->
<!--
<span>
{{
item
.
enterprise
}}
</span>
-->
<!--
</p>
-->
<!--
<p>
-->
<!--
<span>
中标金额:
</span>
-->
<!--
<span>
{{
item
.
amount
}}
</span>
-->
<!--
</p>
-->
<!--
</div>
-->
<!--
</div>
-->
<!--
</div>
-->
<div
class=
"content_wap3"
>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClickTab"
>
<el-tab-pane
label=
"大项目最新中标"
name=
"first"
>
<div
class=
"list"
>
<div
class=
"item"
v-for=
"(item,index) in projectList"
:key=
"index"
>
<p
class=
"list-title"
><router-link
:to=
"`/biddetail/$
{item.id}`" tag="a" class="a-link" v-if="item.id" v-html="item.projectName">
</router-link></p>
<div
class=
"list-content"
>
<p
class=
"list-content-text"
>
<span>
中标企业:
</span>
<span>
{{
item
.
companyName
||
'--'
}}
</span>
</p>
<p
class=
"list-content-text"
>
<span>
中标金额:
</span>
<span>
{{
item
.
amount
}}
万元
</span>
</p>
<p
class=
"list-content-text"
>
<span>
中标日期:
</span>
<span>
{{
item
.
winBidTime
||
'--'
}}
</span>
</p>
<p
class=
"list-content-text"
>
<span>
招标人:
</span>
<span>
{{
item
.
projectUnit
||
'--'
}}
</span>
</p>
</div>
</div>
</div>
<div
class=
"pagination-box"
v-if=
"totalCount>queryParams2.pageSize"
>
<el-pagination
background
:current-page=
"queryParams2.pageNum"
:page-size=
"queryParams2.pageSize"
:total=
"totalCount"
layout=
"prev, pager, next, jumper"
@
current-change=
"handleCurrentChange"
@
size-change=
"handleSizeChange"
/>
</div>
</el-tab-pane>
<el-tab-pane
label=
"大项目最新招标"
name=
"second"
>
<div
class=
"list"
>
<div
class=
"item"
v-for=
"(item,index) in zbList"
:key=
"index"
>
<p
class=
"list-title"
><router-link
:to=
"`/biddetail/$
{item.bid}`" tag="a" class="a-link" v-if="item.bid" v-html="item.projectName">
</router-link></p>
<div
class=
"list-content"
>
<p
class=
"list-content-text"
>
<span>
总投资:
</span>
<span>
{{
item
.
projectAmount
}}
万元
</span>
</p>
<p
class=
"list-content-text"
>
<span>
招标人:
</span>
<span>
{{
item
.
tenderee
||
'--'
}}
</span>
</p>
<p
class=
"list-content-text"
>
<span>
发布日期:
</span>
<span>
{{
item
.
issueTime
||
'--'
}}
</span>
</p>
</div>
</div>
</div>
<div
class=
"pagination-box"
v-if=
"zbTableTotal>queryParams3.pageSize"
>
<el-pagination
background
:current-page=
"queryParams3.pageNum"
:page-size=
"queryParams3.pageSize"
:total=
"zbTableTotal"
layout=
"prev, pager, next, jumper"
@
current-change=
"handleCurrentChange"
@
size-change=
"handleSizeChange"
/>
</div>
</el-tab-pane>
</el-tabs>
</div>
</div>
<!--员工视角-->
<div
class=
"staff"
v-if=
"user === 2"
>
...
...
@@ -212,7 +260,7 @@
</div>
</div>
<div
class=
"trends"
>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClickTab"
>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClickTab
1
"
>
<el-tab-pane
label=
"甲方舆情"
name=
"first"
>
<div
class=
"main-box"
>
<el-timeline>
...
...
@@ -351,10 +399,12 @@
import
dataRegion
from
'@/assets/json/dataRegion'
import
"@/assets/styles/public.css"
;
import
CustomTimeSelect
from
'./component/CustomTimeSelect'
import
CustomMoneySelect
from
'./component/CustomMoneySelect'
import
{
bigWinningBidsPage
,
bigBidPage
}
from
'@/api/index'
export
default
{
name
:
"Index"
,
components
:
{
CustomTimeSelect
,
CustomTimeSelect
,
CustomMoneySelect
,
},
data
()
{
return
{
...
...
@@ -578,47 +628,48 @@ export default {
},
],
addressList
:[],
typeList
:[
'施工类项目'
],
typeList
:[
'施工类项目'
,
'施工类项目1'
,
'施工类项目2'
,
'施工类项目3'
,
'施工类项目4'
],
queryParams
:{
address
:
''
,
type
:
''
type
:[],
money
:
''
,
time
:
''
,
},
queryParams1
:{
address
:
''
,
type
:[],
money
:
''
,
time
:
''
,
},
queryParams2
:{
provinceId
:
''
,
projects
:[],
amount
:
''
,
time
:
''
,
pageNum
:
1
,
pageSize
:
10
},
queryParams3
:{
provinceId
:
''
,
projects
:[],
amount
:
''
,
time
:
''
,
pageNum
:
1
,
pageSize
:
10
},
timeList
:
[
'近三天'
,
'近七天'
,
'近半月'
,
'自定义'
],
projectList
:[
{
projectName
:
'永川综合保税区建设工程项目二期 (第一批建设项目) EPC总承包联合体2'
,
enterprise
:
'平庆渝西保税产业发展有限公司'
,
amount
:
'33333万元'
,
time
:
'2022-03-05'
,
zbr
:
'重庆渝西保税产业发展有限公司'
},
{
projectName
:
'永川综合保税区建设工程项目二期 (第一批建设项目) EPC总承包联合体2'
,
enterprise
:
'平庆渝西保税产业发展有限公司'
,
amount
:
'33333万元'
,
time
:
'2022-03-05'
,
zbr
:
'重庆渝西保税产业发展有限公司'
},
{
projectName
:
'永川综合保税区建设工程项目二期 (第一批建设项目) EPC总承包联合体2'
,
enterprise
:
'平庆渝西保税产业发展有限公司'
,
amount
:
'33333万元'
,
time
:
'2022-03-05'
,
zbr
:
'重庆渝西保税产业发展有限公司'
},
{
projectName
:
'永川综合保税区建设工程项目二期 (第一批建设项目) EPC总承包联合体2'
,
enterprise
:
'平庆渝西保税产业发展有限公司'
,
amount
:
'33333万元'
,
time
:
'2022-03-05'
,
zbr
:
'重庆渝西保税产业发展有限公司'
},
]
moneyList
:
[
'2亿以上'
,
'5亿以上'
,
'10亿以上'
,
'自定义'
],
projectList
:[],
zbList
:[],
totalCount
:
0
,
zbTableTotal
:
0
,
};
},
created
()
{
this
.
dataRegion
()
this
.
getBigWinningBidsPage
()
if
(
this
.
user
===
1
){
this
.
$nextTick
(()
=>
{
this
.
initChart
(
this
.
jtList
)
...
...
@@ -627,6 +678,26 @@ export default {
}
},
methods
:
{
getBigWinningBidsPage
(){
let
params
=
{}
bigWinningBidsPage
(
this
.
queryParams2
).
then
(
res
=>
{
console
.
log
(
res
)
if
(
res
.
code
==
200
){
this
.
projectList
=
res
.
rows
;
this
.
totalCount
=
res
.
total
;
}
})
},
getBigBidPage
(){
let
params
=
{}
bigBidPage
(
this
.
queryParams3
).
then
(
res
=>
{
console
.
log
(
res
)
if
(
res
.
code
==
200
){
this
.
zbList
=
res
.
rows
;
this
.
zbTableTotal
=
res
.
total
;
}
})
},
//地区
async
dataRegion
()
{
var
str
=
[];
...
...
@@ -939,8 +1010,14 @@ export default {
});
},
handleClickTab
(){
if
(
this
.
activeName
===
'first'
){
this
.
getBigWinningBidsPage
()
}
if
(
this
.
activeName
===
'second'
){
this
.
getBigBidPage
()
}
},
handleClickTab1
(){},
handleChange
(){
this
.
user
=
this
.
user
===
1
?
2
:
1
;
if
(
this
.
user
===
1
){
...
...
@@ -954,6 +1031,12 @@ export default {
console
.
log
(
"11111"
)
// this.$emit('handle-search')
},
handleCurrentChange
(){
},
handleSizeChange
(){
},
}
};
</
script
>
...
...
@@ -1181,12 +1264,96 @@ export default {
}
}
.content_wap3
{
.head
{
height
:
56px
;
border-bottom
:
1px
solid
#EFEFEF
;
margin-top
:
12px
;
background
:
#ffffff
;
::v-deep
.el-tabs
{
.el-tabs__header
{
margin-bottom
:
0
;
}
.el-tabs__item
{
height
:
54px
;
line-height
:
54px
;
font-size
:
16px
;
}
.el-tabs__item.is-active
{
font-weight
:
700
;
color
:
#232323
;
}
.el-tabs__nav-wrap
{
padding
:
0
24px
;
}
.el-tabs__active-bar
{
border-radius
:
8px
;
}
.
el-tabs__nav-wrap
:
:
after
{
height
:
1px
;
}
}
}
.list
{
margin
:
0
16px
;
.item
{
border-bottom
:
1px
solid
#EFEFEF
;
padding
:
16px
0
;
.list-title
{
font-size
:
16px
;
font-weight
:
700
;
color
:
#3D3D3D
;
line-height
:
23px
;
cursor
:
pointer
;
.list-titel-a
{
text-decoration
:
none
;
color
:
#3D3D3D
;
}
a
{
color
:
#3D3D3D
;
}
a
:hover
{
color
:
#0081FF
;
}
}
.list-content
{
margin-top
:
16px
;
display
:
flex
;
justify-content
:
start
;
align-items
:
center
;
.list-content-text
{
display
:
flex
;
justify-content
:
start
;
align-items
:
center
;
margin-right
:
32px
;
font-size
:
14px
;
span
:first-child
{
font-weight
:
400
;
color
:
rgba
(
35
,
35
,
35
,
0
.4
);
line-height
:
15px
}
span
:last-child
{
font-weight
:
400
;
color
:
rgba
(
35
,
35
,
35
,
0
.8
);
line-height
:
15px
}
.blue
{
color
:
#0081FF
!
important
;
cursor
:
pointer
;
}
}
}
}
}
}
::v-deep
.selectTag
{
.el-select__tags
{
.el-tag
{
&
:first-child
{
width
:
90px
;
}
}
}
}
}
...
...
dsk-system/src/main/java/com/dsk/system/mapper/CustomerMapper.java
View file @
248d4a76
...
...
@@ -10,6 +10,7 @@ import org.apache.ibatis.annotations.Mapper;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
import
java.util.Map
;
/**
...
...
@@ -35,5 +36,7 @@ public interface CustomerMapper extends BaseMapper<Customer> {
List
<
CustomerAnalyzeVo
>
selectCooperationTop
(
CustomerSearchDto
dto
);
List
<
Map
<
String
,
Object
>>
selectCreditLevelGroup
(
CustomerSearchDto
dto
);
}
dsk-system/src/main/java/com/dsk/system/service/ICustomerOverviewService.java
View file @
248d4a76
...
...
@@ -12,8 +12,10 @@ import java.util.Map;
*/
public
interface
ICustomerOverviewService
{
Map
<
String
,
Object
>
statistics
(
CustomerSearchDto
dto
);
Map
<
String
,
Object
>
statistics
(
CustomerSearchDto
dto
);
List
<
CustomerAnalyzeVo
>
cooperationTop
(
CustomerSearchDto
dto
);
List
<
Map
<
String
,
Object
>>
creditLevel
(
CustomerSearchDto
dto
);
}
dsk-system/src/main/java/com/dsk/system/service/impl/CustomerOverviewServiceImpl.java
View file @
248d4a76
...
...
@@ -50,4 +50,10 @@ public class CustomerOverviewServiceImpl implements ICustomerOverviewService {
return
customerMapper
.
selectCooperationTop
(
dto
);
}
@Override
public
List
<
Map
<
String
,
Object
>>
creditLevel
(
CustomerSearchDto
dto
)
{
dto
.
setUserId
(
SecurityUtils
.
getUserId
());
return
customerMapper
.
selectCreditLevelGroup
(
dto
);
}
}
dsk-system/src/main/resources/mapper/system/customer/CustomerMapper.xml
View file @
248d4a76
...
...
@@ -26,7 +26,7 @@
left join (
select count(status) num,customer_id from business_info where `status` = 2 group by customer_id
) bi3 on bi3.customer_id = ct.customer_id
where ctu.user_id = #{
dto.userId} and ctu.status = #{dto.
status}
where ctu.user_id = #{
userId} and ctu.status = #{
status}
<if
test=
"companyName != null and companyName != '' "
>
and ct.company_name like concat('%',#{companyName},'%')
</if>
<if
test=
"isOn != null "
>
and ct.is_on = #{isOn}
</if>
<if
test=
"provinceIds != null and provinceIds.size > 0 "
>
...
...
@@ -122,5 +122,15 @@
limit 10
</select>
<select
id=
"selectCreditLevelGroup"
resultType=
"java.util.Map"
>
select
ct.credit_level creditLevel, count(ct.credit_level) customerCount
from customer ct
join customer_user ctu on ct.customer_id = ctu.customer_id
where ctu.user_id = #{userId}
group by ct.credit_level
order by ct.credit_level desc
</select>
</mapper>
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