Commit 2f358a25 authored by yht15023815643's avatar yht15023815643

Merge branch 'dev20230707' of http://192.168.60.201/root/dsk-operate-sys into dev20230707

parents 38db4af6 dad1d309
......@@ -8,13 +8,11 @@ import com.dsk.system.domain.business.dto.BusinessSearchDto;
import com.dsk.system.service.IBusinessOverviewService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/**
* 项目概览
*
* @author lcl
* @create 2023/8/14
*/
......@@ -30,40 +28,43 @@ public class BusinessOverviewController extends BaseController {
* 项目状态统计
*/
@GetMapping("/status/statistics")
public AjaxResult statusStatistics(){
public AjaxResult statusStatistics() {
return AjaxResult.success(baseService.statusStatistics(new BusinessSearchDto(SecurityUtils.getUserId())));
}
/**
* 项目资金分析
*/
@GetMapping("/amount/analyze")
public AjaxResult amountAnalyze(){
return AjaxResult.success(baseService.amountAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(),0)));
public AjaxResult amountAnalyze() {
return AjaxResult.success(baseService.amountAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(), 0)));
}
/**
* 项目类型分析
*/
@GetMapping("/type/analyze")
public AjaxResult typeAnalyze(){
return AjaxResult.success(baseService.typeAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(),2)));
@GetMapping("/type/analyze/{status}")
public AjaxResult typeAnalyze(@PathVariable Integer status) {
return AjaxResult.success(baseService.typeAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(), status)));
}
/**
* 公招项目地区统计
*
* @return
*/
@GetMapping("/countGroupByProvince")
public AjaxResult countGroupByProvince(@RequestBody JSONObject object){
@RequestMapping("/countGroupByProvince")
public AjaxResult countGroupByProvince(@RequestBody JSONObject object) {
return baseService.countGroupByProvince(object);
}
/**
* 公招项目投资金额统计
*
* @return
*/
@GetMapping("/rangByMoney")
public AjaxResult rangByMoney(@RequestBody JSONObject object){
@RequestMapping("/rangByMoney")
public AjaxResult rangByMoney(@RequestBody JSONObject object) {
return baseService.rangByMoney(object);
}
}
package com.dsk.web.controller.dsk;
import com.alibaba.fastjson2.JSONObject;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.domain.model.*;
import com.dsk.common.core.page.TableDataInfo;
......@@ -30,36 +32,27 @@ public class IndexController {
@Autowired
private IndexService enterpriseService;
@ApiOperation(value = "企业中标排行榜")
@PostMapping("/winningBidsRanking")
public R winningBidsRanking(@RequestBody Map<String, Object> paramMap) throws Exception {
return enterpriseService.winningBidsRanking(paramMap);
}
@ApiOperation(value = "企业中标排行-项目类型")
@PostMapping("/rankingProjectType")
public R rankingProjectType(@RequestBody Map<String, Object> paramMap) throws Exception {
return enterpriseService.rankingProjectType(paramMap);
}
@ApiOperation(value = "大项目最新中标")
@PostMapping(value = "bigWinningBidsPage")
public TableDataInfo bigWinningBidsPage(@RequestBody IndexBigWinningBidsPageBody vo) throws Exception {
return enterpriseService.bigWinningBidsPage(vo);
public AjaxResult bigWinningBidsPage(@RequestBody JSONObject object) throws Exception {
return enterpriseService.bigWinningBidsPage(object);
}
@ApiOperation(value = "大项目最新招标")
@PostMapping(value = "bigBidPage")
public TableDataInfo bigBidPage(@RequestBody IndexBigBidPageBody vo) throws Exception {
return enterpriseService.bigBidPage(vo);
public AjaxResult bigBidPage(@RequestBody JSONObject object) throws Exception {
return enterpriseService.bigBidPage(object);
}
@ApiOperation(value = "企业中标排行-项目类型")
@PostMapping("/bigBidProjectType")
public R bigBidProjectType(@RequestBody Map<String, Object> paramMap) throws Exception {
return enterpriseService.bigBidProjectType(paramMap);
@ApiOperation(value = "集团中标统计")
@PostMapping("/countByCompany")
public AjaxResult countByCompany(@RequestBody JSONObject object) {
return enterpriseService.countByCompany(object);
}
@ApiOperation(value = "建筑企业中标排行榜")
@PostMapping("/bidRank")
public AjaxResult bidRank(@RequestBody JSONObject object) {
return enterpriseService.bidRank(object);
}
}
......@@ -7,6 +7,7 @@ import lombok.ToString;
import javax.validation.constraints.AssertFalse;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@ToString
......@@ -20,10 +21,10 @@ public class EnterpriseBussinessClientProjectPageBody extends BasePage {
private Integer cid;
/**
* 企业id
* 客户企业Id
*/
@NotNull(message = "企业id不能为空")
private Integer unitId;
private Integer companyId;
/**
* 查询关键字
......@@ -32,7 +33,29 @@ public class EnterpriseBussinessClientProjectPageBody extends BasePage {
public boolean isVaildCid() {
return 0 == cid || 0 == unitId;
return 0 == cid || 0 == companyId;
}
/**
* 来源
*/
private List<String> sources;
/**
* 项目类型
*/
private List<String> projects;
/**
* 金额起
*/
private Double amountStart;
/**
* 金额止
*/
private Double amountEnd;
}
......@@ -7,6 +7,7 @@ import lombok.ToString;
import javax.validation.constraints.AssertFalse;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@ToString
......@@ -20,10 +21,10 @@ public class EnterpriseBussinessSupplierProjectPageBody extends BasePage {
private Integer cid;
/**
* 企业id
* 供应商企业Id
*/
@NotNull(message = "企业id不能为空")
private Integer unitId;
private Integer companyId;
/**
* 查询关键字
......@@ -32,8 +33,28 @@ public class EnterpriseBussinessSupplierProjectPageBody extends BasePage {
public boolean isVaildCid() {
return 0 == cid || 0 == unitId;
return 0 == cid || 0 == companyId;
}
/**
* 来源
*/
private List<String> sources;
/**
* 项目类型
*/
private List<String> projects;
/**
* 金额起
*/
private Double amountStart;
/**
* 金额止
*/
private Double amountEnd;
}
import request from '@/utils/request'
// 客户概览-客户统计
export function statistics() {
return request({
url: '/customer/overview/statistics',
method: 'get',
})
}
// 客户概览-客户合作情况
export function cooperationTop() {
return request({
url: '/customer/overview/cooperation/top',
method: 'get',
})
}
// 客户概览-客户信资评级
export function creditLevel() {
return request({
url: '/customer/overview/credit/level',
method: 'get',
})
}
// 导入客户列表
export function importData(param) {
return request({
......
import request from "@/utils/request";
// 企业中标排行榜
export function bidRank(data) {
return request({
url: '/index/bidRank',
method: 'post',
data: data
})
}
// 大项目最新中标
export function bigWinningBidsPage(data) {
return request({
......
......@@ -977,6 +977,11 @@
font-size: 12px;
}
}
.el-form {
.el-form-item--small.el-form-item {
margin-bottom: 0;
}
}
}
.p10{
padding: 0 10px;
......
......@@ -43,7 +43,7 @@ export default {
.app-main {
/* 84 = navbar + tags-view = 50 + 34 */
min-height: calc(100vh - 68px);
min-width:1440px;
min-width:1240px;
background: #F5F5F5;
overflow: initial;
}
......
......@@ -127,7 +127,7 @@ export const constantRoutes = [
path: '/enterprise/:id',
component: () => import('@/views/detail/party-a/index'),
name: 'PartyA',
meta: { title: '企业详情', icon: 'enterprise', noCache: false },
meta: { title: '甲方详情', icon: 'enterprise', noCache: false },
}
]
},
......
......@@ -61,7 +61,7 @@ export default {
timeList: {
type: Array,
default: () => [],
}
},
},
computed: {
isClear() {
......@@ -319,6 +319,9 @@ export default {
left: -400px;
}
}
.el-date-editor{
left: -400px;
}
}
.picker-block {
......
......@@ -15,10 +15,44 @@
<div class="btn btn_primary btn_shallow h36 w88" @click="pldrs">批量导入</div>
</div>
<div class="table_search">
<div class="searchInput">
<el-input type="text" clearable v-model="searchParam.companyName" @change="clearname" placeholder="输入企业名称查询"></el-input>
<div class="btn" @click="handleCurrentChange(1)">搜索</div>
<div>
<el-form ref="queryForm" :model="searchParam" :inline="true" size="small">
<el-form-item prop="companyName">
<div class="searchInput">
<el-input type="text" clearable v-model="searchParam.companyName" @change="clearname" placeholder="输入企业名称查询"></el-input>
<div class="btn" @click="handleCurrentChange(1)">搜索</div>
</div>
</el-form-item>
<el-form-item>
<el-cascader
ref="address1"
:options="addressList"
:props="addressProps"
v-model="address"
@change="handleSearch"
placeholder="地区选择"
collapse-tags
style="width: 200px;"
clearable></el-cascader>
</el-form-item>
<el-form-item prop="companyNatures">
<el-select v-model="searchParam.companyNatures" style="width: 175px;" @change="handleSearch" filterable collapse-tags multiple class="form-content-width" placeholder="客户性质">
<el-option v-for="(item, index) in companyNaturelist" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
<el-form-item prop="isOn">
<el-select v-model="searchParam.isOn" filterable clearable style="width: 175px;" @change="handleSearch" class="form-content-width" placeholder="上市公司">
<el-option v-for="(item, index) in isMajorlist" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
<el-form-item prop="creditLevels">
<el-select v-model="searchParam.creditLevels" style="width: 175px;" @change="handleSearch" multiple filterable collapse-tags class="form-content-width" placeholder="资信评级">
<el-option v-for="(item, index) in creditLevellist" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
</el-form>
</div>
<div class="dc">
<div class="total">{{tableData.total}}</div>
<div class="btn-export" @click="pldrs"><img src="@/assets/images/project/import.png">批量导入</div>
......@@ -259,7 +293,6 @@
import batchimport from '../../project/projectList/component/batchImport'
import skeleton from '../../project/projectList/component/skeleton'
import { encodeStr } from '@/assets/js/common'
export default {
name: 'CustomList',
components:{batchimport,skeleton},
......@@ -273,6 +306,7 @@
pageNum:1,
pageSize:20
},
address:'',
props:{ checkStrictly: true, expandTrigger: 'hover' },
dialogVisible:false,
textarea:"",
......@@ -281,7 +315,23 @@
tipsvalue:"",//标签填写内容
tableData: [],//列表
companData:[],//联想企业列表
addressProps: {
multiple: true,
expandTrigger: 'hover'
},
//上市公司
isMajorlist:[
{
dictValue: 0,
dictLabel:'否',
},
{
dictValue: 1,
dictLabel:'是',
}
],
companyNaturelist:[], //客户性质
creditLevellist:[], //资信评级
customerLevel:[],//客户等级
addressList:[],//地区
//添加客户
......@@ -316,12 +366,20 @@
}
},
created() {
this.$watch(
() => this.$route.params,
() => {
if(this.$route.query.type === '1'){
this.searchParam.companyNatures=['国有企业']
}
if(this.$route.query.type === '2'){
this.searchParam.companyNatures=['央企']
}
if(this.$route.query.type ==='3'){
this.searchParam.companyNatures=['事业单位','机关单位']
}
this.$watch(() => this.$route.params,() => {
this.getCustomerList()
this.getDictType()
this.prvinceTree()
this.handleQuery()
this.searchParam.companyName=''
},
// 组件创建完后获取数据,
......@@ -330,6 +388,22 @@
)
},
methods:{
async handleQuery() {
let [type1,type2] = await Promise.all([
getDictType('company_nature_type'),
getDictType('credit_level_type'),
])
if(type1.code==200){
type1.data.forEach(item => {
this.companyNaturelist.push({dictLabel:item.dictLabel,dictValue:item.dictLabel})
})
}
if(type2.code==200){
type2.data.forEach(item => {
this.creditLevellist.push({dictLabel:item.dictLabel,dictValue:item.dictLabel})
})
}
},
sq1(item,sq){
this.$nextTick(()=>{
item.sq1 = sq
......@@ -367,7 +441,42 @@
},
//获取客户列表
getCustomerList(){
getCustomerList(this.searchParam).then(result=>{
let params=this.searchParam
if(this.address.length > 0){
let arr = this.$refs.address1.getCheckedNodes();
let provinceCode = [],cityCode = [],countyCode = [];
for (var i in arr) {
if (arr[i].parent) {
if (!arr[i].parent.checked) {
arr[i].hasChildren && cityCode.push(arr[i].value);
!arr[i].hasChildren && countyCode.push(arr[i].value);
}
} else {
provinceCode.push(arr[i].value)
}
}
if(provinceCode.length > 0){
params.provinceIds=provinceCode
}
if(cityCode.length > 0){
params.cityIds=cityCode
}
if(countyCode.length > 0){
params.areaIds=countyCode
}
}else {
if(params.provinceIds){
delete params.provinceIds
}
if(params.cityIds){
delete params.cityIds
}
if(params.areaIds){
delete params.areaIds
}
}
getCustomerList(params).then(result=>{
this.isSkeleton = false
this.tableData = result
this.tableData.rows.forEach(item=>{
......@@ -398,6 +507,12 @@
// }
this.$router.push({path:'/enterprise/'+encodeStr(companyId),query:{customerId:customerId,path:path}})
},
handleSearch(){
this.$nextTick(() => {
this.searchParam.pageNum = 1
this.getCustomerList()
})
},
clearname(value){
if(value == ""){
this.handleCurrentChange(1)
......@@ -650,6 +765,27 @@
margin-top: 16px;
}
}
.table_search{
::v-deep .el-cascader{
height: 32px;
line-height: 32px;
.el-input{
input{
height: 32px !important;
}
}
.el-cascader__tags{
flex-wrap: inherit;
margin-top: 1px;
.el-tag{
max-width: 120px;
}
}
.el-input__suffix{
top: 1px;
}
}
}
}
.ps1{
display: flex;
......@@ -696,8 +832,9 @@
height: auto;
}
.searchInput{
width: 240px;
.el-input{
width: 260px;
/*width: 260px;*/
}
}
</style>
<template>
<div>
<div class="miantitle">
<span>客户管理</span>
<span> / 客户概览</span>
</div>
<div class="app-container">
<div class="topions">
<div class="icons">
<div class="name">客户总数</div>
<div class="count">120</div>
<img class="icon_img" src="@/assets/images/project/icon_1.png">
</div>
<div class="icons">
<div class="name">已合作客户</div>
<div class="count">56</div>
<img class="icon_img" src="@/assets/images/project/icon_2.png">
</div>
<div class="icons">
<div class="name">局级大客户</div>
<div class="count">50</div>
<img class="icon_img" src="@/assets/images/project/icon_3.png">
</div>
<div class="icons">
<div class="name">今日跟进客户</div>
<div class="count">30</div>
<img class="icon_img" src="@/assets/images/project/icon_4.png">
<div class="app-container overview">
<el-row>
<el-col :span="18">
<div class="topions">
<div class="head_title">客户概览</div>
<div class="item">
<div class="icons">
<router-link to="/custom/customList" tag="a">
<div class="name">总客户数</div>
<div class="count">{{statistics.totalCount || '--'}}<span>{{statistics.totalCount ? '个':''}}</span></div>
<img class="icon_img" src="@/assets/images/project/icon_1.png">
</router-link>
</div>
<div class="icons">
<router-link to="/custom/customList?type=1" tag="a">
<div class="name">国企客户</div>
<div class="count">{{statistics.nationCount || '--'}}<span>{{statistics.nationCount ? '个':''}}</span></div>
<img class="icon_img" src="@/assets/images/project/icon_2.png">
</router-link>
</div>
<div class="icons">
<router-link to="/custom/customList?type=2" tag="a">
<div class="name">央企客户</div>
<div class="count">{{statistics.centreCount || '--'}}<span>{{statistics.centreCount ? '个':''}}</span></div>
<img class="icon_img" src="@/assets/images/project/icon_3.png">
</router-link>
</div>
<div class="icons">
<router-link to="/custom/customList?type=3" tag="a">
<div class="name">事业单位</div>
<div class="count">{{statistics.undertakingCount || '--'}}<span>{{statistics.undertakingCount ? '个':''}}</span></div>
<img class="icon_img" src="@/assets/images/project/icon_4.png">
</router-link>
</div>
</div>
</div>
<div class="icons">
<div class="name">储备项目数</div>
<div class="count">33</div>
<img class="icon_img" src="@/assets/images/project/icon_5.png">
</el-col>
<el-col :span="6">
<div class="search">
<div class="head_title">快速查找</div>
<el-input placeholder="输入企业名称查询">
<i slot="prefix" class="el-icon-search"></i>
<el-button slot="append">搜索</el-button>
</el-input>
<div class="search_btn"><i class="el-icon-plus"></i>新建项目</div>
</div>
</div>
<div class="flex">
<el-card class="box-card noborder left" style="position: relative;padding-bottom: 0">
<div class="cardtitles">客户级别</div>
<div class="chartsum">
<div class="sum">23家</div>
<div>11%</div>
<div>有息债务/总负债</div>
</div>
<div class="flex">
<div id="khjb" class="chart1"></div>
<div class="tables">
</el-col>
</el-row>
<div class="content content_wap1">
<div class="head_title">业主单位合作情况</div>
<el-row>
<el-col :span="14">
<div id="hzqk-echarts" style="height: 300px;"></div>
</el-col>
<el-col :span="10">
<div class="box-right">
<el-table
:data="tableData"
stripe border
style="width: 100%"
:default-sort = "{prop: 'date', order: 'descending'}"
:data="hzqkList"
border
max-height="250"
fit
highlight-current-row
>
<el-table-column
prop="name"
label="名称">
</el-table-column>
<el-table-column
prop="sum"
label="数量(家)" align="right">
</el-table-column>
<el-table-column
prop="point"
label="占比" align="right">
<el-table-column prop="companyName" label="业主单位">
<template slot-scope="scope">
<router-link :to="scope.row.uipId?`/enterprise/${encodeStr(scope.row.companyId)}`:`/company/${encodeStr(scope.row.companyId)}`" tag="a" 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 prop="businessCount" label="合作次数" width="100"/>
<el-table-column prop="totalAmount" label="合同总额(万元)" width="150"/>
</el-table>
</div>
</el-col>
</el-row>
</div>
<div class="content content_wap2">
<div class="head_title">客户资信评级</div>
<el-row>
<el-col :span="14">
<div id="zxpj-echarts" style="height: 250px;"></div>
</el-col>
<el-col :span="10">
<div class="box-right">
<el-table
:data="creditLevel"
border
max-height="250"
fit
highlight-current-row
>
<el-table-column prop="creditLevel" label="评级等级"/>
<el-table-column prop="customerCount" label="客户数量"/>
</el-table>
</div>
</el-card>
<el-card class="box-card noborder right" style="padding-bottom: 0">
<div class="cardtitles">客户跟进动态
<div class="labels">
<div :class="{'on':datatype==1}" @click="getDT(1)">周</div>
<div :class="{'on':datatype==2}" @click="getDT(2)">月</div>
<div :class="{'on':datatype==3}" @click="getDT(3)">年</div>
</el-col>
</el-row>
</div>
<div class="content_wap3">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="title">跟进动态</span>
</div>
<div class="flex-box time-label">
<div class="labels">
<div v-for="(item,index) in timeList" :class="{'on':datatype===index}" @click="handleClick(item,index)">
<template v-if="item === '自定义'">
<div style="position: relative">
自定义
<el-date-picker
ref="picker"
:default-value="defaultValue"
style="position: absolute;opacity: 0;left: -12px;width: 60px;"
v-model="pickerValue"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
@change="changePicker">
</el-date-picker>
</div>
</template>
<template v-else>{{item}}</template>
</div>
</div>
<div id="khgjdt" class="chart2"></div>
</el-card>
</div>
<div class="flex">
<el-card class="box-card noborder left">
<div class="cardtitles">客户性质分析</div>
<div class="chart2" id="khxz"></div>
</el-card>
<el-card class="box-card noborder right">
<div class="cardtitles">客户资信评级</div>
<div class="chart2" id="khzxpj"></div>
</el-card>
<div class="picker-block" ref="picker-block"></div>
</div>
</div>
<el-card class="box-card noborder">
<div class="cardtitles">客户动态</div>
<div class="trendslist">
<div class="trends" v-for="item in datalist">
<div class="names">{{item.name}}</div>
<div class="trendtips"><div class="tips tip3">{{item.tip1}}</div><div class="tips tip2">{{item.tip2}}</div></div>
<div class="trendcon">{{item.text}}</div>
<div class="time">{{item.time}}</div>
<div class="trendslist">
<div class="trends" v-for="item in recordlist">
<div class="names">{{item.content}}</div>
<div class="list-content">
<p class="list-content-text">
<span>关联企业:</span>
<span>
<router-link :to="{path:`/enterprise/${encodeStr(item.companyId)}`,query:{customerId:item.customerId,path:'business'}}" tag="a">{{item.companyName || '--'}}</router-link>
</span>
</p>
<p class="list-content-text">
<span>跟进人:</span>
<span>{{item.nickName || '--'}}</span>
</p>
<p class="list-content-text">
<span>拜访对象:</span>
<span>{{item.name || '--'}}</span>
</p>
<p class="list-content-text">
<span>本次拜访时间:</span>
<span>{{item.visitTime || '--'}}</span>
</p>
<p class="list-content-text">
<span>下次拜访时间:</span>
<span>{{item.nextVisitTime || '--'}}</span>
</p>
</div>
<div class="tables" style="width: 100%" v-if="datalist.length>10">
<div class="bottems">
<el-pagination
background
:page-size="10"
:current-page="1"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="datalist.length">
</el-pagination>
</div>
</div>
<div class="tables" style="width: 100%" v-if="recordlist.length>10">
<div class="bottems">
<el-pagination
background
:page-size="10"
:current-page="1"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="recordlist.length">
</el-pagination>
</div>
</div>
</el-card>
<div class="empty" v-if="recordlist.length === 0">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,没找到相关数据</div>
<div class="p2">建议调整筛选条件,重新搜索</div>
</div>
</div>
</div>
</div>
</template>
......@@ -120,57 +181,47 @@
<script>
import '@/assets/styles/project.scss'
import * as echarts from 'echarts'
import {encodeStr} from "@/assets/js/common"
import { statistics, cooperationTop, creditLevel,getFollowList } from '@/api/custom/custom'
export default {
name: 'Overview',
data() {
return {
//客户级别
encodeStr,
activeName:'first',
statistics:{},
hzqkList:[],
creditLevel:[],
chartDom: '',
myChart: '',
option: '',
//客户跟进
chartDom1: '',
myChart1: '',
option1: '',
//客户性质
chartDom2: '',
myChart2: '',
option2: '',
// 客户资信
chartDom3: '',
myChart3: '',
option3: '',
//表格数据
tableData:[
{name:'集团总部',sum:'23',point:'11%'},
{name:'一级单位',sum:'61',point:'29%'},
{name:'二级单位',sum:'60',point:'29%'},
{name:'三级单位',sum:'21',point:'10%'},
{name:'其他单位',sum:'44',point:'21%'},
],
datatype:'1',//切换类型
datalist:[
{name:'重庆市江北区国有资本投资运营管理集团有限公司',time:'2023-05-30',text:'新增招标公告:【江北房地产综合开发公司名下不动产鲤鱼池片区资产评估项目】 公开选取【资产评估】机构的公告',tip1:'正向',tip2:'招标公告'},
{name:'上海城投(集团)有限公司',time:'2023-05-29',text:'新增招标公告:北横通道新建工程——机电、装饰工程Ⅱ标段',tip1:'正向',tip2:'招标公告'},
{name:'上海申迪(集团)有限公司',time:'2023-5-27',text:'新增招标公告:上海国际旅游度假区核心区3.1平方公里绿地公园配套停车场项目',tip1:'正向',tip2:'招标公告'},
{name:'上海浦东建设股份有限公司',time:'2023-5-25',text:'新增招标公告:张村地块基础设施建设及上汽地块配套道路桥梁项目道路照明工程二标段',tip1:'正向',tip2:'招标公告'},
{name:'上海浦东建设股份有限公司',time:'2023-5-24',text:'新增供应商:江苏安神交通工程有限公司',tip1:'提示',tip2:'新增供应商'},
],
pageNum:1,
pageSize:10,
recordlist:[],
timeList:['今日','近三天','近七天','自定义'],
datatype:'',
defaultValue:new Date(),
pickerValue: [],
params:{
startTime:'',
endTime:''
}
}
},
created() {
this.getData()
this.getFollowList()
},
mounted(){
this.$nextTick(()=>{
this.chartDom = document.getElementById("khjb")
this.chartDom = document.getElementById("hzqk-echarts")
this.myChart = echarts.init(this.chartDom)
this.chartDom2 = document.getElementById("khxz")
this.myChart2 = echarts.init(this.chartDom2)
this.chartDom3 = document.getElementById("khzxpj")
this.myChart3 = echarts.init(this.chartDom3)
this.initChart()
this.getDT(1)
this.chartDom1 = document.getElementById("zxpj-echarts")
this.myChart1 = echarts.init(this.chartDom1)
})
window.addEventListener("resize", this.resizeEcharts);
},
......@@ -181,48 +232,140 @@
this.resizeEcharts()
},
methods: {
getData(){
statistics().then(res=>{
console.log(res.data)
this.statistics=res.data;
})
cooperationTop().then(res=>{
// console.log(res.data)
this.hzqkList=res.data;
let list=[];
for(let i=0; i<res.data.length; i++){
if(res.data[i].totalAmount){
list.push(res.data[i])
}
}
this.initChart(list)
})
creditLevel().then(res=>{
for(let i=0; i<res.data.length; i++){
if(res.data[i].creditLevel){
this.creditLevel.push(res.data[i])
}
}
this.initChart1(this.creditLevel)
})
},
getFollowList(){
let param = {
pageNum:this.pageNum,//页码
pageSize:this.pageSize,
}
if(this.params.startTime){
param.startTime=this.params.startTime
}
if(this.params.endTime){
param.endTime=this.params.endTime
}
getFollowList(param).then(result=>{
// this.isSkeleton = false
this.recordlist = result.rows
this.recordlist.forEach(item=>{
item.createTime = this.gettime(item.createTime)
item.visitTime = this.gettime(item.visitTime)
item.nextVisitTime = this.gettime(item.nextVisitTime)
})
})
},
resizeEcharts (){
const self = this
setTimeout(function(){ //图表跟随页面大小变化宽度
self.myChart.resize()
self.myChart1.resize()
self.myChart2.resize()
self.myChart3.resize()
}, 10)
},
initChart(){
//客户级别
initChart(data){
//业主单位合作情况
this.option = {
tooltip: {
trigger: 'item',
extraCssText: 'border:0',
legend: {
show: false,
x:'center',
y:'bottom',
padding:[10,0,10,0],
itemWidth: 24,
itemHeight: 10,
textStyle:{
borderRadius:30,
}
},
color:['#8A82F3','#5B9CF7','#8DCF96','#FFDC6B','#FE9C77'],//修改配色
series: [
{
name: '',
type: 'pie',
radius: ['50%','70%'],
data: [
{ value: 23, name: '集团总部:11%',borderWidth:0 },
{ value: 61, name: '一级单位:29%',borderWidth:0 },
{ value: 60, name: '二级单位:29%',borderWidth:0 },
{ value: 21, name: '三级单位:10%',borderWidth:0 },
{ value: 44, name: '其他单位: 21%',borderWidth:0 }
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0)'
}
yAxis: {
type: 'category',
inverse: true, // 反向坐标
data: data.map(item => item.companyName),
axisLine: {
show: false,
},
axisTick: {
show: false,
},
axisPointer: {
label: {
show: true,
margin: 30
}
}
]
},
axisLabel: {
margin: 200,
textStyle: {
align: 'left',
},
},
},
xAxis: {
type: 'value',
axisLabel: { //坐标轴刻度标签的相关设置
color:"#666666"
},
name: '单位/万元',
// nameLocation: 'start',
nameLocation: 'end',
nameTextStyle: {
padding: [0, 0, 0, 0], // 四个数字分别为上右下左与原位置距离
color: '#666666',
},
},
grid: {
left: '22%',
top: 60,
right: 80,
bottom: 60,
},
tooltip: {
show: true,
backgroundColor: 'rgba(0,0,0,.7)',
borderWidth: 0,
textStyle: {
color: '#fff',
},
},
series: {
name:'合同总额',
data: data.map(item => item.totalAmount),
barGap: 0,
type: 'bar',
itemStyle:{
color: '#92C9FF',
barBorderRadius:[0, 20, 20, 0]
},
barWidth: 8,
},
}
this.option && this.myChart.setOption(this.option)
//客户性质分析
this.option2 = {
},
initChart1(data){
//客户资信评级
this.option1 = {
tooltip: {
trigger: 'axis',
axisPointer: {
......@@ -231,6 +374,7 @@
},
grid: {
left: '3%',
top:30,
right: '4%',
bottom: '3%',
containLabel: true
......@@ -238,7 +382,7 @@
xAxis: [
{
type: 'category',
data: ['地方单位', '事业单位', '政府机关', '中央企业', '上市公司', '军队', '民营企业','其他'],
data: data.map(item => item.creditLevel),
axisTick: {
alignWithLabel: true,
show: false
......@@ -260,7 +404,12 @@
name: '',
type: 'bar',
barWidth: '18px',
data: [100, 152, 200, 334, 390, 330, 220,256,178],
data: data.map(item => item.customerCount),
tooltip: {
valueFormatter: function (value) {
return '客户数量 '+value
}
},
itemStyle:{
normal: {
barBorderRadius: [9, 9, 0, 0],
......@@ -277,313 +426,397 @@
},
}
}
this.option2 && this.myChart2.setOption(this.option2)
//客户资质分析
this.option3 = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: ['AA', 'AA+', 'AA-', 'A', 'A+', 'A', 'A-','其他'],
axisTick: {
alignWithLabel: true,
show: false
this.option1 && this.myChart1.setOption(this.option1)
},
handleCurrentChange(val) {
this.pageNum=1;
this.getFollowList()
},
// 时间格式化
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}`
},
handleClick(value,key){
if(key === this.datatype && value != '自定义'){
this.datatype='';
this.pageNum=1
this.params.startTime=''
this.params.endTime=''
this.getFollowList()
return
}
this.datatype=key;
if(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 = []
let timeStr = []
let startTime = ''
let endTime = new Date()
switch (value) {
case '今日':
startTime = new Date(endTime.getTime() - 3600 * 1000 * 24 * 3)
timeStr = [this.formatDate(startTime), this.formatDate(endTime)]
break;
case '近三天':
startTime = new Date(endTime.getTime() - 3600 * 1000 * 24 * 3)
timeStr = [this.formatDate(startTime), this.formatDate(endTime)]
break;
case '近七天':
startTime = new Date(endTime.getTime() - 3600 * 1000 * 24 * 3)
timeStr = [this.formatDate(startTime), this.formatDate(endTime)]
break;
default:
if(this.pickerValue && this.pickerValue.length) {
timeStr = this.pickerValue
}else {
timeStr = []
}
break;
}
this.params.startTime=timeStr[0]
this.params.endTime=timeStr[1]
this.pageNum=1
this.getFollowList()
}
},
gettime(time){
if(time == null || time == "")
return null
let times = new Date(time)
let year = times.getFullYear()
let month = times.getMonth()+1
month = month<10?"0"+month:month
let day = times.getDate()
day = day<10?"0"+day:day
return year+'-'+month+'-'+day
},
// 时间选择改变后的回调
changePicker(value) {
if(value && value.length) {
this.pageNum=1
this.params.startTime=this.pickerValue[0]
this.params.endTime=this.pickerValue[1]
this.getFollowList()
}
},
}
}
</script>
<style lang="scss" scoped>
.overview{
::v-deep .el-row{
.el-col:nth-child(1){
padding-left: 0 !important;
padding-right: 0 !important;
}
.el-col:nth-child(2){
padding-left: 16px !important;
padding-right: 0 !important;
}
}
.head_title{
font-weight: 700;
color: #232323;
font-size: 16px;
line-height: 24px;
margin-bottom: 12px;
}
.topions{
padding: 16px;
background: #ffffff;
height: 152px;
margin-bottom: 22px;
.item{
display: flex;
.icons{
width: calc(24%);
margin-right: 16px;
height: 84px;
background-size: 100% 100%;
position: relative;
padding: 16px;
border-radius: 4px;
cursor: pointer;
&:last-child{
margin-right: 0;
background: linear-gradient(135deg, #F6F7FF 0%, #EDEDFF 100%);
}
],
yAxis: [
{
type: 'value',
splitLine : { //网格线
lineStyle: {
type: 'dashed' //设置网格线类型 dotted:虚线 solid:实线
},
&:nth-child(1){
background: linear-gradient(135deg, #F2F9FE 0%, #E7F4FE 100%);
}
&:nth-child(2){
background: linear-gradient(135deg, #F2FEF1 0%, #E7FEEE 100%);
}
&:nth-child(3){
background: linear-gradient(135deg, #FEFAF2 0%, #FEF8E7 100%);
}
&:hover{
.count{
color: #0081FF;
span{
color: #0081FF;
}
}
}
],
series: [
{
name: '',
type: 'bar',
barWidth: '18px',
data: [110, 112, 190, 234, 310, 350, 220,276,198],
itemStyle:{
normal:{
barBorderRadius:[9,9,0,0],
color:'#14C9C9'
},
.name{
font-size: 14px;
color: rgba(35,35,35,0.8);
line-height: 20px;
}
.count{
font-size: 22px;
font-weight: 700;
color: #3D3D3D;
line-height: 32px;
span{
font-weight: 400;
color: rgba(35,35,35,0.4);
font-size: 12px;
margin-left: 2px;
}
}
],
.icon_img{
width: 32px;
height: 32px;
position: absolute;
right: 18px;
bottom: 26px;
}
}
}
}
.search{
padding: 16px;
background: #ffffff;
height: 152px;
emphasis: {
itemStyle: {
// 高亮时点的颜色。
color: 'rgb(134,231,231)'
},
::v-deep .el-input{
.el-input__inner{
border-right: 0;
}
.el-icon-search{
font-size: 16px;
line-height: 36px;
color:#0081FF;
margin-left: 6px;
margin-right: 4px;
}
.el-input-group__append{
background: #F5F5F5;
color: #0081FF;
}
}
this.option3 && this.myChart3.setOption(this.option3)
},
initDT(datas,labels){
this.chartDom1 = document.getElementById("khgjdt")
this.myChart1 = echarts.init(this.chartDom1)
//客户跟进动态
this.option1 = {
xAxis: {
type: 'category',
data: labels,
axisTick: {
show: false
},
boundaryGap: false,
nameLocation:'end',
nameTextStyle: {
fontSize:12,
padding: [0, 0, 0, -30]
},
},
yAxis: {
type: 'value',
splitLine : { //网格线
lineStyle: {
type: 'dashed' //设置网格线类型 dotted:虚线 solid:实线
},
.search_btn{
width: 100%;
height: 36px;
background: #0081FF;
border-radius: 4px;
line-height: 34px;
text-align: center;
color:#FFFFFF;
font-size: 14px;
margin-top: 12px;
i{
margin-right: 12px;
}
}
}
.content{
background: #ffffff;
padding: 22px 16px;
margin-bottom: 12px;
}
.box-right{
width: 90%;
float: right;
::v-deep .el-table{
.sort-caret.ascending{
border-bottom-color: rgba(0,129,255,0.5);
}
.ascending .sort-caret.ascending{
border-bottom-color: #0081FF;
}
.sort-caret.descending{
border-top-color: rgba(0,129,255,0.5);
}
.descending .sort-caret.descending{
border-top-color: #0081FF;
}
.el-table__header-wrapper{
background: #F0F3FA;
th{
background: #F0F3FA;
/*text-align: left;*/
}
},
grid:{
left:'8%',
top:'8%',
right:'5%',
bottom:'42px',
},
tooltip:{
axisPointer:{ //悬浮于圆点展示标签
type:'axis'
},
extraCssText: 'border:0',
// trigger: 'axis'
},
series: [
{
name: '总跟进',
data: datas,
type: 'line',
smooth: true,
itemStyle: {
normal:{
color:'#0081FF'
}
},
label:{
normal:{
show:false
}
},
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(0, 129, 255, 0.5)'
}, {
offset: 1, color: 'rgba(0, 129, 255, 0)'
} ],
global: false
}
},
symbolSize:8,
}
.el-table__footer-wrapper{
background: #F0F3FA;
}
th {
font-size: 13px !important;
font-weight: 400 !important;
}
.cell {
padding-right: 12px !important;
padding-left: 12px !important;
line-height: 18px;
}
.el-table__fixed-header-wrapper{
th{
background: #F0F3FA;
}
]
}
this.option1 && this.myChart1.setOption(this.option1)
},
getDT(type){
this.datatype = type
let time = new Date()
let week = ['周一','周二','周三','周四','周五','周六','周日']
let weekdata = [200,150,300,240,400,380,460]
let monthdata = [400,200,350,170,190,280,260,308,406,387,458,695,125,360,512,546,298,365,458,536,345,200,150,300,240,400,380,460,472,365,547]
let yeardata = [1908,1500,2300,1456,2354,2564,1254,1236,4561,4521,1236,4561,3521]
let datas = []
let labels = []
switch (type) {
case 1:
time = time.getDay()== 0?7:time.getDay()
// week.length = time
weekdata.length = time
for(var i=0;i<7;i++){
if(i > time){
weekdata.push('')
}
}
td.el-table__cell{
border-bottom: 0;
}
tr{
&.current-row>td{
background-color: initial;
}
&:nth-child(2n) {
background: #F8FBFF;
}
labels = week
datas = weekdata
break;
case 2:
let days = new Date(time.getFullYear(),time.getMonth()+1,0).getDate()//获取到本月天数
time = time.getDate()
monthdata.length = time
for(var i=1;i<days;i++){
labels.push(i+'日')
if(i > time){
monthdata.push("")
}
.el-table__cell{
height: 40px;
padding: 0;
line-height: 40px;
}
.el-table__body tr:hover > td.el-table__cell{
background: #DCEBFF;
}
::-webkit-scrollbar-track-piece {
//滚动条凹槽的颜色,还可以设置边框属性
background-color: #F3F4F5;
height: 16px;
padding: 0 4px;
}
//滚动条的宽度
::-webkit-scrollbar {
width: 8px;
height: 8px;
background-color: #F3F4F5;
border-radius: 6px;
}
//滚动条的滑块
::-webkit-scrollbar-thumb {
border-radius: 8px;
height: 8px;
margin: 0 4px;
background: rgba(98,110,126,0.2);
border: 4px solid rgba(98,110,126,0.2);;
&:hover{
background: #566380;
}
}
.has-gutter{
tr{
th:nth-last-child(2){
border-right:0;
}
td:nth-last-child(2){
border-right:0;
}
}
datas = monthdata
break;
case 3:
time = time.getMonth()+1
yeardata.length = time
for(var i=1;i<12;i++){
labels.push(i+'月')
if(i>time){
yeardata.push('')
}
.el-table__cell.gutter{
background: #F0F3FA;
}
.el-table__row{
td:last-child{
.cell{
padding-right: 12px !important;
}
}
datas = yeardata
break;
default:
break;
}
}
this.initDT(datas,labels)
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
},
}
}
</script>
<style lang="scss" scoped>
.box-card{
margin: 12px 0 0;
padding-bottom: 24px;
&.left{
width: calc(62% - 16px);
margin-right: 14px;
}
&.right{
width: 40%;
}
}
.topions{
width: 100%;
display: flex;
.icons{
width: calc(20%);
margin-right: 16px;
height: 96px;
background: url("../../../assets/images/project/beijing.png") top center no-repeat;
background-size: 100% 100%;
position: relative;
padding: 24px;
&:last-child{
margin-right: 0;
}
.name{
font-size: 14px;
color: #3D3D3D;
line-height: 14px;
.content_wap3{
background: #ffffff;
.query-box{
padding:16px;
}
.count{
font-size: 26px;
.title{
font-weight: 700;
color: #0081FF;
padding-top: 14px;
line-height: 26px;
color: #232323;
font-size: 16px;
line-height: 24px;
}
.icon_img{
width: 70px;
position: absolute;
right: 0;
bottom: 0;
.time-label{
.labels{
width: 240px;
height: 30px;
line-height: 30px;
border-radius: 4px;
>div{
height: 100%;
padding: 0 12px;
text-align: center;
float: left;
opacity: 1;
border: 1px solid #EFEFEF;
margin-left: -1px;
font-weight: 400;
font-size: 12px;
color: rgba(35, 35, 35, 0.80);
cursor: pointer;
&.on{
background: #0081FF;
color: #FFFFFF;
border-color: #0081FF;
}
&:first-child{
border-radius: 4px 0px 0px 4px;
}
&:last-child{
border-radius: 0px 4px 4px 0px;
}
}
}
}
::v-deep .picker-block {
position: relative;
&::after {
content:"";
display:block;
visibility:hidden;
clear:both;
}
.el-picker-panel.el-date-range-picker.el-popper {
left: -650px !important;
}
.popper__arrow {
left: 30px !important;
}
}
}
}
.chart1{
width: 428px;
height: 240px;
}
.tables{
width: calc(100% - 428px);
}
.chartsum{
position: absolute;
color: #3D3D3D;
text-align: center;
top: 155px;
left: 168px;
>div{
font-size: 10px;
line-height: 18px;
padding: 0 2px;
&.sum{
font-size: 18px;
padding-bottom: 4px;
}
}
}
.chart2{
width: 100%;
height: 265px;
}
.cardtitles{
position: relative;
.labels{
width: 120px;
height: 22px;
position: absolute;
border-radius: 2px;
right: 24px;
top: 24px;
>div{
width: 40px;
height: 100%;
text-align: center;
line-height: 22px;
float: left;
opacity: 1;
border: 1px solid #EFEFEF;
margin-left: -1px;
font-weight: 400;
font-size: 12px;
color: rgba(35, 35, 35, 0.80);
cursor: pointer;
&.on{
background: #0081FF;
color: #FFFFFF;
border-color: #0081FF;
}
&:first-child{
border-radius: 2px 0px 0px 2px;
}
&:last-child{
border-radius: 0px 2px 2px 0px;
}
}
}
}
.trendslist{
border-top: 1px solid #EFEFEF;
.trends{
position: relative;
padding: 16px 16px 0;
padding: 16px;
border-bottom: 1px solid #EFEFEF;
&:hover{
background: #F6F9FC;
}
......@@ -598,31 +831,58 @@
font-weight: 700;
color: #3D3D3D;
line-height: 23px;
margin-bottom: 12px;
}
.trendtips{
padding: 8px 0 12px;
}
.trendcon{
border-bottom: 1px solid #EFEFEF;
font-size: 14px;
font-family: MicrosoftYaHei-Regular, MicrosoftYaHei;
font-weight: 400;
color: rgba(35,35,35,0.8);
line-height: 18px;
padding-bottom: 16px;
}
.list-content {
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;
}
&:last-child{
.trendcon{
border: none;
}
}
.time{
position: absolute;
right: 16px;
top: 26px;
}
.empty{
margin: 0 auto;
height: 400px;
text-align: center;
border-top: 1px solid #EFEFEF;
padding-bottom: 50px;
.img{
width: 108px;
height: 108px;
margin-bottom: 24px;
margin-top: 50px;
}
.p1{
color: #333333;
font-size: 16px;
}
.p2{
color: #999999;
font-size: 14px;
opacity: 0.4;
margin-top: 8px;
}
}
}
......
......@@ -400,16 +400,22 @@
},
sortChange({ column, prop, order }){
this.queryParams.orderName = prop
this.paramsData.orderName = prop
if(column.order === "ascending"){
this.queryParams.orderType = 'asc'
this.paramsData.orderType = 'asc'
}else if(column.order === "descending"){
this.queryParams.orderType = 'desc'
this.paramsData.orderType = 'desc'
}else {
this.queryParams.orderType=''
this.queryParams.orderName=''
this.paramsData.orderType=''
this.paramsData.orderName=''
}
this.pageIndex = 1;
this.handleQuery()
this.queryParams.pageNum =1
this.paramsData.pageNum =1
this.handleQuery(this.paramsData)
},
//分页
handleCurrentChange(e){
......
<template>
<div class="app-container home">
<el-row :gutter="20">
<el-col :span="18">
<div class="content-left">
<!--经理视角-->
<div class="manage" v-if="user === 1">
<el-row>
<el-col :span="16">
<div class="task-wrap">
<div class="item">
<img class="left" src="@/assets/images/index/icon1.png"/>
<div class="right">
<p class="title">即将开标项目</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="up">+3<img src="@/assets/images/index/up.png"/></span></p>
</div>
<router-link to="/project/overview" tag="a">
<img class="icon-img" src="@/assets/images/index/icon1.png"/>
<p class="text">项目管理</p>
</router-link>
</div>
<div class="item">
<img class="left" src="@/assets/images/index/icon2.png"/>
<div class="right">
<p class="title">重点关注项目</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="up">+3<img src="@/assets/images/index/up.png"/></span></p>
</div>
<router-link to="/custom/overview" tag="a">
<img class="icon-img" src="@/assets/images/index/icon2.png"/>
<p class="text">客户管理</p>
</router-link>
</div>
<div class="item">
<img class="left" src="@/assets/images/index/icon3.png"/>
<div class="right">
<p class="title">重点关注客户</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="down">-3<img src="@/assets/images/index/down.png"/></span></p>
</div>
<router-link to="/macro/nationalEconomies" tag="a">
<img class="icon-img" src="@/assets/images/index/icon3.png"/>
<p class="text">宏观经济</p>
</router-link>
</div>
<div class="item">
<img class="left" src="@/assets/images/index/icon4.png"/>
<div class="right">
<p class="title">储备合作客户</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="up">+3<img src="@/assets/images/index/up.png"/></span></p>
</div>
<router-link to="/enterpriseData?type=2" tag="a">
<img class="icon-img" src="@/assets/images/index/icon4.png"/>
<p class="text">集团户</p>
</router-link>
</div>
<div class="item add">
<span class="yd"><i></i><i></i><i></i><i></i><i></i><i></i></span>
<div class="btn"><i class="el-icon-plus"></i>新建待办任务</div>
<div class="item">
<router-link to="/enterpriseData" tag="a">
<img class="icon-img" src="@/assets/images/index/icon5.png"/>
<p class="text">查城投平台</p>
</router-link>
</div>
<div class="item">
<router-link to="/radar" tag="a">
<img class="icon-img" src="@/assets/images/index/icon6.png"/>
<p class="text">商机雷达</p>
</router-link>
</div>
</div>
<!--经理视角-->
<div v-if="user === 1" class="content-wrap">
<el-col :span="12">
<div class="record">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">跟进记录</span>
</div>
<div class="flex-box query-ability">
<div class="select-popper">
<div class="area">{{area}}<i class="sjx"></i></div>
<el-select v-model="area" class="select-multiple" placeholder="请选择">
<el-option v-for="(item,index) in areaList" :key="index" :label="item.name" :value="item.name"></el-option>
</el-select>
</div>
<div class="select-popper">
<div class="month">{{date}}<i class="sjx"></i></div>
<el-select v-model="date" class="select-multiple" placeholder="请选择">
<el-option v-for="(item,index) in dateList" :key="index" :label="item" :value="item"></el-option>
</el-select>
</div>
</div>
</div>
<div class="list">
<div class="item" v-for="(item,index) in gjjlData" :key="index">
<h3>{{item.title}}</h3>
<p>
<span>跟进人:{{item.user}}</span>
<span>关联企业:{{item.name}}</span>
</p>
</div>
</div>
<p class="more">更多跟进记录 ></p>
</div>
</el-col>
<el-col :span="12">
<div class="ranking">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">业绩排名</span>
</div>
<div class="flex-box query-ability">
<div class="select-popper">
<div class="area">{{area}}<i class="sjx"></i></div>
<el-select v-model="area" class="select-multiple" placeholder="请选择">
<el-option v-for="(item,index) in areaList" :key="index" :label="item.name" :value="item.name"></el-option>
</el-select>
</div>
<div class="select-popper">
<div class="month">{{date}}<i class="sjx"></i></div>
<el-select v-model="date" class="select-multiple" placeholder="请选择">
<el-option v-for="(item,index) in dateList" :key="index" :label="item" :value="item"></el-option>
</el-select>
</div>
</div>
</div>
<div class="main">
<div class="amount">
<p>
<span>实际已完成(万元)</span>
<span>产值目标(万元)</span>
</p>
<p>
<span class="money">359,800.00</span>
<span class="money">359,800.00</span>
</p>
<el-progress class="progress1" :text-inside="true" :stroke-width="14" :percentage="40"></el-progress>
<el-progress class="progress2" :text-inside="true" :stroke-width="14" :percentage="70"></el-progress>
</div>
<div style="background: #ffffff;margin: 0 12px 12px 12px;">
<div id="pm-echarts" style="height: 400px;"></div>
</div>
</div>
</div>
</el-col>
</el-col>
<el-col :span="8">
<div class="user" @click="handleChange">
<h3>刘毅<span>总经理</span></h3>
<p>您好,祝您工作顺利每一天</p>
</div>
<div v-if="user === 1" class="analysis">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">经营分析</span>
</div>
<div class="flex-box query-ability">
<div class="tabs">
<!--<div class="label" v-for="(item,index) in typeList" :class="typeIndex === index ? 'color':''" @click="handleClick(index)">{{item.name}}</div>-->
</div>
<div class="select-popper">
<div class="area">{{area}}<i class="sjx"></i></div>
<el-select v-model="area" class="select-multiple" placeholder="请选择">
<el-option v-for="(item,index) in areaList" :key="index" :label="item.name" :value="item.name"></el-option>
</el-col>
</el-row>
<div class="tips">注:数据来源大司空建筑大数据平台,统计范围为全国公开的施工内土地交易项目,未公开的不含在内</div>
<div class="content content_wap1">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">集团中标统计</span>
</div>
</div>
<el-row>
<el-col :span="14">
<div id="zbtj-echarts" style="height: 300px;"></div>
</el-col>
<el-col :span="10">
<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="项目地区" style="width: 150px;">
<el-option v-for="(item,index) in addressList" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</div>
</div>
</el-form-item>
<el-form-item prop="type">
<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 projectType" :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>
</el-form>
</div>
<div>
<div id="fx-echarts" style="height: 280px;"></div>
<div class="box-right">
<el-table
:data="jtList"
border
max-height="250"
fit
highlight-current-row
>
<el-table-column prop="name" label="集团名称" width="120"/>
<el-table-column prop="count" label="中标数量(个)" align="right" sortable/>
<el-table-column prop="amount" label="中标金额(万元)" align="right" sortable/>
</el-table>
</div>
</el-col>
</el-row>
</div>
<div class="content content_wap2">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">大项目中标排行榜</span>
</div>
<!--员工视角-->
<div v-if="user === 2" class="content-db">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">待办</span>
</div>
<div class="flex-box query-ability"><span>9</span>全部待办 ></div>
</div>
<el-row>
<el-col :span="14">
<div id="zbph-echarts" style="height: 500px;"></div>
</el-col>
<el-col :span="10">
<div class="search">
<el-form ref="queryForm" :model="queryParams1" :inline="true" size="small">
<el-form-item prop="money">
<custom-money-select
:moneyList="moneyList"
v-model="queryParams1.money"
placeholder="中标金额"
@handle-search="changeSelect" />
</el-form-item>
<el-form-item prop="address">
<el-select v-model="queryParams1.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="queryParams1.type" multiple collapse-tags clearable placeholder="项目类型" :class="queryParams1.type.length > 1 ? 'selectTag' : ''" style="width: 170px;">
<el-option v-for="(item,index) in projectType" :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="queryParams1.time"
placeholder="中标日期"
@handle-search="changeSelect"/>
</el-form-item>
</el-form>
</div>
<div class="list">
<div class="item" v-for="(item,index) in gjjlData" :key="index" v-if='index < 3'>
<h3>{{item.title}}</h3>
<p>
<span>拜访时间:{{item.time}}</span>
<span>关联企业:{{item.name}}</span>
</p>
<div class="btn">写跟进<i class="el-icon-edit"></i></div>
</div>
<div class="box-right">
<el-table
:data="jtList"
border
max-height="400"
fit
highlight-current-row
>
<el-table-column prop="name" label="企业名称" width="120"/>
<el-table-column prop="count" label="中标数量(个)" align="right" sortable/>
<el-table-column prop="amount" label="中标金额(万元)" align="right" sortable/>
</el-table>
</div>
</div>
<div v-if="user === 2" class="trends">
<el-tabs v-model="activeName" @tab-click="handleClickTab">
<el-tab-pane label="甲方舆情" name="first">
<div class="main-box">
<el-timeline>
<el-timeline-item
v-for="(item, index) in trendsList"
:key="index"
icon="el-icon-time">
<div class="time">{{item.time}}<span class="company">{{item.name}}</span></div>
<div class="cont">{{item.main}}</div>
</el-timeline-item>
</el-timeline>
</div>
<!--<div class="check">全部甲方舆情 ></div>-->
</el-tab-pane>
<el-tab-pane label="监控动态" name="second">
<div class="main-box">
<el-timeline>
<el-timeline-item
v-for="(item, index) in trendsList"
:key="index"
icon="el-icon-time">
<div class="time">{{item.time}}<span class="company">{{item.name}}</span></div>
<div class="cont">{{item.main}}</div>
</el-timeline-item>
</el-timeline>
</el-col>
</el-row>
</div>
<div class="content_wap3">
<el-tabs v-model="activeName" @tab-click="handleClickTab">
<el-tab-pane label="大项目最新中标" name="first">
<skeleton v-if="zxzbIsSkeleton" style="padding: 16px"></skeleton>
<div class="list" v-if="!zxzbIsSkeleton">
<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 class="check">全部监控动态 ></div>-->
</el-tab-pane>
</el-tabs>
</div>
</div>
</el-col>
<el-col :span="6">
<div class="content-right">
<div class="user" @click="handleChange">
<h3 v-if="user === 1">刘毅<span>总经理</span></h3>
<h3 v-if="user === 2">李婷婷<span>营销员</span></h3>
<p>您好,祝您工作顺利每一天</p>
</div>
<div class="search">
<span class="common-title">快捷搜索</span>
<el-input placeholder="找客户/找项目/找甲方">
<i slot="prefix" class="el-icon-search"></i>
</el-input>
<span class="common-title">储备项目类</span>
<div class="list" style="margin-top: 8px;">
<div class="item">
<img src="@/assets/images/index/cb_icon1.png"/>
<p>EPC项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon2.png"/>
<p>投资项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon3.png"/>
<p>房建项目</p>
</div>
</div>
<div class="list">
<div class="item">
<img src="@/assets/images/index/cb_icon4.png"/>
<p>电力项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon5.png"/>
<p>市政项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon6.png"/>
<p>水利项目</p>
</div>
<div class="pagination-box" v-if="totalCount>queryParams2.pageSize && !zxzbIsSkeleton">
<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>
</div>
<div class="zbgg" v-if="user === 1">
<span class="common-title">中标公告</span>
<div class="list">
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
</el-tab-pane>
<el-tab-pane label="大项目最新招标" name="second">
<skeleton v-if="zhaobiaoIsSkeleton" style="padding: 16px"></skeleton>
<div v-if="!zhaobiaoIsSkeleton" 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>queryParams2.pageSize && !zhaobiaoIsSkeleton">
<el-pagination background :current-page="queryParams2.pageNum" :page-size="queryParams2.pageSize" :total="zbTableTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</el-tab-pane>
</el-tabs>
<div class="search">
<el-form ref="queryForm" :model="queryParams2" :inline="true" size="small">
<el-form-item prop="amount">
<custom-money-select
:moneyList="moneyList"
v-model="amount"
placeholder="中标金额"
@handle-search="changeSelect3" />
</el-form-item>
<el-form-item prop="provinceId">
<el-select v-model="queryParams2.provinceId" @change="changeSelect3" placeholder="项目地区" style="width: 150px;">
<el-option v-for="(item,index) in addressList" :key="index" :label="item.label" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="projects">
<el-select v-model="queryParams2.projects" @change="changeSelect3" multiple collapse-tags clearable placeholder="项目类型" :class="queryParams2.projects.length > 1 ? 'selectTag' : ''" style="width: 170px;">
<el-option v-for="(item,index) in projectType" :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="queryParams2.time"
placeholder="中标日期"
@handle-search="changeSelect3"/>
</el-form-item>
</el-form>
</div>
</div>
</div>
<!--员工视角-->
<div class="staff" v-if="user === 2">
<el-row :gutter="20">
<el-col :span="18">
<div class="content-left">
<div class="task-wrap">
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
<img class="left" src="@/assets/images/index/icon1.png"/>
<div class="right">
<p class="title">即将开标项目</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="up">+3<img src="@/assets/images/index/up.png"/></span></p>
</div>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
<img class="left" src="@/assets/images/index/icon2.png"/>
<div class="right">
<p class="title">重点关注项目</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="up">+3<img src="@/assets/images/index/up.png"/></span></p>
</div>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
<img class="left" src="@/assets/images/index/icon3.png"/>
<div class="right">
<p class="title">重点关注客户</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="down">-3<img src="@/assets/images/index/down.png"/></span></p>
</div>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
<img class="left" src="@/assets/images/index/icon4.png"/>
<div class="right">
<p class="title">储备合作客户</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="up">+3<img src="@/assets/images/index/up.png"/></span></p>
</div>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
<div class="item add">
<span class="yd"><i></i><i></i><i></i><i></i><i></i><i></i></span>
<div class="btn"><i class="el-icon-plus"></i>新建待办任务</div>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
</div>
<div class="content-db">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">待办</span>
</div>
<div class="flex-box query-ability"><span>9</span>全部待办 ></div>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
<div class="list">
<div class="item" v-for="(item,index) in gjjlData" :key="index" v-if='index < 3'>
<h3>{{item.title}}</h3>
<p>
<span>拜访时间:{{item.time}}</span>
<span>关联企业:{{item.name}}</span>
</p>
<div class="btn">写跟进<i class="el-icon-edit"></i></div>
</div>
</div>
</div>
<div class="trends">
<el-tabs v-model="activeName" @tab-click="handleClickTab1">
<el-tab-pane label="甲方舆情" name="first">
<div class="main-box">
<el-timeline>
<el-timeline-item
v-for="(item, index) in trendsList"
:key="index"
icon="el-icon-time">
<div class="time">{{item.time}}<span class="company">{{item.name}}</span></div>
<div class="cont">{{item.main}}</div>
</el-timeline-item>
</el-timeline>
</div>
<!--<div class="check">全部甲方舆情 ></div>-->
</el-tab-pane>
<el-tab-pane label="监控动态" name="second">
<div class="main-box">
<el-timeline>
<el-timeline-item
v-for="(item, index) in trendsList"
:key="index"
icon="el-icon-time">
<div class="time">{{item.time}}<span class="company">{{item.name}}</span></div>
<div class="cont">{{item.main}}</div>
</el-timeline-item>
</el-timeline>
</div>
<!--<div class="check">全部监控动态 ></div>-->
</el-tab-pane>
</el-tabs>
</div>
</div>
<div v-if="user === 2" class="zbhxr">
<span class="common-title">竞争对手中标候选人公告</span>
<div class="list">
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</el-col>
<el-col :span="6">
<div class="content-right">
<div class="user" @click="handleChange">
<h3>李婷婷<span>营销员</span></h3>
<p>您好,祝您工作顺利每一天</p>
</div>
<div class="search">
<span class="common-title">快捷搜索</span>
<el-input placeholder="找客户/找项目/找甲方">
<i slot="prefix" class="el-icon-search"></i>
</el-input>
<span class="common-title">储备项目类</span>
<div class="list" style="margin-top: 8px;">
<div class="item">
<img src="@/assets/images/index/cb_icon1.png"/>
<p>EPC项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon2.png"/>
<p>投资项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon3.png"/>
<p>房建项目</p>
</div>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
<div class="list">
<div class="item">
<img src="@/assets/images/index/cb_icon4.png"/>
<p>电力项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon5.png"/>
<p>市政项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon6.png"/>
<p>水利项目</p>
</div>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="zbhxr">
<span class="common-title">竞争对手中标候选人公告</span>
<div class="list">
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
</div>
</div>
</div>
</div>
</el-col>
</el-row>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
import * as echarts from 'echarts';
import dataRegion from '@/assets/json/dataRegion'
import "@/assets/styles/public.css";
import CustomTimeSelect from './component/CustomTimeSelect'
import CustomMoneySelect from './component/CustomMoneySelect'
import skeleton from './component/skeleton'
import { bidRank,bigWinningBidsPage,bigBidPage } from '@/api/index'
import api from '@/api/radar/radar.js';
export default {
name: "Index",
components: {
CustomTimeSelect,CustomMoneySelect,skeleton
},
data() {
return {
// 版本号
version: "3.8.5",
typeList:[
{name:'待成交项目数'},
{name:'待成交总金额'},
{name:'成交项目金额'},
{name:'成交项目总数'},
{name:'储备项目总数'},
{name:'储备项目总金额'},
],
typeIndex:0,
jyfxData:['1月','2月','3月','4月','5月','6月'],
jyfxData1:[
{
dcjxm:'103',
dcjzje:'123',
cjxmje:'153',
cjxmzs:'113',
cbxmzs:'93',
cbxmzje:'193',
},
{
dcjxm:'256',
dcjzje:'223',
cjxmje:'113',
cjxmzs:'163',
cbxmzs:'193',
cbxmzje:'123',
},
{
dcjxm:'103',
dcjzje:'123',
cjxmje:'153',
cjxmzs:'113',
cbxmzs:'93',
cbxmzje:'193',
},
{
dcjxm:'256',
dcjzje:'223',
cjxmje:'113',
cjxmzs:'163',
cbxmzs:'193',
cbxmzje:'123',
},
{
dcjxm:'103',
dcjzje:'123',
cjxmje:'153',
cjxmzs:'113',
cbxmzs:'93',
cbxmzje:'193',
},
{
dcjxm:'256',
dcjzje:'223',
cjxmje:'113',
cjxmzs:'163',
cbxmzs:'193',
cbxmzje:'123',
},
],
gjjlData:[
{
title:'今天拜访了重庆交通局杨科长,洽谈比较愉快,预计下月有项目招标,希望能有机会合作。',
......@@ -481,30 +513,55 @@ export default {
],
pmData:[
{
name:'朱博',
name:'中治建工集团有限公司',
value:334,
value1:164,
},
{
name:'陈伟',
name:'中机中联工程有限公司',
value:230,
value1:130,
},
{
name:'张天翼',
name:'中铁五局集团第六公司',
value:156,
value1:150,
},
{
name:'李晨旭',
name:'中铁长江交通设计公司',
value:112,
value1:130,
},
{
name:'徐阳',
name:'重庆设计院有限公公司',
value:110,
value1:90,
},
{
name:'中铁五局集团第六公司',
value:100,
value1:91,
},
{
name:'中铁五局集团第六公司',
value:99,
value1:102,
},
{
name:'重庆设计院有限公公司',
value:80,
value1:90,
},
{
name:'中铁五局集团第六公司',
value:100,
value1:91,
},
{
name:'中铁五局集团第六公司',
value:99,
value1:102,
},
],
rankIconsSize:'24',
rankIcons:[// 排序图标
......@@ -513,6 +570,11 @@ export default {
require('@/assets/images/index/3.png'),
require('@/assets/images/index/4.png'),
require('@/assets/images/index/5.png'),
require('@/assets/images/index/6.png'),
require('@/assets/images/index/7.png'),
require('@/assets/images/index/8.png'),
require('@/assets/images/index/9.png'),
require('@/assets/images/index/10.png'),
],
user:1,
activeName:'first',
......@@ -558,296 +620,302 @@ export default {
main:'发布招标公告 重庆轨道交通环线鹅公岩轨道专用桥增设防船撞设施项目,项目地区是重庆市-江北区,项目类型为工程建设。'
},
],
area:'西南地区',
areaList:[
jtList:[
{
name:'中交集团',
count:'24534',
amount:'23011'
},
{
name:'西南地区'
name:'中建集团',
count:'11534',
amount:'22331'
},
{
name:'华中地区'
name:'中冶集团',
count:'15534',
amount:'20231'
},
{
name:'华南地区'
name:'中国铁路',
count:'6534',
amount:'11231'
},
{
name:'华东地区'
name:'中国水利',
count:'9534',
amount:'4231'
},
{
name:'华北地区'
name:'中建集团',
count:'14534',
amount:'23231'
},
{
name:'东北地区'
name:'中建集团',
count:'24534',
amount:'15231'
},
{
name:'西北地区'
name:'中国水利',
count:'2334',
amount:'5231'
},
{
name:'中建集团',
count:'2534',
amount:'8231'
},
{
name:'中交集团',
count:'2334',
amount:'9231'
},
],
date:'不限',
dateList:['不限','今日','昨日','近三天','近七天']
};
addressList:[],
projectType:[], //项目类型
queryParams:{
address:'',
type:[],
time:'',
money:'',
},
queryParams1:{
address:'',
type:[],
money:'',
time:'',
sort:1
},
queryParams2:{
provinceId:'',
projects:[],
amount:'',
time:'',
pageNum:1,
pageSize:10
},
amount:'',
timeList: ['近三天', '近七天', '近半月', '自定义'],
moneyList: ['2亿以上', '5亿以上', '10亿以上', '自定义'],
projectList:[],
zbList:[],
totalCount:0,
zbTableTotal:0,
zxzbIsSkeleton:true,
zhaobiaoIsSkeleton:true,
};
},
created() {
this.searchDic()
this.dataRegion()
this.getWinningBidsRanking()
this.getBigWinningBidsPage()
if(this.user === 1){
this.$nextTick(()=>{
this.initChart()
this.initChart(this.jtList)
this.initChart1()
})
}
},
methods: {
handleClick(index){
this.typeIndex=index;
//项目类型
searchDic(){
api.searchDic().then(res=>{
this.projectType = res.projectType;
}).catch(error=>{});
},
initChart() {
let myChart = echarts.init(document.getElementById("fx-echarts"))
let option ={
legend: {
x:'right',
padding:[3,120,0,0],
itemHeight:8,
itemWidth:16,
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#FFFFFF'
}
getWinningBidsRanking(){
let params=this.queryParams;
if(params.time){
params.startDate=params.time[0]
params.endDate=params.time[1]
}
delete params.time
delete params.amount
console.log(params)
bidRank(params).then(res=>{
console.log(res.rows)
// this.zxzbIsSkeleton=false;
// if(res.code == 200){
// this.projectList=res.rows;
// this.totalCount=res.total;
// }
})
},
getBigWinningBidsPage(){
let params=this.queryParams2;
if(params.amount){
if(params.amount.length > 1){
params.amountEnd=params.amount[1]
}else {
params.amountStart=params.amount[0]
}
}
if(params.time){
params.timeStart=params.time[0]
params.timeEnd=params.time[1]
}
delete params.time
delete params.amount
this.zxzbIsSkeleton=true
bigWinningBidsPage(params).then(res=>{
this.zxzbIsSkeleton=false;
if(res.code == 200){
this.projectList=res.rows;
this.totalCount=res.total;
}
})
},
getBigBidPage(){
let params=this.queryParams2;
if(params.amount){
if(params.amount.length > 1){
params.amountEnd=params.amount[1]
}else {
params.amountStart=params.amount[0]
}
}
if(params.time){
params.timeStart=params.time[0]
params.timeEnd=params.time[1]
}
delete params.time
delete params.amount
this.zhaobiaoIsSkeleton=true
bigBidPage(params).then(res=>{
this.zhaobiaoIsSkeleton=false
if(res.code == 200){
this.zbList=res.rows;
this.zbTableTotal=res.total;
}
})
},
//地区
async dataRegion() {
var str = [];
for (let x = 0; x < 3; x++) {
for (let i = 0; i < dataRegion.length; i++) {
if (dataRegion[i].regionLevel == x + 1 && x + 1 == 1) {
str.push({
'id': dataRegion[i].id,
"label": dataRegion[i].regionName,
"short": dataRegion[i].short,
"value": dataRegion[i].parentId,
"children": []
});
}
},
xAxis: {
type: 'category',
boundaryGap: false,
data: this.jyfxData,
},
yAxis: {
type: 'value',
},
grid: {
top:40,
left:30,
right:10,
bottom:20,
},
// dcjxm:'256',
// dcjzje:'223',
// cjxmje:'113',
// cjxmzs:'163',
// cbxmzs:'193',
// cbxmzje:'123',
series: [
{
data: this.jyfxData1.map(item => item.dcjxm),
name:'待成交项目数',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#81D4BC",
},
itemStyle:{
color: "#81D4BC",
},
//设置面积区域为渐变效果
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(189, 249, 232, 1)'
}, {
offset: 1, color: 'rgba(189, 249, 232, 0)'
} ],
global: false
}
},
},
{
data: this.jyfxData1.map(item => item.dcjzje),
name:'待成交总金额',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#9EE474",
},
itemStyle:{
color: "#9EE474",
},
//设置面积区域为渐变效果
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(208, 250, 183, 1)'
}, {
offset: 1, color: 'rgba(208, 250, 183, 0)'
} ],
global: false
}
},
}
}
this.addressList = str;
},
initChart(data) {
this.$nextTick(()=>{
let myChart = echarts.init(document.getElementById("zbtj-echarts"))
let option ={
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross'
}
},
{
data: this.jyfxData1.map(item => item.cjxmje),
name:'成交项目金额',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
xAxis: {
type: 'category',
axisLabel: { //坐标轴刻度标签的相关设置
margin: 15, //刻度标签与轴线之间的距离
color:"#666666"
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#E1B3FF",
},
itemStyle:{
color: "#E1B3FF",
},
//设置面积区域为渐变效果
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(233, 200, 255, 1)'
}, {
offset: 1, color: 'rgba(233, 200, 255, 0)'
} ],
global: false
}
axisTick: false, //坐标轴刻度
axisPointer: {
type: 'shadow'
},
data: data.map(item => item.name),
},
{
data: this.jyfxData1.map(item => item.cjxmzs),
name:'成交项目总数',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#ADC0FF",
},
itemStyle:{
color: "#ADC0FF",
},
//设置面积区域为渐变效果
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(173, 192, 255, 1)'
}, {
offset: 1, color: 'rgba(173, 192, 255, 0)'
} ],
global: false
yAxis: [
{
type: 'value',
axisLabel: { //坐标轴刻度标签的相关设置
color:"#666666"
},
name: '单位:个',
nameLocation: 'start',
nameTextStyle: {
padding: [0, 0, 0, -60], // 四个数字分别为上右下左与原位置距离
color: '#666666',
}
},
},
{
data: this.jyfxData1.map(item => item.cbxmzs),
name:'储备项目总数',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#67B3FD",
},
itemStyle:{
color: "#67B3FD",
},
//设置面积区域为渐变效果
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(192, 224, 255, 1)'
}, {
offset: 1, color: 'rgba(192, 224, 255, 0)'
} ],
global: false
{
type: 'value',
axisLabel: { //坐标轴刻度标签的相关设置
color:"#666666"
},
name: '单位:万元',
nameLocation: 'start',
nameTextStyle: {
padding: [0, 0, 0, 72], // 四个数字分别为上右下左与原位置距离
color: '#666666',
},
splitLine: {
show: true,
lineStyle: {
type: 'dashed',
color: ['#FFFFFF']
}
}
},
}
],
grid: {
top:30,
left:80,
right:90,
bottom:30,
},
{
data: this.jyfxData1.map(item => item.cbxmzje),
name:'储备项目总金额',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#BEECFF",
},
itemStyle:{
color: "#BEECFF",
},
//设置面积区域为渐变效果
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(165, 229, 255, 1)'
}, {
offset: 1, color: 'rgba(165, 229, 255, 0)'
} ],
global: false
}
series: [
{
name:'中标金额(万元)',
smooth: false, //平滑
type:"line",
symbolSize: 6,
yAxisIndex: 1,
tooltip: {
valueFormatter: function (value) {
return value + '万元'
}
},
itemStyle: {
color: '#14C9C9'
},
data:data.map(item => item.amount),
},
},
]
}
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
{
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'
}])
}
},
data:data.map(item => item.count),
}
]
}
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
})
},
initChart1(){
var rankPic = [
......@@ -856,15 +924,20 @@ export default {
require('@/assets/images/index/3.png'),
require('@/assets/images/index/4.png'),
require('@/assets/images/index/5.png'),
require('@/assets/images/index/6.png'),
require('@/assets/images/index/7.png'),
require('@/assets/images/index/8.png'),
require('@/assets/images/index/9.png'),
require('@/assets/images/index/10.png'),
]
let myChart = echarts.init(document.getElementById("pm-echarts"))
let myChart = echarts.init(document.getElementById("zbph-echarts"))
let option ={
legend: {
show: true,
x:'center',
y:'bottom',
padding:[0,0,10,0],
x:'right',
y:'top',
padding:[10,0,10,0],
itemWidth: 24,
itemHeight: 10,
textStyle:{
......@@ -888,7 +961,7 @@ export default {
}
},
axisLabel: {
margin: 80,
margin: 200,
textStyle: {
align: 'left',
},
......@@ -900,6 +973,7 @@ export default {
1: {
height: 24,
width: 24,
// marginBottom:-15,
align: 'center',
backgroundColor: {
image: rankPic[0]
......@@ -937,6 +1011,46 @@ export default {
image: rankPic[4]
}
},
6: {
height: 24,
width: 24,
align: 'center',
backgroundColor: {
image: rankPic[5]
}
},
7: {
height: 24,
width: 24,
align: 'center',
backgroundColor: {
image: rankPic[6]
}
},
8: {
height: 24,
width: 24,
align: 'center',
backgroundColor: {
image: rankPic[7]
}
},
9: {
height: 24,
width: 24,
align: 'center',
backgroundColor: {
image: rankPic[8]
}
},
10: {
height: 24,
width: 24,
align: 'center',
backgroundColor: {
image: rankPic[9]
}
},
}
},
},
......@@ -945,7 +1059,7 @@ export default {
},
grid: {
left: '20%',
top: 20,
top: 40,
right: 20,
bottom: 60,
},
......@@ -964,10 +1078,6 @@ export default {
data: this.pmData.map(item => item.value),
barGap: 0,
type: 'bar',
// stack: 'total',
// emphasis: {
// focus: 'series'
// },
itemStyle:{
color: '#14C9C9',
barBorderRadius:[0, 20, 20, 0]
......@@ -975,15 +1085,10 @@ export default {
barWidth: 8,
},
{
// realtimeSort: true,
name:'目标产值',
data: this.pmData.map(item => item.value1),
barGap: 0,
type: 'bar',
// stack: 'total',
// emphasis: {
// focus: 'series'
// },
itemStyle:{
color: '#92C9FF',
barBorderRadius:[0, 20, 20, 0]
......@@ -998,17 +1103,51 @@ export default {
});
},
handleClickTab(){
this.queryParams2.pageNum=1;
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){
this.$nextTick(()=>{
this.initChart()
this.initChart(this.jtList)
this.initChart1()
})
}
}
},
changeSelect(){
console.log(this.queryParams)
this.getWinningBidsRanking()
// this.$emit('handle-search')
},
changeSelect3(){
this.queryParams2.pageNum = 1
if(this.activeName === 'first'){
this.getBigWinningBidsPage()
}
if(this.activeName === 'second'){
this.getBigBidPage()
}
},
handleCurrentChange(){
},
handleSizeChange(){
this.queryParams2.pageNum = 1
this.queryParams2.pageSize = val
if(this.activeName === 'first'){
this.getBigWinningBidsPage()
}
if(this.activeName === 'second'){
this.getBigBidPage()
}
},
}
};
</script>
......@@ -1016,6 +1155,7 @@ export default {
<style scoped lang="scss">
.app-container{
padding: 0;
margin: 16px 24px;
}
p{
padding: 0;
......@@ -1033,6 +1173,315 @@ export default {
padding-right: 0 !important;
}
}
.manage{
.task-wrap{
height: 99px;
background: #FFFFFF;
border-radius: 4px;
display: flex;
justify-content: space-between;
.item{
width: 20%;
text-align: center;
margin: 0 auto;
cursor: pointer;
.icon-img{
width: 48px;
height: 48px;
margin-top: 16px;
}
.text{
color: #3D3D3D;
font-size: 12px;
margin-top: 5px;
}
}
}
.user{
height: 99px;
border-radius: 4px;
background-image: url("../assets/images/index/user_bg.png");
background-size: cover;
padding-left: 24px;
h3{
font-weight: 700;
color: #1C1C28;
font-size: 18px;
padding-top: 16px;
padding-bottom: 8px;
margin: 0px;
span{
height: 20px;
background: #FFF2E2;
display: inline-block;
border-radius: 11px;
border: 1px solid #FFB010;
color: #FFB010;
font-size: 12px;
line-height: 20px;
padding: 0 10px;
margin-left: 12px;
font-weight: 400;
}
}
p{
color: #666666;
font-size: 16px;
}
}
.tips{
color: #999999;
font-size: 12px;
margin: 12px 0;
}
.content{
background: #ffffff;
padding: 22px 16px;
}
.content_wap1{
height: 360px;
margin-bottom: 12px;
}
.content_wap2{
height: 540px;
}
.search{
float:right;
::v-deep .el-form{
.el-form-item--small.el-form-item{
margin-bottom: 16px;
}
.el-form-item{
height: 32px;
}
.el-form-item__content{
line-height: 32px;
}
.el-input{
line-height: 32px;
.el-input__inner{
height: 32px;
line-height: 32px;
border-radius: 4px
}
}
}
}
.box-right{
width: 90%;
float: right;
::v-deep .el-table{
.sort-caret.ascending{
border-bottom-color: rgba(0,129,255,0.5);
}
.ascending .sort-caret.ascending{
border-bottom-color: #0081FF;
}
.sort-caret.descending{
border-top-color: rgba(0,129,255,0.5);
}
.descending .sort-caret.descending{
border-top-color: #0081FF;
}
.el-table__header-wrapper{
background: #F0F3FA;
th{
background: #F0F3FA;
/*text-align: left;*/
}
}
.el-table__footer-wrapper{
background: #F0F3FA;
}
th {
font-size: 13px !important;
font-weight: 400 !important;
}
.cell {
padding-right: 12px !important;
padding-left: 12px !important;
line-height: 18px;
}
.el-table__fixed-header-wrapper{
th{
background: #F0F3FA;
}
}
td.el-table__cell{
border-bottom: 0;
}
tr{
&.current-row>td{
background-color: initial;
}
&:nth-child(2n) {
background: #F8FBFF;
}
}
.el-table__cell{
height: 40px;
padding: 0;
line-height: 40px;
}
.el-table__body tr:hover > td.el-table__cell{
background: #DCEBFF;
}
::-webkit-scrollbar-track-piece {
//滚动条凹槽的颜色,还可以设置边框属性
background-color: #F3F4F5;
height: 16px;
padding: 0 4px;
}
//滚动条的宽度
::-webkit-scrollbar {
width: 8px;
height: 8px;
background-color: #F3F4F5;
border-radius: 6px;
}
//滚动条的滑块
::-webkit-scrollbar-thumb {
border-radius: 8px;
height: 8px;
margin: 0 4px;
background: rgba(98,110,126,0.2);
border: 4px solid rgba(98,110,126,0.2);;
&:hover{
background: #566380;
}
}
.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;
}
}
}
}
}
.content_wap3{
margin-top: 12px;
background: #ffffff;
position:relative;
::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;
}
}
.search{
position: absolute;
right: 8px;
top: 10px;
::v-deep .el-form {
.el-form-item--small.el-form-item {
margin-bottom: 0;
}
}
}
.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;
}
}
}
}
}
.content-left{
.task-wrap{
height: 88px;
......
<template>
<div class="app-container home">
<!--经理视角-->
<div class="manage" v-if="user === 1">
<el-row>
<el-col :span="16">
<el-row :gutter="20">
<el-col :span="18">
<div class="content-left">
<div class="task-wrap">
<div class="item">
<img class="icon-img" src="@/assets/images/index/icon1.png"/>
<p class="text">项目管理</p>
</div>
<div class="item">
<img class="icon-img" src="@/assets/images/index/icon2.png"/>
<p class="text">客户管理</p>
<img class="left" src="@/assets/images/index/icon1.png"/>
<div class="right">
<p class="title">即将开标项目</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="up">+3<img src="@/assets/images/index/up.png"/></span></p>
</div>
</div>
<div class="item">
<img class="icon-img" src="@/assets/images/index/icon3.png"/>
<p class="text">宏观经济</p>
<img class="left" src="@/assets/images/index/icon2.png"/>
<div class="right">
<p class="title">重点关注项目</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="up">+3<img src="@/assets/images/index/up.png"/></span></p>
</div>
</div>
<div class="item">
<img class="icon-img" src="@/assets/images/index/icon4.png"/>
<p class="text">集团户</p>
<img class="left" src="@/assets/images/index/icon3.png"/>
<div class="right">
<p class="title">重点关注客户</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="down">-3<img src="@/assets/images/index/down.png"/></span></p>
</div>
</div>
<div class="item">
<img class="icon-img" src="@/assets/images/index/icon5.png"/>
<p class="text">查城投平台</p>
<img class="left" src="@/assets/images/index/icon4.png"/>
<div class="right">
<p class="title">储备合作客户</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="up">+3<img src="@/assets/images/index/up.png"/></span></p>
</div>
</div>
<div class="item">
<img class="icon-img" src="@/assets/images/index/icon6.png"/>
<p class="text">商机雷达</p>
<div class="item add">
<span class="yd"><i></i><i></i><i></i><i></i><i></i><i></i></span>
<div class="btn"><i class="el-icon-plus"></i>新建待办任务</div>
</div>
</div>
</el-col>
<el-col :span="8">
<div class="user" @click="handleChange">
<h3>刘毅<span>总经理</span></h3>
<p>您好,祝您工作顺利每一天</p>
</div>
</el-col>
</el-row>
<div class="tips">注:数据来源大司空建筑大数据平台,统计范围为全国公开的施工内土地交易项目,未公开的不含在内</div>
<div class="content content_wap1">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">集团中标统计</span>
<!--经理视角-->
<div v-if="user === 1" class="content-wrap">
<el-col :span="12">
<div class="record">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">跟进记录</span>
</div>
<div class="flex-box query-ability">
<div class="select-popper">
<div class="area">{{area}}<i class="sjx"></i></div>
<el-select v-model="area" class="select-multiple" placeholder="请选择">
<el-option v-for="(item,index) in areaList" :key="index" :label="item.name" :value="item.name"></el-option>
</el-select>
</div>
<div class="select-popper">
<div class="month">{{date}}<i class="sjx"></i></div>
<el-select v-model="date" class="select-multiple" placeholder="请选择">
<el-option v-for="(item,index) in dateList" :key="index" :label="item" :value="item"></el-option>
</el-select>
</div>
</div>
</div>
<div class="list">
<div class="item" v-for="(item,index) in gjjlData" :key="index">
<h3>{{item.title}}</h3>
<p>
<span>跟进人:{{item.user}}</span>
<span>关联企业:{{item.name}}</span>
</p>
</div>
</div>
<p class="more">更多跟进记录 ></p>
</div>
</el-col>
<el-col :span="12">
<div class="ranking">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">业绩排名</span>
</div>
<div class="flex-box query-ability">
<div class="select-popper">
<div class="area">{{area}}<i class="sjx"></i></div>
<el-select v-model="area" class="select-multiple" placeholder="请选择">
<el-option v-for="(item,index) in areaList" :key="index" :label="item.name" :value="item.name"></el-option>
</el-select>
</div>
<div class="select-popper">
<div class="month">{{date}}<i class="sjx"></i></div>
<el-select v-model="date" class="select-multiple" placeholder="请选择">
<el-option v-for="(item,index) in dateList" :key="index" :label="item" :value="item"></el-option>
</el-select>
</div>
</div>
</div>
<div class="main">
<div class="amount">
<p>
<span>实际已完成(万元)</span>
<span>产值目标(万元)</span>
</p>
<p>
<span class="money">359,800.00</span>
<span class="money">359,800.00</span>
</p>
<el-progress class="progress1" :text-inside="true" :stroke-width="14" :percentage="40"></el-progress>
<el-progress class="progress2" :text-inside="true" :stroke-width="14" :percentage="70"></el-progress>
</div>
<div style="background: #ffffff;margin: 0 12px 12px 12px;">
<div id="pm-echarts" style="height: 400px;"></div>
</div>
</div>
</div>
</el-col>
</div>
</div>
<el-row>
<el-col :span="14">
<div id="zbtj-echarts" style="height: 300px;"></div>
</el-col>
<el-col :span="10">
<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="项目地区" 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" 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>
<div v-if="user === 1" class="analysis">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">经营分析</span>
</div>
<div class="flex-box query-ability">
<div class="tabs">
<!--<div class="label" v-for="(item,index) in typeList" :class="typeIndex === index ? 'color':''" @click="handleClick(index)">{{item.name}}</div>-->
</div>
<div class="select-popper">
<div class="area">{{area}}<i class="sjx"></i></div>
<el-select v-model="area" class="select-multiple" placeholder="请选择">
<el-option v-for="(item,index) in areaList" :key="index" :label="item.name" :value="item.name"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="time">
<custom-time-select
:timeList="timeList"
placeholder="中标日期"
@handle-search="changeSelect"/>
</el-form-item>
</el-form>
</div>
</div>
</div>
<div class="box-right">
<el-table
:data="jtList"
border
max-height="250"
fit
highlight-current-row
>
<el-table-column prop="name" label="集团名称" width="120"/>
<el-table-column prop="count" label="中标数量(个)" align="right" sortable/>
<el-table-column prop="amount" label="中标金额(万元)" align="right" sortable/>
</el-table>
<div>
<div id="fx-echarts" style="height: 280px;"></div>
</div>
</el-col>
</el-row>
</div>
<div class="content content_wap2">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">大项目中标排行榜</span>
</div>
</div>
<el-row>
<el-col :span="14">
<div id="zbph-echarts" style="height: 500px;"></div>
</el-col>
<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="项目地区" 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" 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>
</el-form>
</div>
<div class="box-right">
<el-table
:data="jtList"
border
max-height="400"
fit
highlight-current-row
>
<el-table-column prop="name" label="企业名称" width="120"/>
<el-table-column prop="count" label="中标数量(个)" align="right" sortable/>
<el-table-column prop="amount" label="中标金额(万元)" align="right" sortable/>
</el-table>
</div>
</el-col>
</el-row>
</div>
<div class="content_wap3">
<el-tabs v-model="activeName" @tab-click="handleClickTab">
<el-tab-pane label="大项目最新中标" name="first">
<skeleton v-if="zxzbIsSkeleton" style="padding: 16px"></skeleton>
<div class="list" v-if="!zxzbIsSkeleton">
<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 v-if="user === 2" class="content-db">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">待办</span>
</div>
<div class="flex-box query-ability"><span>9</span>全部待办 ></div>
</div>
<div class="pagination-box" v-if="totalCount>queryParams2.pageSize && !zxzbIsSkeleton">
<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 class="list">
<div class="item" v-for="(item,index) in gjjlData" :key="index" v-if='index < 3'>
<h3>{{item.title}}</h3>
<p>
<span>拜访时间:{{item.time}}</span>
<span>关联企业:{{item.name}}</span>
</p>
<div class="btn">写跟进<i class="el-icon-edit"></i></div>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="大项目最新招标" name="second">
<skeleton v-if="zhaobiaoIsSkeleton" style="padding: 16px"></skeleton>
<div v-if="!zhaobiaoIsSkeleton" 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 v-if="user === 2" class="trends">
<el-tabs v-model="activeName" @tab-click="handleClickTab">
<el-tab-pane label="甲方舆情" name="first">
<div class="main-box">
<el-timeline>
<el-timeline-item
v-for="(item, index) in trendsList"
:key="index"
icon="el-icon-time">
<div class="time">{{item.time}}<span class="company">{{item.name}}</span></div>
<div class="cont">{{item.main}}</div>
</el-timeline-item>
</el-timeline>
</div>
<!--<div class="check">全部甲方舆情 ></div>-->
</el-tab-pane>
<el-tab-pane label="监控动态" name="second">
<div class="main-box">
<el-timeline>
<el-timeline-item
v-for="(item, index) in trendsList"
:key="index"
icon="el-icon-time">
<div class="time">{{item.time}}<span class="company">{{item.name}}</span></div>
<div class="cont">{{item.main}}</div>
</el-timeline-item>
</el-timeline>
</div>
<!--<div class="check">全部监控动态 ></div>-->
</el-tab-pane>
</el-tabs>
</div>
</div>
</el-col>
<el-col :span="6">
<div class="content-right">
<div class="user" @click="handleChange">
<h3 v-if="user === 1">刘毅<span>总经理</span></h3>
<h3 v-if="user === 2">李婷婷<span>营销员</span></h3>
<p>您好,祝您工作顺利每一天</p>
</div>
<div class="search">
<span class="common-title">快捷搜索</span>
<el-input placeholder="找客户/找项目/找甲方">
<i slot="prefix" class="el-icon-search"></i>
</el-input>
<span class="common-title">储备项目类</span>
<div class="list" style="margin-top: 8px;">
<div class="item">
<img src="@/assets/images/index/cb_icon1.png"/>
<p>EPC项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon2.png"/>
<p>投资项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon3.png"/>
<p>房建项目</p>
</div>
</div>
<div class="pagination-box" v-if="zbTableTotal>queryParams2.pageSize && !zhaobiaoIsSkeleton">
<el-pagination background :current-page="queryParams2.pageNum" :page-size="queryParams2.pageSize" :total="zbTableTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
<div class="list">
<div class="item">
<img src="@/assets/images/index/cb_icon4.png"/>
<p>电力项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon5.png"/>
<p>市政项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon6.png"/>
<p>水利项目</p>
</div>
</div>
</el-tab-pane>
</el-tabs>
<div class="search">
<el-form ref="queryForm" :model="queryParams2" :inline="true" size="small">
<el-form-item prop="amount">
<custom-money-select
:moneyList="moneyList"
v-model="amount"
placeholder="中标金额"
@handle-search="changeSelect3" />
</el-form-item>
<el-form-item prop="provinceId">
<el-select v-model="queryParams2.provinceId" 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="projects">
<el-select v-model="queryParams2.projects" multiple collapse-tags clearable placeholder="项目类型" :class="queryParams2.projects.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="queryParams2.time"
placeholder="中标日期"
@handle-search="changeSelect"/>
</el-form-item>
</el-form>
</div>
</div>
</div>
<!--员工视角-->
<div class="staff" v-if="user === 2">
<el-row :gutter="20">
<el-col :span="18">
<div class="content-left">
<div class="task-wrap">
</div>
<div class="zbgg" v-if="user === 1">
<span class="common-title">中标公告</span>
<div class="list">
<div class="item">
<img class="left" src="@/assets/images/index/icon1.png"/>
<div class="right">
<p class="title">即将开标项目</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="up">+3<img src="@/assets/images/index/up.png"/></span></p>
</div>
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
</div>
<div class="item">
<img class="left" src="@/assets/images/index/icon2.png"/>
<div class="right">
<p class="title">重点关注项目</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="up">+3<img src="@/assets/images/index/up.png"/></span></p>
</div>
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
</div>
<div class="item">
<img class="left" src="@/assets/images/index/icon3.png"/>
<div class="right">
<p class="title">重点关注客户</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="down">-3<img src="@/assets/images/index/down.png"/></span></p>
</div>
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
</div>
<div class="item">
<img class="left" src="@/assets/images/index/icon4.png"/>
<div class="right">
<p class="title">储备合作客户</p>
<p class="number">36</p>
<p class="compare">较上月 <span class="up">+3<img src="@/assets/images/index/up.png"/></span></p>
</div>
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
</div>
<div class="item add">
<span class="yd"><i></i><i></i><i></i><i></i><i></i><i></i></span>
<div class="btn"><i class="el-icon-plus"></i>新建待办任务</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
</div>
</div>
<div class="content-db">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">待办</span>
</div>
<div class="flex-box query-ability"><span>9</span>全部待办 ></div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
</div>
<div class="list">
<div class="item" v-for="(item,index) in gjjlData" :key="index" v-if='index < 3'>
<h3>{{item.title}}</h3>
<p>
<span>拜访时间:{{item.time}}</span>
<span>关联企业:{{item.name}}</span>
</p>
<div class="btn">写跟进<i class="el-icon-edit"></i></div>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
<span>中标单位:中铁十二局集团</span>
</p>
</div>
</div>
<div class="trends">
<el-tabs v-model="activeName" @tab-click="handleClickTab1">
<el-tab-pane label="甲方舆情" name="first">
<div class="main-box">
<el-timeline>
<el-timeline-item
v-for="(item, index) in trendsList"
:key="index"
icon="el-icon-time">
<div class="time">{{item.time}}<span class="company">{{item.name}}</span></div>
<div class="cont">{{item.main}}</div>
</el-timeline-item>
</el-timeline>
</div>
<!--<div class="check">全部甲方舆情 ></div>-->
</el-tab-pane>
<el-tab-pane label="监控动态" name="second">
<div class="main-box">
<el-timeline>
<el-timeline-item
v-for="(item, index) in trendsList"
:key="index"
icon="el-icon-time">
<div class="time">{{item.time}}<span class="company">{{item.name}}</span></div>
<div class="cont">{{item.main}}</div>
</el-timeline-item>
</el-timeline>
</div>
<!--<div class="check">全部监控动态 ></div>-->
</el-tab-pane>
</el-tabs>
</div>
</div>
</el-col>
<el-col :span="6">
<div class="content-right">
<div class="user" @click="handleChange">
<h3>李婷婷<span>营销员</span></h3>
<p>您好,祝您工作顺利每一天</p>
</div>
<div class="search">
<span class="common-title">快捷搜索</span>
<el-input placeholder="找客户/找项目/找甲方">
<i slot="prefix" class="el-icon-search"></i>
</el-input>
<span class="common-title">储备项目类</span>
<div class="list" style="margin-top: 8px;">
<div class="item">
<img src="@/assets/images/index/cb_icon1.png"/>
<p>EPC项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon2.png"/>
<p>投资项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon3.png"/>
<p>房建项目</p>
</div>
<div v-if="user === 2" class="zbhxr">
<span class="common-title">竞争对手中标候选人公告</span>
<div class="list">
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="list">
<div class="item">
<img src="@/assets/images/index/cb_icon4.png"/>
<p>电力项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon5.png"/>
<p>市政项目</p>
</div>
<div class="item">
<img src="@/assets/images/index/cb_icon6.png"/>
<p>水利项目</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
</div>
<div class="zbhxr">
<span class="common-title">竞争对手中标候选人公告</span>
<div class="list">
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
<div class="item">
<h3>太原市万柏林区2023年兴华街道老旧小区改造项目</h3>
<p>
<span>中标金额:4754.34</span>
</p>
</div>
</div>
</div>
</el-col>
</el-row>
</div>
</div>
</el-col>
</el-row>
</div>
</template>
<script>
import * as echarts from 'echarts';
import dataRegion from '@/assets/json/dataRegion'
import "@/assets/styles/public.css";
import CustomTimeSelect from './component/CustomTimeSelect'
import CustomMoneySelect from './component/CustomMoneySelect'
import skeleton from './component/skeleton'
import { bigWinningBidsPage,bigBidPage } from '@/api/index'
export default {
name: "Index",
components: {
CustomTimeSelect,CustomMoneySelect,skeleton
},
data() {
return {
// 版本号
version: "3.8.5",
typeList:[
{name:'待成交项目数'},
{name:'待成交总金额'},
{name:'成交项目金额'},
{name:'成交项目总数'},
{name:'储备项目总数'},
{name:'储备项目总金额'},
],
typeIndex:0,
jyfxData:['1月','2月','3月','4月','5月','6月'],
jyfxData1:[
{
dcjxm:'103',
dcjzje:'123',
cjxmje:'153',
cjxmzs:'113',
cbxmzs:'93',
cbxmzje:'193',
},
{
dcjxm:'256',
dcjzje:'223',
cjxmje:'113',
cjxmzs:'163',
cbxmzs:'193',
cbxmzje:'123',
},
{
dcjxm:'103',
dcjzje:'123',
cjxmje:'153',
cjxmzs:'113',
cbxmzs:'93',
cbxmzje:'193',
},
{
dcjxm:'256',
dcjzje:'223',
cjxmje:'113',
cjxmzs:'163',
cbxmzs:'193',
cbxmzje:'123',
},
{
dcjxm:'103',
dcjzje:'123',
cjxmje:'153',
cjxmzs:'113',
cbxmzs:'93',
cbxmzje:'193',
},
{
dcjxm:'256',
dcjzje:'223',
cjxmje:'113',
cjxmzs:'163',
cbxmzs:'193',
cbxmzje:'123',
},
],
gjjlData:[
{
title:'今天拜访了重庆交通局杨科长,洽谈比较愉快,预计下月有项目招标,希望能有机会合作。',
......@@ -499,55 +481,30 @@ export default {
],
pmData:[
{
name:'中治建工集团有限公司',
name:'朱博',
value:334,
value1:164,
},
{
name:'中机中联工程有限公司',
name:'陈伟',
value:230,
value1:130,
},
{
name:'中铁五局集团第六公司',
name:'张天翼',
value:156,
value1:150,
},
{
name:'中铁长江交通设计公司',
name:'李晨旭',
value:112,
value1:130,
},
{
name:'重庆设计院有限公公司',
name:'徐阳',
value:110,
value1:90,
},
{
name:'中铁五局集团第六公司',
value:100,
value1:91,
},
{
name:'中铁五局集团第六公司',
value:99,
value1:102,
},
{
name:'重庆设计院有限公公司',
value:80,
value1:90,
},
{
name:'中铁五局集团第六公司',
value:100,
value1:91,
},
{
name:'中铁五局集团第六公司',
value:99,
value1:102,
},
],
rankIconsSize:'24',
rankIcons:[// 排序图标
......@@ -556,11 +513,6 @@ export default {
require('@/assets/images/index/3.png'),
require('@/assets/images/index/4.png'),
require('@/assets/images/index/5.png'),
require('@/assets/images/index/6.png'),
require('@/assets/images/index/7.png'),
require('@/assets/images/index/8.png'),
require('@/assets/images/index/9.png'),
require('@/assets/images/index/10.png'),
],
user:1,
activeName:'first',
......@@ -606,253 +558,296 @@ export default {
main:'发布招标公告 重庆轨道交通环线鹅公岩轨道专用桥增设防船撞设施项目,项目地区是重庆市-江北区,项目类型为工程建设。'
},
],
jtList:[
{
name:'中交集团',
count:'24534',
amount:'23011'
},
area:'西南地区',
areaList:[
{
name:'中建集团',
count:'11534',
amount:'22331'
name:'西南地区'
},
{
name:'中冶集团',
count:'15534',
amount:'20231'
name:'华中地区'
},
{
name:'中国铁路',
count:'6534',
amount:'11231'
name:'华南地区'
},
{
name:'中国水利',
count:'9534',
amount:'4231'
name:'华东地区'
},
{
name:'中建集团',
count:'14534',
amount:'23231'
name:'华北地区'
},
{
name:'中建集团',
count:'24534',
amount:'15231'
name:'东北地区'
},
{
name:'中国水利',
count:'2334',
amount:'5231'
},
{
name:'中建集团',
count:'2534',
amount:'8231'
},
{
name:'中交集团',
count:'2334',
amount:'9231'
name:'西北地区'
},
],
addressList:[],
typeList:['施工类项目','施工类项目1','施工类项目2','施工类项目3','施工类项目4'],
queryParams:{
address:'',
type:[],
money:'',
time:'',
},
queryParams1:{
address:'',
type:[],
money:'',
time:'',
},
queryParams2:{
provinceId:'',
projects:[],
amount:'',
time:'',
pageNum:1,
pageSize:10
},
amount:'',
timeList: ['近三天', '近七天', '近半月', '自定义'],
moneyList: ['2亿以上', '5亿以上', '10亿以上', '自定义'],
projectList:[],
zbList:[],
totalCount:0,
zbTableTotal:0,
zxzbIsSkeleton:true,
zhaobiaoIsSkeleton:true,
};
date:'不限',
dateList:['不限','今日','昨日','近三天','近七天']
};
},
created() {
this.dataRegion()
this.getBigWinningBidsPage()
if(this.user === 1){
this.$nextTick(()=>{
this.initChart(this.jtList)
this.initChart()
this.initChart1()
})
}
},
methods: {
getBigWinningBidsPage(){
let params=this.queryParams2;
if(params.amount){
}
this.zxzbIsSkeleton=true
bigWinningBidsPage(this.queryParams2).then(res=>{
this.zxzbIsSkeleton=false;
if(res.code == 200){
this.projectList=res.rows;
this.totalCount=res.total;
}
})
},
getBigBidPage(){
let params={};
this.zhaobiaoIsSkeleton=true
bigBidPage(this.queryParams2).then(res=>{
this.zhaobiaoIsSkeleton=false
if(res.code == 200){
this.zbList=res.rows;
this.zbTableTotal=res.total;
}
})
handleClick(index){
this.typeIndex=index;
},
//地区
async dataRegion() {
var str = [];
for (let x = 0; x < 3; x++) {
for (let i = 0; i < dataRegion.length; i++) {
if (dataRegion[i].regionLevel == x + 1 && x + 1 == 1) {
str.push({
'id': dataRegion[i].id,
"label": dataRegion[i].regionName,
"short": dataRegion[i].short,
"value": dataRegion[i].parentId,
"children": []
});
}
}
}
this.addressList = str;
},
initChart(data) {
this.$nextTick(()=>{
let myChart = echarts.init(document.getElementById("zbtj-echarts"))
let option ={
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross'
initChart() {
let myChart = echarts.init(document.getElementById("fx-echarts"))
let option ={
legend: {
x:'right',
padding:[3,120,0,0],
itemHeight:8,
itemWidth:16,
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#FFFFFF'
}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
data: this.jyfxData,
},
yAxis: {
type: 'value',
},
grid: {
top:40,
left:30,
right:10,
bottom:20,
},
// dcjxm:'256',
// dcjzje:'223',
// cjxmje:'113',
// cjxmzs:'163',
// cbxmzs:'193',
// cbxmzje:'123',
series: [
{
data: this.jyfxData1.map(item => item.dcjxm),
name:'待成交项目数',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#81D4BC",
},
itemStyle:{
color: "#81D4BC",
},
//设置面积区域为渐变效果
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(189, 249, 232, 1)'
}, {
offset: 1, color: 'rgba(189, 249, 232, 0)'
} ],
global: false
}
},
},
xAxis: {
type: 'category',
axisLabel: { //坐标轴刻度标签的相关设置
margin: 15, //刻度标签与轴线之间的距离
color:"#666666"
{
data: this.jyfxData1.map(item => item.dcjzje),
name:'待成交总金额',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#9EE474",
},
axisTick: false, //坐标轴刻度
axisPointer: {
type: 'shadow'
itemStyle:{
color: "#9EE474",
},
//设置面积区域为渐变效果
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(208, 250, 183, 1)'
}, {
offset: 1, color: 'rgba(208, 250, 183, 0)'
} ],
global: false
}
},
data: data.map(item => item.name),
},
yAxis: [
{
type: 'value',
axisLabel: { //坐标轴刻度标签的相关设置
color:"#666666"
},
name: '单位:个',
nameLocation: 'start',
nameTextStyle: {
padding: [0, 0, 0, -60], // 四个数字分别为上右下左与原位置距离
color: '#666666',
{
data: this.jyfxData1.map(item => item.cjxmje),
name:'成交项目金额',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#E1B3FF",
},
itemStyle:{
color: "#E1B3FF",
},
//设置面积区域为渐变效果
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(233, 200, 255, 1)'
}, {
offset: 1, color: 'rgba(233, 200, 255, 0)'
} ],
global: false
}
},
{
type: 'value',
axisLabel: { //坐标轴刻度标签的相关设置
color:"#666666"
},
name: '单位:万元',
nameLocation: 'start',
nameTextStyle: {
padding: [0, 0, 0, 72], // 四个数字分别为上右下左与原位置距离
color: '#666666',
},
splitLine: {
show: true,
lineStyle: {
type: 'dashed',
color: ['#FFFFFF']
}
},
{
data: this.jyfxData1.map(item => item.cjxmzs),
name:'成交项目总数',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#ADC0FF",
},
itemStyle:{
color: "#ADC0FF",
},
//设置面积区域为渐变效果
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(173, 192, 255, 1)'
}, {
offset: 1, color: 'rgba(173, 192, 255, 0)'
} ],
global: false
}
}
],
grid: {
top:30,
left:80,
right:90,
bottom:30,
},
},
series: [
{
name:'中标金额(万元)',
smooth: false, //平滑
type:"line",
symbolSize: 6,
yAxisIndex: 1,
tooltip: {
valueFormatter: function (value) {
return value + '万元'
}
},
itemStyle: {
color: '#14C9C9'
},
data:data.map(item => item.amount),
{
data: this.jyfxData1.map(item => item.cbxmzs),
name:'储备项目总数',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
{
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'
}])
}
},
data:data.map(item => item.count),
}
]
}
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
})
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#67B3FD",
},
itemStyle:{
color: "#67B3FD",
},
//设置面积区域为渐变效果
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(192, 224, 255, 1)'
}, {
offset: 1, color: 'rgba(192, 224, 255, 0)'
} ],
global: false
}
},
},
{
data: this.jyfxData1.map(item => item.cbxmzje),
name:'储备项目总金额',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#BEECFF",
},
itemStyle:{
color: "#BEECFF",
},
//设置面积区域为渐变效果
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(165, 229, 255, 1)'
}, {
offset: 1, color: 'rgba(165, 229, 255, 0)'
} ],
global: false
}
},
},
]
}
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
},
initChart1(){
var rankPic = [
......@@ -861,20 +856,15 @@ export default {
require('@/assets/images/index/3.png'),
require('@/assets/images/index/4.png'),
require('@/assets/images/index/5.png'),
require('@/assets/images/index/6.png'),
require('@/assets/images/index/7.png'),
require('@/assets/images/index/8.png'),
require('@/assets/images/index/9.png'),
require('@/assets/images/index/10.png'),
]
let myChart = echarts.init(document.getElementById("zbph-echarts"))
let myChart = echarts.init(document.getElementById("pm-echarts"))
let option ={
legend: {
show: true,
x:'right',
y:'top',
padding:[10,0,10,0],
x:'center',
y:'bottom',
padding:[0,0,10,0],
itemWidth: 24,
itemHeight: 10,
textStyle:{
......@@ -898,7 +888,7 @@ export default {
}
},
axisLabel: {
margin: 200,
margin: 80,
textStyle: {
align: 'left',
},
......@@ -910,7 +900,6 @@ export default {
1: {
height: 24,
width: 24,
// marginBottom:-15,
align: 'center',
backgroundColor: {
image: rankPic[0]
......@@ -948,46 +937,6 @@ export default {
image: rankPic[4]
}
},
6: {
height: 24,
width: 24,
align: 'center',
backgroundColor: {
image: rankPic[5]
}
},
7: {
height: 24,
width: 24,
align: 'center',
backgroundColor: {
image: rankPic[6]
}
},
8: {
height: 24,
width: 24,
align: 'center',
backgroundColor: {
image: rankPic[7]
}
},
9: {
height: 24,
width: 24,
align: 'center',
backgroundColor: {
image: rankPic[8]
}
},
10: {
height: 24,
width: 24,
align: 'center',
backgroundColor: {
image: rankPic[9]
}
},
}
},
},
......@@ -996,7 +945,7 @@ export default {
},
grid: {
left: '20%',
top: 40,
top: 20,
right: 20,
bottom: 60,
},
......@@ -1015,6 +964,10 @@ export default {
data: this.pmData.map(item => item.value),
barGap: 0,
type: 'bar',
// stack: 'total',
// emphasis: {
// focus: 'series'
// },
itemStyle:{
color: '#14C9C9',
barBorderRadius:[0, 20, 20, 0]
......@@ -1022,10 +975,15 @@ export default {
barWidth: 8,
},
{
// realtimeSort: true,
name:'目标产值',
data: this.pmData.map(item => item.value1),
barGap: 0,
type: 'bar',
// stack: 'total',
// emphasis: {
// focus: 'series'
// },
itemStyle:{
color: '#92C9FF',
barBorderRadius:[0, 20, 20, 0]
......@@ -1040,52 +998,17 @@ export default {
});
},
handleClickTab(){
this.queryParams2.pageNum=1;
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){
this.$nextTick(()=>{
this.initChart(this.jtList)
this.initChart()
this.initChart1()
})
}
},
changeSelect(){
console.log("11111")
// this.$emit('handle-search')
},
changeSelect3(){
console.log(this.amount)
return
this.queryParams2.pageNum = 1
if(this.activeName === 'first'){
this.getBigWinningBidsPage()
}
if(this.activeName === 'second'){
this.getBigBidPage()
}
},
handleCurrentChange(){
},
handleSizeChange(){
this.queryParams2.pageNum = 1
this.queryParams2.pageSize = val
if(this.activeName === 'first'){
this.getBigWinningBidsPage()
}
if(this.activeName === 'second'){
this.getBigBidPage()
}
},
}
}
};
</script>
......@@ -1093,7 +1016,6 @@ export default {
<style scoped lang="scss">
.app-container{
padding: 0;
margin: 16px 24px;
}
p{
padding: 0;
......@@ -1111,315 +1033,6 @@ export default {
padding-right: 0 !important;
}
}
.manage{
.task-wrap{
height: 99px;
background: #FFFFFF;
border-radius: 4px;
display: flex;
justify-content: space-between;
.item{
width: 20%;
text-align: center;
margin: 0 auto;
cursor: pointer;
.icon-img{
width: 48px;
height: 48px;
margin-top: 16px;
}
.text{
color: #3D3D3D;
font-size: 12px;
margin-top: 5px;
}
}
}
.user{
height: 99px;
border-radius: 4px;
background-image: url("../assets/images/index/user_bg.png");
background-size: cover;
padding-left: 24px;
h3{
font-weight: 700;
color: #1C1C28;
font-size: 18px;
padding-top: 16px;
padding-bottom: 8px;
margin: 0px;
span{
height: 20px;
background: #FFF2E2;
display: inline-block;
border-radius: 11px;
border: 1px solid #FFB010;
color: #FFB010;
font-size: 12px;
line-height: 20px;
padding: 0 10px;
margin-left: 12px;
font-weight: 400;
}
}
p{
color: #666666;
font-size: 16px;
}
}
.tips{
color: #999999;
font-size: 12px;
margin: 12px 0;
}
.content{
background: #ffffff;
padding: 22px 16px;
}
.content_wap1{
height: 360px;
margin-bottom: 12px;
}
.content_wap2{
height: 540px;
}
.search{
float:right;
::v-deep .el-form{
.el-form-item--small.el-form-item{
margin-bottom: 16px;
}
.el-form-item{
height: 32px;
}
.el-form-item__content{
line-height: 32px;
}
.el-input{
line-height: 32px;
.el-input__inner{
height: 32px;
line-height: 32px;
border-radius: 4px
}
}
}
}
.box-right{
width: 90%;
float: right;
::v-deep .el-table{
.sort-caret.ascending{
border-bottom-color: rgba(0,129,255,0.5);
}
.ascending .sort-caret.ascending{
border-bottom-color: #0081FF;
}
.sort-caret.descending{
border-top-color: rgba(0,129,255,0.5);
}
.descending .sort-caret.descending{
border-top-color: #0081FF;
}
.el-table__header-wrapper{
background: #F0F3FA;
th{
background: #F0F3FA;
/*text-align: left;*/
}
}
.el-table__footer-wrapper{
background: #F0F3FA;
}
th {
font-size: 13px !important;
font-weight: 400 !important;
}
.cell {
padding-right: 12px !important;
padding-left: 12px !important;
line-height: 18px;
}
.el-table__fixed-header-wrapper{
th{
background: #F0F3FA;
}
}
td.el-table__cell{
border-bottom: 0;
}
tr{
&.current-row>td{
background-color: initial;
}
&:nth-child(2n) {
background: #F8FBFF;
}
}
.el-table__cell{
height: 40px;
padding: 0;
line-height: 40px;
}
.el-table__body tr:hover > td.el-table__cell{
background: #DCEBFF;
}
::-webkit-scrollbar-track-piece {
//滚动条凹槽的颜色,还可以设置边框属性
background-color: #F3F4F5;
height: 16px;
padding: 0 4px;
}
//滚动条的宽度
::-webkit-scrollbar {
width: 8px;
height: 8px;
background-color: #F3F4F5;
border-radius: 6px;
}
//滚动条的滑块
::-webkit-scrollbar-thumb {
border-radius: 8px;
height: 8px;
margin: 0 4px;
background: rgba(98,110,126,0.2);
border: 4px solid rgba(98,110,126,0.2);;
&:hover{
background: #566380;
}
}
.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;
}
}
}
}
}
.content_wap3{
margin-top: 12px;
background: #ffffff;
position:relative;
::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;
}
}
.search{
position: absolute;
right: 8px;
top: 10px;
::v-deep .el-form {
.el-form-item--small.el-form-item {
margin-bottom: 0;
}
}
}
.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;
}
}
}
}
}
.content-left{
.task-wrap{
height: 88px;
......
......@@ -225,10 +225,7 @@
}
},
created() {
setTimeout(() => {
this.isSkeleton=false;
this.getData()
}, 1000);
this.getAreaGroupByProvince()
var date = new Date()
var year = date.getFullYear()
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth()+ 1
......@@ -274,9 +271,13 @@
total=total+this.jzglData[i].count
}
this.total=total;
this.$nextTick(() => {
this.initChart()
})
this.initChart()
})
},
getCertGroupByMajorProvinceLevel(){
certGroupByMajorProvinceLevel().then(res => {
this.dqData=res.data;
let data=this.dqData[0].province;
......@@ -305,9 +306,15 @@
list.push(item)
}
this.jzdqData=list
this.initChart1()
this.$nextTick(() => {
this.initChart1()
})
})
},
getAreaGroupByProvince(){
areaGroupByProvince().then(res => {
this.isSkeleton=false;
this.zbData=res.data;
//定义一个变量 保存数据 因为sort方法排序会改变原数组 使用JSON方法深拷贝 将原数值暂存
// let dataArr = JSON.parse(JSON.stringify(res.data))
......@@ -321,300 +328,311 @@
this.rankList=data;
//将原数组数据赋值回去 保持数据不变
// this.zbData = JSON.parse(JSON.stringify(dataArr))
this.initChart2()
this.$nextTick(() => {
this.initChart2()
})
this.getData()
this.getCertGroupByMajorProvinceLevel()
})
},
initChart() {
let myChart = echarts.init(document.getElementById("gl-echarts"))
let option ={
tooltip: {
// show:false
},
xAxis: {
type: 'category',
boundaryGap: false,
data: this.jzglData.map(item => item.levelValue),
},
yAxis: {
type: 'value',
},
grid: {
top:40,
left:70,
right:40,
bottom:40,
},
series: [
{
data: this.jzglData.map(item => item.count),
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 1,
color: "#0081FF",
},
itemStyle:{
color: "#4E8EFF",
},
//设置面积区域为渐变效果
areaStyle: {
color: echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0.2,
color: "#DFEAFF",
},
{
offset: 1,
color: "#5895FF",
},
]),
},
}
]
}
myChart.clear(); //图表清除
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
this.$nextTick(() => {
let myChart = echarts.init(document.getElementById("gl-echarts"))
let option ={
tooltip: {
// show:false
},
xAxis: {
type: 'category',
boundaryGap: false,
data: this.jzglData.map(item => item.levelValue),
},
yAxis: {
type: 'value',
},
grid: {
top:40,
left:70,
right:40,
bottom:40,
},
series: [
{
data: this.jzglData.map(item => item.count),
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 1,
color: "#0081FF",
},
itemStyle:{
color: "#4E8EFF",
},
//设置面积区域为渐变效果
areaStyle: {
color: echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0.2,
color: "#DFEAFF",
},
{
offset: 1,
color: "#5895FF",
},
]),
},
}
]
}
myChart.clear(); //图表清除
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
})
},
initChart1() {
let myChart = echarts.init(document.getElementById("jzqy-echarts"))
let option ={
legend: {
x:'right',
padding:[0,30,0,0],
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#FFFFFF'
this.$nextTick(() => {
let myChart = echarts.init(document.getElementById("jzqy-echarts"))
let option ={
legend: {
x:'right',
padding:[0,30,0,0],
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#FFFFFF'
}
}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
data: this.jzdqData.map(item => item.province),
},
yAxis: {
type: 'value',
},
grid: {
top:35,
left:60,
right:30,
bottom:20,
},
series: [
{
data: this.jzdqData.map(item => item.tjCount),
name:'特级',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#0081FF",
},
itemStyle:{
color: "#4E8EFF",
},
//设置面积区域为渐变效果
areaStyle: {
opacity:0.8,
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0.2,
color: "#DFEAFF",
},
{
offset: 1,
color: "#5895FF",
},
]),
},
},
{
data: this.jzdqData.map(item => item.oneCount),
name:'一级',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#FA6C6C",
},
itemStyle:{
color: "#FA6C6C",
},
//设置面积区域为渐变效果
areaStyle: {
opacity:0.8,
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0.1,
color: "#FDF8F5",
},
{
offset: 1,
color: "#FCD7C8",
},
]),
},
xAxis: {
type: 'category',
boundaryGap: false,
data: this.jzdqData.map(item => item.province),
},
{
data: this.jzdqData.map(item => item.twoCount),
name:'二级',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#8077F2",
},
itemStyle:{
color: "#8077F2",
},
//设置面积区域为渐变效果
areaStyle: {
opacity:0.8,
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0.1,
color: "#ECE8FF",
},
{
offset: 1,
color: "#BCC0FF",
},
]),
},
yAxis: {
type: 'value',
},
{
data: this.jzdqData.map(item => item.threeCount),
name:'三级',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
grid: {
top:35,
left:60,
right:30,
bottom:20,
},
series: [
{
data: this.jzdqData.map(item => item.tjCount),
name:'特级',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#0081FF",
},
itemStyle:{
color: "#4E8EFF",
},
//设置面积区域为渐变效果
areaStyle: {
opacity:0.8,
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0.2,
color: "#DFEAFF",
},
{
offset: 1,
color: "#5895FF",
},
]),
},
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#FA936C",
{
data: this.jzdqData.map(item => item.oneCount),
name:'一级',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#FA6C6C",
},
itemStyle:{
color: "#FA6C6C",
},
//设置面积区域为渐变效果
areaStyle: {
opacity:0.8,
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0.1,
color: "#FDF8F5",
},
{
offset: 1,
color: "#FCD7C8",
},
]),
},
},
itemStyle:{
color: "#FA936C",
{
data: this.jzdqData.map(item => item.twoCount),
name:'二级',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#8077F2",
},
itemStyle:{
color: "#8077F2",
},
//设置面积区域为渐变效果
areaStyle: {
opacity:0.8,
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0.1,
color: "#ECE8FF",
},
{
offset: 1,
color: "#BCC0FF",
},
]),
},
},
//设置面积区域为渐变效果
areaStyle: {
opacity:0.8,
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0.1,
color: "#FEFBFA",
},
{
offset: 1,
color: "#FCD7C8",
},
]),
{
data: this.jzdqData.map(item => item.threeCount),
name:'三级',
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 2,
color: "#FA936C",
},
itemStyle:{
color: "#FA936C",
},
//设置面积区域为渐变效果
areaStyle: {
opacity:0.8,
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0.1,
color: "#FEFBFA",
},
{
offset: 1,
color: "#FCD7C8",
},
]),
},
},
},
]
}
myChart.clear();
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
]
}
myChart.clear();
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
})
},
initChart2() {
let myChart = echarts.init(document.getElementById("ba-echarts"))
let option ={
tooltip: {
// show:false
},
legend:{},
xAxis: {
type: 'category',
boundaryGap: false,
data: this.zbData.map(item => item.province),
},
yAxis: {
type: 'value',
},
grid: {
top:20,
left:65,
right:50,
bottom:20,
},
series: [
{
data: this.zbData.map(item => item.count),
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 1,
color: "#FFAB44",
},
itemStyle:{
color: "#FFAB44",
normal: {
label : {show: true},
color:"#FFAB44",
lineStyle: {
color: "#FFAB44"
this.$nextTick(() => {
let myChart = echarts.init(document.getElementById("ba-echarts"))
let option ={
tooltip: {
// show:false
},
legend:{},
xAxis: {
type: 'category',
boundaryGap: false,
data: this.zbData.map(item => item.province),
},
yAxis: {
type: 'value',
},
grid: {
top:20,
left:65,
right:50,
bottom:20,
},
series: [
{
data: this.zbData.map(item => item.count),
type: 'line',
smooth: true,
emphasis: {
disabled: true,
focus: 'none'
},
//设置折线颜色和粗细
lineStyle: {
width: 1,
color: "#FFAB44",
},
itemStyle:{
color: "#FFAB44",
normal: {
label : {show: true},
color:"#FFAB44",
lineStyle: {
color: "#FFAB44"
}
}
}
},
//设置面积区域为渐变效果
areaStyle: {
color: echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0.2,
color: "#FFEDD0",
},
{
offset: 1,
color: "#FFC671",
},
]),
},
}
]
}
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
},
//设置面积区域为渐变效果
areaStyle: {
color: echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0.2,
color: "#FFEDD0",
},
{
offset: 1,
color: "#FFC671",
},
]),
},
}
]
}
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
})
},
handleClick(type,index){
if(type === 1){
......
......@@ -11,7 +11,7 @@
</el-select>
</div>
</div>
<div class="content_box" v-if="gyflState">
<div class="content_box">
<div class="box-left">
<div id="echarts1" style="height: 280px"></div>
</div>
......@@ -38,12 +38,12 @@
</el-table>
</div>
</div>
<div class="empty" v-if="!gyflState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
<!--<div class="empty">-->
<!--<img class="img" src="@/assets/images/project/empty.png">-->
<!--<div class="p1">抱歉,暂无数据展示</div>-->
<!--</div>-->
</div>
<div v-if="!isSkeleton" class="td_content">
<div v-if="!zbtjState" class="td_content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">全国各地区中标统计TOP10</span>
......@@ -52,7 +52,7 @@
</el-select>
</div>
</div>
<div class="content_box" v-if="tdytState">
<div class="content_box">
<div class="box-left">
<div id="echarts2" style="height: 280px"></div>
</div>
......@@ -79,12 +79,12 @@
</el-table>
</div>
</div>
<div class="empty" v-if="!tdytState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
<!--<div class="empty" v-if="!zbtjState">-->
<!--<img class="img" src="@/assets/images/project/empty.png">-->
<!--<div class="p1">抱歉,暂无数据展示</div>-->
<!--</div>-->
</div>
<div v-if="!isSkeleton" class="td_content">
<div v-if="!jefxState" class="td_content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">全国中标金额分析</span>
......@@ -93,7 +93,7 @@
</el-select>
</div>
</div>
<div class="content_box" v-if="tdytState">
<div class="content_box">
<div class="box-left">
<div id="echarts3" style="height: 280px"></div>
</div>
......@@ -118,12 +118,12 @@
</el-table>
</div>
</div>
<div class="empty" v-if="!tdytState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
<!--<div class="empty" v-if="!jefxState">-->
<!--<img class="img" src="@/assets/images/project/empty.png">-->
<!--<div class="p1">抱歉,暂无数据展示</div>-->
<!--</div>-->
</div>
<div v-if="!isSkeleton" class="td_content">
<div v-if="!qsfxState" class="td_content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">全国中标趋势分析</span>
......@@ -155,7 +155,7 @@
</div>
</div>
</div>
<div v-if="!isSkeleton" class="td_content">
<div v-if="!xflState" class="td_content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">全国中标下浮率分析</span>
......@@ -164,7 +164,7 @@
</el-select>
</div>
</div>
<div class="content_box" v-if="tdytState">
<div class="content_box">
<div class="box-left">
<div id="echarts5" style="height: 280px"></div>
</div>
......@@ -189,13 +189,13 @@
</el-table>
</div>
</div>
<div class="empty" v-if="!tdytState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
<!--<div class="empty" v-if="!xflState">-->
<!--<img class="img" src="@/assets/images/project/empty.png">-->
<!--<div class="p1">抱歉,暂无数据展示</div>-->
<!--</div>-->
</div>
<div v-if="!isSkeleton" class="td_content">
<div v-if="!xmlxState" class="td_content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">全国中标业绩项目类型下浮率</span>
......@@ -207,7 +207,7 @@
</el-select>
</div>
</div>
<div class="content_box" v-if="topList.length > 0 && !isSkeleton">
<div class="content_box">
<div class="box-left">
<div id="echarts6" style="height: 300px"></div>
</div>
......@@ -233,10 +233,10 @@
</el-table>
</div>
</div>
<div class="empty" v-if="topList.length === 0 && !isSkeleton">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
<!--<div class="empty">-->
<!--<img class="img" src="@/assets/images/project/empty.png">-->
<!--<div class="p1">抱歉,暂无数据展示</div>-->
<!--</div>-->
</div>
</div>
......@@ -269,24 +269,24 @@
xflList :[],
xmxflList :[],
isSkeleton:true,
gyflState:true,
tdytState:true,
topState:true,
zbtjState:true,
jefxState:true,
qsfxState:true,
xflState:true,
xmlxState:true,
}
},
created() {
this.dataRegion()
this.yearsData()
this.getCountBidByType()
this.$nextTick(() => {
})
this.getCountBidGroupByProvince()
this.getRangeBidMoney()
this.getRangeBidFiveYears()
this.getLowerRateByYear()
this.getLowerRangeTenderType()
setTimeout(() => {
this.getCountBidGroupByProvince()
this.getRangeBidMoney()
this.getRangeBidFiveYears()
this.getLowerRateByYear()
this.getLowerRangeTenderType()
}, 1000);
},
mounted() {
......@@ -322,6 +322,7 @@
yearStr:this.years1.join(",")
}
countBidGroupByProvince(params).then(res => {
this.zbtjState=false;
this.topList=res.data;
if(res.data){
this.$nextTick(() => {
......@@ -335,6 +336,7 @@
yearStr:this.years2.join(",")
}
rangeBidMoney(params).then(res => {
this.jefxState=false;
this.zbjeList=res.data;
var list=[];
for(var i=0;i<res.data.length;i++){
......@@ -353,6 +355,7 @@
},
getRangeBidFiveYears(){
rangeBidFiveYears().then(res => {
this.qsfxState=false;
this.zbqsList=res.data;
if(res.data){
this.$nextTick(() => {
......@@ -366,6 +369,7 @@
yearStr:this.years3
}
lowerRateByYear(params).then(res => {
this.xflState=false;
for (var i=0; i<res.data.length; i++){
res.data[i].rate=res.data[i].rate.toFixed(2)
}
......@@ -385,7 +389,7 @@
params.provinceId=this.address
}
lowerRangeTenderType(params).then(res => {
this.xmlxState=false;
for (var i=0; i<res.data.length; i++){
for (let j=0; j<res.data[i].typeList.length; j++){
if(res.data[i].typeList[j].tenderType === '施工'){
......@@ -526,7 +530,6 @@
},
initChart2(data) {
this.$nextTick(() => {
// console.log(typeList)
let myChart = echarts.init(document.getElementById("echarts2"))
let seriesData=[]
let color=['#FCD68A', '#67B3FD', '#FFB8AD', '#FFD7AD', '#A9F1E5', '#D0FAB7', '#ADC0FF', '#BEECFF', '#81D5BC', '#FFE48A'];
......
......@@ -20,6 +20,10 @@ public class JskCombineCertificateDto implements Serializable {
*/
@NotNull(message = "id不能为空!")
private Long id;
/**
* 企业名称
*/
private String companyName;
/**
* 页码
......
......@@ -58,14 +58,14 @@ public class EnterpriseBussinessService {
public TableDataInfo clientPage(EnterpriseBussinessClientPageBody body) throws Exception {
if (body.isVaildCid()) return new TableDataInfo(new ArrayList<>(), 0);
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseBussiness/clientPage", BeanUtil.beanToMap(body, false, false));
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseBussiness/clientPage2", BeanUtil.beanToMap(body, false, false));
return dskOpenApiUtil.responsePage(map);
}
public TableDataInfo clientProjectPage(EnterpriseBussinessClientProjectPageBody body) throws Exception {
if (body.isVaildCid()) return null;
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseBussiness/clientProjectPage", BeanUtil.beanToMap(body, false, false));
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseBussiness/clientProjectPage2", BeanUtil.beanToMap(body, false, false));
Integer code = MapUtils.getInteger(map, "code", 300);
if (200 != code) {
throw new RuntimeException();
......@@ -145,7 +145,7 @@ public class EnterpriseBussinessService {
if (body.isVaildCid()) {
return new TableDataInfo(new ArrayList<>(), 0);
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseBussiness/supplierPage", BeanUtil.beanToMap(body, false, false));
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseBussiness/supplierPage2", BeanUtil.beanToMap(body, false, false));
return dskOpenApiUtil.responsePage(map);
}
......@@ -154,7 +154,7 @@ public class EnterpriseBussinessService {
if (body.isVaildCid()) {
return new TableDataInfo(new ArrayList<>(), 0);
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseBussiness/supplierProjectPage", BeanUtil.beanToMap(body, false, false));
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseBussiness/supplierProjectPage2", BeanUtil.beanToMap(body, false, false));
log.info(JSONUtil.toJsonStr(map));
Integer code = MapUtils.getInteger(map, "code", 300);
......
package com.dsk.system.dskService;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.domain.model.*;
import com.dsk.common.core.page.TableDataInfo;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson2.JSONObject;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.utils.DateUtils;
import com.dsk.common.utils.DskOpenApiUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -27,28 +28,66 @@ public class IndexService {
@Autowired
private DskOpenApiUtil dskOpenApiUtil;
public R winningBidsRanking(Map<String, Object> paramMap) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/winningBidsRanking", paramMap);
return BeanUtil.toBean(map, R.class);
public AjaxResult bigWinningBidsPage(JSONObject object) {
ArrayList recentlyBidQueryDtoList = object.getJSONArray("recentlyBidQueryDto");
Map<String,Object> objectMap = new HashMap<>();
Map<String,Object> pageMap = new HashMap<>(4);
pageMap.put("page", object.get("pageNum"));
pageMap.put("limit", object.get("pageSize"));
pageMap.put("field", "tenderDate");
pageMap.put("order", "desc");
objectMap.put("page", pageMap);
if (ObjectUtil.isEmpty(recentlyBidQueryDtoList)) {
Map<String,Object> recentlyBidQueryMap = new HashMap<>();
recentlyBidQueryDtoList = new ArrayList();
recentlyBidQueryMap.put("startTenderTime", DateUtils.dateTime(DateUtils.addDays(new Date(), -6)));
recentlyBidQueryMap.put("endTenderTime", DateUtils.getDate());
recentlyBidQueryMap.put("startMoney", 20000);
recentlyBidQueryMap.put("tenderType","施工,工程总承包");
recentlyBidQueryDtoList.add(recentlyBidQueryMap);
objectMap.put("recentlyBidQueryDto", recentlyBidQueryDtoList);
} else {
Map<String,Object> recentlyBidQueryMap = (Map<String,Object>)recentlyBidQueryDtoList.get(0);
recentlyBidQueryMap.put("tenderType","施工,工程总承包");
objectMap.put("recentlyBidQueryDto", recentlyBidQueryDtoList);
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/project/recently", objectMap);
return BeanUtil.toBean(map, AjaxResult.class);
}
public R rankingProjectType(Map<String, Object> paramMap) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/rankingProjectType", paramMap);
return BeanUtil.toBean(map, R.class);
public AjaxResult bigBidPage(JSONObject body) throws Exception {
Object jskBidQueryDto = body.get("jskBidQueryDto");
Map<String,Object> objectMap = new HashMap<>(2);
Map<String,Object> pageMap = new HashMap<>(4);
pageMap.put("page", body.get("pageNum"));
pageMap.put("limit", body.get("pageSize"));
pageMap.put("field", "punishDate");
pageMap.put("order", "desc");
objectMap.put("page", pageMap);
if (ObjectUtil.isEmpty(jskBidQueryDto)) {
Map<String,Object> jskBidQueryDtoMap = new HashMap<>(1);
// jskBidQueryDtoMap.put("startTenderTime", DateUtils.dateTime(DateUtils.addDays(new Date(), -6)));
// jskBidQueryDtoMap.put("endTenderTime", DateUtils.getDate());
jskBidQueryDtoMap.put("startBidMoney", 20000);
objectMap.put("jskBidQueryDto", jskBidQueryDtoMap);
} else {
objectMap.put("jskBidQueryDto", jskBidQueryDto);
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/jskBid/page", objectMap);
return BeanUtil.toBean(map, AjaxResult.class);
}
public TableDataInfo bigWinningBidsPage(IndexBigWinningBidsPageBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bigWinningBidsPage", BeanUtil.beanToMap(body, false, false));
return dskOpenApiUtil.responsePage(map);
public AjaxResult countByCompany(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/centralEnterprse/countByCompany", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
public TableDataInfo bigBidPage(IndexBigBidPageBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bigBidPage", BeanUtil.beanToMap(body, false, false));
return dskOpenApiUtil.responsePage(map);
public AjaxResult bidRank(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/bidRank", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
public R bigBidProjectType(Map<String, Object> paramMap) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bigBidProjectType", paramMap);
return BeanUtil.toBean(map, R.class);
public static void main(String[] args) {
System.out.println(DateUtils.getDate());
}
}
......@@ -37,17 +37,17 @@ public class JskCombineInfoService {
public TableDataInfo memberList(JskCombineSearchDto dto) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/memberList", BeanUtil.beanToMap(dto, false, false));
if (!ObjectUtils.isEmpty(map.get("data"))) {
Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
if (!ObjectUtils.isEmpty(data.get("list"))) {
List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("list");
list.parallelStream().forEach(res -> {
Integer companyId = MapUtils.getInteger(res, "companyId");
String companyName = MapUtils.getString(res, "companyName");
res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
});
}
}
// if (!ObjectUtils.isEmpty(map.get("data"))) {
// Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
// if (!ObjectUtils.isEmpty(data.get("list"))) {
// List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("list");
// list.parallelStream().forEach(res -> {
// Integer companyId = MapUtils.getInteger(res, "companyId");
// String companyName = MapUtils.getString(res, "companyName");
// res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
// });
// }
// }
return dskOpenApiUtil.responsePage(map);
}
......@@ -83,17 +83,17 @@ public class JskCombineInfoService {
public TableDataInfo menberCertificateList(JskCombineCertificateDto dto)throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/member/certificateList", BeanUtil.beanToMap(dto, false, false));
if (!ObjectUtils.isEmpty(map.get("data"))) {
Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
if (!ObjectUtils.isEmpty(data.get("list"))) {
List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("list");
list.parallelStream().forEach(res -> {
Integer companyId = MapUtils.getInteger(res, "companyId");
String companyName = MapUtils.getString(res, "companyName");
res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
});
}
}
// if (!ObjectUtils.isEmpty(map.get("data"))) {
// Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
// if (!ObjectUtils.isEmpty(data.get("list"))) {
// List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("list");
// list.parallelStream().forEach(res -> {
// Integer companyId = MapUtils.getInteger(res, "companyId");
// String companyName = MapUtils.getString(res, "companyName");
// res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
// });
// }
// }
return dskOpenApiUtil.responsePage(map);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment