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
04fc3eda
Commit
04fc3eda
authored
Oct 10, 2023
by
tianhongyang
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'V20230915' of
http://192.168.60.201/root/dsk-operate-sys
into V20230915
parents
b9024ca7
97c9208c
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1070 additions
and
81 deletions
+1070
-81
EnterpriseProjectController.java
...a/com/dsk/jsk/controller/EnterpriseProjectController.java
+27
-0
EnterpriseProjectBidNoticePageBody.java
...om/dsk/jsk/domain/EnterpriseProjectBidNoticePageBody.java
+6
-1
EnterpriseProjectImportantListDto.java
.../dsk/jsk/domain/bo/EnterpriseProjectImportantListDto.java
+1
-1
EnterpriseProjectService.java
...in/java/com/dsk/jsk/service/EnterpriseProjectService.java
+58
-2
groupAccount.js
dsk-operate-ui/src/api/detail/groupAccount/groupAccount.js
+49
-0
opport.js
dsk-operate-ui/src/api/detail/party-a/opport.js
+9
-1
index.scss
dsk-operate-ui/src/assets/styles/index.scss
+1
-1
index.js
dsk-operate-ui/src/router/index.js
+1
-1
zbxmfx.vue
...ate-ui/src/views/detail/groupAccount/component/zbxmfx.vue
+840
-10
zbxmmx.vue
...ate-ui/src/views/detail/groupAccount/component/zbxmmx.vue
+1
-1
zhaobiao.vue
...e-ui/src/views/detail/groupAccount/component/zhaobiao.vue
+6
-4
index.vue
dsk-operate-ui/src/views/detail/party-a/index.vue
+6
-4
announcement.vue
...erate-ui/src/views/detail/party-a/opport/announcement.vue
+65
-55
No files found.
dsk-module/dsk-biz-api/src/main/java/com/dsk/jsk/controller/EnterpriseProjectController.java
View file @
04fc3eda
...
...
@@ -74,11 +74,25 @@ public class EnterpriseProjectController {
return
enterpriseProjectService
.
specialDebtPage
(
body
);
}
/***
*@Description: 招标公告 分页列表
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/10/9 14:41
*/
@PostMapping
(
value
=
"/bidNoticePage"
)
public
TableDataInfo
bidNoticePage
(
@RequestBody
@Valid
EnterpriseProjectBidNoticePageBody
body
)
throws
Exception
{
return
enterpriseProjectService
.
bidNoticePage
(
body
);
}
/***
*@Description: 招标招采阶段
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/10/9 14:41
*/
@PostMapping
(
value
=
"/bidNoticeTenderStage"
)
public
R
bidNoticeTenderStage
(
@RequestBody
@Valid
EnterpriseProjectBidNoticeTenderStageBody
body
)
throws
Exception
{
return
enterpriseProjectService
.
bidNoticeTenderStage
(
body
);
...
...
@@ -89,6 +103,19 @@ public class EnterpriseProjectController {
return
enterpriseProjectService
.
bidNoticeArea
(
body
);
}
/***
*@Description: 招标项目类别
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/10/9 14:41
*/
@PostMapping
(
value
=
"/bidNoticeProjectCategory"
)
public
R
bidNoticeProjectCategory
(
@RequestBody
@Valid
EnterpriseProjectBidNoticeTenderStageBody
body
)
throws
Exception
{
return
enterpriseProjectService
.
bidNoticeProjectCategory
(
body
);
}
@PostMapping
(
value
=
"/bidNoticeDetail"
)
public
R
bidNoticeDetail
(
@RequestBody
@Valid
EnterpriseProjectBidNoticeDetailBody
body
)
throws
Exception
{
return
enterpriseProjectService
.
bidNoticeDetail
(
body
);
...
...
dsk-module/dsk-biz-api/src/main/java/com/dsk/jsk/domain/EnterpriseProjectBidNoticePageBody.java
View file @
04fc3eda
...
...
@@ -25,10 +25,15 @@ public class EnterpriseProjectBidNoticePageBody extends BasePage {
private
String
keys
;
/**
*
类型
*
招标阶段
*/
private
List
<
String
>
tenderStage
;
/**
* 项目类型
*/
private
List
<
String
>
projectCategory
;
/*
* 1金额倒序,2金额正序,3时间倒序,4时间正序
*/
...
...
dsk-module/dsk-biz-api/src/main/java/com/dsk/jsk/domain/bo/EnterpriseProjectImportantListDto.java
View file @
04fc3eda
...
...
@@ -14,7 +14,7 @@ import javax.validation.constraints.NotNull;
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
EnterpriseProjectImportantListDto
extends
BasePage
{
private
Integer
c
ompanyI
d
;
private
Integer
c
i
d
;
private
String
keys
;
...
...
dsk-module/dsk-biz-api/src/main/java/com/dsk/jsk/service/EnterpriseProjectService.java
View file @
04fc3eda
...
...
@@ -4,11 +4,13 @@ import cn.hutool.core.bean.BeanException;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.json.JSONUtil
;
import
com.dsk.acc.openapi.client.util.CommonUtils
;
import
com.dsk.common.core.domain.R
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.common.utils.DskOpenApiUtil
;
import
com.dsk.jsk.domain.*
;
import
com.dsk.jsk.domain.bo.EnterpriseProjectImportantListDto
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.MapUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
...
...
@@ -17,6 +19,7 @@ import org.springframework.stereotype.Service;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Service
...
...
@@ -90,12 +93,51 @@ public class EnterpriseProjectService {
return
dskOpenApiUtil
.
responsePage
(
map
);
}
/***
*@Description: 招标公告 分页列表
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/10/9 14:41
*/
public
TableDataInfo
bidNoticePage
(
EnterpriseProjectBidNoticePageBody
body
)
throws
Exception
{
if
(
body
.
isVaildCid
())
return
new
TableDataInfo
(
new
ArrayList
<>(),
0
);
if
(
body
.
isVaildCid
())
{
return
new
TableDataInfo
(
new
ArrayList
<>(),
0
);
}
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/enterpriseProject/bidNoticePage"
,
BeanUtil
.
beanToMap
(
body
,
false
,
false
));
return
dskOpenApiUtil
.
responsePage
(
map
);
Map
data
=
MapUtils
.
getMap
(
map
,
"data"
,
null
);
List
<
Object
>
list
=
CommonUtils
.
assertAsArray
(
MapUtils
.
getObject
(
data
,
"list"
,
""
));
if
(
CollectionUtils
.
isEmpty
(
list
))
{
return
new
TableDataInfo
(
list
,
0
);
}
ArrayList
<
Long
>
cIds
=
new
ArrayList
<>();
for
(
Object
dataMap
:
list
)
{
cIds
.
add
(
MapUtils
.
getLong
(
CommonUtils
.
assertAsMap
(
dataMap
),
"agencyId"
));
}
HashMap
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"ids"
,
cIds
);
Map
<
String
,
Object
>
uipIdMap
=
dskOpenApiUtil
.
requestBody
(
"/operate/enterprise/getUipIdByCid"
,
paramMap
);
Object
uipIdData
=
uipIdMap
.
get
(
"data"
);
List
<
Map
<
String
,
Object
>>
mapList
=
new
ArrayList
<>();
if
(
ObjectUtil
.
isNotEmpty
(
uipIdData
))
{
mapList
=
(
List
<
Map
<
String
,
Object
>>)
uipIdData
;
}
for
(
Object
dataMap
:
list
)
{
Map
<
String
,
Object
>
companyMap
=
CommonUtils
.
assertAsMap
(
dataMap
);
Long
agencyId
=
MapUtils
.
getLong
(
companyMap
,
"agencyId"
,
0L
);
companyMap
.
put
(
"uipId"
,
null
);
for
(
Map
<
String
,
Object
>
m
:
mapList
)
{
String
uipId
=
MapUtils
.
getString
(
m
,
"uipId"
,
null
);
Long
companyId
=
MapUtils
.
getLong
(
m
,
"companyId"
,
0L
);
if
(
agencyId
.
equals
(
companyId
))
{
companyMap
.
put
(
"uipId"
,
uipId
);
}
}
}
return
dskOpenApiUtil
.
responsePage
(
map
);
}
public
R
bidNoticeTenderStage
(
EnterpriseProjectBidNoticeTenderStageBody
body
)
throws
Exception
{
if
(
body
.
isVaildCid
())
return
R
.
ok
();
...
...
@@ -110,6 +152,20 @@ public class EnterpriseProjectService {
return
BeanUtil
.
toBean
(
map
,
R
.
class
);
}
/***
*@Description: 招标项目类别
*@Param:
*@return: com.dsk.common.core.domain.R
*@Author: Dgm
*@date: 2023/10/9 14:41
*/
public
R
bidNoticeProjectCategory
(
EnterpriseProjectBidNoticeTenderStageBody
body
)
throws
Exception
{
if
(
body
.
isVaildCid
())
{
return
R
.
ok
();
}
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/enterpriseProject/bidNoticeProjectCategory"
,
BeanUtil
.
beanToMap
(
body
,
false
,
false
));
return
BeanUtil
.
toBean
(
map
,
R
.
class
);
}
public
R
bidNoticeDetail
(
EnterpriseProjectBidNoticeDetailBody
body
)
throws
Exception
{
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/enterpriseProject/bidNoticeDetail"
,
BeanUtil
.
beanToMap
(
body
,
false
,
false
));
...
...
dsk-operate-ui/src/api/detail/groupAccount/groupAccount.js
View file @
04fc3eda
...
...
@@ -92,3 +92,52 @@ export function exportBid(data) {
data
:
data
})
}
// 集团施工项目最新招标
export
function
recentlyBid
(
data
)
{
return
request
({
url
:
'/marketAnalysis/combine/recentlyBid'
,
method
:
'post'
,
data
:
data
})
}
// 集团施工项目年度招标
export
function
bidByYear
(
data
)
{
return
request
({
url
:
'/marketAnalysis/combine/bidByYear'
,
method
:
'post'
,
data
:
data
})
}
// 集团施工项目发包金额统计
export
function
groupByMoney
(
data
)
{
return
request
({
url
:
'/marketAnalysis/combine/groupByMoney'
,
method
:
'post'
,
data
:
data
})
}
// 集团施工项目发包类型统计
export
function
groupByType
(
data
)
{
return
request
({
url
:
'/marketAnalysis/combine/groupByType'
,
method
:
'post'
,
data
:
data
})
}
// 施工项目下浮率统计
export
function
groupByLowerRate
(
data
)
{
return
request
({
url
:
'/marketAnalysis/combine/groupByLowerRate'
,
method
:
'post'
,
data
:
data
})
}
// 历史发包项目金额Top10
export
function
peojectTop
(
data
)
{
return
request
({
url
:
'/marketAnalysis/combine/peojectTop'
,
method
:
'post'
,
data
:
data
})
}
dsk-operate-ui/src/api/detail/party-a/opport.js
View file @
04fc3eda
...
...
@@ -9,7 +9,7 @@ export function bidNoticePage(data) {
});
}
// 招标公告招标
类别
// 招标公告招标
阶段
export
function
bidNoticeTenderStage
(
data
)
{
return
request
({
url
:
'/enterpriseProject/bidNoticeTenderStage'
,
...
...
@@ -17,6 +17,14 @@ export function bidNoticeTenderStage(data) {
data
:
data
});
}
// 招标公告项目类别
export
function
bidNoticeProjectCategory
(
data
)
{
return
request
({
url
:
'/enterpriseProject/bidNoticeProjectCategory'
,
method
:
'post'
,
data
:
data
})
}
// 招标公告地区
export
function
bidNoticeArea
(
data
)
{
...
...
dsk-operate-ui/src/assets/styles/index.scss
View file @
04fc3eda
...
...
@@ -348,7 +348,7 @@ ul, li {
//box-shadow:none;
//-webkit-box-shadow: 2px 0px 1px -2px #C3CBD5;
box-shadow
:
2px
0
8px
-7px
#202020
;
border-right
:
1px
solid
#C3CBD5
;
//
border-right: 1px solid #C3CBD5;
height
:
auto
!
important
;
bottom
:
16px
!
important
;
}
...
...
dsk-operate-ui/src/router/index.js
View file @
04fc3eda
...
...
@@ -209,7 +209,7 @@ export const constantRoutes = [
children
:
[
{
path
:
'/biddetail/:id(
\\
d+)'
,
component
:
()
=>
import
(
'@/views/detail/
/
biddetail/index'
),
component
:
()
=>
import
(
'@/views/detail/biddetail/index'
),
name
:
'Biddetail'
,
meta
:
{
title
:
'中标业绩详情'
,
icon
:
'enterprise'
}
}
...
...
dsk-operate-ui/src/views/detail/groupAccount/component/zbxmfx.vue
View file @
04fc3eda
...
...
@@ -5,70 +5,279 @@
title=
"集团施工项目最新招标"
:form-data=
"formData"
:query-params=
"queryParams"
@
handle-search=
"handleSearch"
:slots=
"true"
:isExcel=
"false"
></head-form>
<span
class=
"check"
>
查看集团招标
<i
class=
"el-icon-arrow-right"
></i></span>
<skeleton
v-if=
"isSkeleton"
style=
"padding: 16px"
></skeleton>
<div
class=
"table-item"
v-if=
"!isSkeleton"
>
<el-table
class=
"fixed-table"
:data=
"tableData"
border
max-height=
"235"
>
<el-table-column
label=
"项目名称"
prop=
"title"
min-width=
"350"
>
<template
slot-scope=
"scope"
>
<router-link
:to=
"`/radar/Notice/details/$
{scope.row.bid}`" tag="a" class="a-link" v-if="scope.row.bid" v-html="scope.row.title">
</router-link>
<div
v-else
v-html=
"scope.row.title || '--'"
></div>
</
template
>
</el-table-column>
<el-table-column
label=
"发布日期"
prop=
"issueTime"
width=
"100"
></el-table-column>
<el-table-column
label=
"招标成员"
prop=
"tenderee"
min-width=
"220"
>
<
template
slot-scope=
"scope"
>
<router-link
:to=
"scope.row.uipId?`/enterprise/$
{encodeStr(scope.row.tendereeId)}`:`/company/${encodeStr(scope.row.tendereeId)}`" tag="a" class="a-link" v-if="scope.row.tendereeId
&&
scope.row.tenderee" v-html="scope.row.tenderee">
</router-link>
<div
v-else
v-html=
"scope.row.tenderee || '--'"
></div>
</
template
>
</el-table-column>
<el-table-column
label=
"招标金额"
prop=
"projectAmount"
width=
"110"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
projectAmount
?
scope
.
row
.
projectAmount
:
'0.00'
}}{{
scope
.
row
.
projectAmount
?
'万元'
:
''
}}
</
template
>
</el-table-column>
<el-table-column
label=
"项目类型"
prop=
"projectCategory"
width=
"110"
></el-table-column>
<el-table-column
label=
"代理单位"
prop=
"agency"
min-width=
"220"
>
<
template
slot-scope=
"scope"
>
<router-link
:to=
"`/company/$
{encodeStr(scope.row.agencyId)}`" tag="a" class="a-link" v-if="scope.row.agencyId
&&
scope.row.agency" v-html="scope.row.agency">
</router-link>
<div
v-else
v-html=
"scope.row.agency || '--'"
></div>
</
template
>
</el-table-column>
</el-table>
</div>
<div
class=
"empty"
v-if=
"tableData.length === 0 && !isSkeleton"
>
<img
class=
"img"
src=
"@/assets/images/project/empty.png"
>
<div
class=
"p1"
>
抱歉,暂无数据展示
</div>
</div>
</div>
<div
class=
"content"
>
<head-form
title=
"集团年度发包统计"
title=
"集团施工项目年度招标"
:form-data=
"[]"
:query-params=
"{}"
:slots=
"true"
:isExcel=
"false"
></head-form>
<el-row>
<el-col
:span=
"12"
>
<div
id=
"ndzb-echarts"
style=
"height: 300px;"
></div>
</el-col>
<el-col
:span=
"12"
>
<div
class=
"box-right"
>
<div
class=
"table-item"
>
<el-table
class=
"fixed-table"
:data=
"ndzbList"
border
max-height=
"270"
>
<el-table-column
label=
"年度"
prop=
"type"
min-width=
"70"
></el-table-column>
<el-table-column
label=
"历史发包数量"
prop=
"count"
width=
"120"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
count
}}{{
scope
.
row
.
count
?
'个'
:
''
}}
</
template
>
</el-table-column>
<el-table-column
label=
"历史发包总金额"
prop=
"sum"
width=
"140"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
sum
?
scope
.
row
.
sum
:
'0.00'
}}{{
scope
.
row
.
sum
?
'万元'
:
''
}}
</
template
>
</el-table-column>
<el-table-column
label=
"发包金额最高成员"
prop=
"companyName"
min-width=
"200"
>
<
template
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>
</
template
>
</el-table-column>
</el-table>
</div>
</div>
</el-col>
</el-row>
</div>
<div
class=
"content"
>
<head-form
title=
"集团施工项目发包金额区间"
:form-data=
"[]"
:query-params=
"{}"
:slots=
"true"
:isExcel=
"false"
></head-form>
<div
class=
"year"
>
<el-select
v-model=
"year1"
clearable
class=
"form-content-width"
style=
"width: 80px"
>
<el-option
v-for=
"(item, index) in yearOptions"
:key=
"index"
:label=
"item.name"
:value=
"item.value"
/>
</el-select>
</div>
<el-row>
<el-col
:span=
"12"
>
<div
id=
"fbje-echarts"
style=
"height: 280px;"
></div>
</el-col>
<el-col
:span=
"12"
>
<div
class=
"box-right"
>
<div
class=
"table-item"
>
<el-table
class=
"fixed-table"
:data=
"jeqjList"
border
max-height=
"270"
>
<el-table-column
label=
"历史发包金额"
prop=
"rangeName"
min-width=
"120"
></el-table-column>
<el-table-column
label=
"历史发包数量"
prop=
"count"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
count
}}{{
scope
.
row
.
count
?
'个'
:
''
}}
</
template
>
</el-table-column>
</el-table>
</div>
</div>
</el-col>
</el-row>
</div>
<div
class=
"content"
>
<head-form
title=
"集团施工项目发包类型统计"
:form-data=
"[]"
:query-params=
"{}"
:slots=
"true"
:isExcel=
"false"
></head-form>
<div
class=
"year"
>
<el-select
v-model=
"year2"
clearable
class=
"form-content-width"
style=
"width: 80px"
>
<el-option
v-for=
"(item, index) in yearOptions"
:key=
"index"
:label=
"item.name"
:value=
"item.value"
/>
</el-select>
</div>
<el-row>
<el-col
:span=
"12"
>
<div
id=
"lxtj-echarts"
style=
"height: 280px;"
></div>
</el-col>
<el-col
:span=
"12"
>
<div
class=
"box-right"
>
<div
class=
"table-item"
>
<el-table
class=
"fixed-table"
:data=
"lxtjList"
border
max-height=
"270"
>
<el-table-column
label=
"项目类型"
prop=
"type"
min-width=
"70"
></el-table-column>
<el-table-column
label=
"发包数量"
prop=
"count"
width=
"120"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
count
}}{{
scope
.
row
.
count
?
'个'
:
''
}}
</
template
>
</el-table-column>
<el-table-column
label=
"发包总金额"
prop=
"sum"
width=
"140"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
sum
?
scope
.
row
.
sum
:
'0.00'
}}{{
scope
.
row
.
sum
?
'万元'
:
''
}}
</
template
>
</el-table-column>
<el-table-column
label=
"发包金额最大成员"
prop=
"companyName"
min-width=
"200"
>
<
template
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>
</
template
>
</el-table-column>
</el-table>
</div>
</div>
</el-col>
</el-row>
</div>
<div
class=
"content"
>
<head-form
title=
"施工项目下浮率统计"
:form-data=
"[]"
:query-params=
"{}"
:slots=
"true"
:isExcel=
"false"
></head-form>
<div
class=
"year"
>
<el-select
v-model=
"year3"
clearable
class=
"form-content-width"
style=
"width: 80px"
>
<el-option
v-for=
"(item, index) in yearOptions"
:key=
"index"
:label=
"item.name"
:value=
"item.value"
/>
</el-select>
</div>
<el-row>
<el-col
:span=
"12"
>
<div
id=
"xfl-echarts"
style=
"height: 280px;"
></div>
</el-col>
<el-col
:span=
"12"
>
<div
class=
"box-right"
>
<div
class=
"table-item"
>
<el-table
class=
"fixed-table"
:data=
"xflList"
border
max-height=
"270"
>
<el-table-column
label=
"项目类型"
prop=
"type"
min-width=
"120"
></el-table-column>
<el-table-column
label=
"下浮率区间"
prop=
"lowerRate"
></el-table-column>
</el-table>
</div>
</div>
</el-col>
</el-row>
</div>
<div
class=
"content"
>
<head-form
title=
"历史发包项目金额TOP10"
:form-data=
"formData"
:query-params=
"queryParams1"
@
handle-search=
"handleSearch1"
:slots=
"true"
:isExcel=
"false"
></head-form>
<skeleton
v-if=
"isSkeleton6"
style=
"padding: 16px"
></skeleton>
<div
class=
"table-item"
v-if=
"!isSkeleton6"
>
<el-table
class=
"fixed-table"
:data=
"peojectTopData"
border
max-height=
"235"
>
<el-table-column
label=
"项目名称"
prop=
"projectName"
min-width=
"350"
>
<
template
slot-scope=
"scope"
>
<router-link
:to=
"`/biddetail/$
{item.id}`" tag="a" class="a-link" v-if="scope.row.bid" v-html="scope.row.projectName">
</router-link>
<div
v-else
v-html=
"scope.row.projectName || '--'"
></div>
</
template
>
</el-table-column>
<el-table-column
label=
"中标日期"
prop=
"winBidTime"
width=
"100"
></el-table-column>
<el-table-column
label=
"中标金额"
prop=
"winBidAmount"
width=
"130"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
winBidAmount
?
scope
.
row
.
winBidAmount
:
'0.00'
}}{{
scope
.
row
.
winBidAmount
?
'万元'
:
''
}}
</
template
>
</el-table-column>
<el-table-column
label=
"项目类型"
prop=
"projectTypeNew"
width=
"100"
></el-table-column>
<el-table-column
label=
"招标成员"
prop=
"projectUnit"
min-width=
"250"
>
<
template
slot-scope=
"scope"
>
<router-link
:to=
"scope.row.uipId?`/enterprise/$
{encodeStr(scope.row.projectUnitId)}`:`/company/${encodeStr(scope.row.projectUnitId)}`" tag="a" class="a-link" v-if="scope.row.projectUnitId
&&
scope.row.projectUnit" v-html="scope.row.projectUnit">
</router-link>
<div
v-else
v-html=
"scope.row.projectUnit || '--'"
></div>
</
template
>
</el-table-column>
<el-table-column
label=
"中标单位"
prop=
"companyName"
min-width=
"250"
>
<
template
slot-scope=
"scope"
>
<router-link
:to=
"`/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>
</
template
>
</el-table-column>
<el-table-column
label=
"代理单位"
prop=
"agency"
min-width=
"250"
>
<
template
slot-scope=
"scope"
>
<router-link
:to=
"`/company/$
{encodeStr(scope.row.agencyId)}`" tag="a" class="a-link" v-if="scope.row.agencyId
&&
scope.row.agency" v-html="scope.row.agency">
</router-link>
<div
v-else
v-html=
"scope.row.agency || '--'"
></div>
</
template
>
</el-table-column>
</el-table>
</div>
<div
class=
"empty"
v-if=
"peojectTopData.length === 0 && !isSkeleton6"
>
<img
class=
"img"
src=
"@/assets/images/project/empty.png"
>
<div
class=
"p1"
>
抱歉,暂无数据展示
</div>
</div>
</div>
</div>
</template>
<
script
>
import
*
as
echarts
from
'echarts'
;
import
mixin
from
'../../party-a/mixins/mixin'
import
{
recentlyBid
,
bidByYear
,
groupByMoney
,
groupByType
,
groupByLowerRate
,
peojectTop
}
from
'@/api/detail/groupAccount/groupAccount'
import
{
getDictType
}
from
'@/api/main'
export
default
{
name
:
'qualifications'
,
props
:
[
'customerId'
,
'combineName'
],
props
:
[
'customerId'
],
mixins
:
[
mixin
],
components
:{},
data
(){
return
{
queryParams
:
{
},
queryParams1
:
{}
,
forData
:
[
{
label
:
'项目类型'
,
prop
:
'projectType'
,
minWidth
:
'80'
,
slot
:
true
},
{
label
:
'持股比例'
,
prop
:
'stockPercent'
,
slot
:
true
,
minWidth
:
'80'
}
,
]
,
queryParams
:
{
combineId
:
this
.
customerId
,
},
queryParams1
:
{
combineId
:
this
.
customerId
,
}
,
formData
:
[
{
type
:
4
,
fieldName
:
'
projectTypes
'
,
value
:
''
,
placeholder
:
'项目类型'
,
options
:
[],
width
:
150
},
{
type
:
4
,
fieldName
:
'
type
'
,
value
:
''
,
placeholder
:
'项目类型'
,
options
:
[],
width
:
150
},
{
type
:
1
,
fieldName
:
'cgbl'
,
value
:
''
,
placeholder
:
'持股比例'
,
options
:
[],
width
:
110
},
{
type
:
1
,
fieldName
:
'year'
,
value
:
''
,
placeholder
:
'年份'
,
options
:
[],
width
:
80
},
],
cgblList
:
[
{
name
:
'100%'
,
value
:
'100%'
},
...
...
@@ -77,10 +286,27 @@
{
name
:
'5%以上'
,
value
:
'5%以上'
},
{
name
:
'1%-5%'
,
value
:
'1%-5%'
},
],
tableData
:[],
lxtjList
:[],
jeqjList
:[],
xflList
:[],
peojectTopData
:[],
ndzbList
:[],
yearOptions
:[],
year1
:
'2023'
,
year2
:
'2023'
,
year3
:
'2023'
,
isSkeleton
:
true
,
isSkeleton2
:
true
,
isSkeleton3
:
true
,
isSkeleton4
:
true
,
isSkeleton5
:
true
,
isSkeleton6
:
true
,
}
},
created
()
{
this
.
formData
[
1
].
options
=
this
.
cgblList
;
this
.
yearsData
()
//项目类型
getDictType
(
'project_type_new'
).
then
(
result
=>
{
let
data
=
result
.
code
==
200
?
result
.
data
:[];
...
...
@@ -93,21 +319,625 @@
}
}
})
this
.
handleQuery
()
this
.
getBidByYear
()
this
.
getGroupByMoney
()
this
.
getGroupByType
()
this
.
getGroupByLowerRate
()
this
.
getPeojectTop
()
},
methods
:
{
yearsData
(){
let
mydate
=
new
Date
();
let
Year
=
mydate
.
getFullYear
();
let
startyear
=
mydate
.
getFullYear
()
-
4
;
let
Years
=
[];
for
(
var
i
=
startyear
;
i
<=
Year
;
i
++
){
Years
.
push
({
name
:
i
,
value
:
i
,
})
}
this
.
yearOptions
=
Years
.
reverse
()
this
.
formData
[
2
].
options
=
Years
},
handleQuery
(
params
){
let
data
=
params
||
this
.
queryParams
;
if
(
data
.
cgbl
){
if
(
data
.
cgbl
===
'100%'
){
data
.
minStockPercent
=
1
}
if
(
data
.
cgbl
===
'50%以上'
){
data
.
minStockPercent
=
0.5
}
if
(
data
.
cgbl
===
'20%以上'
){
data
.
minStockPercent
=
0.2
}
if
(
data
.
cgbl
===
'5%以上'
){
data
.
minStockPercent
=
0.05
}
if
(
data
.
cgbl
===
'1%-5%'
){
data
.
minStockPercent
=
0.01
data
.
maxStockPercent
=
0.05
}
delete
data
.
cgbl
}
if
(
data
.
year
){
data
.
year
=
[
data
.
year
.
toString
()]
}
delete
data
.
pageNum
recentlyBid
(
data
).
then
(
res
=>
{
this
.
isSkeleton
=
false
if
(
res
.
code
===
200
){
this
.
tableData
=
res
.
data
;
}
else
{
this
.
tableData
=
[]
}
})
},
getBidByYear
(){
bidByYear
({
combineId
:
this
.
customerId
}).
then
(
res
=>
{
// this.isSkeleton = false
if
(
res
.
code
===
200
){
this
.
ndzbList
=
res
.
data
;
if
(
res
.
data
.
length
>
0
){
this
.
initChart
(
res
.
data
)
}
}
})
},
getGroupByMoney
(){
let
year
=
[
this
.
year1
.
toString
()]
groupByMoney
({
combineId
:
this
.
customerId
,
year
:
year
}).
then
(
res
=>
{
// this.isSkeleton = false
if
(
res
.
code
===
200
){
this
.
jeqjList
=
res
.
data
;
var
list
=
[];
for
(
var
i
=
0
;
i
<
res
.
data
.
length
;
i
++
){
var
obj
=
{};
obj
.
name
=
res
.
data
[
i
].
rangeName
;
obj
.
value
=
res
.
data
[
i
].
count
;
list
.
push
(
obj
)
}
if
(
res
.
data
.
length
>
0
){
this
.
initChart2
(
list
)
}
}
})
},
getGroupByType
(){
let
year
=
[
this
.
year2
.
toString
()]
groupByType
({
combineId
:
this
.
customerId
,
year
:
year
}).
then
(
res
=>
{
// this.isSkeleton = false
if
(
res
.
code
===
200
){
this
.
lxtjList
=
res
.
data
;
if
(
res
.
data
.
length
>
0
){
this
.
initChart3
(
res
.
data
)
}
}
})
},
getGroupByLowerRate
(){
let
year
=
[
this
.
year3
.
toString
()]
groupByLowerRate
({
combineId
:
this
.
customerId
,
year
:
year
}).
then
(
res
=>
{
// this.isSkeleton = false
if
(
res
.
code
===
200
){
this
.
xflList
=
res
.
data
;
if
(
res
.
data
.
length
>
0
){
this
.
initChart4
(
res
.
data
)
}
}
})
},
getPeojectTop
(
params
){
let
data
=
params
||
this
.
queryParams1
;
if
(
data
.
cgbl
){
if
(
data
.
cgbl
===
'100%'
){
data
.
minStockPercent
=
1
}
if
(
data
.
cgbl
===
'50%以上'
){
data
.
minStockPercent
=
0.5
}
if
(
data
.
cgbl
===
'20%以上'
){
data
.
minStockPercent
=
0.2
}
if
(
data
.
cgbl
===
'5%以上'
){
data
.
minStockPercent
=
0.05
}
if
(
data
.
cgbl
===
'1%-5%'
){
data
.
minStockPercent
=
0.01
data
.
maxStockPercent
=
0.05
}
delete
data
.
cgbl
}
if
(
data
.
year
){
data
.
year
=
[
data
.
year
.
toString
()]
}
delete
data
.
pageNum
peojectTop
(
data
).
then
(
res
=>
{
this
.
isSkeleton6
=
false
if
(
res
.
code
===
200
){
this
.
peojectTopData
=
res
.
data
;
}
else
{
this
.
peojectTopData
=
[]
}
})
},
handleSearch1
(){
let
params
=
this
.
formParams
()
this
.
getPeojectTop
(
params
)
},
changeSelect
(){
},
initChart
(
data
)
{
this
.
$nextTick
(()
=>
{
let
myChart
=
echarts
.
init
(
document
.
getElementById
(
"ndzb-echarts"
))
let
option
=
{
tooltip
:
{
trigger
:
'axis'
,
axisPointer
:
{
type
:
'cross'
}
},
xAxis
:
{
type
:
'category'
,
axisLabel
:
{
//坐标轴刻度标签的相关设置
margin
:
15
,
//刻度标签与轴线之间的距离
color
:
"#666666"
},
axisTick
:
false
,
//坐标轴刻度
axisPointer
:
{
type
:
'shadow'
},
data
:
data
.
map
(
item
=>
item
.
type
),
},
yAxis
:
[
{
type
:
'value'
,
axisLabel
:
{
//坐标轴刻度标签的相关设置
color
:
"#666666"
},
nameLocation
:
'end'
,
nameTextStyle
:
{
padding
:
[
0
,
10
,
0
,
-
60
],
// 四个数字分别为上右下左与原位置距离
color
:
'#666666'
,
}
},
{
type
:
'value'
,
axisLabel
:
{
//坐标轴刻度标签的相关设置
color
:
"#666666"
},
nameLocation
:
'end'
,
nameTextStyle
:
{
padding
:
[
0
,
0
,
0
,
100
],
// 四个数字分别为上右下左与原位置距离
color
:
'#666666'
,
},
splitLine
:
{
show
:
true
,
lineStyle
:
{
type
:
'dashed'
,
color
:
[
'#FFFFFF'
]
}
}
}
],
grid
:
{
top
:
30
,
left
:
80
,
right
:
130
,
bottom
:
30
,
},
series
:
[
{
name
:
'招标金额(万元)'
,
smooth
:
false
,
//平滑
type
:
"line"
,
symbolSize
:
6
,
yAxisIndex
:
1
,
tooltip
:
{
valueFormatter
:
function
(
value
)
{
return
value
+
'万元'
}
},
itemStyle
:
{
normal
:{
color
:
'#14C9C9'
,
lineStyle
:
{
width
:
2
},
}
},
data
:
data
.
map
(
item
=>
item
.
sum
),
},
{
name
:
'招标数量'
,
type
:
'bar'
,
barWidth
:
20
,
tooltip
:
{
valueFormatter
:
function
(
value
)
{
return
value
+
'个'
;
}
},
itemStyle
:
{
normal
:{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
1
,
0
,
0
,
[{
offset
:
0
,
color
:
'#56A5FF'
},
{
offset
:
1
,
color
:
'#1B8EFF'
}]),
// barBorderRadius:[20,20, 0, 0]
}
},
data
:
data
.
map
(
item
=>
item
.
count
),
}
]
}
myChart
.
setOption
(
option
);
window
.
addEventListener
(
"resize"
,
function
()
{
myChart
.
resize
();
//图表跟随页面大小变化宽度
});
})
},
initChart2
(
data
)
{
this
.
$nextTick
(()
=>
{
let
myChart
=
echarts
.
init
(
document
.
getElementById
(
"fbje-echarts"
))
let
option
=
{
tooltip
:
{
trigger
:
'item'
,
borderWidth
:
0
,
backgroundColor
:
"rgba(255, 255, 255, 0.8)"
,
formatter
:
function
(
params
)
{
var
result
=
''
result
+=
'<p style="color: rgba(35,35,35,0.8);padding: 0;margin: 0;">'
+
params
.
data
.
name
+
'</p>'
result
+=
'<p style="color: rgba(35,35,35,0.8);padding: 0;margin: 0;">'
+
params
.
data
.
value
+
'个</p>'
return
result
;
},
extraCssText
:
'width:96px!important;'
,
},
legend
:
{
type
:
'scroll'
,
orient
:
'horizontal'
,
bottom
:
0
,
data
:
data
,
itemHeight
:
8
,
itemWidth
:
12
,
pageButtonPosition
:
'end'
,
},
color
:[
'#6395F9'
,
'#6ADCAE'
,
'#6D7E9C'
,
'#F7C42D'
,
'#F78F2D'
],
series
:
[
{
type
:
'pie'
,
radius
:
'55%'
,
center
:
[
'50%'
,
'50%'
],
data
:
data
,
emphasis
:
{
itemStyle
:
{
shadowBlur
:
10
,
shadowOffsetX
:
0
,
shadowColor
:
'rgba(0, 0, 0, 0.5)'
}
}
}
]
}
myChart
.
setOption
(
option
);
window
.
addEventListener
(
"resize"
,
function
()
{
myChart
.
resize
();
//图表跟随页面大小变化宽度
});
})
},
initChart3
(
data
)
{
this
.
$nextTick
(()
=>
{
let
myChart
=
echarts
.
init
(
document
.
getElementById
(
"lxtj-echarts"
))
let
option
=
{
tooltip
:
{
trigger
:
'axis'
,
axisPointer
:
{
type
:
'cross'
}
},
xAxis
:
{
type
:
'category'
,
axisLabel
:
{
//坐标轴刻度标签的相关设置
margin
:
15
,
//刻度标签与轴线之间的距离
color
:
"#666666"
},
axisTick
:
false
,
//坐标轴刻度
axisPointer
:
{
type
:
'shadow'
},
data
:
data
.
map
(
item
=>
item
.
type
),
},
yAxis
:
[
{
type
:
'value'
,
axisLabel
:
{
//坐标轴刻度标签的相关设置
color
:
"#666666"
},
nameLocation
:
'end'
,
nameTextStyle
:
{
padding
:
[
0
,
10
,
0
,
-
60
],
// 四个数字分别为上右下左与原位置距离
color
:
'#666666'
,
}
},
{
type
:
'value'
,
axisLabel
:
{
//坐标轴刻度标签的相关设置
color
:
"#666666"
},
nameLocation
:
'end'
,
nameTextStyle
:
{
padding
:
[
0
,
0
,
0
,
100
],
// 四个数字分别为上右下左与原位置距离
color
:
'#666666'
,
},
splitLine
:
{
show
:
true
,
lineStyle
:
{
type
:
'dashed'
,
color
:
[
'#FFFFFF'
]
}
}
}
],
grid
:
{
top
:
30
,
left
:
80
,
right
:
130
,
bottom
:
30
,
},
series
:
[
{
name
:
'招标金额(万元)'
,
smooth
:
false
,
//平滑
type
:
"line"
,
symbolSize
:
6
,
yAxisIndex
:
1
,
tooltip
:
{
valueFormatter
:
function
(
value
)
{
return
value
+
'万元'
}
},
itemStyle
:
{
normal
:{
color
:
'#14C9C9'
,
lineStyle
:
{
width
:
2
},
}
},
data
:
data
.
map
(
item
=>
item
.
sum
),
},
{
name
:
'招标数量'
,
type
:
'bar'
,
barWidth
:
20
,
tooltip
:
{
valueFormatter
:
function
(
value
)
{
return
value
+
'个'
;
}
},
itemStyle
:
{
normal
:{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
1
,
0
,
0
,
[{
offset
:
0
,
color
:
'#56A5FF'
},
{
offset
:
1
,
color
:
'#1B8EFF'
}]),
// barBorderRadius:[20,20, 0, 0]
}
},
data
:
data
.
map
(
item
=>
item
.
count
),
}
]
}
myChart
.
setOption
(
option
);
window
.
addEventListener
(
"resize"
,
function
()
{
myChart
.
resize
();
//图表跟随页面大小变化宽度
});
})
},
initChart4
(
data
)
{
this
.
$nextTick
(()
=>
{
let
myChart
=
echarts
.
init
(
document
.
getElementById
(
"xfl-echarts"
))
let
option
=
{
tooltip
:
{
trigger
:
'axis'
,
axisPointer
:
{
type
:
'cross'
}
},
xAxis
:
{
type
:
'category'
,
axisLabel
:
{
//坐标轴刻度标签的相关设置
margin
:
15
,
//刻度标签与轴线之间的距离
color
:
"#666666"
},
axisTick
:
false
,
//坐标轴刻度
axisPointer
:
{
type
:
'shadow'
},
data
:
data
.
map
(
item
=>
item
.
type
),
},
yAxis
:
[
{
type
:
'value'
,
axisLabel
:
{
//坐标轴刻度标签的相关设置
color
:
"#666666"
},
nameLocation
:
'end'
,
nameTextStyle
:
{
padding
:
[
0
,
10
,
0
,
-
60
],
// 四个数字分别为上右下左与原位置距离
color
:
'#666666'
,
}
},
{
type
:
'value'
,
axisLabel
:
{
//坐标轴刻度标签的相关设置
color
:
"#666666"
},
nameLocation
:
'end'
,
nameTextStyle
:
{
padding
:
[
0
,
0
,
0
,
100
],
// 四个数字分别为上右下左与原位置距离
color
:
'#666666'
,
},
splitLine
:
{
show
:
true
,
lineStyle
:
{
type
:
'dashed'
,
color
:
[
'#FFFFFF'
]
}
}
}
],
grid
:
{
top
:
30
,
left
:
80
,
right
:
130
,
bottom
:
30
,
},
series
:
[
{
name
:
'下浮率区间'
,
smooth
:
false
,
//平滑
type
:
"line"
,
symbolSize
:
6
,
yAxisIndex
:
1
,
// tooltip: {
// valueFormatter: function (value) {
// return value + '万元'
// }
// },
itemStyle
:
{
normal
:{
color
:
'#14C9C9'
,
lineStyle
:
{
width
:
2
},
}
},
data
:
data
.
map
(
item
=>
item
.
lowerRate
),
},
{
name
:
'招标数量'
,
type
:
'bar'
,
barWidth
:
20
,
tooltip
:
{
valueFormatter
:
function
(
value
)
{
return
value
+
'个'
;
}
},
itemStyle
:
{
normal
:{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
1
,
0
,
0
,
[{
offset
:
0
,
color
:
'#56A5FF'
},
{
offset
:
1
,
color
:
'#1B8EFF'
}]),
// barBorderRadius:[20,20, 0, 0]
}
},
data
:
data
.
map
(
item
=>
item
.
count
),
}
]
}
myChart
.
setOption
(
option
);
window
.
addEventListener
(
"resize"
,
function
()
{
myChart
.
resize
();
//图表跟随页面大小变化宽度
});
})
},
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.performance
{
height
:
calc
(
100%
-
64px
);
/*height: calc(100% - 64px);*/
.content
{
background
:
#ffffff
;
border-radius
:
4px
;
padding
:
16px
;
margin-bottom
:
16px
;
min-height
:
360px
;
position
:
relative
;
.check
{
position
:
absolute
;
right
:
16px
;
top
:
53px
;
color
:
#0081FF
;
font-size
:
12px
;
cursor
:
pointer
;
i
{
margin-left
:
4px
;
}
}
.year
{
position
:
absolute
;
right
:
16px
;
top
:
8px
;
::v-deep
.form-content-width
{
.el-input__inner
{
border
:
0
;
height
:
30px
;
line-height
:
30px
;
padding
:
5px
28px
5px
8px
;
}
.el-input__icon
{
line-height
:
30px
;
}
}
}
.table-item
{
::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
;
}
.el-table__row
{
td
:last-child
{
.cell
{
padding-right
:
12px
!
important
;
}
}
}
}
}
.empty
{
margin
:
0
auto
;
height
:
300px
;
text-align
:
center
;
.img
{
width
:
108px
;
height
:
108px
;
margin-bottom
:
24px
;
margin-top
:
70px
;
}
.p1
{
color
:
#333333
;
font-size
:
16px
;
}
}
}
}
</
style
>
dsk-operate-ui/src/views/detail/groupAccount/component/zbxmmx.vue
View file @
04fc3eda
...
...
@@ -103,7 +103,7 @@
import
{
getDictType
}
from
'@/api/main'
export
default
{
name
:
'qualifications'
,
props
:
[
'customerId'
,
'combineName'
],
props
:
[
'customerId'
],
mixins
:
[
mixin
],
components
:{
CustomTimeSelect
,
CustomMoneySelect
},
data
(){
...
...
dsk-operate-ui/src/views/detail/groupAccount/component/zhaobiao.vue
View file @
04fc3eda
...
...
@@ -8,8 +8,8 @@
</el-tabs>
</div>
</div>
<Zbxmfx
v-if=
"activeName === 'first'"
></Zbxmfx>
<Zbxmmx
v-if=
"activeName === 'second'"
></Zbxmmx>
<Zbxmfx
v-if=
"activeName === 'first'"
:customer-id=
"id"
></Zbxmfx>
<Zbxmmx
v-if=
"activeName === 'second'"
:customer-id=
"id"
></Zbxmmx>
</div>
</
template
>
...
...
@@ -18,10 +18,12 @@
import
Zbxmmx
from
'./zbxmmx'
export
default
{
name
:
'qualifications'
,
props
:
[
'customerId'
],
components
:{
Zbxmfx
,
Zbxmmx
},
data
(){
return
{
activeName
:
'first'
activeName
:
'first'
,
id
:
this
.
customerId
}
},
created
()
{
...
...
@@ -37,7 +39,7 @@
<
style
lang=
"scss"
scoped
>
.zhaobiao
{
height
:
100%
;
/*height: 100%;*/
background
:
#F5F5F5
;
.header
{
justify-content
:
space-between
;
...
...
dsk-operate-ui/src/views/detail/party-a/index.vue
View file @
04fc3eda
...
...
@@ -279,10 +279,12 @@ export default {
cityIds
:
[
this
.
companyInfo
.
cityId
],
};
urbanInvestmentPage
(
data
).
then
(
res
=>
{
if
(
res
.
data
.
totalCount
<
1
)
{
let
arr
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
$refs
.
sidebar
.
sideRoute
));
if
(
res
.
code
==
200
){
if
(
res
.
data
.
totalCount
<
1
){
let
arr
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
$refs
.
sidebar
.
sideRoute
))
arr
[
4
].
children
[
2
].
disabled
=
true
;
this
.
$refs
.
sidebar
.
sideRoute
=
arr
;
this
.
$refs
.
sidebar
.
sideRoute
=
arr
}
}
});
if
(
this
.
companyInfo
&&
this
.
companyInfo
.
companyName
)
{
...
...
dsk-operate-ui/src/views/detail/party-a/opport/announcement.vue
View file @
04fc3eda
...
...
@@ -19,9 +19,9 @@
<
/template
>
<
script
>
import
mixin
from
'../mixins/mixin'
;
import
skeleton
from
'@/views/project/projectList/component/skeleton'
;
import
{
bidNoticeArea
,
bidNoticeTenderStage
,
bidNoticePage
}
from
'@/api/detail/party-a/opport'
;
import
mixin
from
'../mixins/mixin'
import
skeleton
from
'@/views/project/projectList/component/skeleton'
import
{
bidNoticeArea
,
bidNoticeTenderStage
,
bidNoticeProjectCategory
,
bidNoticePage
}
from
'@/api/detail/party-a/opport'
export
default
{
name
:
'Announcement'
,
props
:
[
'companyId'
],
...
...
@@ -43,6 +43,7 @@ export default {
{
label
:
'项目名称'
,
prop
:
'projectName'
,
minWidth
:
'300'
,
slot
:
true
,
fixed
:
true
}
,
{
label
:
'发布日期'
,
prop
:
'issueTime'
,
sortable
:
'custom'
,
descending
:
'3'
,
ascending
:
'4'
,
width
:
'120'
}
,
{
label
:
'预算金额(万元)'
,
prop
:
'projectAmount'
,
sortable
:
'custom'
,
descending
:
'1'
,
ascending
:
'2'
,
width
:
'140'
}
,
{
label
:
'项目类型'
,
prop
:
'projectCategory'
,
width
:
'110'
}
,
{
label
:
'项目地区'
,
prop
:
'province'
,
width
:
'120'
,
slot
:
true
}
,
{
label
:
'招标阶段'
,
prop
:
'tenderStage'
,
width
:
'90'
}
,
{
label
:
'招采单位联系人'
,
prop
:
'contact'
,
width
:
'120'
}
,
...
...
@@ -53,9 +54,10 @@ export default {
{
label
:
'报名截止日期'
,
prop
:
'overTime'
,
width
:
'110'
}
],
formData
:
[
{
type
:
7
,
fieldName
:
'province'
,
value
:
''
,
props
:
{
multiple
:
true
}
,
placeholder
:
'项目地区'
,
options
:
[],
uid
:
this
.
getUid
()
}
,
{
type
:
4
,
fieldName
:
'tenderStage'
,
value
:
''
,
placeholder
:
'项目类型'
,
options
:
[],
uid
:
this
.
getUid
()
}
,
{
type
:
3
,
fieldName
:
'keys'
,
value
:
''
,
placeholder
:
'输入关键词查询'
,
options
:
[],
uid
:
this
.
getUid
()
}
{
type
:
7
,
fieldName
:
'province'
,
value
:
''
,
props
:
{
multiple
:
true
}
,
placeholder
:
'项目地区'
,
options
:
[]
}
,
{
type
:
4
,
fieldName
:
'projectCategory'
,
value
:
''
,
placeholder
:
'项目类型'
,
options
:
[]
}
,
{
type
:
4
,
fieldName
:
'tenderStage'
,
value
:
''
,
placeholder
:
'招标阶段'
,
options
:
[]
}
,
{
type
:
3
,
fieldName
:
'keys'
,
value
:
''
,
placeholder
:
'输入关键词查询'
,
options
:
[]
}
],
//列表
tableLoading
:
false
,
...
...
@@ -70,82 +72,90 @@ export default {
this
.
handleQuery
();
}
,
methods
:
{
async
handleOption
()
{
let
[
area
,
tender
]
=
await
Promise
.
all
([
bidNoticeArea
({
cid
:
this
.
companyId
}
),
bidNoticeTenderStage
({
cid
:
this
.
companyId
}
)
]);
if
(
area
.
code
==
200
)
{
async
handleOption
(){
let
[
area
,
tender
,
project
]
=
await
Promise
.
all
([
bidNoticeArea
({
cid
:
this
.
companyId
}
),
bidNoticeTenderStage
({
cid
:
this
.
companyId
}
),
bidNoticeProjectCategory
({
cid
:
this
.
companyId
}
),
])
if
(
area
.
code
==
200
){
let
region
=
area
.
data
.
map
(
item
=>
{
let
province
=
{
label
:
item
.
province
+
'('
+
item
.
count
+
')'
,
value
:
item
.
provinceId
}
;
if
(
item
.
citys
&&
item
.
citys
.
length
>
0
)
{
let
city
=
[],
citem
=
{
}
;
for
(
let
i
=
0
;
i
<
item
.
citys
.
length
;
i
++
)
{
citem
=
{
label
:
item
.
citys
[
i
].
city
,
value
:
item
.
citys
[
i
].
cityId
}
;
if
(
item
.
citys
[
i
].
areas
&&
item
.
citys
[
i
].
areas
.
length
>
0
)
{
let
area
=
[],
aitem
=
{
}
;
for
(
let
j
=
0
;
j
<
item
.
citys
[
i
].
areas
.
length
;
j
++
)
{
aitem
=
{
label
:
item
.
citys
[
i
].
areas
[
j
].
area
,
value
:
item
.
citys
[
i
].
areas
[
j
].
areaId
}
;
area
.
push
(
aitem
)
;
citem
.
children
=
area
;
let
province
=
{
label
:
item
.
province
+
'('
+
item
.
count
+
')'
,
value
:
item
.
provinceId
}
if
(
item
.
citys
&&
item
.
citys
.
length
>
0
)
{
let
city
=
[],
citem
=
{
}
for
(
let
i
=
0
;
i
<
item
.
citys
.
length
;
i
++
)
{
citem
=
{
label
:
item
.
citys
[
i
].
city
,
value
:
item
.
citys
[
i
].
cityId
}
if
(
item
.
citys
[
i
].
areas
&&
item
.
citys
[
i
].
areas
.
length
>
0
)
{
let
area
=
[],
aitem
=
{
}
for
(
let
j
=
0
;
j
<
item
.
citys
[
i
].
areas
.
length
;
j
++
)
{
aitem
=
{
label
:
item
.
citys
[
i
].
areas
[
j
].
area
,
value
:
item
.
citys
[
i
].
areas
[
j
].
areaId
}
area
.
push
(
aitem
)
citem
.
children
=
area
}
}
city
.
push
(
citem
)
;
city
.
push
(
citem
)
}
city
.
length
>
0
?
province
.
children
=
city
:
''
;
city
.
length
>
0
?
province
.
children
=
city
:
''
}
return
province
;
}
)
;
this
.
setFormData
(
'province'
,
region
)
;
return
province
}
)
this
.
setFormData
(
'province'
,
region
)
}
if
(
tender
.
code
==
200
)
{
if
(
tender
.
code
==
200
)
{
let
tenderStage
=
tender
.
data
.
map
(
item
=>
{
let
it
=
{
name
:
item
.
tenderStage
+
'('
+
item
.
count
+
')'
,
value
:
item
.
tenderStage
}
;
return
it
;
}
);
this
.
setFormData
(
'tenderStage'
,
tenderStage
);
let
it
=
{
name
:
item
.
tenderStage
+
'('
+
item
.
count
+
')'
,
value
:
item
.
tenderStage
}
return
it
}
)
this
.
setFormData
(
'tenderStage'
,
tenderStage
)
}
if
(
project
.
code
==
200
){
let
projectCategory
=
project
.
data
.
map
(
item
=>
{
let
it
=
{
name
:
item
.
projectCategory
+
'('
+
item
.
count
+
')'
,
value
:
item
.
projectCategory
}
return
it
}
)
this
.
setFormData
(
'projectCategory'
,
projectCategory
)
}
}
,
async
handleQuery
(
params
)
{
this
.
tableLoading
=
true
;
let
param
=
this
.
getAreaList
(
params
||
this
.
queryParams
)
;
let
res
=
await
bidNoticePage
(
param
)
;
this
.
tableLoading
=
false
;
if
(
res
.
code
==
200
)
{
this
.
tableLoading
=
true
let
param
=
this
.
getAreaList
(
params
||
this
.
queryParams
)
let
res
=
await
bidNoticePage
(
param
)
this
.
tableLoading
=
false
if
(
res
.
code
==
200
)
{
this
.
isSkeleton
=
false
;
this
.
tableData
=
res
.
rows
;
this
.
tableData
=
res
.
rows
}
this
.
tableDataTotal
=
res
.
total
;
this
.
tableDataTotal
=
res
.
total
}
,
getAreaList
(
params
)
{
if
(
params
.
province
&&
params
.
province
.
length
>
0
)
{
let
arr
=
this
.
$refs
.
headForm
.
$refs
.
cascader
[
0
].
getCheckedNodes
()
;
let
provinceIds
=
[],
cityIds
=
[],
areaIds
=
[]
;
getAreaList
(
params
){
if
(
params
.
province
&&
params
.
province
.
length
>
0
)
{
let
arr
=
this
.
$refs
.
headForm
.
$refs
.
cascader
[
0
].
getCheckedNodes
()
let
provinceIds
=
[],
cityIds
=
[],
areaIds
=
[]
for
(
var
i
in
arr
)
{
if
(
arr
[
i
].
parent
)
{
if
(
!
arr
[
i
].
parent
.
checked
)
{
if
(
arr
[
i
].
hasChildren
||
arr
[
i
].
level
==
2
)
{
cityIds
.
push
(
arr
[
i
].
value
)
;
}
else
{
areaIds
.
push
(
arr
[
i
].
value
)
;
if
(
arr
[
i
].
hasChildren
||
arr
[
i
].
level
==
2
)
{
cityIds
.
push
(
arr
[
i
].
value
)
}
else
{
areaIds
.
push
(
arr
[
i
].
value
)
}
}
}
else
{
provinceIds
.
push
(
arr
[
i
].
value
)
;
provinceIds
.
push
(
arr
[
i
].
value
)
}
}
delete
params
.
province
;
provinceIds
.
length
>
0
?
params
.
provinceIds
=
provinceIds
:
''
;
cityIds
.
length
>
0
?
params
.
cityIds
=
cityIds
:
''
;
areaIds
.
length
>
0
?
params
.
areaIds
=
areaIds
:
''
;
delete
params
.
province
provinceIds
.
length
>
0
?
params
.
provinceIds
=
provinceIds
:
''
cityIds
.
length
>
0
?
params
.
cityIds
=
cityIds
:
''
areaIds
.
length
>
0
?
params
.
areaIds
=
areaIds
:
''
}
return
params
;
return
params
}
}
}
<
/script
>
<
style
lang
=
"scss"
scoped
>
.
detail
-
container
{
.
detail
-
container
{
background
:
#
ffffff
;
border
-
radius
:
4
px
;
padding
:
16
px
;
...
...
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