Commit bb6eab16 authored by Administrator's avatar Administrator

Merge remote-tracking branch 'origin/dev20230707' into dev20230707

parents dfbc9892 ae974026
......@@ -41,6 +41,7 @@
"clipboard": "2.0.8",
"core-js": "3.25.3",
"echarts": "^5.0.0",
"el-table-horizontal-scroll": "^1.2.5",
"element-resize-detector": "^1.2.4",
"element-ui": "2.15.12",
"file-saver": "2.0.5",
......
......@@ -88,7 +88,7 @@ export function getSelect(data) {
data: data
})
}
// 数据来源链接
// 中标公示来源链接
export function bidWinMergeDetail(data) {
return request({
url: '/enterpriseBussiness/bidWinMergeDetail',
......@@ -96,3 +96,19 @@ export function bidWinMergeDetail(data) {
data: data
})
}
// 四库业绩来源链接
export function skyProjectDetail(data) {
return request({
url: '/enterpriseBussiness/skyProjectDetail',
method: 'post',
data: data
})
}
// 荣誉奖项来源链接
export function awardDetail(data) {
return request({
url: '/enterpriseBussiness/awardDetail',
method: 'post',
data: data
})
}
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -407,6 +407,18 @@ ul, li {
background: #566380;
}
}
.el-scrollbar{
height: 16px;
.el-scrollbar__bar.is-horizontal{
height: 8px;
}
.el-scrollbar__thumb{
background: rgba(98,110,126,0.4);
&:hover{
background: #566380;
}
}
}
}
}
......
......@@ -13,7 +13,7 @@ import router from './router'
import directive from './directive' // directive
import plugins from './plugins' // plugins
import { download } from '@/utils/request'
import horizontalScroll from 'el-table-horizontal-scroll'
import './assets/icons' // icon
import './permission' // permission control
......@@ -59,6 +59,7 @@ Vue.component('FileUpload', FileUpload)
Vue.component('ImageUpload', ImageUpload)
Vue.component('ImagePreview', ImagePreview)
Vue.use(horizontalScroll)
Vue.use(directive)
Vue.use(plugins)
Vue.use(VueMeta)
......
......@@ -81,7 +81,7 @@
</div>
<div class="content content_wap2">
<div class="head_title">客户资信评级</div>
<el-row>
<el-row v-if="creditLevel.length > 0">
<el-col :span="14">
<div id="zxpj-echarts" style="height: 250px;"></div>
</el-col>
......@@ -100,6 +100,10 @@
</div>
</el-col>
</el-row>
<div class="empty" v-if="creditLevel.length === 0">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,没找到相关数据</div>
</div>
</div>
<div class="content_wap3">
<div class="flex-box query-box">
......@@ -216,8 +220,8 @@
defaultValue:new Date(),
pickerValue: [],
params:{
startTime:this.formatDate(new Date()),
endTime:this.formatDate(new Date())
startTime:'',
endTime:'',
},
data:{
open:false
......@@ -264,12 +268,16 @@
}
})
creditLevel().then(res=>{
let data=[]
for(let i=0; i<res.data.length; i++){
if(res.data[i].creditLevel){
this.creditLevel.push(res.data[i])
data.push(res.data[i])
}
}
this.initChart1(this.creditLevel)
this.creditLevel=data;
if(this.creditLevel.length > 0){
this.initChart1(this.creditLevel)
}
})
},
getFollowList(){
......@@ -829,26 +837,24 @@
}
}
.content_wap1{
.empty{
margin: 0 auto;
height: 300px;
text-align: center;
.img{
width: 108px;
height: 108px;
margin-bottom: 24px;
margin-top: 50px;
}
.p1{
color: #333333;
font-size: 16px;
}
.p2{
color: #999999;
font-size: 14px;
margin-top: 8px;
}
.empty{
margin: 0 auto;
height: 300px;
text-align: center;
.img{
width: 108px;
height: 108px;
margin-bottom: 24px;
margin-top: 50px;
}
.p1{
color: #333333;
font-size: 16px;
}
.p2{
color: #999999;
font-size: 14px;
margin-top: 8px;
}
}
.content_wap3{
......
<template>
<div class="headForm">
<div class="flex-box query-box">
<div class="flex-box query-params">
<div class="flex-box query-params" :class="flag?'box1':''">
<div class="flex-box headForm-text">
<!-- <img v-if="title" src="@/assets/images/detail/ico_title.png" /> -->
<!-- <span class="drawer-title" v-if="title">{{ title }}</span> -->
<template v-if="flag">
<img v-if="title" src="@/assets/images/detail/ico_title.png" />
<span class="drawer-title" v-if="title">{{ title }}</span>
</template>
<template v-if="slots">
<slot name="slot"></slot>
</template>
<!-- <div v-else>
<div v-if="flag">
<span class="ability-total" v-if="isTotal">{{ total }}条数据</span>
<span class="ability-total" v-if="amountTotal">,共计合作总金额:<i>{{ amountTotal }}</i>万元</span>
</div> -->
</div>
</div>
<div class="headForm-from">
<div class="from-item" :key="i" v-for="(form, i) in formData">
......@@ -96,6 +98,10 @@ export default {
type: String,
default: ''
},
flag: {
type: Boolean,
default: false
},
queryParams: {
type: Object,
default: {}
......@@ -143,6 +149,11 @@ export default {
width: 100%;
padding: 8px 17px 8px 0;
}
.box1{
padding: 8px 17px 8px 13px;
justify-content: space-between;
border-bottom: 1px solid #E1E1E1;
}
::v-deep .el-input__inner{
border: 0;
height: 32px;
......@@ -171,6 +182,12 @@ export default {
line-height: 32px;
}
.headForm-text{
.drawer-title{
font-size: 16px;
color: #232323;
font-weight: bold;
margin-right: 4px;
}
img{
width: 17px;
height: 17px;
......
......@@ -14,7 +14,7 @@
>
<template slot="slot">
<div class="flex-box query-add">
<el-button type="primary" icon="el-icon-plus" @click="drawer = true">添加商务信息</el-button>
<el-button type="primary" icon="el-icon-plus" @click="drawer = true">添加合作情况</el-button>
</div>
</template>
</head-form>
......
......@@ -82,7 +82,6 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await oftenAgencyPage(param)
......
......@@ -71,7 +71,6 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await tenderPage(param)
......
......@@ -8,13 +8,16 @@
@closed="cancel">
<head-detail-form
:title="title"
:flag="true"
:form-data="formData"
:query-params="queryParams"
:total="tableDataTotal"
:amountTotal="amountTotal"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:tableLoading="tableLoading"
:tableData="tableData"
......@@ -27,7 +30,7 @@
<template slot="dealTitle" slot-scope="scope">
<div class="flex-box">
<img class="tip-img" src="@/assets/images/detail/ico_pdf.png" v-if="scope.row.fileUrlL" @click="handlePic(scope.row.fileUrlL)"/>
<router-link :to="`/radar/Notice/details/${scope.row.bid}`" tag="a" class="a-link" v-if="scope.row.bid&&scope.row.dealTitle" v-html="scope.row.dealTitle"></router-link>
<div class="a-link" @click="linkTo(scope.row.bid)" v-if="scope.row.bid&&scope.row.dealTitle" v-html="scope.row.dealTitle" style="cursor: pointer"></div>
<span v-else v-html="scope.row.dealTitle || '--'"></span>
</div>
</template>
......@@ -43,18 +46,19 @@
import mixin from '../../mixins/mixin'
import {bidCooperatePage} from '@/api/detail/party-a/dealings'
import HeadDetailForm from "../../component/HeadDetailForm"
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
props: [
'data',
'title'
],
components: {
HeadDetailForm
HeadDetailForm,skeleton
},
mixins: [mixin],
data() {
return {
isSkeleton:true,
drawer: false,
queryParams: {
tendereeId: this.data.tendereeId,
......@@ -84,6 +88,10 @@ export default {
this.handleQuery()
},
methods: {
linkTo(id){
this.drawer = false
this.$router.push(`/radar/Notice/details/${id}`)
},
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
......@@ -92,6 +100,7 @@ export default {
if(res.code==200){
this.tableData = res.rows
}
this.isSkeleton = false;
this.tableDataTotal = res.total
this.amountTotal = res.totalAmount
},
......
......@@ -22,13 +22,17 @@
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
@sort-change="sortChange"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
>
<template slot="projectName" slot-scope="scope">
<span v-html="scope.row.projectName"></span>
</template>
<template slot="sourceType" slot-scope="scope">
<div class="flex-box">
<div class="a-link" @click="linkTo(scope)" v-if="scope.row.sourceId&&scope.row.sourceType=='中标业绩'" v-html="scope.row.sourceType" style="cursor: pointer"></div>
<span v-else-if="scope.row.sourceId" @click="linkTo1(scope)" class="a-link" style="cursor: pointer" v-html="scope.row.sourceType"></span>
<span v-else-if="scope.row.sourceId&&(scope.row.sourceType=='中标公示'||scope.row.sourceType=='四库业绩'||scope.row.sourceType=='荣誉奖项')" @click="linkTo1(scope)" class="a-link" style="cursor: pointer" v-html="scope.row.sourceType"></span>
<span v-else v-html="scope.row.sourceType || '--'"></span>
</div>
</template>
......@@ -39,7 +43,7 @@
<script>
import mixin from '../../mixins/mixin'
import {clientProjectPage,getSelect,bidWinMergeDetail} from '@/api/detail/party-a/dealings'
import {clientProjectPage,getSelect,bidWinMergeDetail,skyProjectDetail,awardDetail} from '@/api/detail/party-a/dealings'
import HeadDetailForm from "../../component/HeadDetailForm"
import skeleton from '@/views/project/projectList/component/skeleton'
......@@ -60,7 +64,7 @@ export default {
queryParams: {
cid: this.companyId,
companyId: this.data.companyId,
companyName: this.data.companyName,
companyName: this.data.companyName.replace(/<font color='red'>/g,'').replace(/<\/font>/g,''),
pageNum: 1,
pageSize: 20
},
......@@ -71,9 +75,9 @@ export default {
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目/工程名称查询', options: []},
],
forData: [
{label: '项目名称', prop: 'projectName', fixed: true},
{label: '公布时间', prop: 'time', width: '120',sortable:true},
{label: '本次合同金额(万元)', prop: 'amount', width: '180',sortable:true},
{label: '项目名称', prop: 'projectName', fixed: true,slot: true},
{label: '公布时间', prop: 'time', width: '120',sortable:'custom',descending: '3', ascending: '4'},
{label: '本次合同金额(万元)', prop: 'amount', width: '180',sortable:'custom',descending: '1', ascending: '2'},
{label: '项目类型', prop: 'projectTtype', width: '130'},
{label: '数据来源', prop: 'sourceType', width: '90', slot: true}
],
......@@ -132,11 +136,35 @@ export default {
this.$router.push(`/biddetail/${scope.row.sourceId}`)
},
linkTo1(scope){
bidWinMergeDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
window.open(res.data.sourceUrl, "_blank")
}
})
let url = ""
switch (scope.row.sourceType) {
case '中标公示':
bidWinMergeDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
url = res.data.sourceUrl
window.open(url, "_blank")
}
})
break;
case '荣誉奖项':
awardDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
url = res.data.sourceUrl
window.open(url, "_blank")
}
})
break;
case '四库业绩':
skyProjectDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
url = res.data.sourceUrl
window.open(url, "_blank")
}
})
break;
default:
break;
}
},
cancel() {
this.$emit('cancel')
......
......@@ -23,12 +23,16 @@
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@sort-change="sortChange"
@handle-current-change="handleCurrentChange"
>
<template slot="projectName" slot-scope="scope">
<span v-html="scope.row.projectName"></span>
</template>
<template slot="sourceType" slot-scope="scope">
<div class="flex-box">
<div class="a-link" @click="linkTo(scope)" v-if="scope.row.sourceId&&scope.row.sourceType=='中标业绩'" v-html="scope.row.sourceType" style="cursor: pointer"></div>
<span v-else-if="scope.row.sourceId" @click="linkTo1(scope)" class="a-link" style="cursor: pointer" v-html="scope.row.sourceType"></span>
<span v-else-if="scope.row.sourceId&&(scope.row.sourceType=='中标公示'||scope.row.sourceType=='四库业绩'||scope.row.sourceType=='荣誉奖项')" @click="linkTo1(scope)" class="a-link" style="cursor: pointer" v-html="scope.row.sourceType"></span>
<span v-else v-html="scope.row.sourceType || '--'"></span>
</div>
</template>
......@@ -39,7 +43,7 @@
<script>
import mixin from '../../mixins/mixin'
import { supplierProjectPage,getSelect,bidWinMergeDetail } from '@/api/detail/party-a/dealings'
import { supplierProjectPage,getSelect,bidWinMergeDetail,skyProjectDetail,awardDetail } from '@/api/detail/party-a/dealings'
import HeadDetailForm from "../../component/HeadDetailForm"
import skeleton from '@/views/project/projectList/component/skeleton'
......@@ -59,7 +63,7 @@ export default {
drawer: false,
queryParams: {
companyId: this.data.companyId,
companyName: this.data.companyName,
companyName: this.data.companyName.replace(/<font color='red'>/g,'').replace(/<\/font>/g,''),
cid: this.companyId,
pageNum: 1,
pageSize: 20
......@@ -71,9 +75,9 @@ export default {
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入合作项目/工程名称查询', options: [], width: 260},
],
forData: [
{label: '项目名称', prop: 'projectName', fixed: true},
{label: '公布时间', prop: 'time', width: '120',sortable:true},
{label: '本次合同金额(万元)', prop: 'amount', width: '180',sortable:true},
{label: '项目名称', prop: 'projectName', fixed: true,slot: true},
{label: '公布时间', prop: 'time', width: '120',sortable:'custom',descending: '3', ascending: '4'},
{label: '本次合同金额(万元)', prop: 'amount', width: '180',sortable:'custom',descending: '1', ascending: '2'},
{label: '项目类型', prop: 'projectType', width: '130'},
{label: '数据来源', prop: 'sourceType', width: '90', slot: true}
],
......@@ -132,11 +136,35 @@ export default {
this.$router.push(`/biddetail/${scope.row.sourceId}`)
},
linkTo1(scope){
bidWinMergeDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
window.open(res.data.sourceUrl, "_blank")
}
})
let url = ""
switch (scope.row.sourceType) {
case '中标公示':
bidWinMergeDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
url = res.data.sourceUrl
window.open(url, "_blank")
}
})
break;
case '荣誉奖项':
awardDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
url = res.data.sourceUrl
window.open(url, "_blank")
}
})
break;
case '四库业绩':
skyProjectDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
url = res.data.sourceUrl
window.open(url, "_blank")
}
})
break;
default:
break;
}
},
cancel() {
this.$emit('cancel')
......
......@@ -59,11 +59,11 @@ export default {
title:'',
queryParams: {
cid: this.companyId,
sort: 3,
sort: 5,
pageNum: 1,
pageSize: 20
},
defaultSort: {},
defaultSort: {prop: 'count', order: 'descending'},
forData: [
{label: '客户名称', prop: 'companyName', minWidth: '350', slot: true},
// {label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'},
......
......@@ -94,7 +94,6 @@ export default {
},
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
let res = await historySendPage(param)
this.tableLoading = false
......
......@@ -50,11 +50,11 @@
</div>
</el-col>
</el-row>
<div class="tips">注:数据来源大司空建筑大数据平台,统计范围为全国公开的施工内土地交易项目,未公开的不含在内</div>
<div class="content content_wap1">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">集团中标统计</span>
<div class="tips">注:数据来源大司空建筑大数据平台,统计范围为全国公开的施工内土地交易项目,未公开的不含在内</div>
</div>
<div class="flex-box">
<div class="search">
......@@ -116,6 +116,7 @@
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">大项目中标排行榜</span>
<div class="tips">注:数据来源大司空建筑大数据平台,统计范围为全国公开的施工内土地交易项目,未公开的不含在内</div>
</div>
<div class="flex-box">
<div class="search">
......@@ -190,7 +191,7 @@
<div class="list-content">
<p class="list-content-text">
<span>中标企业:</span>
<span><router-link :to="`/enterprise/${encodeStr(item.jskEid)}`" tag="a" class="a-link companyName" v-html="item.ename" ></router-link></span>
<span @click="getUipIdByCid(item.jskEid)" class="a-link">{{item.ename}}</span>
</p>
<p class="list-content-text">
<span>中标金额:</span>
......@@ -262,7 +263,7 @@
:timeList="timeList"
v-model="queryParams2.time"
timeValue="近七天"
placeholder="中标日期"
:placeholder="timePlaceholder"
@handle-search="changeSelect3"/>
</el-form-item>
</el-form>
......@@ -670,7 +671,7 @@ export default {
provinceId:'',
projects:[],
amount:'',
time:'',
time:[this.formatDate(new Date(new Date().getTime() - 3600 * 1000 * 24 * 7)),this.formatDate(new Date())],
pageNum:1,
pageSize:10
},
......@@ -686,6 +687,7 @@ export default {
dxmzbState:true,
zhaobiaoIsSkeleton:true,
placeholder:'中标金额',
timePlaceholder:'中标日期',
show_page:true,
MaxPage:500,
};
......@@ -922,7 +924,7 @@ export default {
top:30,
left:80,
right:90,
bottom:30,
bottom:50,
},
series: [
{
......@@ -1215,7 +1217,7 @@ export default {
top:30,
left:60,
right:90,
bottom:30,
bottom:50,
// containLabel: true
},
// dataZoom:[
......@@ -1303,10 +1305,12 @@ export default {
if(this.activeName === 'first'){
this.getBigWinningBidsPage()
this.placeholder='中标金额'
this.timePlaceholder='中标日期'
}
if(this.activeName === 'second'){
this.getBigBidPage()
this.placeholder='总投资'
this.timePlaceholder='发布日期'
}
},
handleClickTab1(){},
......@@ -1417,6 +1421,14 @@ export default {
}
}
},
// 时间格式化
formatDate(timeStr) {
let date = new Date(Number(timeStr))
let year = date.getFullYear()
let month = String(date.getMonth() + 1).padStart(2, 0)
let day = String(date.getDate()).padStart(2, 0)
return `${year}-${month}-${day}`
},
}
};
</script>
......@@ -1503,17 +1515,19 @@ export default {
color: #999999;
font-size: 12px;
margin: 12px 0;
padding-left: 16px;
}
.content{
background: #ffffff;
padding: 16px;
margin-top: 12px;
.query-box{
margin-bottom: 16px;
}
}
.content_wap1{
height: 430px;
margin-bottom: 12px;
}
.content_wap2{
height: 430px;
......@@ -1718,23 +1732,6 @@ export default {
align-items: center;
margin-right: 32px;
font-size: 14px;
span:first-child {
font-weight: 400;
color: rgba(35, 35, 35, 0.4);
line-height: 15px
}
span:last-child {
font-weight: 400;
color: rgba(35, 35, 35, 0.8);
line-height: 15px
}
.blue {
color: #0081FF !important;
cursor: pointer;
}
}
}
......
......@@ -111,10 +111,10 @@ export default {
params.provinceIds=[this.provinceId[0]]
}
if(this.provinceId.length > 1){
params.cityId=[this.provinceId[1]]
params.cityIds=[this.provinceId[1]]
}
if(this.provinceId.length > 2){
params.areaId=[this.provinceId[2]]
params.areaIds=[this.provinceId[2]]
}
// params.provinceIds=[this.dataQuery.provinceId]
// this.isSkeleton = true
......
......@@ -29,14 +29,15 @@
</div>
</div>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<!--v-horizontal-scroll="'always'"-->
<div class="table-item">
<el-table
class="fixed-table"
:data="tableData"
element-loading-text="Loading"
@sort-change="sortChange"
border
max-height="640"
border
highlight-current-row
v-if="tableDataTotal > 0 && !isSkeleton"
:default-sort = "{prop: 'gdp', order: 'descending'}"
......
......@@ -11,7 +11,7 @@
</el-select>
</div>
</div>
<div class="content_box" v-if="gyflState">
<div class="content_box" v-if="gyfsList.length > 0 && !isSkeleton">
<div class="box-left">
<div id="echarts1" style="height: 280px"></div>
</div>
......@@ -36,12 +36,12 @@
</el-table>
</div>
</div>
<div class="empty" v-if="!gyflState">
<div class="empty" v-if="gyfsList.length === 0 && !isSkeleton">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
<div v-if="!isSkeleton" class="td_content">
<div v-if="!tdytState" class="td_content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">全国土地交易项目土地用途</span>
......@@ -50,7 +50,7 @@
</el-select>
</div>
</div>
<div class="content_box" v-if="tdytState">
<div class="content_box" v-if="tdytList.length > 0 && !tdytState">
<div class="box-left">
<div id="echarts2" style="height: 280px"></div>
</div>
......@@ -75,12 +75,12 @@
</el-table>
</div>
</div>
<div class="empty" v-if="!tdytState">
<div class="empty" v-if="tdytList.length === 0 && !tdytState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
<div v-if="!isSkeleton" class="td_content">
<div v-if="!topState" class="td_content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">全国土地交易项目地区Top10</span>
......@@ -92,7 +92,7 @@
</el-select>
</div>
</div>
<div class="content_box" v-if="topList.length > 0 && !isSkeleton">
<div class="content_box" v-if="topList.length > 0 && !topState">
<div class="box-left" style="width: 60%;">
<div id="echarts3" style="height: 300px"></div>
</div>
......@@ -117,18 +117,18 @@
</el-table>
</div>
</div>
<div class="empty" v-if="topList.length === 0 && !isSkeleton">
<div class="empty" v-if="topList.length === 0 && !topState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
<div v-if="!isSkeleton" class="td_content">
<div v-if="!nftjState" class="td_content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">全国土地交易项目年份统计</span>
</div>
</div>
<div class="content_box">
<div class="content_box" v-if="nftjList.length > 0 && !nftjState">
<div class="box-left" style="width: 60%;">
<div id="echarts4" style="height: 300px"></div>
</div>
......@@ -187,6 +187,7 @@ export default {
gyflState:true,
tdytState:true,
topState:true,
nftjState:true,
// typeName:['住宅用地','工业用地','城镇住宅用地','其他商服用地','公共设施用地','公路用地','城镇村道路用地','公园与绿地',
// '工矿仓储用地','零售商业用地','科研用地','街巷用地','机关团体用地','商服用地','商务金融用地']
}
......@@ -194,15 +195,16 @@ export default {
created() {
this.dataRegion()
this.yearsData()
setTimeout(() => {
},
mounted() {
this.$nextTick(()=>{
this.getCountLandMarketByType()
this.getCountLandMarketByTypeTd()
this.getCountLandMarketByProvince()
this.getCountLandMarketByYear()
this.isSkeleton=false;
}, 1500);
},
mounted() {
})
},
beforeDestroy(){
......@@ -211,7 +213,8 @@ export default {
getCountLandMarketByType(){
// this.isSkeleton = true
countLandMarketByType({type:'供应方式',yearStr:this.years.join(",")}).then(res => {
// this.isSkeleton = false
this.isSkeleton = false
this.gyflState = false
this.gyfsList=res.data.provinceDate;
var list=[];
for(var i=0;i<res.data.provinceDate.length;i++){
......@@ -222,12 +225,9 @@ export default {
list.push(obj)
}
if(list.length > 0){
this.gyflState=true
this.$nextTick(() => {
this.initChart1(list)
})
}else {
this.gyflState=false;
}
})
},
......@@ -235,9 +235,9 @@ export default {
// this.isSkeleton = true
countLandMarketByType({type:'土地用途',yearStr:this.years1.join(",")}).then(res => {
// this.isSkeleton = false
this.tdytState=false;
this.tdytList=res.data.provinceDate;
if(res.data.provinceDate.length > 0){
this.tdytState=true
var list=[];
for(var i=0;i<10;i++){
var obj={};
......@@ -251,10 +251,7 @@ export default {
this.initChart2(list)
})
}
}else {
this.tdytState=false;
}
})
},
getCountLandMarketByProvince(){
......@@ -264,9 +261,8 @@ export default {
if(this.address.length > 0){
params.provinceId=this.address.join(",")
}
// this.isSkeleton = true
countLandMarketByProvince(params).then(res => {
// this.isSkeleton = false
this.topState = false
this.topList=res.data.provinceDate;
var list=[];
if(res.data.provinceDate){
......@@ -288,10 +284,10 @@ export default {
},
getCountLandMarketByYear(){
countLandMarketByYear().then(res => {
this.nftjState=false;
this.nftjList=res.data.yearDate;
var list=[];
if(res.data.yearDate){
this.topState=true
for(var i=0;i<res.data.yearDate.length;i++){
var obj={};
obj.type=res.data.yearDate[i].type;
......@@ -300,11 +296,11 @@ export default {
obj.typeList=res.data.yearDate[i].typeList
list.push(obj)
}
this.$nextTick(() => {
this.initChart4(list)
})
}else {
this.topState=false;
if(list.length > 0){
this.$nextTick(() => {
this.initChart4(list)
})
}
}
})
},
......
<template>
<div class="app-container">
<div class="app-container" style="padding-bottom: 16px;">
<div class="chart-top clearfix">
<div class="left">
<el-card class="box-card noborder">
<div class="flex">
<div class="flex">
<div class="top-icons" @click="linkTo()">
<img class="top-img" src="@/assets/images/project/icon_6.png">
<div class="number">{{statistics.totalCount}}<span></span></div>
......@@ -52,7 +52,7 @@
<div>水利项目</div>
</div>
</div> -->
<!-- <div class="cardtitles i">储备项目类</div>
<!-- <div class="cardtitles i">储备项目类</div>
<div class="gzlist">
<div>
<img src="@/assets/images/project/EPC.png">
......@@ -119,7 +119,8 @@
</el-card> -->
<el-card class="box-card noborder pd16">
<h3>储备项目统计</h3>
<div class="flex-box clue-box" v-if="viewData1.length>0">
<skeleton v-if="isSkeleton1" style="padding: 16px"></skeleton>
<div class="flex-box clue-box" v-if="viewData1.length>0&&!isSkeleton1">
<div class="clue-echarts"><div id="echarts1" style="width: 100%;height:300px; margin: 0 auto;"></div></div>
<div class="table-item">
<el-table
......@@ -130,7 +131,7 @@
>
<el-table-column
prop="projectCategory"
label="项目类"></el-table-column>
label="项目类"></el-table-column>
<el-table-column
prop="businessCount"
label="储备数量">
......@@ -142,11 +143,12 @@
</el-table>
</div>
</div>
<no-data v-else/>
<no-data v-if="viewData1.length==0"/>
</el-card>
<el-card class="box-card noborder pd16">
<h3>储备项目资金来源</h3>
<div class="flex-box clue-box" v-if="viewData2.length>0">
<skeleton v-if="isSkeleton2" style="padding: 16px"></skeleton>
<div class="flex-box clue-box" v-if="viewData2.length>0&&!isSkeleton2">
<div class="clue-echarts"><div id="echarts2" style="width: 100%;height:300px; margin: 0 auto;"></div></div>
<div class="table-item">
<el-table
......@@ -169,11 +171,12 @@
</el-table>
</div>
</div>
<no-data v-else/>
<no-data v-if="viewData2.length==0"/>
</el-card>
<el-card class="box-card noborder pd16">
<h3>已合作项目统计</h3>
<div class="flex-box clue-box" v-if="viewData3.length>0">
<skeleton v-if="isSkeleton3" style="padding: 16px"></skeleton>
<div class="flex-box clue-box" v-if="viewData3.length>0&&!isSkeleton3">
<div class="clue-echarts"><div id="echarts3" style="width: 100%;height:300px; margin: 0 auto;"></div></div>
<div class="table-item">
<el-table
......@@ -184,7 +187,7 @@
>
<el-table-column
prop="projectCategory"
label="项目类"></el-table-column>
label="项目类"></el-table-column>
<el-table-column
prop="businessCount"
label="中标数量">
......@@ -196,7 +199,7 @@
</el-table>
</div>
</div>
<no-data v-else/>
<no-data v-if="viewData3.length==0"/>
</el-card>
<el-card class="box-card noborder pd16">
<h3>公招项目地区统计</h3>
......@@ -206,6 +209,7 @@
@change="dateChange4"
type="daterange"
value-format="yyyy-MM-dd"
unlink-panels
size="small"
range-separator="至"
start-placeholder="开始日期"
......@@ -216,7 +220,8 @@
<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">
<skeleton v-if="isSkeleton4" style="padding: 16px"></skeleton>
<div class="flex-box clue-box" v-if="viewData4.length>0&&!isSkeleton4">
<div class="drawChinese">
<div id="drawChinese" style="width: 411px; height: 360px;"></div>
<!-- <img src="@/static/img/index/map-nhzd.png" class="nhzd" alt="南海诸岛" title="南海诸岛"> -->
......@@ -244,7 +249,7 @@
</el-table>
</div>
</div>
<no-data v-else/>
<no-data v-if="viewData4.length==0"/>
</el-card>
<el-card class="box-card noborder pd16">
<h3>公招项目投资金额统计</h3>
......@@ -254,6 +259,7 @@
@change="dateChange5"
type="daterange"
value-format="yyyy-MM-dd"
unlink-panels
size="small"
range-separator="至"
start-placeholder="开始日期"
......@@ -264,7 +270,8 @@
<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">
<skeleton v-if="isSkeleton5" style="padding: 16px"></skeleton>
<div class="flex-box clue-box" v-if="viewData5.length>0&&!isSkeleton5">
<div class="clue-echarts"><div id="echarts5" style="width: 100%;height:300px; margin: 0 auto;"></div></div>
<div class="table-item">
<el-table
......@@ -284,9 +291,9 @@
</el-table>
</div>
</div>
<no-data v-else/>
<no-data v-if="viewData5.length==0"/>
</el-card>
<el-card class="box-card noborder" >
<el-card class="box-card noborder" style="margin-bottom:0;">
<div >
<div class="item_title">
<h3>跟进动态</h3>
......@@ -296,6 +303,7 @@
@change="dateChange6"
type="daterange"
value-format="yyyy-MM-dd"
unlink-panels
size="small"
range-separator="至"
start-placeholder="开始日期"
......@@ -308,27 +316,36 @@
<el-radio-button label="自定义"></el-radio-button>
</el-radio-group>
</div>
<template v-if="viewData6.length>0" >
<skeleton v-if="isSkeleton6" style="padding: 16px"></skeleton>
<template v-if="viewData6.length>0&&!isSkeleton6" >
<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>
<span class="label" v-if="item.businessId||item.projectName">关联项目:</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>
<template v-if="item.nickName">
<span class="label">跟进人:</span>
<span>{{ item.nickName }}</span>
</template>
<template v-if="item.visitPerson">
<span class="label">拜访对象:</span>
<span>{{ item.visitPerson }}</span>
</template>
<template v-if="item.visitTime">
<span class="label">本次拜访时间:</span>
<span>{{ item.visitTime }}</span>
</template>
<template v-if="item.nextVisitTime">
<span class="label">下次拜访时间:</span>
<span>{{ item.nextVisitTime }}</span>
</template>
</div>
</div>
</div>
</template>
<no-data style="margin:20px 0" v-else/>
<no-data :condition="true" style="padding:40px" v-if="viewData6.length==0"/>
</div>
</el-card>
</div>
......@@ -343,12 +360,19 @@
import addproject from '../projectList/component/addProject'
import NoData from '../../component/noData'
import '@/assets/lib/china.js'
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
name: 'Overview',
components:{addproject,NoData},
components:{addproject,NoData,skeleton},
data() {
return {
isSkeleton1:true,
isSkeleton2:true,
isSkeleton3:true,
isSkeleton4:true,
isSkeleton5:true,
isSkeleton6:true,
projectName:'',
datatype:'1',//切换类型
viewData1:[],
......@@ -377,7 +401,7 @@ export default {
date5:'',
startDate5:'',
endDate5:'',
radio6:'今日',
radio6:'',
date6:'',
startDate6:'',
endDate6:'',
......@@ -395,7 +419,7 @@ export default {
this.getAllRecord();
getStatistics().then(res=>{
if(res.code==200){
this.statistics = res.data
this.statistics = res.data;
}
})
window.addEventListener("resize", this.resizeEcharts);
......@@ -408,7 +432,6 @@ export default {
},
methods: {
getAllRecord(page){
console.log(this.$store.state)
this.recordParams.userId = this.$store.state.user.userId
if(page){
this.recordParams.pageNum = 1;
......@@ -416,6 +439,7 @@ export default {
}
getAllRecord(this.recordParams).then(res=>{
if(res.code==200){
this.isSkeleton6 = false;
this.recordTotal = res.total
this.viewData6 = this.viewData6.concat(res.rows)
}
......@@ -424,8 +448,15 @@ export default {
getCount1(){
getCount(0).then(res=>{
if(res.code==200){
this.isSkeleton1 = false;
this.viewData1 = res.data;
if(res.data.length>0){
if(this.viewData1.length>0){
for(var i=0;i< this.viewData1.length;i++){
if(!this.viewData1[i].projectCategory){
this.viewData1.splice(i,1)
i--
}
}
this.$nextTick(()=>{
let chartDom1 = document.getElementById("echarts1")
this.myChart1 = echarts.init(chartDom1)
......@@ -438,6 +469,7 @@ export default {
getCount2(){
getCount(2).then(res=>{
if(res.code==200){
this.isSkeleton3 = false;
this.viewData3 = res.data;
if(res.data.length>0){
this.$nextTick(()=>{
......@@ -452,8 +484,15 @@ export default {
getAmount(){
getAmount().then(res=>{
if(res.code==200){
this.isSkeleton2 = false;
this.viewData2 = res.data;
if(res.data.length>0){
for(var i=0;i< this.viewData2.length;i++){
if(!this.viewData2[i].amountSource){
this.viewData2.splice(i,1)
i--
}
}
this.$nextTick(()=>{
let chartDom2 = document.getElementById("echarts2")
this.myChart2 = echarts.init(chartDom2)
......@@ -473,10 +512,13 @@ export default {
}
countGroupByProvince(data).then(res=>{
if(res.code==200){
this.isSkeleton4 = false;
this.viewData4 = res.data;
if(this.viewData4.length>0){
this.viewData4.map(item=>{
if(item.money>0){
item.money = Number(item.money)
}
item.name = item.type
item.value = {count:item.count}
item.select = {
......@@ -490,8 +532,8 @@ export default {
}
})
this.$nextTick(()=>{
console.log(this.viewData4)
let chartDom1 = document.getElementById("drawChinese")
this.myChart4 = echarts.init(chartDom1)
this.initChart4()
})
}
......@@ -508,7 +550,8 @@ export default {
}
rangByMoney(data).then(res=>{
if(res.code==200){
this.viewData5 = res.data;
this.isSkeleton5 = false;
this.viewData5 = res.data.reverse();
this.$nextTick(()=>{
let chartDom5 = document.getElementById("echarts5")
this.myChart5 = echarts.init(chartDom5)
......@@ -536,7 +579,7 @@ export default {
grid: {
left: '3%',
right: '4%',
bottom: '3%',
bottom: '10%',
containLabel: true
},
xAxis: [
......@@ -551,6 +594,7 @@ export default {
],
yAxis: [
{
name: '单位:个',
type: 'value',
splitLine : { //网格线
lineStyle: {
......@@ -559,6 +603,11 @@ export default {
}
},
{
nameTextStyle: {
padding: [0, 10, 0, 50], // 四个数字分别为上右下左与原位置距离
color: '#666666',
},
name: '单位:万元',
type: 'value',
splitLine : { //网格线
show:false
......@@ -601,7 +650,7 @@ export default {
},
initChart2(){
//储备项目统计
//储备项目资金来源统计
let data =[]
this.viewData2.length>0&&this.viewData2.map(item=>{
data.push({value:item.totalAmount,name:item.amountSource})
......@@ -643,7 +692,7 @@ export default {
},
initChart3(){
//储备项目统计
//合作项目统计
let barData1 = [],xAxisData1 = [],lineData1=[];
this.viewData3.length>0&&this.viewData3.map(item=>{
barData1.push(item.businessCount)
......@@ -676,6 +725,7 @@ export default {
],
yAxis: [
{
name: '单位:个',
type: 'value',
splitLine : { //网格线
lineStyle: {
......@@ -684,7 +734,12 @@ export default {
}
},
{
name: '单位:万元',
type: 'value',
nameTextStyle: {
padding: [0, 10, 0, 50], // 四个数字分别为上右下左与原位置距离
color: '#666666',
},
splitLine : { //网格线
show:false
},
......@@ -727,18 +782,21 @@ export default {
},
//中国地图
initChart4(){
let chartDom1 = document.getElementById("drawChinese")
this.myChart4 = echarts.init(chartDom1)
let _this = this
// 指定图表的配置项和数据
// 绘制图表
let data =[]
this.viewData4.length>0&&this.viewData4.map(item=>{
data.push({value:item.count,name:item.name,money:item.money})
})
let options = {
tooltip: {
trigger: 'item',
show: true,
formatter: function(params) {
console.dir(params )
return `${params.value}`
return `<span style="color:rgba(35, 35, 35, 1);font-size:14px;">${params.name}</span><br>
<span style="color:#3D3D3D;font-size:12px;">招标数量</span><span style="color:#3D3D3D;font-size:12px;font-weight:700;"> ${params.value}</span><br>
<span style="color:#3D3D3D;font-size:12px;">总投资(万元)</span><span style="color:#3D3D3D;font-size:12px;font-weight:700;"> ${params.data.money}</span><br>
`
}
},
// 左侧小导航图标
......@@ -748,7 +806,7 @@ export default {
y: 'center',
min: 0,
max: 830000,
color: ['#DDECFF', '#ADD4FF']
color: ['#D1E6FF']
},
selectedMode: 'single',
series: [{
......@@ -757,15 +815,11 @@ export default {
mapType: 'china',
roam: false,
zoom: 1.2,
label: {
normal: {
show: false, // 省份名称
},
emphasis: {
show: true,
textStyle:{color:"#FFFFFF", fontSize: '10'}//省份标签字体颜色
}
},
itemStyle: {
normal: { // 未选中状态
......@@ -776,22 +830,16 @@ export default {
}
},
emphasis: { // 也是选中样式
areaColor: '#0081FF',
label: {
show: true,
textStyle: {
color: '#FFFFFF'
}
}
areaColor: '#FDD85E',
}
},
data: this.viewData4
data: data
}]
}
_this.myChart4.setOption(options)
this.myChart4.setOption(options)
},
initChart5(){
//储备项目统计
//公招项目投资金额统计
let data =[]
this.viewData5.length>0&&this.viewData5.map(item=>{
data.push({value:item.count,name:item.rangeName})
......@@ -815,17 +863,12 @@ export default {
type: 'pie',
radius: ['50%','70%'],
data:data,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0)'
},
label: {
label: {
show: true,
fontSize: 14,
}
}
formatter(param) {
return param.value+'个';
}
},
}
]
}
......@@ -987,7 +1030,6 @@ export default {
<style lang="scss" scoped>
.chart-top{
margin-bottom: 12px;
.left{
float: left;
height: 122px;
......@@ -1063,6 +1105,12 @@ export default {
font-weight: 400;
margin-left: 2px;
}
&:hover{
color: #0081FF;
span{
color:#0081FF;
}
}
}
.compare{
font-size: 12px;
......@@ -1095,7 +1143,6 @@ export default {
}
.chart-bot{
height: auto;
margin-bottom: 12px;
.left{
float: left;
width: 353px;
......@@ -1213,7 +1260,7 @@ export default {
}
.scroll_box{
overflow-y:scroll ;
height: 512px;
max-height: 509px;
.item_wrap{
height: 102px;
......@@ -1322,7 +1369,7 @@ export default {
height: 16px;
background: url("../../../assets/images/project/add.png") no-repeat center center;
display: inline-block;
margin: 12px 8px 0 114px;
margin: 10px 8px 0 114px;
}
// &:hover{
......
......@@ -20,13 +20,16 @@
</div>
<div class="con i">
<span>资金来源 :</span>
<div class="inputxt" id="inputxt2">
<div class="inputxt22" id="inputxt2">
<div class="flex" v-if="nowedit == 2 && isDisableds == false">
<el-input placeholder="待添加" v-model="amountSource"></el-input>
<div class="flex">
<!-- <el-input placeholder="待添加" v-model="amountSource"></el-input> -->
<el-select placeholder="请选择" v-model="amountSource" @change="changes({'amountSource':amountSource})">
<el-option v-for="(item,index) in amountSourceList" :key="index" :label="item" :value="item"></el-option>
</el-select>
<!-- <div class="flex">
<div class="btnsmall btn_primary h28" @click="changes({'amountSource':amountSource})" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div> -->
</div>
<span :class="{'txt':!amountSource}" v-else @click="nowedit = 2">{{amountSource||'待添加'}}</span>
</div>
......@@ -214,6 +217,7 @@
},
data(){
return{
amountSourceList:['财政资金','自筹资金','债券资金','投资资金','贷款资金','其他'],
nowedit:-1,//当前正在编辑的文本
id:this.detailId ? this.detailId : parseInt(this.$route.query.id),
investmentAmount: '',//总投资额
......@@ -336,6 +340,14 @@
}
</script>
<style scoped>
<style scoped>
.baseinfo .row .con .inputxt22{
line-height: 36px;
margin-top: -5px;
display: inline-block;
width: 184px;
height: 28px;
border-radius: 2px;
cursor: pointer;
}
</style>
......@@ -19,7 +19,7 @@
</p>
<p class="list-content-text">
<span>成交金额:</span>
<span v-if="textList.transactionPrice">{{textList.transactionPrice}}万元</span>
<span v-if="textList.transactionPrice">{{textList.transactionPrice>0?textList.transactionPrice+'万元':'--'}}</span>
<span v-else>--</span>
</p>
<p class="list-content-text">
......@@ -169,9 +169,9 @@
</p>
<p>
<label class="label">起始价(万元)</label>
<span>{{textList.moneyBegin||"--"}}</span>
<span>{{textList.moneyBegin>0?textList.moneyBegin:'--'}}</span>
<label class="label">竞买保证金(万元)</label>
<span>{{textList.bondmoney||"--"}}</span>
<span>{{textList.bondmoney>0?textList.bondmoney:'--'}}</span>
</p>
<p>
<label class="label">加价幅度</label>
......@@ -181,7 +181,7 @@
</p>
<p>
<label class="label">成交价(万元)</label>
<span>{{textList.transactionPrice||"--"}}</span>
<span>{{textList.transactionPrice>0?textList.transactionPrice:'--'}}</span>
<label class="label">受让人</label>
<span>{{textList.company||"--"}}</span>
</p>
......
......@@ -129,7 +129,7 @@
ct.credit_level creditLevel, count(ct.customer_id) customerCount
from customer ct
join customer_user ctu on ct.customer_id = ctu.customer_id
where ctu.user_id = #{userId} and ct.credit_level is not null
where ctu.status = 0 and ctu.user_id = #{userId} and ct.credit_level is not null
group by ct.credit_level
) ct
left join sys_dict_data sdd on (sdd.dict_label = ct.creditLevel and sdd.dict_type = 'credit_level_type')
......
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