Commit bb6eab16 authored by Administrator's avatar Administrator

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

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