Commit 71fab115 authored by danfuman's avatar danfuman

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

parents 03aa1efa cc160b46
...@@ -8,13 +8,11 @@ import com.dsk.system.domain.business.dto.BusinessSearchDto; ...@@ -8,13 +8,11 @@ import com.dsk.system.domain.business.dto.BusinessSearchDto;
import com.dsk.system.service.IBusinessOverviewService; import com.dsk.system.service.IBusinessOverviewService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/** /**
* 项目概览 * 项目概览
*
* @author lcl * @author lcl
* @create 2023/8/14 * @create 2023/8/14
*/ */
...@@ -30,40 +28,43 @@ public class BusinessOverviewController extends BaseController { ...@@ -30,40 +28,43 @@ public class BusinessOverviewController extends BaseController {
* 项目状态统计 * 项目状态统计
*/ */
@GetMapping("/status/statistics") @GetMapping("/status/statistics")
public AjaxResult statusStatistics(){ public AjaxResult statusStatistics() {
return AjaxResult.success(baseService.statusStatistics(new BusinessSearchDto(SecurityUtils.getUserId()))); return AjaxResult.success(baseService.statusStatistics(new BusinessSearchDto(SecurityUtils.getUserId())));
} }
/** /**
* 项目资金分析 * 项目资金分析
*/ */
@GetMapping("/amount/analyze") @GetMapping("/amount/analyze")
public AjaxResult amountAnalyze(){ public AjaxResult amountAnalyze() {
return AjaxResult.success(baseService.amountAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(),0))); return AjaxResult.success(baseService.amountAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(), 0)));
} }
/** /**
* 项目类型分析 * 项目类型分析
*/ */
@GetMapping("/type/analyze") @GetMapping("/type/analyze/{status}")
public AjaxResult typeAnalyze(){ public AjaxResult typeAnalyze(@PathVariable Integer status) {
return AjaxResult.success(baseService.typeAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(),2))); return AjaxResult.success(baseService.typeAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(), status)));
} }
/** /**
* 公招项目地区统计 * 公招项目地区统计
*
* @return * @return
*/ */
@GetMapping("/countGroupByProvince") @RequestMapping("/countGroupByProvince")
public AjaxResult countGroupByProvince(@RequestBody JSONObject object){ public AjaxResult countGroupByProvince(@RequestBody JSONObject object) {
return baseService.countGroupByProvince(object); return baseService.countGroupByProvince(object);
} }
/** /**
* 公招项目投资金额统计 * 公招项目投资金额统计
*
* @return * @return
*/ */
@GetMapping("/rangByMoney") @RequestMapping("/rangByMoney")
public AjaxResult rangByMoney(@RequestBody JSONObject object){ public AjaxResult rangByMoney(@RequestBody JSONObject object) {
return baseService.rangByMoney(object); return baseService.rangByMoney(object);
} }
} }
...@@ -32,35 +32,16 @@ public class IndexController { ...@@ -32,35 +32,16 @@ public class IndexController {
@Autowired @Autowired
private IndexService enterpriseService; 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 = "大项目最新中标") @ApiOperation(value = "大项目最新中标")
@PostMapping(value = "bigWinningBidsPage") @PostMapping(value = "bigWinningBidsPage")
public TableDataInfo bigWinningBidsPage(@RequestBody IndexBigWinningBidsPageBody vo) throws Exception { public AjaxResult bigWinningBidsPage(@RequestBody JSONObject object) throws Exception {
return enterpriseService.bigWinningBidsPage(vo); return enterpriseService.bigWinningBidsPage(object);
} }
@ApiOperation(value = "大项目最新招标") @ApiOperation(value = "大项目最新招标")
@PostMapping(value = "bigBidPage") @PostMapping(value = "bigBidPage")
public TableDataInfo bigBidPage(@RequestBody IndexBigBidPageBody vo) throws Exception { public AjaxResult bigBidPage(@RequestBody JSONObject object) throws Exception {
return enterpriseService.bigBidPage(vo); return enterpriseService.bigBidPage(object);
}
@ApiOperation(value = "企业中标排行-项目类型")
@PostMapping("/bigBidProjectType")
public R bigBidProjectType(@RequestBody Map<String, Object> paramMap) throws Exception {
return enterpriseService.bigBidProjectType(paramMap);
} }
@ApiOperation(value = "集团中标统计") @ApiOperation(value = "集团中标统计")
......
...@@ -7,6 +7,7 @@ import lombok.ToString; ...@@ -7,6 +7,7 @@ import lombok.ToString;
import javax.validation.constraints.AssertFalse; import javax.validation.constraints.AssertFalse;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.List;
@Data @Data
@ToString @ToString
...@@ -20,10 +21,10 @@ public class EnterpriseBussinessClientProjectPageBody extends BasePage { ...@@ -20,10 +21,10 @@ public class EnterpriseBussinessClientProjectPageBody extends BasePage {
private Integer cid; private Integer cid;
/** /**
* 企业id * 客户企业Id
*/ */
@NotNull(message = "企业id不能为空") @NotNull(message = "企业id不能为空")
private Integer unitId; private Integer companyId;
/** /**
* 查询关键字 * 查询关键字
...@@ -32,7 +33,34 @@ public class EnterpriseBussinessClientProjectPageBody extends BasePage { ...@@ -32,7 +33,34 @@ public class EnterpriseBussinessClientProjectPageBody extends BasePage {
public boolean isVaildCid() { 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;
/*
* 排序字段:1金额倒序,2金额正序,3时间倒序,4时间正序,5次数倒序,6次数正序
*/
private Integer sort = 3;
} }
...@@ -7,6 +7,7 @@ import lombok.ToString; ...@@ -7,6 +7,7 @@ import lombok.ToString;
import javax.validation.constraints.AssertFalse; import javax.validation.constraints.AssertFalse;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.List;
@Data @Data
@ToString @ToString
...@@ -20,10 +21,10 @@ public class EnterpriseBussinessSupplierProjectPageBody extends BasePage { ...@@ -20,10 +21,10 @@ public class EnterpriseBussinessSupplierProjectPageBody extends BasePage {
private Integer cid; private Integer cid;
/** /**
* 企业id * 供应商企业Id
*/ */
@NotNull(message = "企业id不能为空") @NotNull(message = "企业id不能为空")
private Integer unitId; private Integer companyId;
/** /**
* 查询关键字 * 查询关键字
...@@ -32,8 +33,34 @@ public class EnterpriseBussinessSupplierProjectPageBody extends BasePage { ...@@ -32,8 +33,34 @@ public class EnterpriseBussinessSupplierProjectPageBody extends BasePage {
public boolean isVaildCid() { 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;
/*
* 排序字段:1金额倒序,2金额正序,3时间倒序,4时间正序,5次数倒序,6次数正序
*/
private Integer sort = 3;
} }
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
"axios": "0.24.0", "axios": "0.24.0",
"clipboard": "2.0.8", "clipboard": "2.0.8",
"core-js": "3.25.3", "core-js": "3.25.3",
"echarts": "^5.4.0", "echarts": "^5.0.0",
"element-resize-detector": "^1.2.4", "element-resize-detector": "^1.2.4",
"element-ui": "2.15.12", "element-ui": "2.15.12",
"file-saver": "2.0.5", "file-saver": "2.0.5",
......
...@@ -80,3 +80,11 @@ export function tenderPage(data) { ...@@ -80,3 +80,11 @@ export function tenderPage(data) {
data: data data: data
}) })
} }
// 客户-供应商下拉框
export function getSelect(data) {
return request({
url: '/enterpriseBussiness/select',
method: 'post',
data: data
})
}
...@@ -147,7 +147,7 @@ let centralEnterprselocalPage= function centralEnterprselocalPage(param) { ...@@ -147,7 +147,7 @@ let centralEnterprselocalPage= function centralEnterprselocalPage(param) {
data: param data: param
}) })
} }
// 民营集团 // 其他集团
let centralEnterprsesocial= function centralEnterprsesocial(param) { let centralEnterprsesocial= function centralEnterprsesocial(param) {
return request({ return request({
url: '/combine/info/centralEnterprse/social', url: '/combine/info/centralEnterprse/social',
...@@ -155,7 +155,7 @@ let centralEnterprsesocial= function centralEnterprsesocial(param) { ...@@ -155,7 +155,7 @@ let centralEnterprsesocial= function centralEnterprsesocial(param) {
data: param data: param
}) })
} }
// 民营集团更多 // 其他集团更多
let centralEnterprsesocialPage= function centralEnterprsesocialPage(param) { let centralEnterprsesocialPage= function centralEnterprsesocialPage(param) {
return request({ return request({
url: '/combine/info/centralEnterprse/social/page', url: '/combine/info/centralEnterprse/social/page',
......
...@@ -219,3 +219,52 @@ export function allRecord(param) { ...@@ -219,3 +219,52 @@ export function allRecord(param) {
params:param, params:param,
}) })
} }
//项目状态统计
export function getStatistics(param) {
return request({
url: '/business/overview/status/statistics',
method: 'get',
params:param,
})
}
//储备项目统计
export function getCount(param) {
return request({
url: '/business/overview/type/analyze/'+param,
method: 'get',
params:param,
})
}
//储备项目资金
export function getAmount(param) {
return request({
url: '/business/overview/amount/analyze',
method: 'get',
params:param,
})
}
//跟进动态
export function getAllRecord(param) {
return request({
url: '/business/record/all/list',
method: 'get',
params:param,
})
}
//公招项目地区统计
export function countGroupByProvince(param) {
return request({
url: '/business/overview/countGroupByProvince',
method: 'post',
data:param
})
}
//公招项目投资金额统计
export function rangByMoney(param) {
return request({
url: '/business/overview/rangByMoney',
method: 'post',
data:param
})
}
...@@ -1200,4 +1200,21 @@ select { ...@@ -1200,4 +1200,21 @@ select {
line-height: 18px; line-height: 18px;
padding-bottom: 48px; padding-bottom: 48px;
text-align: center; text-align: center;
}
.title_wrap{
padding: 20px;
background-color: #FFFFFF;
border-bottom: 1px solid #e0e0e0;
}
.enterprise_title{
border-left: 2px solid #445781;
padding-left: 8px;
font-size: 16px;
height: 16px;
line-height: 16px;
font-weight: 700;
color: #232323;
}
.enterprise_contatiner{
padding: 0;
} }
\ No newline at end of file
<template>
<div class="no-data">
<div class="no-data-box">
<img :src="noData" alt="抱歉,没找到相关数据" />
<div>抱歉,没找到相关数据</div>
<span v-if="condition">建议调整关键词或筛选条件,重新搜索</span>
</div>
</div>
</template>
<script>
export default {
name: "NoData",
props: {
condition: {
type: Boolean,
default: false
}
},
data() {
return {
noData: require("@/assets/images/detail/noData.png")
}
},
methods:{
}
}
</script>
<style lang="scss" scoped>
.no-data {
font-size: 14px;
color: #999999;
width: 100%;
height: 100%;
min-height: 120px;
display: flex;
justify-content: center;
align-items: center;
background: #ffffff;
//border: 1px solid #eeeeee;
.no-data-box {
display: flex;
flex-direction: column;
align-items: center;
img {
width: 108px;
height: 109px;
margin-bottom: 22px;
}
div{
font-size: 16px;
line-height: 1;
color: #333333;
}
span{
margin-top: 4px;
}
}
}
</style>
...@@ -54,17 +54,24 @@ ...@@ -54,17 +54,24 @@
<label class="label">建设性质</label> <label class="label">建设性质</label>
<span>{{info.projectNature||"--"}}</span> <span>{{info.projectNature||"--"}}</span>
</p> </p>
<p>
<label class="label">招标公告</label>
<span class="span2">
<router-link :to="`/radar/Notice/details/${info.bId}`" tag="a" class="a-link" v-if="info.bId" >查看招标公告</router-link>
<span v-else>--</span>
</span>
</p>
</div> </div>
<div class="biddetail-title">招标信息</div> <div class="biddetail-title">招标信息</div>
<div class="main31-box"> <div class="main31-box">
<p> <p>
<label class="label">招标单位</label> <label class="label">招标单位</label>
<span class="span1"> <span class="span1">
<router-link v-if="info.projectUnit" :to="info.uipId?'/enterprise/' + encodeStr(info.projectUnitId) :'/company/' + encodeStr(info.projectUnitId) " tag="a" class="list-titel-a blue" v-html="info.projectUnit"></router-link> <router-link v-if="info.projectUnit" :to="info.uipId?'/enterprise/' + encodeStr(info.projectUnitId) :'/company/' + encodeStr(info.projectUnitId) " tag="a" class="list-titel-a blue" v-html="info.projectUnit"></router-link>
<span v-else>--</span> <span v-else>--</span>
</span> </span>
<label class="label label1">招标代理机构</label> <label class="label label1">招标代理机构</label>
<span class="span1">{{info.agency||"--"}}</span> <span class="span1">{{info.agency||"--"}}</span>
</p> </p>
</div> </div>
...@@ -409,9 +416,12 @@ export default { ...@@ -409,9 +416,12 @@ export default {
font-size: 12px; font-size: 12px;
background: #fff; background: #fff;
} }
.span1{ .span1{
width: 40%; width: 40%;
} }
.span2{
width: 88.9%;
}
.span-one { .span-one {
width: 90%; width: 90%;
} }
......
...@@ -148,6 +148,16 @@ export default { ...@@ -148,6 +148,16 @@ export default {
height: 32px; height: 32px;
line-height: 32px; line-height: 32px;
} }
::v-deep .el-select .el-input__inner{
border: 1px solid #D9D9D9;
height: 34px;
line-height: 34px;
padding-right: 27px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
border-radius: 4px;
}
::v-deep .custom-money-select{ ::v-deep .custom-money-select{
.el-input__inner{ .el-input__inner{
border: 1px solid #D9D9D9; border: 1px solid #D9D9D9;
......
...@@ -216,5 +216,4 @@ export default { ...@@ -216,5 +216,4 @@ export default {
::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td { ::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
background-color: #DCEBFF; background-color: #DCEBFF;
} }
</style> </style>
<template> <template>
<div class="client-details"> <div class="client-details">
<el-drawer <el-dialog
:visible.sync="drawer" :visible.sync="drawer"
size="60%" size="80%"
custom-class="client-drawer" :title="title"
custom-class="client-dialog"
:with-header="false" :with-header="false"
@closed="cancel"> @closed="cancel">
<head-detail-form <head-detail-form
:title="title"
:form-data="formData" :form-data="formData"
:query-params="queryParams" :query-params="queryParams"
:total="tableDataTotal" :total="tableDataTotal"
...@@ -22,29 +22,21 @@ ...@@ -22,29 +22,21 @@
:tableDataTotal="tableDataTotal" :tableDataTotal="tableDataTotal"
:queryParams="queryParams" :queryParams="queryParams"
@handle-current-change="handleCurrentChange" @handle-current-change="handleCurrentChange"
style="margin: 12px;"
> >
<template slot="projectAllName" slot-scope="scope"> <template slot="sourceType" slot-scope="scope">
<div class="flex-box"> <div class="flex-box">
<img class="tip-img" src="@/assets/images/detail/ico_pdf.png" v-if="scope.row.snapshootPic" @click="handlePic(scope.row.snapshootPic, true)"/> <div class="a-link" @click="linkTo(scope)" v-if="scope.row.sourceId&&scope.row.sourceType=='中标业绩'" v-html="scope.row.sourceType" style="cursor: pointer"></div>
<div class="a-link" @click="linkTo(scope)" v-if="scope.row.id&&scope.row.projectAllName" v-html="scope.row.projectAllName" style="cursor: pointer"></div> <span v-else v-html="scope.row.sourceType || '--'"></span>
<span v-else v-html="scope.row.projectAllName || '--'"></span>
</div> </div>
</template> </template>
<template slot="province" slot-scope="scope">
{{scope.row.province}}{{`${scope.row.city?'-'+scope.row.city:''}`}}
</template>
<template slot="lowerRate" slot-scope="scope">
<span>{{scope.row.lowerRate ? scope.row.lowerRate+'%' : '--'}}</span>
</template>
</tables> </tables>
</el-drawer> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import mixin from '../../mixins/mixin' import mixin from '../../mixins/mixin'
import {clientProjectPage} from '@/api/detail/party-a/dealings' import {clientProjectPage,getSelect} from '@/api/detail/party-a/dealings'
import HeadDetailForm from "../../component/HeadDetailForm" import HeadDetailForm from "../../component/HeadDetailForm"
export default { export default {
...@@ -62,21 +54,22 @@ export default { ...@@ -62,21 +54,22 @@ export default {
drawer: false, drawer: false,
queryParams: { queryParams: {
cid: this.companyId, cid: this.companyId,
unitId: this.data.projectUnitId, companyId: this.data.companyId,
pageNum: 1, pageNum: 1,
pageSize: 20 pageSize: 20
}, },
formData: [ formData: [
{ type: 4, fieldName: 'projects', value: '', placeholder: '合作项目类型', options: []},
{ type: 4, fieldName: 'sources', value: '', placeholder: '数据来源', options: []},
{ type: 6, fieldName: 'money', value: '', placeholder: '合同金额', startMoney: 'amountMin', endMoney: 'amountMax' },
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目/工程名称查询', options: []}, { type: 3, fieldName: 'keys', value: '', placeholder: '输入项目/工程名称查询', options: []},
], ],
forData: [ forData: [
{label: '合作项目/工程名称', prop: 'projectAllName', width: '720', fixed: true, slot: true}, {label: '项目名称', prop: 'projectName', fixed: true},
{label: '项目/工程金额(万元)', prop: 'winBidAmount', width: '160'}, {label: '公布时间', prop: 'time', width: '100'},
{label: '合作时间', prop: 'winBidTime', width: '100'}, {label: '本次合同金额(万元)', prop: 'amount', width: '160'},
{label: '项目地区', prop: 'province', width: '160', slot: true}, {label: '项目类型', prop: 'projectTtype', width: '130'},
{label: '项目类型', prop: 'boundType', width: '130'}, {label: '数据来源', prop: 'sourceType', width: '90', slot: true}
{label: '工期(天)', prop: 'period', width: '90'},
{label: '下浮率', prop: 'lowerRate', width: '90', slot: true}
], ],
//列表 //列表
tableLoading:false, tableLoading:false,
...@@ -88,8 +81,28 @@ export default { ...@@ -88,8 +81,28 @@ export default {
created() { created() {
this.drawer = true this.drawer = true
this.handleQuery() this.handleQuery()
this.handleOption()
}, },
methods: { methods: {
async handleOption(){
let res = await getSelect({})
if(res.code==200){
let data = res.data.projects
for (var i=0;i<data.length;i++){
this.formData[0].options.push({
name: data[i],
value: data[i],
})
}
let data1 = res.data.sources
for (var i=0;i<data1.length;i++){
this.formData[1].options.push({
name: data1[i],
value: data1[i],
})
}
}
},
async handleQuery(params) { async handleQuery(params) {
this.tableLoading = true this.tableLoading = true
let param = params?params:this.queryParams let param = params?params:this.queryParams
...@@ -109,7 +122,7 @@ export default { ...@@ -109,7 +122,7 @@ export default {
}, },
linkTo(scope){ linkTo(scope){
this.drawer = false this.drawer = false
this.$router.push(`/biddetail/${scope.row.id}`) this.$router.push(`/biddetail/${scope.row.sourceId}`)
}, },
cancel() { cancel() {
this.$emit('cancel') this.$emit('cancel')
...@@ -120,8 +133,27 @@ export default { ...@@ -120,8 +133,27 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.client-details { .client-details {
::v-deep .client-drawer{ ::v-deep .client-dialog{
width: 80%;
min-width: 900px;
background: #FFFFFF; background: #FFFFFF;
.el-dialog__body{
padding-top: 0;
}
.fixed-table{
.el-table__header-wrapper,.el-table__fixed-header-wrapper{
top: 0;
}
}
.el-dialog__header{
border-bottom: 1px solid #E1E1E1;
}
.el-dialog__title{
font-size: 16px;
color: #232323;
font-weight: bold;
margin-right: 4px;
}
} }
.tip-img{ .tip-img{
width: 14px; width: 14px;
......
<template> <template>
<div class="client-details"> <div class="client-details">
<el-drawer <el-dialog
:visible.sync="drawer" :visible.sync="drawer"
size="60%" size="80%"
custom-class="client-drawer" :title="title"
custom-class="client-dialog"
:with-header="false" :with-header="false"
@closed="cancel"> @closed="cancel">
<head-detail-form <head-detail-form
:title="title"
:form-data="formData" :form-data="formData"
:query-params="queryParams" :query-params="queryParams"
:total="tableDataTotal" :total="tableDataTotal"
...@@ -22,28 +22,21 @@ ...@@ -22,28 +22,21 @@
:tableDataTotal="tableDataTotal" :tableDataTotal="tableDataTotal"
:queryParams="queryParams" :queryParams="queryParams"
@handle-current-change="handleCurrentChange" @handle-current-change="handleCurrentChange"
style="margin: 12px;"
> >
<template slot="projectAllName" slot-scope="scope"> <template slot="sourceType" slot-scope="scope">
<div class="flex-box"> <div class="flex-box">
<img class="tip-img" src="@/assets/images/detail/ico_pdf.png" v-if="scope.row.snapshootPic" @click="handlePic(scope.row.snapshootPic, true)"/> <div class="a-link" @click="linkTo(scope)" v-if="scope.row.sourceId&&scope.row.sourceType=='中标业绩'" v-html="scope.row.sourceType" style="cursor: pointer"></div>
<div class="a-link" @click="linkTo(scope)" v-if="scope.row.id&&scope.row.projectAllName" v-html="scope.row.projectAllName" style="cursor: pointer"></div> <span v-else v-html="scope.row.projectAllName || '--'"></span> <span v-else v-html="scope.row.sourceType || '--'"></span>
</div> </div>
</template> </template>
<template slot="province" slot-scope="scope">
{{scope.row.province}}{{`${scope.row.city?'-'+scope.row.city:''}`}}
</template>
<template slot="lowerRate" slot-scope="scope">
<span>{{scope.row.lowerRate ? scope.row.lowerRate+'%' : '--'}}</span>
</template>
</tables> </tables>
</el-drawer> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import mixin from '../../mixins/mixin' import mixin from '../../mixins/mixin'
import { supplierProjectPage } from '@/api/detail/party-a/dealings' import { supplierProjectPage,getSelect } from '@/api/detail/party-a/dealings'
import HeadDetailForm from "../../component/HeadDetailForm" import HeadDetailForm from "../../component/HeadDetailForm"
export default { export default {
...@@ -60,22 +53,23 @@ export default { ...@@ -60,22 +53,23 @@ export default {
return { return {
drawer: false, drawer: false,
queryParams: { queryParams: {
cid: this.data.companyId, companyId: this.data.companyId,
unitId: this.companyId, cid: this.companyId,
pageNum: 1, pageNum: 1,
pageSize: 20 pageSize: 20
}, },
formData: [ formData: [
{ type: 4, fieldName: 'projects', value: '', placeholder: '合作项目类型', options: []},
{ type: 4, fieldName: 'sources', value: '', placeholder: '数据来源', options: []},
{ type: 6, fieldName: 'money', value: '', placeholder: '合同金额', startMoney: 'amountMin', endMoney: 'amountMax' },
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入合作项目/工程名称查询', options: [], width: 260}, { type: 3, fieldName: 'keys', value: '', placeholder: '输入合作项目/工程名称查询', options: [], width: 260},
], ],
forData: [ forData: [
{label: '合作项目/工程名称', prop: 'projectAllName', width: '720', fixed: true, slot: true}, {label: '项目名称', prop: 'projectName', fixed: true},
{label: '项目/工程金额(万元)', prop: 'winBidAmount', width: '160'}, {label: '公布时间', prop: 'time', width: '100'},
{label: '合作时间', prop: 'winBidTime', width: '100'}, {label: '本次合同金额(万元)', prop: 'amount', width: '160'},
{label: '项目地区', prop: 'province', width: '160', slot: true}, {label: '项目类型', prop: 'projectType', width: '130'},
{label: '项目类型', prop: 'boundType', width: '130'}, {label: '数据来源', prop: 'sourceType', width: '90', slot: true}
{label: '工期(天)', prop: 'period', width: '90'},
{label: '下浮率', prop: 'lowerRate', width: '90', slot: true}
], ],
//列表 //列表
tableLoading:false, tableLoading:false,
...@@ -87,8 +81,28 @@ export default { ...@@ -87,8 +81,28 @@ export default {
created() { created() {
this.drawer = true this.drawer = true
this.handleQuery() this.handleQuery()
this.handleOption()
}, },
methods: { methods: {
async handleOption(){
let res = await getSelect({})
if(res.code==200){
let data = res.data.projects
for (var i=0;i<data.length;i++){
this.formData[0].options.push({
name: data[i],
value: data[i],
})
}
let data1 = res.data.sources
for (var i=0;i<data1.length;i++){
this.formData[1].options.push({
name: data1[i],
value: data1[i],
})
}
}
},
async handleQuery(params) { async handleQuery(params) {
this.tableLoading = true this.tableLoading = true
let param = params?params:this.queryParams let param = params?params:this.queryParams
...@@ -108,7 +122,7 @@ export default { ...@@ -108,7 +122,7 @@ export default {
}, },
linkTo(scope){ linkTo(scope){
this.drawer = false this.drawer = false
this.$router.push(`/biddetail/${scope.row.id}`) this.$router.push(`/biddetail/${scope.row.sourceId}`)
}, },
cancel() { cancel() {
this.$emit('cancel') this.$emit('cancel')
...@@ -119,8 +133,27 @@ export default { ...@@ -119,8 +133,27 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.client-details { .client-details {
::v-deep .client-drawer{ ::v-deep .client-dialog{
width: 80%;
min-width: 900px;
background: #FFFFFF; background: #FFFFFF;
.el-dialog__body{
padding-top: 0;
}
.fixed-table{
.el-table__header-wrapper,.el-table__fixed-header-wrapper{
top: 0;
}
}
.el-dialog__header{
border-bottom: 1px solid #E1E1E1;
}
.el-dialog__title{
font-size: 16px;
color: #232323;
font-weight: bold;
margin-right: 4px;
}
} }
.tip-img{ .tip-img{
width: 14px; width: 14px;
......
...@@ -25,16 +25,19 @@ ...@@ -25,16 +25,19 @@
<router-link :to="scope.row.uipId?`/enterprise/${encodeStr(scope.row.projectUnitId)}`:`/company/${encodeStr(scope.row.projectUnitId)}`" tag="a" class="a-link" v-if="scope.row.projectUnitId&&scope.row.companyName" v-html="scope.row.companyName"></router-link> <router-link :to="scope.row.uipId?`/enterprise/${encodeStr(scope.row.projectUnitId)}`:`/company/${encodeStr(scope.row.projectUnitId)}`" tag="a" class="a-link" v-if="scope.row.projectUnitId&&scope.row.companyName" v-html="scope.row.companyName"></router-link>
<div v-else v-html="scope.row.companyName || '--'"></div> <div v-else v-html="scope.row.companyName || '--'"></div>
</template> </template>
<template slot="projectAllName" slot-scope="scope"> <!-- <template slot="projectAllName" slot-scope="scope">
<router-link :to="`/biddetail/${scope.row.projectInfo.projectId}`" tag="a" class="a-link" v-if="scope.row.projectInfo.projectId&&scope.row.projectInfo.projectAllName" >{{ scope.row.projectInfo.projectAllName }}</router-link> <router-link :to="`/biddetail/${scope.row.projectInfo.projectId}`" tag="a" class="a-link" v-if="scope.row.projectInfo.projectId&&scope.row.projectInfo.projectAllName" >{{ scope.row.projectInfo.projectAllName }}</router-link>
<div v-else v-html="scope.row.projectInfo&&scope.row.projectInfo.projectAllName || '--'"></div> <div v-else v-html="scope.row.projectInfo&&scope.row.projectInfo.projectAllName || '--'"></div>
<div v-if="scope.row.count>1" @click="handleClick($event, scope.row)" style="color: #FF7E38;cursor: pointer;">有{{scope.row.count}}个合作项目/工程 ></div> <div v-if="scope.row.count>1" @click="handleClick($event, scope.row)" style="color: #FF7E38;cursor: pointer;">有{{scope.row.count}}个合作项目/工程 ></div>
</template> -->
<template slot="count" slot-scope="scope">
<div v-if="scope.row.count>0" class="a-link" style="cursor: pointer;" @click="handleClick($event, scope.row)" >{{scope.row.count}}</div>
</template> </template>
</tables> </tables>
<client-detail <client-detail
v-if="isDetails" v-if="isDetails"
:data="rowData" :data="rowData"
:title="'合作项目/工程明细'" :title="title"
:company-id="companyId" :company-id="companyId"
@cancel="isDetails=false" /> @cancel="isDetails=false" />
</div> </div>
...@@ -42,7 +45,7 @@ ...@@ -42,7 +45,7 @@
<script> <script>
import mixin from '../mixins/mixin' import mixin from '../mixins/mixin'
import { clientPage } from '@/api/detail/party-a/dealings' import { clientPage,getSelect } from '@/api/detail/party-a/dealings'
import ClientDetail from './component/customDetail' import ClientDetail from './component/customDetail'
export default { export default {
name: 'Custom', name: 'Custom',
...@@ -53,21 +56,25 @@ export default { ...@@ -53,21 +56,25 @@ export default {
}, },
data() { data() {
return { return {
title:'',
queryParams: { queryParams: {
cid: this.companyId, cid: this.companyId,
sort: 3, sort: 3,
pageNum: 1, pageNum: 1,
pageSize: 20 pageSize: 20
}, },
defaultSort: {prop: 'time', order: 'descending'}, defaultSort: {},
forData: [ forData: [
{label: '客户名称', prop: 'companyName', minWidth: '350', slot: true}, {label: '客户名称', prop: 'companyName', minWidth: '350', slot: true},
{label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'}, // {label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'},
{label: '最近合作时间', prop: 'time', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'},
{label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: 'custom', descending: '1', ascending: '2'}, {label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: 'custom', descending: '1', ascending: '2'},
{label: '最近一次合作时间', prop: 'time', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'} {label: '合作次数', prop: 'count', minWidth: '150', sortable: 'custom',slot: true, descending: '5', ascending: '6'},
], ],
formData: [ formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []}, { type: 4, fieldName: 'projects', value: '', placeholder: '合作项目类型', options: []},
{ type: 4, fieldName: 'sources', value: '', placeholder: '数据来源', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '搜索客户名称', options: []},
], ],
//列表 //列表
tableLoading:false, tableLoading:false,
...@@ -81,8 +88,28 @@ export default { ...@@ -81,8 +88,28 @@ export default {
}, },
created() { created() {
this.handleQuery() this.handleQuery()
this.handleOption()
}, },
methods: { methods: {
async handleOption(){
let res = await getSelect({})
if(res.code==200){
let data = res.data.projects
for (var i=0;i<data.length;i++){
this.formData[0].options.push({
name: data[i],
value: data[i],
})
}
let data1 = res.data.sources
for (var i=0;i<data1.length;i++){
this.formData[1].options.push({
name: data1[i],
value: data1[i],
})
}
}
},
async handleQuery(params) { async handleQuery(params) {
this.tableLoading = true this.tableLoading = true
let param = params?params:this.queryParams let param = params?params:this.queryParams
...@@ -102,7 +129,8 @@ export default { ...@@ -102,7 +129,8 @@ export default {
}, },
handleClick(e, data) { handleClick(e, data) {
this.rowData = data this.rowData = data
this.isDetails = true this.isDetails = true;
this.title = '与客户'+data.companyName+'合作记录'
}, },
handleDetail(row){ handleDetail(row){
if(row.sourceUrl){ if(row.sourceUrl){
......
...@@ -25,16 +25,14 @@ ...@@ -25,16 +25,14 @@
<router-link :to="`/company/${encodeStr(scope.row.companyId)}`" tag="a" class="a-link" v-if="scope.row.companyId&&scope.row.companyName" v-html="scope.row.companyName"></router-link> <router-link :to="`/company/${encodeStr(scope.row.companyId)}`" tag="a" class="a-link" v-if="scope.row.companyId&&scope.row.companyName" v-html="scope.row.companyName"></router-link>
<div v-else v-html="scope.row.companyName || '--'"></div> <div v-else v-html="scope.row.companyName || '--'"></div>
</template> </template>
<template slot="projectAllName" slot-scope="scope"> <template slot="count" slot-scope="scope">
<router-link :to="`/biddetail/${scope.row.projectInfo.projectId}`" tag="a" class="a-link" v-if="scope.row.projectInfo.projectId&&scope.row.projectInfo.projectAllName" >{{ scope.row.projectInfo.projectAllName }}</router-link> <div v-if="scope.row.count>0" class="a-link" style="cursor: pointer;" @click="handleClick($event, scope.row)" >{{scope.row.count}}</div>
<div v-else v-html="scope.row.projectInfo&&scope.row.projectInfo.projectAllName || '--'"></div>
<div v-if="scope.row.count>1" @click="handleClick($event, scope.row)" style="color: #FF7E38;cursor: pointer;">{{scope.row.count}}个合作项目/工程 ></div>
</template> </template>
</tables> </tables>
<client-detail <client-detail
v-if="isDetails" v-if="isDetails"
:data="rowData" :data="rowData"
:title="'合作项目/工程明细'" :title="title"
:company-id="companyId" :company-id="companyId"
@cancel="isDetails=false" /> @cancel="isDetails=false" />
</div> </div>
...@@ -42,7 +40,7 @@ ...@@ -42,7 +40,7 @@
<script> <script>
import mixin from '../mixins/mixin' import mixin from '../mixins/mixin'
import { supplierPage } from '@/api/detail/party-a/dealings' import { supplierPage,getSelect } from '@/api/detail/party-a/dealings'
import ClientDetail from './component/supplierDetail' import ClientDetail from './component/supplierDetail'
export default { export default {
name: 'Supplier', name: 'Supplier',
...@@ -53,21 +51,24 @@ export default { ...@@ -53,21 +51,24 @@ export default {
}, },
data() { data() {
return { return {
title:'',
queryParams: { queryParams: {
cid: this.companyId, cid: this.companyId,
sort: 3, sort: 5,
pageNum: 1, pageNum: 1,
pageSize: 20 pageSize: 20
}, },
defaultSort: {prop: 'time', order: 'descending'}, defaultSort: {},
forData: [ forData: [
{label: '供应商', prop: 'companyName', minWidth: '350', slot: true}, {label: '供应商', prop: 'companyName', minWidth: '350', slot: true},
{label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'}, {label: '最近合作时间', prop: 'time', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'},
{label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: 'custom', descending: '1', ascending: '2'}, {label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: 'custom', descending: '1', ascending: '2'},
{label: '最近一次合作时间', prop: 'time', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'} {label: '合作次数', prop: 'count', minWidth: '150', sortable: 'custom',slot: true, descending: '5', ascending: '6'},
], ],
formData: [ formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []}, { type: 4, fieldName: 'projects', value: '', placeholder: '合作项目类型', options: []},
{ type: 4, fieldName: 'sources', value: '', placeholder: '数据来源', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '搜索供应商名称', options: []},
], ],
//列表 //列表
tableLoading:false, tableLoading:false,
...@@ -81,8 +82,28 @@ export default { ...@@ -81,8 +82,28 @@ export default {
}, },
created() { created() {
this.handleQuery() this.handleQuery()
this.handleOption()
}, },
methods: { methods: {
async handleOption(){
let res = await getSelect({})
if(res.code==200){
let data = res.data.projects
for (var i=0;i<data.length;i++){
this.formData[0].options.push({
name: data[i],
value: data[i],
})
}
let data1 = res.data.sources
for (var i=0;i<data1.length;i++){
this.formData[1].options.push({
name: data1[i],
value: data1[i],
})
}
}
},
async handleQuery(params) { async handleQuery(params) {
this.tableLoading = true this.tableLoading = true
let param = params?params:this.queryParams let param = params?params:this.queryParams
...@@ -103,6 +124,7 @@ export default { ...@@ -103,6 +124,7 @@ export default {
handleClick(e, data) { handleClick(e, data) {
this.rowData = data this.rowData = data
this.isDetails = true this.isDetails = true
this.title = '与供应商'+data.companyName+'合作记录'
}, },
handleDetail(row){ handleDetail(row){
if(row.sourceUrl){ if(row.sourceUrl){
......
...@@ -15,7 +15,7 @@ export default { ...@@ -15,7 +15,7 @@ export default {
} }
}, },
mounted() { mounted() {
}, },
methods: { methods: {
// 设置下拉选项数据源 // 设置下拉选项数据源
......
<template> <template>
<!-- <div style="width:calc(100% - 100px);" @click="showlist = false"> --> <!-- <div style="width:calc(100% - 100px);" @click="showlist = false"> -->
<div @click="showlist = false"> <div class="app-container enterprise_contatiner" @click="showlist = false">
<div class="title_wrap">
<div class="enterprise_title">
查集团户
</div>
</div>
<div class="content"> <div class="content">
<div class="content_item"> <div class="content_item">
<div class="content_right"> <div class="content_right">
...@@ -52,7 +57,7 @@ ...@@ -52,7 +57,7 @@
<div class="count1" >{{item.type}}<span> {{ item.total }}</span></div> <div class="count1" >{{item.type}}<span> {{ item.total }}</span></div>
<div :key="index"> <div :key="index">
<div class="infinite-list-item" v-for="(item1,index1) in item.list" @click="selCompany(item1)" :key="index1+'i'"> <div class="infinite-list-item" v-for="(item1,index1) in item.list" @click="selCompany(item1)" :key="index1+'i'">
<img v-if="item.logoUrl" :src="item.logoUrl" alt="" > <img v-if="item1.logoUrl" :src="item1.logoUrl" alt="" >
<div v-else class="logo" :style="{background:colors[index1%5]}">{{ item1.combineMemberName.slice(0,4) }}</div> <div v-else class="logo" :style="{background:colors[index1%5]}">{{ item1.combineMemberName.slice(0,4) }}</div>
<div style="float: left;"> <div style="float: left;">
<span class="name" v-html="item1.combineName" ></span> <span class="name" v-html="item1.combineName" ></span>
...@@ -95,7 +100,7 @@ ...@@ -95,7 +100,7 @@
<div class="count1" >{{item.address}}<span> {{ item.total }}</span></div> <div class="count1" >{{item.address}}<span> {{ item.total }}</span></div>
<div :key="index"> <div :key="index">
<div class="infinite-list-item" v-for="(item1,index1) in item.result" @click="selCompany(item1)" :key="index1+'i'"> <div class="infinite-list-item" v-for="(item1,index1) in item.result" @click="selCompany(item1)" :key="index1+'i'">
<img v-if="item.logoUrl" :src="item.logoUrl" alt="" > <img v-if="item1.logoUrl" :src="item1.logoUrl" alt="" >
<div v-else class="logo" :style="{background:colors[index1%5]}">{{ item1.combineMemberName.slice(0,4) }}</div> <div v-else class="logo" :style="{background:colors[index1%5]}">{{ item1.combineMemberName.slice(0,4) }}</div>
<div style="float: left;"> <div style="float: left;">
<span class="name" v-html="item1.combineName" ></span> <span class="name" v-html="item1.combineName" ></span>
...@@ -108,7 +113,7 @@ ...@@ -108,7 +113,7 @@
</div> </div>
</template> </template>
<!-- 民营集团 --> <!-- 其他集团 -->
<template v-if="activeIndex==3"> <template v-if="activeIndex==3">
<div class="count">{{ childListTotal }}</div> <div class="count">{{ childListTotal }}</div>
<div class="child-wrap" :id="'anchor-'+index" v-for="(item,index) in childList" :key="index"> <div class="child-wrap" :id="'anchor-'+index" v-for="(item,index) in childList" :key="index">
...@@ -116,7 +121,7 @@ ...@@ -116,7 +121,7 @@
<div class="count1" >{{item.type}}<span> {{ item.total }}</span></div> <div class="count1" >{{item.type}}<span> {{ item.total }}</span></div>
<div :key="index"> <div :key="index">
<div class="infinite-list-item" v-for="(item1,index1) in item.list" @click="selCompany(item1)" :key="index1+'i'"> <div class="infinite-list-item" v-for="(item1,index1) in item.list" @click="selCompany(item1)" :key="index1+'i'">
<img v-if="item.logoUrl" :src="item.logoUrl" alt="" > <img v-if="item1.logoUrl" :src="item1.logoUrl" alt="" >
<div v-else class="logo" :style="{background:colors[index1%5]}">{{ item1.combineMemberName.slice(0,4) }}</div> <div v-else class="logo" :style="{background:colors[index1%5]}">{{ item1.combineMemberName.slice(0,4) }}</div>
<div style="float: left;"> <div style="float: left;">
<span class="name" v-html="item1.combineName" ></span> <span class="name" v-html="item1.combineName" ></span>
...@@ -145,6 +150,7 @@ ...@@ -145,6 +150,7 @@
<script> <script>
import api from '@/api/enterpriseData/enterpriseData.js'; import api from '@/api/enterpriseData/enterpriseData.js';
import skeleton from '@/views/project/projectList/component/skeleton' import skeleton from '@/views/project/projectList/component/skeleton'
import "@/assets/styles/public.css";
export default { export default {
name: 'Group', name: 'Group',
...@@ -168,7 +174,7 @@ export default { ...@@ -168,7 +174,7 @@ export default {
provinces:[], provinces:[],
total:0, total:0,
isscroll:false, isscroll:false,
groups:['央企','央企子集团','地方国企','民营集团'], groups:['央企','央企子集团','地方国企','其他集团'],
companData:[], companData:[],
searchList:[], searchList:[],
page:1, page:1,
......
<template> <template>
<div > <div class="app-container enterprise_contatiner">
<div class="title_wrap">
<div class="enterprise_title">
查城投平台
</div>
</div>
<div class="content"> <div class="content">
<div class="content_item"> <div class="content_item">
<div class="content_right item_ckquery_list"> <div class="content_right item_ckquery_list">
...@@ -495,6 +500,7 @@ import {encodeStr} from "@/assets/js/common.js" ...@@ -495,6 +500,7 @@ import {encodeStr} from "@/assets/js/common.js"
import jsk_data from '../../../../../public/jsk.json'; import jsk_data from '../../../../../public/jsk.json';
import skeleton from '@/views/project/projectList/component/skeleton' import skeleton from '@/views/project/projectList/component/skeleton'
import api from '@/api/enterpriseData/enterpriseData.js'; import api from '@/api/enterpriseData/enterpriseData.js';
import "@/assets/styles/public.css";
export default { export default {
name: 'Owner', name: 'Owner',
components:{skeleton}, components:{skeleton},
......
<template> <template>
<div > <div class="app-container enterprise_contatiner">
<div class="title_wrap">
<div class="enterprise_title">
查企业
<img style="position: relative;top:-10px;width:80px;height:16px;" src="@/assets/images/owner/tip.png" alt="">
</div>
</div>
<div class="content"> <div class="content">
<div class="content_item content_item_padding0"> <div class="content_item content_item_padding0">
<div class="content_right item_ckquery_list"> <div class="content_right item_ckquery_list">
...@@ -585,6 +592,8 @@ ...@@ -585,6 +592,8 @@
import api from '@/api/enterpriseData/enterpriseData.js'; import api from '@/api/enterpriseData/enterpriseData.js';
import {encodeStr} from "@/assets/js/common.js" import {encodeStr} from "@/assets/js/common.js"
import skeleton from '@/views/project/projectList/component/skeleton' import skeleton from '@/views/project/projectList/component/skeleton'
import "@/assets/styles/public.css";
export default { export default {
name: 'EnterpriseQuery', name: 'EnterpriseQuery',
components:{skeleton}, components:{skeleton},
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
<Owner v-if="personnelHerf=='Owner'" /> <Owner v-if="personnelHerf=='Owner'" />
<!-- 查企业 --> <!-- 查企业 -->
<SearchEnterprise v-if="personnelHerf=='SearchEnterprise'" /> <SearchEnterprise v-if="personnelHerf=='SearchEnterprise'" />
<!-- 查企业 --> <!-- 查集团户 -->
<Group v-if="personnelHerf=='Group'" /> <Group v-if="personnelHerf=='Group'" />
...@@ -77,9 +77,14 @@ ...@@ -77,9 +77,14 @@
personnelHerf:'Owner' personnelHerf:'Owner'
} }
}, },
created() {}, created() {
if(this.$route.query.type==2){
this.personnelHerf='Group';
this.personnelList[0].status = false;
this.personnelList[2].status = true;
}
},
methods: { methods: {
handleClick(){},
personnelListbtn(index) { personnelListbtn(index) {
for (var i = 0; i < this.personnelList.length; i++) { for (var i = 0; i < this.personnelList.length; i++) {
this.personnelList[i].status = false; this.personnelList[i].status = false;
......
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="chart-top"> <div class="chart-top clearfix">
<div class="left"> <div class="left">
<el-card class="box-card noborder"> <el-card class="box-card noborder">
<div class="flex"> <div class="flex">
<div class="top-icons"> <div class="top-icons" @click="linkTo()">
<img class="top-img" src="@/assets/images/project/icon_6.png"> <img class="top-img" src="@/assets/images/project/icon_6.png">
<div class="name">储备项目</div> <div class="number">{{statistics.totalCount}}<span></span></div>
<div class="number">129</div> <div class="name">项目总数</div>
<div class="compare">较上月<span class="ss">+3 <img src="@/assets/images/project/ss.png"></span></div> <!-- <div class="compare">较上月<span class="ss">+3 <img src="@/assets/images/project/ss.png"></span></div> -->
</div> </div>
<div class="top-icons"> <div class="top-icons" @click="linkTo(0)">
<img class="top-img" src="@/assets/images/project/icon_7.png"> <img class="top-img" src="@/assets/images/project/icon_7.png">
<div class="name">重点关注项目</div> <div class="number">{{statistics.reserveCount}}<span></span></div>
<div class="number">45</div> <div class="name">储备项目数</div>
<div class="compare">较上月<span class="xj">-1 <img src="@/assets/images/project/xj.png"></span></div> <!-- <div class="compare">较上月<span class="xj">-1 <img src="@/assets/images/project/xj.png"></span></div> -->
</div> </div>
<div class="top-icons"> <div class="top-icons" @click="linkTo(1)">
<img class="top-img" src="@/assets/images/project/icon_8.png"> <img class="top-img" src="@/assets/images/project/icon_8.png">
<div class="name">即将开标项目</div> <div class="number">{{statistics.followUpCount}}<span></span></div>
<div class="number">39</div> <div class="name">跟进中项目</div>
<div class="compare">较上月<span class="ss">+3 <img src="@/assets/images/project/ss.png"></span></div> <!-- <div class="compare">较上月<span class="ss">+3 <img src="@/assets/images/project/ss.png"></span></div> -->
</div> </div>
<div class="top-icons"> <div class="top-icons" @click="linkTo(2)">
<img class="top-img" src="@/assets/images/project/icon_9.png"> <img class="top-img" src="@/assets/images/project/icon_9.png">
<div class="name">已签约项目数</div> <div class="number">{{statistics.bidCount}}<span></span></div>
<div class="number">5</div> <div class="name">已中标项目</div>
<div class="compare">较上月<span class="ss">+1 <img src="@/assets/images/project/ss.png"></span></div> <!-- <div class="compare">较上月<span class="ss">+1 <img src="@/assets/images/project/ss.png"></span></div> -->
</div> </div>
</div> </div>
</el-card> </el-card>
<el-card class="box-card noborder" id="charts"> <!-- <el-card class="box-card noborder" id="charts">
<div class="cardtitles i">项目经营分析 <div class="cardtitles i">项目经营分析
<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>
</div>
</div> </div>
<div id="xmjyfx" class="chart2"></div> <div id="xmjyfx" class="chart2"></div>
</el-card> </el-card> -->
</div> </div>
<el-card class="box-card noborder right"> <el-card class="box-card noborder right">
<div class="cardtitles i">最近关注</div> <!-- <div class="cardtitles i">最近关注</div>
<div class="gzlist"> <div class="gzlist">
<div> <div>
<img src="@/assets/images/project/fjxm.png"> <img src="@/assets/images/project/fjxm.png">
...@@ -56,9 +51,8 @@ ...@@ -56,9 +51,8 @@
<img src="@/assets/images/project/slxm.png"> <img src="@/assets/images/project/slxm.png">
<div>水利项目</div> <div>水利项目</div>
</div> </div>
</div> </div> -->
<el-divider></el-divider> <!-- <div class="cardtitles i">储备项目类型</div>
<div class="cardtitles i">储备项目类型</div>
<div class="gzlist"> <div class="gzlist">
<div> <div>
<img src="@/assets/images/project/EPC.png"> <img src="@/assets/images/project/EPC.png">
...@@ -84,16 +78,19 @@ ...@@ -84,16 +78,19 @@
<img src="@/assets/images/project/slxm.png"> <img src="@/assets/images/project/slxm.png">
<div>水利项目</div> <div>水利项目</div>
</div> </div>
</div> </div> -->
<el-input class="ename_input" prefix-icon="el-icon-search" clearable placeholder="快速搜索项目名称" v-model="projectName">
<div slot="append" class="btn-search" @click="search()">搜索</div>
</el-input>
<div class="addnew" @click="addNew(true)"><div class="img"></div>新建项目</div> <div class="addnew" @click="addNew(true)"><div class="img"></div>新建项目</div>
</el-card> </el-card>
</div> </div>
<div class="chart-bot"> <div class="chart-bot">
<el-card class="box-card noborder left"> <!-- <el-card class="box-card noborder left">
<div class="p1">目标完成率</div> <div class="p1">目标完成率</div>
<div class="p2">78.09<span>%</span></div> <div class="p2">78.09<span>%</span></div>
<div class="p3">较上月 +12.15 % <span></span> 较上月 +1542 亿 <span></span><!--<span class="xj"></span>--></div> <div class="p3">较上月 +12.15 % <span></span> 较上月 +1542 亿 <span></span></div>
<div class="p4">年度目标总额 1500.00 亿元</div> <div class="p4">年度目标总额 1500.00 亿元</div>
</el-card> </el-card>
<el-card class="box-card noborder right"> <el-card class="box-card noborder right">
...@@ -119,6 +116,220 @@ ...@@ -119,6 +116,220 @@
</div> </div>
</div> </div>
</div> </div>
</el-card> -->
<el-card class="box-card noborder pd16">
<h3>储备项目统计</h3>
<div class="flex-box clue-box" v-if="viewData1.length>0">
<div class="clue-echarts"><div id="echarts1" style="width: 100%;height:300px; margin: 0 auto;"></div></div>
<div class="table-item">
<el-table
:data="viewData1"
border
max-height="231"
style="width: 100%"
>
<el-table-column
prop="projectType"
label="项目类型"></el-table-column>
<el-table-column
prop="businessCount"
label="储备数量">
</el-table-column>
<el-table-column
prop="totalAmount"
label="投资金额(万元)">
</el-table-column>
</el-table>
</div>
</div>
<no-data v-else/>
</el-card>
<el-card class="box-card noborder pd16">
<h3>储备项目资金来源</h3>
<div class="flex-box clue-box" v-if="viewData2.length>0">
<div class="clue-echarts"><div id="echarts2" style="width: 100%;height:300px; margin: 0 auto;"></div></div>
<div class="table-item">
<el-table
:data="viewData2"
border
max-height="231"
style="width: 100%"
>
<el-table-column
prop="amountSource"
label="资金来源"></el-table-column>
<el-table-column
prop="businessCount"
label="项目数量">
</el-table-column>
<el-table-column
prop="totalAmount"
label="投资金额(万元)">
</el-table-column>
</el-table>
</div>
</div>
<no-data v-else/>
</el-card>
<el-card class="box-card noborder pd16">
<h3>已合作项目统计</h3>
<div class="flex-box clue-box" v-if="viewData3.length>0">
<div class="clue-echarts"><div id="echarts3" style="width: 100%;height:300px; margin: 0 auto;"></div></div>
<div class="table-item">
<el-table
:data="viewData3"
border
max-height="231"
style="width: 100%"
>
<el-table-column
prop="projectType"
label="项目类型"></el-table-column>
<el-table-column
prop="businessCount"
label="中标数量">
</el-table-column>
<el-table-column
prop="totalAmount"
label="中标金额(万元)">
</el-table-column>
</el-table>
</div>
</div>
<no-data v-else/>
</el-card>
<el-card class="box-card noborder pd16">
<h3>公招项目地区统计</h3>
<el-date-picker
v-if="radio4=='自定义'"
v-model="date4"
@change="dateChange4"
type="daterange"
value-format="yyyy-MM-dd"
size="small"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
<el-radio-group v-model="radio4" size="small" @input="radioClick4">
<el-radio-button label="近三天"></el-radio-button>
<el-radio-button label="近七天" ></el-radio-button>
<el-radio-button label="自定义"></el-radio-button>
</el-radio-group>
<div class="flex-box clue-box" v-if="viewData4.length>0">
<div class="drawChinese">
<div id="drawChinese" style="width: 411px; height: 360px;"></div>
<!-- <img src="@/static/img/index/map-nhzd.png" class="nhzd" alt="南海诸岛" title="南海诸岛"> -->
</div>
<div class="table-item">
<el-table
:data="viewData4"
border
max-height="231"
style="width: 100%"
>
<el-table-column
prop="type"
label="地区"></el-table-column>
<el-table-column
prop="count"
sortable
label="招标数量">
</el-table-column>
<el-table-column
prop="money"
sortable
label="总投资(万元)">
</el-table-column>
</el-table>
</div>
</div>
<no-data v-else/>
</el-card>
<el-card class="box-card noborder pd16">
<h3>公招项目投资金额统计</h3>
<el-date-picker
v-if="radio5=='自定义'"
v-model="date5"
@change="dateChange5"
type="daterange"
value-format="yyyy-MM-dd"
size="small"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
<el-radio-group v-model="radio5" size="small" @input="radioClick5">
<el-radio-button label="近三天"></el-radio-button>
<el-radio-button label="近七天" ></el-radio-button>
<el-radio-button label="自定义"></el-radio-button>
</el-radio-group>
<div class="flex-box clue-box" v-if="viewData5.length>0">
<div class="clue-echarts"><div id="echarts5" style="width: 100%;height:300px; margin: 0 auto;"></div></div>
<div class="table-item">
<el-table
:data="viewData5"
border
max-height="231"
style="width: 100%"
>
<el-table-column
prop="rangeName"
label="金额区间">
</el-table-column>
<el-table-column
prop="count"
label="招标数量(个)">
</el-table-column>
</el-table>
</div>
</div>
<no-data v-else/>
</el-card>
<el-card class="box-card noborder" >
<div >
<div class="item_title">
<h3>跟进动态</h3>
<el-date-picker
v-if="radio6=='自定义'"
v-model="date6"
@change="dateChange6"
type="daterange"
value-format="yyyy-MM-dd"
size="small"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
<el-radio-group v-model="radio6" size="small" @input="radioClick6">
<el-radio-button label="今日"></el-radio-button>
<el-radio-button label="近三天"></el-radio-button>
<el-radio-button label="近七天" ></el-radio-button>
<el-radio-button label="自定义"></el-radio-button>
</el-radio-group>
</div>
<template v-if="viewData6.length>0" >
<div class="scroll_box" ref="scrollRef" @scroll="scrollbottom()">
<div class="item_wrap" v-for="(item,index) in viewData6" :key="index">
<h2>{{ item.recordInfo }}</h2>
<div >
<span class="label">关联项目:</span>
<router-link v-if="item.businessId" :to="'/project/projectList/detail?id='+item.businessId+'&tag=xmsl'" tag="a" class="a-link">{{ item.projectName }}</router-link>
<span v-else>{{ item.projectName }}</span>
<span class="label">跟进人:</span>
<span>{{ item.nickName }}</span>
<span class="label">拜访对象:</span>
<span>{{ item.visitPerson }}</span>
<span class="label">本次拜访时间:</span>
<span>{{ item.visitTime }}</span>
<span class="label">下次拜访时间:</span>
<span>{{ item.nextVisitTime }}</span>
</div>
</div>
</div>
</template>
<no-data style="margin:20px 0" v-else/>
</div>
</el-card> </el-card>
</div> </div>
<addproject v-if="isshow" @addproject="add" @cancel="addNew"></addproject> <addproject v-if="isshow" @addproject="add" @cancel="addNew"></addproject>
...@@ -127,100 +338,64 @@ ...@@ -127,100 +338,64 @@
<script> <script>
import "@/assets/styles/project.scss" import "@/assets/styles/project.scss"
import {getStatistics,getCount,getAmount,countGroupByProvince,rangByMoney,getAllRecord} from "@/api/project/project.js"
import * as echarts from 'echarts' import * as echarts from 'echarts'
import addproject from '../projectList/component/addProject' import addproject from '../projectList/component/addProject'
import NoData from '../../component/noData'
export default { export default {
name: 'Overview', name: 'Overview',
components:{addproject}, components:{addproject,NoData},
data() { data() {
return { return {
chartDom: '', projectName:'',
myChart: '',
option: '',
datatype:'1',//切换类型 datatype:'1',//切换类型
recordlist:{rows:[ viewData1:[],
{ viewData2:[],
content:"测试拜访功能", viewData3:[],
createTime:"2023-05-26T16:51:23.000+08:00", viewData4:[],
customerId:"2b871d36f4e3ff71a4ea51f4c548f5fc", viewData5:[],
id:5, viewData6:[],
name:"李永佳",
nextVisitTime:"2023-05-27T00:00:00.000+08:00",
position:"产品",
userId:104,
visitMode:"线下拜访",
},
{
content:"测试拜访功能",
createTime:"2023-05-26T16:51:23.000+08:00",
customerId:"2b871d36f4e3ff71a4ea51f4c548f5fc",
id:5,
name:"李永佳",
nextVisitTime:"2023-05-27T00:00:00.000+08:00",
position:"产品",
userId:104,
visitMode:"线下拜访",
},
{
content:"测试拜访功能",
createTime:"2023-05-26T16:51:23.000+08:00",
customerId:"2b871d36f4e3ff71a4ea51f4c548f5fc",
id:5,
name:"李永佳",
nextVisitTime:"2023-05-27T00:00:00.000+08:00",
position:"产品",
userId:104,
visitMode:"线下拜访",
},
{
content:"测试拜访功能",
createTime:"2023-05-26T16:51:23.000+08:00",
customerId:"2b871d36f4e3ff71a4ea51f4c548f5fc",
id:5,
name:"李永佳",
nextVisitTime:"2023-05-27T00:00:00.000+08:00",
position:"产品",
userId:104,
visitMode:"线下拜访",
},
{
content:"测试拜访功能",
createTime:"2023-05-26T16:51:23.000+08:00",
customerId:"2b871d36f4e3ff71a4ea51f4c548f5fc",
id:5,
name:"李永佳",
nextVisitTime:"2023-05-27T00:00:00.000+08:00",
position:"产品",
userId:104,
visitMode:"线下拜访",
},
{
content:"测试拜访功能",
createTime:"2023-05-26T16:51:23.000+08:00",
customerId:"2b871d36f4e3ff71a4ea51f4c548f5fc",
id:5,
name:"李永佳",
nextVisitTime:"2023-05-27T00:00:00.000+08:00",
position:"产品",
userId:104,
visitMode:"线下拜访",
},
]},
isshow:false, isshow:false,
statistics:{},
myChart1:'',
myChart2:'',
myChart3:'',
myChart4:'',
myChart5:'',
recordParams:{
pageNum:1,
pageSize:10,
},
recordTotal:0,
radio4:'近三天',
date4:'',
startDate4:'',
endDate4:'',
radio5:'近三天',
date5:'',
startDate5:'',
endDate5:'',
radio6:'今日',
date6:'',
startDate6:'',
endDate6:'',
} }
}, },
created() { created() {
// this.$route.push({ path: "/projectList" }) // this.$route.push({ path: "/projectList" })
}, },
mounted(){ mounted(){
this.$nextTick(()=>{ this.getCount1();
this.chartDom = document.getElementById("xmjyfx") this.getCount2();
this.myChart = echarts.init(this.chartDom) this.getAmount();
this.getDT(1) this.getcountGroupByProvince();
}) this.getRangByMoney();
this.recordlist.rows.forEach(item=>{ this.getAllRecord();
item.createTime = this.gettime(item.createTime) getStatistics().then(res=>{
item.nextVisitTime = this.gettime(item.nextVisitTime) if(res.code==200){
this.statistics = res.data
}
}) })
window.addEventListener("resize", this.resizeEcharts); window.addEventListener("resize", this.resizeEcharts);
}, },
...@@ -231,231 +406,433 @@ export default { ...@@ -231,231 +406,433 @@ export default {
this.resizeEcharts() this.resizeEcharts()
}, },
methods: { methods: {
getDT(type){ getAllRecord(page){
this.datatype = type console.log(this.$store.state)
let time = new Date() this.recordParams.userId = this.$store.state.user.userId
let week = ['周一','周二','周三','周四','周五','周六','周日'] if(page){
let weekdata1 = [200,150,300,240,400,380,460] this.recordParams.pageNum = 1;
let weekdata2 = [100,250,320,140,300,350,410] this.viewData6 = []
let weekdata3 = [210,180,200,280,400,280,360] }
let monthdata1 = [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] getAllRecord(this.recordParams).then(res=>{
let monthdata2 = [420,250,380,190,110,200,250,318,436,320,478,605,140,310,552,516,250,300,258,436,245,240,140,200,140,300,390,410,450,300,587] if(res.code==200){
let monthdata3 = [300,240,310,185,170,210,240,208,416,357,450,645,155,330,522,506,200,315,200,506,355,210,180,100,280,410,310,400,410,320,580] this.recordTotal = res.total
let yeardata1 = [1908,1500,2300,1456,2354,2564,1254,1236,4561,4521,1236,4561,3521] this.viewData6 = this.viewData6.concat(res.rows)
let yeardata2 = [1920,1700,2400,1556,2400,2500,1420,1520,3850,4520,1500,4600,4500] }
let yeardata3 = [1980,1600,2500,1356,2200,2600,1300,1450,4560,3400,1400,1500,2500] })
let datas = [] },
let labels = [] getCount1(){
switch (type) { getCount(0).then(res=>{
case 1: if(res.code==200){
time = time.getDay() this.viewData1 = res.data;
time = time == 0?7:time if(res.data.length>0){
weekdata1.length = time this.$nextTick(()=>{
weekdata2.length = time let chartDom1 = document.getElementById("echarts1")
weekdata3.length = time this.myChart1 = echarts.init(chartDom1)
for(var i=0;i<7;i++){ this.initChart1()
if(i > time){ })
weekdata1.push('')
weekdata2.push('')
weekdata3.push('')
}
} }
labels = week }
datas.push(weekdata1) })
datas.push(weekdata2) },
datas.push(weekdata3) getCount2(){
break; getCount(2).then(res=>{
case 2: if(res.code==200){
let days = new Date(time.getFullYear(),time.getMonth()+1,0).getDate()//获取到本月天数 this.viewData3 = res.data;
time = time.getDate() if(res.data.length>0){
monthdata1.length = time this.$nextTick(()=>{
monthdata2.length = time let chartDom3 = document.getElementById("echarts3")
monthdata3.length = time this.myChart3 = echarts.init(chartDom3)
for(var i=1;i<days;i++){ this.initChart3()
labels.push(i+'日') })
if(i > time){
monthdata1.push("")
monthdata2.push("")
monthdata3.push("")
}
} }
datas.push(monthdata1) }
datas.push(monthdata2) })
datas.push(monthdata3) },
break; getAmount(){
case 3: getAmount().then(res=>{
time = time.getMonth()+1 if(res.code==200){
yeardata1.length = time this.viewData2 = res.data;
yeardata2.length = time if(res.data.length>0){
yeardata3.length = time this.$nextTick(()=>{
for(var i=1;i<12;i++){ let chartDom2 = document.getElementById("echarts2")
labels.push(i+'月') this.myChart2 = echarts.init(chartDom2)
if(i>time){ this.initChart2()
yeardata1.push('') })
yeardata2.push('')
yeardata2.push('')
}
} }
datas.push(yeardata1) }
datas.push(yeardata2) })
datas.push(yeardata3)
break;
default:
break;
}
this.initDT(datas,labels)
}, },
resizeEcharts (){ getcountGroupByProvince(){
const self = this let data = {}
setTimeout(function(){ if(this.startDate4){
self.myChart.resize() data = {
}, 10) "startDate": this.startDate4,
"endDate": this.endDate4,
}
}
countGroupByProvince(data).then(res=>{
if(res.code==200){
this.viewData4 = res.data;
console.log(this.viewData4)
if(this.viewData4.length>0){
res.data.map(item=>{
item.select = {
itemStyle:{
areaColor: '#0081FF',
},
label: {
color: '#FFFFFF',
fontSize: '10'
}
}
})
let chartDom1 = document.getElementById("drawChinese")
this.myChart4 = echarts.init(chartDom1)
this.initChart4()
}
}
})
}, },
initDT(datas,labels){ getRangByMoney(){
this.chartDom = document.getElementById("xmjyfx") let data = {}
this.myChart = echarts.init(this.chartDom) if(this.startDate5){
//客户跟进动态 data = {
this.option = { "startDate": this.startDate5,
xAxis: { "endDate": this.endDate5,
boundaryGap: false, }
type: 'category', }
data: labels, rangByMoney(data).then(res=>{
axisTick: { if(res.code==200){
show: false this.viewData5 = res.data;
}, this.$nextTick(()=>{
}, let chartDom5 = document.getElementById("echarts5")
yAxis: { this.myChart5 = echarts.init(chartDom5)
type: 'value', this.initChart5()
splitNumber: 5, })
splitLine : { //网格线 }
lineStyle: { })
type: 'dashed' //设置网格线类型 dotted:虚线 solid:实线 },
}, initChart1(){
//储备项目统计
let barData1 = [],xAxisData1 = [],lineData1=[];
this.viewData1.length>0&&this.viewData1.map(item=>{
barData1.push(item.businessCount)
xAxisData1.push(item.projectType)
lineData1.push(item.totalAmount)
})
let option1 = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
} }
}, },
grid:{
left:'4%', grid: {
top:'21%', left: '3%',
right:'2%', right: '4%',
bottom:'15%', bottom: '3%',
containLabel: true
}, },
tooltip:{ xAxis: [
axisPointer:{ //悬浮于圆点展示标签 {
type:'axis' type: 'category',
data: xAxisData1,
axisTick: {
alignWithLabel: true,
show: false
}
}
],
yAxis: [
{
type: 'value',
splitLine : { //网格线
lineStyle: {
type: 'dashed' //设置网格线类型 dotted:虚线 solid:实线
},
}
}, },
{
type: 'value',
splitLine : { //网格线
show:false
},
}
],
series: [
{
name: '储备数量',
type: 'bar',
barWidth: '18px',
data: barData1,
itemStyle:{
normal: {
barBorderRadius: [9, 9, 0, 0],
color: '#165DFF'
}
}
},
{
name: '投资金额(万元)',
symbolSize: 8, //标记的大小(折线图圆点大小)
label: {
color: "#67B3FD",
},
lineStyle: {
color: "#67B3FD",
width: 4
},
itemStyle: {
color: "#67B3FD"
},
type: 'line',
yAxisIndex: 1,
data: lineData1
},
],
}
option1 && this.myChart1.setOption(option1)
},
initChart2(){
//储备项目统计
let data =[]
this.viewData2.length>0&&this.viewData2.map(item=>{
data.push({value:item.totalAmount,name:item.amountSource})
})
let option1 = {
tooltip: {
trigger: 'item',
extraCssText: 'border:0', extraCssText: 'border:0',
// trigger: 'axis'
}, },
legend: { legend: {
right: '155px', bottom: '0%',
top:"2px", left: 'center',
data: ['成交金额', '储备项目', '跟进动态'], itemWidth:12,
itemHeight: 8, // 修改icon图形大小 itemHeight:8,
itemGap: 20
}, },
color:['#0081FF','#FFB51B','#8DCF96','#FFDC6B','#FE9C77'],//修改配色
series: [ series: [
{ {
name: '成交金额', name: '',
data: datas[0], type: 'pie',
type: 'line', radius: ['50%','70%'],
areaStyle: { data:data,
color: { emphasis: {
type: 'linear', itemStyle: {
x: 0, shadowBlur: 10,
y: 0, shadowOffsetX: 0,
x2: 0, shadowColor: 'rgba(0, 0, 0, 0)'
y2: 1, },
colorStops: [{ label: {
offset: 0, color: 'rgba(0, 129, 255, 0.5)' show: true,
}, { fontSize: 14,
offset: 1, color: 'rgba(0, 129, 255, 0)'
} ],
global: false
}
},
itemStyle: {
normal:{
color:'#0081FF',
}
},
label:{
normal:{
show:false
} }
}, }
symbolSize:8, }
]
}
option1 && this.myChart2.setOption(option1)
},
initChart3(){
//储备项目统计
let barData1 = [],xAxisData1 = [],lineData1=[];
this.viewData3.length>0&&this.viewData3.map(item=>{
barData1.push(item.businessCount)
xAxisData1.push(item.projectType)
lineData1.push(item.totalAmount)
})
let option3 = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: xAxisData1,
axisTick: {
alignWithLabel: true,
show: false
}
}
],
yAxis: [
{
type: 'value',
splitLine : { //网格线
lineStyle: {
type: 'dashed' //设置网格线类型 dotted:虚线 solid:实线
},
}
}, },
{ {
name: '储备项目', type: 'value',
data: datas[1], splitLine : { //网格线
type: 'line', show:false
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(157, 220, 202, 1)'
}, {
offset: 1, color: 'rgba(157, 220, 202, 0)'
} ],
global: false
}
},
itemStyle: {
normal:{
color:'#79C8B1'
}
}, },
label:{ }
normal:{ ],
show:false series: [
{
name: '中标数量',
type: 'bar',
barWidth: '18px',
data: barData1,
itemStyle:{
normal: {
barBorderRadius: [9, 9, 0, 0],
color: '#165DFF'
} }
}, }
symbolSize:8,
}, },
{ {
name: '跟进动态', name: '中标金额(万元)',
data: datas[2], symbolSize: 8, //标记的大小(折线图圆点大小)
type: 'line', label: {
areaStyle: { color: "#67B3FD",
color: { },
type: 'linear', lineStyle: {
x: 0, color: "#67B3FD",
y: 0, width: 4
x2: 0, },
y2: 1, itemStyle: {
colorStops: [{ color: "#67B3FD"
offset: 0, color: 'rgba(168, 144, 255, 1)' },
}, { type: 'line',
offset: 1, color: 'rgba(168, 144, 255, 0)' yAxisIndex: 1,
} ], data: lineData1
global: false },
} ],
}
option3 && this.myChart3.setOption(option3)
},
//中国地图
initChart4(){
let _this = this
// 指定图表的配置项和数据
// 绘制图表
let options = {
tooltip: {
trigger: 'item',
show: false,
formatter: function(params) {
return params.type + ':' + params.count
}
},
// 左侧小导航图标
visualMap: {
show: false,
x: 'left',
y: 'center',
min: 0,
max: 830000,
color: ['#DDECFF', '#ADD4FF']
},
selectedMode: 'single',
series: [{
name: '地图',
type: 'map',
mapType: 'china',
roam: false,
zoom: 1.2,
label: {
normal: {
show: false, // 省份名称
}, },
itemStyle: { emphasis: {
normal:{ show: true,
color:'#ACA5F7' textStyle:{color:"#FFFFFF", fontSize: '10'}//省份标签字体颜色
}
},
itemStyle: {
normal: { // 未选中状态
// areaColor: 'red', // 南沙诸岛背景颜色
borderColor: '#FFFFFF',
label: {
show: true// 显示名称
} }
}, },
label:{ emphasis: { // 也是选中样式
normal:{ areaColor: '#0081FF',
show:false label: {
show: true,
textStyle: {
color: '#FFFFFF'
}
} }
}, }
symbolSize:8,
}, },
data: this.viewData4
}]
}
_this.myChart4.setOption(options)
},
initChart5(){
//储备项目统计
let data =[]
this.viewData5.length>0&&this.viewData5.map(item=>{
data.push({value:item.count,name:item.rangeName})
})
let option1 = {
tooltip: {
trigger: 'item',
extraCssText: 'border:0',
},
legend: {
bottom: '0%',
left: 'center',
itemWidth:12,
itemHeight:8,
},
color:['#0081FF','#FFB51B','#8DCF96','#FFDC6B','#FE9C77'],//修改配色
series: [
{
name: '',
type: 'pie',
radius: ['50%','70%'],
data:data,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0)'
},
label: {
show: true,
fontSize: 14,
}
}
}
] ]
} }
this.option && this.myChart.setOption(this.option) option1 && this.myChart5.setOption(option1)
let _this = this },
// document.getElementById('charts').onresize = function () { linkTo(status){
// _this.myChart.resize() ; // 如果有多个图标变动,可写多个 this.$router.push({
// path:'/project/projectList',
// } query:{status:status,type:1}
})
},
resizeEcharts (){
const self = this
setTimeout(function(){
self.myChart.resize()
}, 10)
}, },
gettime(time){ gettime(time){
if(time == null || time == "") if(time == null || time == "")
...@@ -474,39 +851,179 @@ export default { ...@@ -474,39 +851,179 @@ export default {
addNew(isshow){ addNew(isshow){
this.isshow = isshow this.isshow = isshow
}, },
search(){
this.$router.push({ path: '/project/projectList',query:{projectName:this.projectName,type:1}})
},
add(){ add(){
this.isshow = false this.isshow = false
this.$router.push({ path: '/project/projectList' }) this.$router.push({ path: '/project/projectList' })
} },
scrollbottom(){
let scrllEl = this.$refs.scrollRef
let scrollHeight = scrllEl.scrollHeight
let clientHeight = scrllEl.clientHeight
let scrollTop = scrllEl.scrollTop
if(scrollHeight - (scrollTop+clientHeight) <= 1 ){
if(this.recordParams.pageNum*this.recordParams.pageSize>=this.recordTotal){
return
}
this.recordParams.pageNum+=1;
this.getAllRecord()
}
},
radioClick4(){
const datetime = new Date();
var Year, Month, Day;
Year = datetime.getFullYear();
Month = datetime.getMonth() + 1;
Day = datetime.getDate();
if(this.radio4=='近三天'){
var newTime = datetime.getTime() - 3 * 24 * 60 * 60 * 1000;
this.startDate4 = new Date(newTime).getFullYear() +"-" +((new Date(newTime).getMonth() + 1)<10?'0'+(new Date(newTime).getMonth() + 1):(new Date(newTime).getMonth() + 1)) +"-" +new Date(newTime).getDate();
this.endDate4 = Year + "-" + (Month<10?'0'+Month:Month) + "-" + Day;
this.getcountGroupByProvince()
}
if(this.radio4=='近七天'){
var newTime = datetime.getTime() - 7 * 24 * 60 * 60 * 1000;
this.startDate4 = new Date(newTime).getFullYear() +"-" +((new Date(newTime).getMonth() + 1)<10?'0'+(new Date(newTime).getMonth() + 1):(new Date(newTime).getMonth() + 1)) +"-" +new Date(newTime).getDate();
this.endDate4 = Year + "-" + (Month<10?'0'+Month:Month) + "-" + Day;
this.getcountGroupByProvince()
}
},
radioClick5(){
const datetime = new Date();
var Year, Month, Day;
Year = datetime.getFullYear();
Month = datetime.getMonth() + 1;
Day = datetime.getDate();
if(this.radio5=='近三天'){
var newTime = datetime.getTime() - 3 * 24 * 60 * 60 * 1000;
this.startDate5 = new Date(newTime).getFullYear() +"-" +((new Date(newTime).getMonth() + 1)<10?'0'+(new Date(newTime).getMonth() + 1):(new Date(newTime).getMonth() + 1)) +"-" +new Date(newTime).getDate();
this.endDate5 = Year + "-" + (Month<10?'0'+Month:Month) + "-" + Day;
this.getRangByMoney()
}
if(this.radio5=='近七天'){
var newTime = datetime.getTime() - 7 * 24 * 60 * 60 * 1000;
this.startDate5 = new Date(newTime).getFullYear() +"-" +((new Date(newTime).getMonth() + 1)<10?'0'+(new Date(newTime).getMonth() + 1):(new Date(newTime).getMonth() + 1)) +"-" +new Date(newTime).getDate();
this.endDate5 = Year + "-" + (Month<10?'0'+Month:Month) + "-" + Day;
this.getRangByMoney()
}
},
radioClick6(){
const datetime = new Date();
var Year, Month, Day;
Year = datetime.getFullYear();
Month = datetime.getMonth() + 1;
Day = datetime.getDate();
if(this.radio6=='今日'){
var newTime = datetime.getTime() - 3 * 24 * 60 * 60 * 1000;
this.startDate6 = Year + "-" + (Month<10?'0'+Month:Month) + "-" + Day;
this.endDate6 = Year + "-" + (Month<10?'0'+Month:Month) + "-" + Day;
this.recordParams.startTime = this.startDate6;
this.recordParams.endTime = this.endDate6;
this.getAllRecord(1)
}
if(this.radio6=='近三天'){
var newTime = datetime.getTime() - 3 * 24 * 60 * 60 * 1000;
this.startDate6 = new Date(newTime).getFullYear() +"-" +((new Date(newTime).getMonth() + 1)<10?'0'+(new Date(newTime).getMonth() + 1):(new Date(newTime).getMonth() + 1)) +"-" +new Date(newTime).getDate();
this.endDate6 = Year + "-" + (Month<10?'0'+Month:Month) + "-" + Day;
this.recordParams.startTime = this.startDate6;
this.recordParams.endTime = this.endDate6;
this.getAllRecord(1)
}
if(this.radio6=='近七天'){
var newTime = datetime.getTime() - 7 * 24 * 60 * 60 * 1000;
this.startDate6 = new Date(newTime).getFullYear() +"-" +((new Date(newTime).getMonth() + 1)<10?'0'+(new Date(newTime).getMonth() + 1):(new Date(newTime).getMonth() + 1)) +"-" +new Date(newTime).getDate();
this.endDate6 = Year + "-" + (Month<10?'0'+Month:Month) + "-" + Day;
this.recordParams.startTime = this.startDate6;
this.recordParams.endTime = this.endDate6;
this.getAllRecord(1)
}
},
dateChange4(){
if(this.date4&&this.date4[0]){
this.startDate4 = this.date4[0]
this.endDate4 = this.date4[1]
}else{
this.startDate4 = ''
this.endDate4 = ''
}
this.getcountGroupByProvince()
},
dateChange5(){
if(this.date5&&this.date5[0]){
this.startDate5 = this.date5[0]
this.endDate5 = this.date5[1]
}else{
this.startDate5 = ''
this.endDate5 = ''
}
this.getRangByMoney()
},
dateChange6(){
if(this.date6&&this.date6[0]){
this.startDate6 = this.date6[0]
this.endDate6 = this.date6[1]
}else{
this.startDate6 = ''
this.endDate6 = ''
}
this.recordParams.startTime = this.startDate6;
this.recordParams.endTime = this.endDate6;
this.getAllRecord(1)
},
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.chart-top{ .chart-top{
height: 450px;
margin-bottom: 12px; margin-bottom: 12px;
.left{ .left{
float: left; float: left;
width: calc(100% - 367px); height: 122px;
width: calc(100% - 318px);
.box-card:first-child{ .box-card:first-child{
margin-bottom: 12px; margin-bottom: 12px;
height: 124px; height: 124px;
padding: 16px; padding: 16px;
} }
.box-card:last-child{
height: 314px;
}
} }
.right{ .right{
float: right; float: right;
height: 450px; height: 122px;
width: 353px; width: 304px;
padding: 18px;
box-sizing: border-box;
::v-deep .ename_input{
width: 268px;
.el-input__inner{
width: 208px;
height: 36px;
}
.el-input-group__append{
padding:0px;
line-height: 34px;
height: 34px;
font-weight: 400;
color: #0081FF;
width: 60px;
background: #F5F5F5;
border-radius: 0px 0px 0px 0px;
text-align: center;
cursor: pointer;
}
.el-icon-search{
color: #0081FF;
}
}
} }
.top-icons{ .top-icons{
width: 33%; width: 33%;
height: 92px; height: 92px;
padding: 16px; padding: 16px;
cursor: pointer;
&::before{ &::before{
content: ' '; content: ' ';
width: 1px; width: 1px;
...@@ -531,6 +1048,12 @@ export default { ...@@ -531,6 +1048,12 @@ export default {
font-size: 18px; font-size: 18px;
font-weight: 700; font-weight: 700;
padding: 8px 0; padding: 8px 0;
span{
font-size: 12px;
color: rgba(35, 35, 35, 0.40);
font-weight: 400;
margin-left: 2px;
}
} }
.compare{ .compare{
font-size: 12px; font-size: 12px;
...@@ -632,44 +1155,111 @@ export default { ...@@ -632,44 +1155,111 @@ export default {
} }
} }
} }
} h3{
font-weight: 900;
.cardtitles{ color: #232323;
position: relative; font-size: 16px;
.labels{ line-height: 1;
width: 120px; margin: 0;
height: 22px; }
position: absolute; .pd16{
border-radius: 2px; padding: 16px;
right: 24px; position: relative;
top: 24px; .clue-box{
z-index: 2; width: 100%;
>div{ justify-content: space-between;
width: 40px; margin-top: 20px;
height: 100%; .clue-echarts{
text-align: center; width: calc(50% - 8px);
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{ .table-item{
border-radius: 2px 0px 0px 2px; width: calc(50% - 8px);
::v-deep .el-table--border .el-table__cell{
border-bottom: 0;
}
} }
&:last-child{ .drawChinese{
border-radius: 0px 2px 2px 0px; width: 411px;
height: 360px;
margin-top: -30px;
position: relative;
.nhzd{
width: 50px;
height: auto;
position: absolute;
right: 20px;
bottom: -8px;
}
} }
} }
} }
.item_title{
height: 56px;
padding: 16px;
box-sizing: border-box;
border-bottom: 1px solid #EFEFEF;
position: relative;
}
.scroll_box{
overflow-y:scroll ;
height: 512px;
.item_wrap{
height: 102px;
border-bottom: 1px solid #EFEFEF;
padding: 20px;
box-sizing: border-box;
color: rgba(35, 35, 35, 0.80);
h2{
font-size: 16px;
color: rgba(35, 35, 35, 0.80);
font-weight: 700;
height: 24px;
line-height: 24px;
margin-top:0 ;
margin-bottom: 16px;
}
span{
margin-right: 40px;
font-size: 14px;
}
.label{
color: rgba(35, 35, 35, 0.40);
margin-right: 0;
}
.a-link{
font-size: 14px;
margin-right: 40px;
}
}
}
::v-deep .el-radio-group{
position: absolute;
right: 20px;
top: 20px;
.el-radio-button__inner{
padding: 9px 12px;
}
}
::v-deep .el-date-editor{
width: 320px;
position: absolute;
right: 220px;
top: 20px;
}
.item_title{
::v-deep .el-radio-group,::v-deep .el-date-editor{
top: 12px;
}
::v-deep .el-date-editor{
right: 270px;
}
}
}
.cardtitles{
position: relative;
} }
.chart2{ .chart2{
...@@ -703,36 +1293,35 @@ export default { ...@@ -703,36 +1293,35 @@ export default {
} }
} }
} }
.el-divider{
margin: 0 16px;
color: #EFEFEF;
width: 320px;
}
.addnew{ .addnew{
width: 321px; width: 268px;
height: 40px; height: 36px;
background: #F4F6F9; // background: #F4F6F9;
border-radius: 4px; border-radius: 4px;
color: #0081FF; // color: #0081FF;
line-height: 40px; background: #0081FF;
color: #FFFFFF;
line-height: 36px;
margin: auto; margin: auto;
margin-top: 12px;
font-size: 14px; font-size: 14px;
cursor: pointer; cursor: pointer;
.img{ .img{
float: left; float: left;
width: 16px; width: 16px;
height: 16px; height: 16px;
background: url("../../../assets/images/add.png") no-repeat center center; background: url("../../../assets/images/project/add.png") no-repeat center center;
display: inline-block; display: inline-block;
margin: 12px 8px 0 114px; margin: 12px 8px 0 114px;
} }
&:hover{ // &:hover{
background: #0081FF; // background: #0081FF;
color: #FFFFFF; // color: #FFFFFF;
.img{ // .img{
background: url("../../../assets/images/project/add_2.png") no-repeat center center; // background: url("../../../assets/images/project/add_2.png") no-repeat center center;
background-size: 100%; // background-size: 100%;
} // }
} // }
} }
</style> </style>
...@@ -86,6 +86,21 @@ ...@@ -86,6 +86,21 @@
<el-option v-for="(item,index) in projectStage" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option> <el-option v-for="(item,index) in projectStage" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select> </el-select>
</div> </div>
<div class="select-popper">
<el-dropdown trigger="click" placement='bottom-start'>
<div class="el-dropdown-link " :class="searchParam.status!=null?'select-active':''">
项目状态{{searchParam.status!=null?' 1项':''}}
<i class="el-icon-caret-bottom"></i>
</div>
<el-dropdown-menu slot="dropdown" class="select-list select-radio">
<el-dropdown-item v-for="(itme,i) in statusList" :key="i">
<el-radio :label="itme.value" v-model="searchParam.status" @input="statusBtn()">
{{itme.label}}
</el-radio>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div> </div>
</div> </div>
<div class="scbtns"> <div class="scbtns">
...@@ -219,10 +234,25 @@ export default { ...@@ -219,10 +234,25 @@ export default {
districtId: [], districtId: [],
pageNum:1, pageNum:1,
pageSize:20, pageSize:20,
status:null,
}, },
domicile:[], domicile:[],
projectType:[],//项目类型 projectType:[],//项目类型
projectCategory:[],//项目类别 projectCategory:[],//项目类别
statusList:[
{
value:'0',
label:'储备中'
},
{
value:'1',
label:'跟进中'
},
{
value:'2',
label:'已合作'
},
],
amountOptions:[ amountOptions:[
{ {
label: "5000万以下", label: "5000万以下",
...@@ -253,7 +283,6 @@ export default { ...@@ -253,7 +283,6 @@ export default {
}, },
mounted(){ mounted(){
this.prvinceTree() this.prvinceTree()
this.getList(1)
//项目阶段 //项目阶段
getDictType('project_stage_type').then(result=>{ getDictType('project_stage_type').then(result=>{
this.projectStage = result.code == 200 ? result.data:[] this.projectStage = result.code == 200 ? result.data:[]
...@@ -266,8 +295,21 @@ export default { ...@@ -266,8 +295,21 @@ export default {
getDictType('project_category').then(result=>{ getDictType('project_category').then(result=>{
this.projectCategory = result.code == 200 ? result.data:[] this.projectCategory = result.code == 200 ? result.data:[]
}) })
if(this.$route.query.type==1){
this.activeName = 'second';
}
if(this.$route.query.status){
this.searchParam.status = this.$route.query.status;
}
if(this.$route.query.projectName){
this.searchParam.projectName = this.$route.query.projectName;
}
this.getList(1)
}, },
methods: { methods: {
statusBtn(){
},
dc(){ dc(){
this.$message.warning('功能正在开发中') this.$message.warning('功能正在开发中')
}, },
...@@ -345,6 +387,7 @@ export default { ...@@ -345,6 +387,7 @@ export default {
districtId: [], districtId: [],
pageNum:1, pageNum:1,
pageSize:20, pageSize:20,
status:null
} }
this.getList(1) this.getList(1)
}, },
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
</div> </div>
<div class="list-content" v-if="textList.projectAmount||textList.contact"> <div class="list-content" v-if="textList.projectAmount||textList.contact">
<p class="list-content-text" v-if="textList.projectAmount"> <p class="list-content-text" v-if="textList.projectAmount">
<span>预算金</span> <span>预算金</span>
<span v-if="textList.projectAmount">{{textList.projectAmount}}万元</span> <span v-if="textList.projectAmount">{{textList.projectAmount}}万元</span>
<span v-else>--</span> <span v-else>--</span>
</p> </p>
...@@ -65,6 +65,10 @@ ...@@ -65,6 +65,10 @@
<span>报名截止日期:</span> <span>报名截止日期:</span>
<span >{{textList.overTime||'--'}}</span> <span >{{textList.overTime||'--'}}</span>
</p> </p>
<p class="list-content-text" v-if="textList.projectId">
<span>中标公告:</span>
<router-link :to="`/biddetail/${textList.projectId}`" tag="a" class="a-link" >查看中标公告</router-link>
</p>
<p class="list-content-text" v-if="textList.dataSource"> <p class="list-content-text" v-if="textList.dataSource">
<span>来源网站:</span> <span>来源网站:</span>
<span >{{textList.dataSource||'--'}}</span> <span >{{textList.dataSource||'--'}}</span>
...@@ -122,8 +126,6 @@ ...@@ -122,8 +126,6 @@
}).then(res => { }).then(res => {
// console.log(res); // console.log(res);
this.textList = res.data; this.textList = res.data;
console.log(this.textList);
}).catch(error => { }).catch(error => {
}); });
......
...@@ -238,7 +238,7 @@ ...@@ -238,7 +238,7 @@
</div> </div>
<div class="list-content" v-if="item.bidMoney||item.contactTel || item.agencyContactTel"> <div class="list-content" v-if="item.bidMoney||item.contactTel || item.agencyContactTel">
<p class="list-content-text" v-if="item.bidMoney"> <p class="list-content-text" v-if="item.bidMoney">
<span>预算金</span> <span>预算金</span>
<span>{{item.bidMoney||'--'}}万元</span> <span>{{item.bidMoney||'--'}}万元</span>
</p> </p>
<p class="list-content-text" v-if="item.contactTel || item.agencyContactTel"> <p class="list-content-text" v-if="item.contactTel || item.agencyContactTel">
......
...@@ -20,6 +20,10 @@ public class JskCombineCertificateDto implements Serializable { ...@@ -20,6 +20,10 @@ public class JskCombineCertificateDto implements Serializable {
*/ */
@NotNull(message = "id不能为空!") @NotNull(message = "id不能为空!")
private Long id; private Long id;
/**
* 企业名称
*/
private String companyName;
/** /**
* 页码 * 页码
......
...@@ -58,14 +58,14 @@ public class EnterpriseBussinessService { ...@@ -58,14 +58,14 @@ public class EnterpriseBussinessService {
public TableDataInfo clientPage(EnterpriseBussinessClientPageBody body) throws Exception { public TableDataInfo clientPage(EnterpriseBussinessClientPageBody body) throws Exception {
if (body.isVaildCid()) return new TableDataInfo(new ArrayList<>(), 0); if (body.isVaildCid()) return new TableDataInfo(new ArrayList<>(), 0);
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/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); return dskOpenApiUtil.responsePage(map);
} }
public TableDataInfo clientProjectPage(EnterpriseBussinessClientProjectPageBody body) throws Exception { public TableDataInfo clientProjectPage(EnterpriseBussinessClientProjectPageBody body) throws Exception {
if (body.isVaildCid()) return null; 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); Integer code = MapUtils.getInteger(map, "code", 300);
if (200 != code) { if (200 != code) {
throw new RuntimeException(); throw new RuntimeException();
...@@ -145,7 +145,7 @@ public class EnterpriseBussinessService { ...@@ -145,7 +145,7 @@ public class EnterpriseBussinessService {
if (body.isVaildCid()) { if (body.isVaildCid()) {
return new TableDataInfo(new ArrayList<>(), 0); 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); return dskOpenApiUtil.responsePage(map);
} }
...@@ -154,7 +154,7 @@ public class EnterpriseBussinessService { ...@@ -154,7 +154,7 @@ public class EnterpriseBussinessService {
if (body.isVaildCid()) { if (body.isVaildCid()) {
return new TableDataInfo(new ArrayList<>(), 0); 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)); log.info(JSONUtil.toJsonStr(map));
Integer code = MapUtils.getInteger(map, "code", 300); Integer code = MapUtils.getInteger(map, "code", 300);
......
...@@ -289,22 +289,22 @@ public class EnterpriseService { ...@@ -289,22 +289,22 @@ public class EnterpriseService {
List<CustomerStatusListVo> claimStatusList = iCustomerService.selectStatusListByCompanyName(companyNames); List<CustomerStatusListVo> claimStatusList = iCustomerService.selectStatusListByCompanyName(companyNames);
Map<String, Object> bondCreditRatingBatchMap = new HashMap<>(1); // Map<String, Object> bondCreditRatingBatchMap = new HashMap<>(1);
bondCreditRatingBatchMap.put("cIds", cIds); // bondCreditRatingBatchMap.put("cIds", cIds);
Map<String, Object> bondCreditRatingMap = dskOpenApiUtil.requestBody("/operate/enterprise/bondCreditRatingBatch", bondCreditRatingBatchMap); // Map<String, Object> bondCreditRatingMap = dskOpenApiUtil.requestBody("/operate/enterprise/bondCreditRatingBatch", bondCreditRatingBatchMap);
Integer codeRating = MapUtils.getInteger(bondCreditRatingMap, "code", 300); // Integer codeRating = MapUtils.getInteger(bondCreditRatingMap, "code", 300);
ArrayList<Map<String, Object>> objArrayList = new ArrayList(1); // ArrayList<Map<String, Object>> objArrayList = new ArrayList(1);
if (codeRating.equals(HttpStatus.OK.value())) { // if (codeRating.equals(HttpStatus.OK.value())) {
Object object = bondCreditRatingMap.get("data"); // Object object = bondCreditRatingMap.get("data");
if (ObjectUtil.isNotEmpty(object)) { // if (ObjectUtil.isNotEmpty(object)) {
objArrayList = (ArrayList) object; // objArrayList = (ArrayList) object;
} // }
} // }
//按照城投企业id合并两个list //按照城投企业id合并两个list
for (Object companyObj : list) { for (Object companyObj : list) {
Map<String, Object> companyMap = CommonUtils.assertAsMap(companyObj); Map<String, Object> companyMap = CommonUtils.assertAsMap(companyObj);
companyMap.put("bratingSubjectLevel", null); // companyMap.put("bratingSubjectLevel", null);
String uipId = MapUtils.getString(companyMap, "uipId"); String uipId = MapUtils.getString(companyMap, "uipId");
String companyName = MapUtils.getString(companyMap, "companyName", ""); String companyName = MapUtils.getString(companyMap, "companyName", "");
if (ObjectUtil.isNotEmpty(companyName) && ObjectUtil.isNotEmpty(body.getKeys())) { if (ObjectUtil.isNotEmpty(companyName) && ObjectUtil.isNotEmpty(body.getKeys())) {
...@@ -354,12 +354,12 @@ public class EnterpriseService { ...@@ -354,12 +354,12 @@ public class EnterpriseService {
companyMap.put("claimStatus", vo.getStatus()); companyMap.put("claimStatus", vo.getStatus());
} }
} }
for (Map<String, Object> m : objArrayList) { // for (Map<String, Object> m : objArrayList) {
Long companyIdCredit = MapUtils.getLong(m, "companyId", 0L); // Long companyIdCredit = MapUtils.getLong(m, "companyId", 0L);
if (companyIdCredit.equals(companyId)) { // if (companyIdCredit.equals(companyId)) {
companyMap.put("bratingSubjectLevel", m.get("bratingSubjectLevel")); // companyMap.put("bratingSubjectLevel", m.get("bratingSubjectLevel"));
} // }
} // }
} }
return new TableDataInfo(list, MapUtils.getInteger(data, "totalCount", 0)); return new TableDataInfo(list, MapUtils.getInteger(data, "totalCount", 0));
......
package com.dsk.system.dskService; package com.dsk.system.dskService;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.R; import com.dsk.common.utils.DateUtils;
import com.dsk.common.core.domain.model.*;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.utils.DskOpenApiUtil; import com.dsk.common.utils.DskOpenApiUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -29,29 +28,53 @@ public class IndexService { ...@@ -29,29 +28,53 @@ public class IndexService {
@Autowired @Autowired
private DskOpenApiUtil dskOpenApiUtil; private DskOpenApiUtil dskOpenApiUtil;
public R winningBidsRanking(Map<String, Object> paramMap) throws Exception { public AjaxResult bigWinningBidsPage(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/winningBidsRanking", paramMap); ArrayList recentlyBidQueryDtoList = object.getJSONArray("recentlyBidQueryDto");
return BeanUtil.toBean(map, R.class); Map<String,Object> objectMap = new HashMap<>();
} Map<String,Object> pageMap = new HashMap<>(4);
pageMap.put("page", object.get("pageNum"));
public R rankingProjectType(Map<String, Object> paramMap) throws Exception { pageMap.put("limit", object.get("pageSize"));
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/rankingProjectType", paramMap); pageMap.put("field", "tenderDate");
return BeanUtil.toBean(map, R.class); pageMap.put("order", "desc");
} objectMap.put("page", pageMap);
if (ObjectUtil.isEmpty(recentlyBidQueryDtoList)) {
public TableDataInfo bigWinningBidsPage(IndexBigWinningBidsPageBody body) throws Exception { Map<String,Object> recentlyBidQueryMap = new HashMap<>();
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bigWinningBidsPage", BeanUtil.beanToMap(body, false, false)); recentlyBidQueryDtoList = new ArrayList();
return dskOpenApiUtil.responsePage(map); recentlyBidQueryMap.put("startTenderTime", DateUtils.dateTime(DateUtils.addDays(new Date(), -6)));
} recentlyBidQueryMap.put("endTenderTime", DateUtils.getDate());
recentlyBidQueryMap.put("startMoney", 20000);
public TableDataInfo bigBidPage(IndexBigBidPageBody body) throws Exception { recentlyBidQueryMap.put("tenderType","施工,工程总承包");
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bigBidPage", BeanUtil.beanToMap(body, false, false)); recentlyBidQueryDtoList.add(recentlyBidQueryMap);
return dskOpenApiUtil.responsePage(map); 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 bigBidProjectType(Map<String, Object> paramMap) throws Exception { public AjaxResult bigBidPage(JSONObject body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bigBidProjectType", paramMap); Object jskBidQueryDto = body.get("jskBidQueryDto");
return BeanUtil.toBean(map, R.class); 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 AjaxResult countByCompany(JSONObject object) { public AjaxResult countByCompany(JSONObject object) {
...@@ -63,4 +86,8 @@ public class IndexService { ...@@ -63,4 +86,8 @@ public class IndexService {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/bidRank", object); Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/bidRank", object);
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
} }
public static void main(String[] args) {
System.out.println(DateUtils.getDate());
}
} }
...@@ -37,17 +37,17 @@ public class JskCombineInfoService { ...@@ -37,17 +37,17 @@ public class JskCombineInfoService {
public TableDataInfo memberList(JskCombineSearchDto dto) throws Exception { public TableDataInfo memberList(JskCombineSearchDto dto) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/memberList", BeanUtil.beanToMap(dto, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/memberList", BeanUtil.beanToMap(dto, false, false));
if (!ObjectUtils.isEmpty(map.get("data"))) { // if (!ObjectUtils.isEmpty(map.get("data"))) {
Map<String, Object> data = BeanUtil.beanToMap(map.get("data")); // Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
if (!ObjectUtils.isEmpty(data.get("list"))) { // if (!ObjectUtils.isEmpty(data.get("list"))) {
List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("list"); // List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("list");
list.parallelStream().forEach(res -> { // list.parallelStream().forEach(res -> {
Integer companyId = MapUtils.getInteger(res, "companyId"); // Integer companyId = MapUtils.getInteger(res, "companyId");
String companyName = MapUtils.getString(res, "companyName"); // String companyName = MapUtils.getString(res, "companyName");
res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId)); // res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
}); // });
} // }
} // }
return dskOpenApiUtil.responsePage(map); return dskOpenApiUtil.responsePage(map);
} }
...@@ -83,17 +83,17 @@ public class JskCombineInfoService { ...@@ -83,17 +83,17 @@ public class JskCombineInfoService {
public TableDataInfo menberCertificateList(JskCombineCertificateDto dto)throws Exception { public TableDataInfo menberCertificateList(JskCombineCertificateDto dto)throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/member/certificateList", BeanUtil.beanToMap(dto, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/member/certificateList", BeanUtil.beanToMap(dto, false, false));
if (!ObjectUtils.isEmpty(map.get("data"))) { // if (!ObjectUtils.isEmpty(map.get("data"))) {
Map<String, Object> data = BeanUtil.beanToMap(map.get("data")); // Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
if (!ObjectUtils.isEmpty(data.get("list"))) { // if (!ObjectUtils.isEmpty(data.get("list"))) {
List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("list"); // List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("list");
list.parallelStream().forEach(res -> { // list.parallelStream().forEach(res -> {
Integer companyId = MapUtils.getInteger(res, "companyId"); // Integer companyId = MapUtils.getInteger(res, "companyId");
String companyName = MapUtils.getString(res, "companyName"); // String companyName = MapUtils.getString(res, "companyName");
res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId)); // res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
}); // });
} // }
} // }
return dskOpenApiUtil.responsePage(map); return dskOpenApiUtil.responsePage(map);
} }
......
...@@ -62,17 +62,17 @@ public class UrbanInvestmentPlatformServiceImpl implements UrbanInvestmentPlatfo ...@@ -62,17 +62,17 @@ public class UrbanInvestmentPlatformServiceImpl implements UrbanInvestmentPlatfo
} }
List<CustomerStatusListVo> customerStatusListVos = iCustomerService.selectStatusListByCompanyName(companyNames); List<CustomerStatusListVo> customerStatusListVos = iCustomerService.selectStatusListByCompanyName(companyNames);
Map<String, Object> bondCreditRatingBatchMap = new HashMap<>(1); // Map<String, Object> bondCreditRatingBatchMap = new HashMap<>(1);
bondCreditRatingBatchMap.put("cIds", cIds); // bondCreditRatingBatchMap.put("cIds", cIds);
Map<String, Object> bondCreditRatingMap = dskOpenApiUtil.requestBody("/operate/operate/enterprise/bondCreditRatingBatch", bondCreditRatingBatchMap); // Map<String, Object> bondCreditRatingMap = dskOpenApiUtil.requestBody("/operate/operate/enterprise/bondCreditRatingBatch", bondCreditRatingBatchMap);
Integer codeRating = MapUtils.getInteger(bondCreditRatingMap, "code", 300); // Integer codeRating = MapUtils.getInteger(bondCreditRatingMap, "code", 300);
ArrayList<Map<String, Object>> objArrayList = new ArrayList(1); // ArrayList<Map<String, Object>> objArrayList = new ArrayList(1);
if (codeRating.equals(HttpStatus.OK.value())) { // if (codeRating.equals(HttpStatus.OK.value())) {
Object object = bondCreditRatingMap.get("data"); // Object object = bondCreditRatingMap.get("data");
if (ObjectUtil.isNotEmpty(object)) { // if (ObjectUtil.isNotEmpty(object)) {
objArrayList = (ArrayList)object; // objArrayList = (ArrayList)object;
} // }
} // }
//按照城投企业id合并两个list //按照城投企业id合并两个list
//按照城投企业id合并两个list //按照城投企业id合并两个list
...@@ -86,27 +86,27 @@ public class UrbanInvestmentPlatformServiceImpl implements UrbanInvestmentPlatfo ...@@ -86,27 +86,27 @@ public class UrbanInvestmentPlatformServiceImpl implements UrbanInvestmentPlatfo
companyName = companyName.replaceAll("</font>",""); companyName = companyName.replaceAll("</font>","");
} }
companyMap.put("claimStatus", null); companyMap.put("claimStatus", null);
companyMap.put("bratingSubjectLevel", null); // companyMap.put("bratingSubjectLevel", null);
for (CustomerStatusListVo vo : customerStatusListVos) { for (CustomerStatusListVo vo : customerStatusListVos) {
if (companyName.equals(vo.getCompanyName())) { if (companyName.equals(vo.getCompanyName())) {
companyMap.put("claimStatus", vo.getStatus()); companyMap.put("claimStatus", vo.getStatus());
} }
} }
// 去除重复的数据 // 去除重复的数据
Set<UrbanInvestmentPlatformSubjectLevelDto> subjectLevelDtoSet = new HashSet<>(); // Set<UrbanInvestmentPlatformSubjectLevelDto> subjectLevelDtoSet = new HashSet<>();
for (Map<String, Object> m : objArrayList) { // for (Map<String, Object> m : objArrayList) {
UrbanInvestmentPlatformSubjectLevelDto dto = new UrbanInvestmentPlatformSubjectLevelDto(); // UrbanInvestmentPlatformSubjectLevelDto dto = new UrbanInvestmentPlatformSubjectLevelDto();
Long companyIdCredit = MapUtils.getLong(m, "companyId", 0L); // Long companyIdCredit = MapUtils.getLong(m, "companyId", 0L);
String rate = MapUtils.getString(m, "bratingSubjectLevel"); // String rate = MapUtils.getString(m, "bratingSubjectLevel");
dto.setCompanyId(companyIdCredit); // dto.setCompanyId(companyIdCredit);
dto.setBratingSubjectLevel(rate); // dto.setBratingSubjectLevel(rate);
subjectLevelDtoSet.add(dto); // subjectLevelDtoSet.add(dto);
} // }
for (UrbanInvestmentPlatformSubjectLevelDto dto : subjectLevelDtoSet) { // for (UrbanInvestmentPlatformSubjectLevelDto dto : subjectLevelDtoSet) {
if (dto.getCompanyId().equals(companyId)) { // if (dto.getCompanyId().equals(companyId)) {
companyMap.put("bratingSubjectLevel", dto.getBratingSubjectLevel()); // companyMap.put("bratingSubjectLevel", dto.getBratingSubjectLevel());
} // }
} // }
} }
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
} }
......
...@@ -391,14 +391,14 @@ ...@@ -391,14 +391,14 @@
<select id="selectAmountAnalyze" resultType="com.dsk.system.domain.business.vo.BusinessAnalyzeVo"> <select id="selectAmountAnalyze" resultType="com.dsk.system.domain.business.vo.BusinessAnalyzeVo">
select select
bi.amount_source,count(bi.id) businessCount,sum(bi.investment_amount) totalAmount bi.amount_source,count(bi.id) businessCount, ROUND(sum(bi.investment_amount), 4) totalAmount
<include refid="businessSearchSql"/> <include refid="businessSearchSql"/>
group by bi.amount_source group by bi.amount_source
</select> </select>
<select id="selectTypeAnalyze" resultType="com.dsk.system.domain.business.vo.BusinessAnalyzeVo"> <select id="selectTypeAnalyze" resultType="com.dsk.system.domain.business.vo.BusinessAnalyzeVo">
select select
bi.project_type,count(bi.id) businessCount,sum(bi.investment_amount) totalAmount bi.project_type,count(bi.id) businessCount, ROUND(sum(bi.investment_amount), 4) totalAmount
<include refid="businessSearchSql"/> <include refid="businessSearchSql"/>
group by bi.project_type group by bi.project_type
</select> </select>
......
...@@ -112,7 +112,7 @@ ...@@ -112,7 +112,7 @@
<select id="selectCooperationTop" resultType="com.dsk.system.domain.customer.vo.CustomerAnalyzeVo"> <select id="selectCooperationTop" resultType="com.dsk.system.domain.customer.vo.CustomerAnalyzeVo">
select select
ct.customer_id, ct.company_name, ct.company_id, ct.uip_id, count(bi.id) businessCount, ct.customer_id, ct.company_name, ct.company_id, ct.uip_id, count(bi.id) businessCount,
sum(bi.investment_amount) totalAmount ROUND(sum(bi.investment_amount), 4) totalAmount
from customer ct from customer ct
join customer_user ctu on ct.customer_id = ctu.customer_id join customer_user ctu on ct.customer_id = ctu.customer_id
left join business_info bi on (bi.customer_id = ct.customer_id and bi.status = 2) left join business_info bi on (bi.customer_id = ct.customer_id and bi.status = 2)
......
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