1844 lines
54 KiB
Vue
1844 lines
54 KiB
Vue
<template>
|
||
<div class="fullHeight">
|
||
<div v-if="company == 'henan' " id="map" class="fullHeight" style="width:100%;height: 100%"></div>
|
||
<vue-scroll v-else>
|
||
<div class="top blockBox">
|
||
<!-- 人员概况 -->
|
||
<div class="whiteBlock">
|
||
<div class="blockInner">
|
||
<div class="pageTitle">
|
||
{{ $t("message.firmProject.leftBlock1.title1") }}
|
||
</div>
|
||
<div
|
||
class="item1"
|
||
style="background-color: rgba(81, 129, 246, 0.06)"
|
||
>
|
||
<div class="numBox">
|
||
<img
|
||
src="@/assets/images/longguang/1.png"
|
||
v-if="company == 'longguang'"
|
||
/>
|
||
<img src="@/assets/images/companyProject/1.png" v-else />
|
||
<div class="dataBox">
|
||
<p class="num primaryText">
|
||
{{ statisticsCount.workercount.totalPerson }}
|
||
</p>
|
||
<p class="text">
|
||
{{ $t("message.firmProject.leftBlock1.Block1.text1") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="todayAdd">
|
||
<p class="">
|
||
{{ $t("message.firmProject.leftBlock1.Block1.todayAdd") }}
|
||
</p>
|
||
<p>
|
||
{{ $t("message.firmProject.leftBlock1.Block1.labour")
|
||
}}{{ statisticsCount.workercount.lwPersonYesterdayAdd
|
||
}}{{ $t("message.firmProject.leftBlock1.Block1.people") }}
|
||
{{ $t("message.firmProject.leftBlock1.Block1.manage")
|
||
}}{{ statisticsCount.workercount.glPersonYesterdayAdd
|
||
}}{{ $t("message.firmProject.leftBlock1.Block1.people") }}
|
||
{{ $t("message.firmProject.leftBlock1.Block1.RealNameSystem")
|
||
}}{{
|
||
statisticsCount.workercount.lwPersonYesterdayAdd +
|
||
statisticsCount.workercount.glPersonYesterdayAdd
|
||
}}{{ $t("message.firmProject.leftBlock1.Block1.people") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="item2">
|
||
<div class="itemInner">
|
||
<div class="numItem">
|
||
{{ $t("message.firmProject.leftBlock1.Block2.itemInner1")
|
||
}}<span class="primaryText">{{
|
||
statisticsCount.workercount.jfGlPersonTotal
|
||
}}</span>
|
||
</div>
|
||
<div class="numItem">
|
||
{{ $t("message.firmProject.leftBlock1.Block2.itemInner2")
|
||
}}<span class="primaryText">{{
|
||
statisticsCount.workercount.jlGlPersonTotal
|
||
}}</span>
|
||
</div>
|
||
</div>
|
||
<div class="itemInner">
|
||
<div class="numItem">
|
||
{{ $t("message.firmProject.leftBlock1.Block2.itemInner3")
|
||
}}<span class="primaryText">{{
|
||
statisticsCount.workercount.yfGlPersonTotal
|
||
}}</span>
|
||
</div>
|
||
<div class="numItem">
|
||
{{ $t("message.firmProject.leftBlock1.Block2.itemInner4")
|
||
}}<span class="primaryText">{{
|
||
statisticsCount.workercount.lwPersonTotal
|
||
}}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div
|
||
class="item1"
|
||
style="
|
||
background-color: rgba(68, 215, 182, 0.06);
|
||
margin-top: 16px;
|
||
"
|
||
>
|
||
<div class="numBox">
|
||
<img src="@/assets/images/companyProject/2.png" />
|
||
<div class="dataBox">
|
||
<p class="num primaryText3">
|
||
{{ statisticsCount.presencecount.totalPerson }}
|
||
</p>
|
||
<p class="text">
|
||
{{ $t("message.firmProject.leftBlock1.Block2.text2") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="item2">
|
||
<div class="itemInner">
|
||
<div class="numItem">
|
||
{{ $t("message.firmProject.leftBlock1.Block3.itemInner1")
|
||
}}<span class="primaryText">{{
|
||
statisticsCount.presencecount.glPersonTotal
|
||
}}</span>
|
||
</div>
|
||
<div class="numItem">
|
||
{{ $t("message.firmProject.leftBlock1.Block3.itemInner2")
|
||
}}<span class="primaryText">{{
|
||
statisticsCount.presencecount.lwPersonTotal
|
||
}}</span>
|
||
</div>
|
||
</div>
|
||
<div class="itemInner">
|
||
<div class="numItem">
|
||
{{ $t("message.firmProject.leftBlock1.Block3.itemInner3")
|
||
}}<span class="primaryText">{{
|
||
statisticsCount.presencecount.jfGlPersonTotal
|
||
}}</span>
|
||
</div>
|
||
<div class="numItem">
|
||
{{ $t("message.firmProject.leftBlock1.Block3.itemInner4")
|
||
}}<span class="primaryText">{{
|
||
statisticsCount.presencecount.jlGlPersonTotal
|
||
}}</span>
|
||
</div>
|
||
</div>
|
||
<div class="itemInner">
|
||
<div class="numItem">
|
||
{{ $t("message.firmProject.leftBlock1.Block3.itemInner5")
|
||
}}<span class="primaryText">{{
|
||
statisticsCount.presencecount.yfGlPersonTotal
|
||
}}</span>
|
||
</div>
|
||
<div class="numItem">
|
||
在场临时人员<span class="primaryText">{{
|
||
statisticsCount.presencecount.lsPersonTotal
|
||
}}</span>
|
||
</div>
|
||
<!-- <div class="numItem">
|
||
{{$t('message.firmProject.leftBlock1.Block3.itemInner6')}}<span class="primaryText">{{statisticsCount.presencecount.totalPerson}}</span>
|
||
</div> -->
|
||
</div>
|
||
</div>
|
||
<div class="numBoxContainer">
|
||
<div class="numBox">
|
||
<img src="@/assets/images/companyProject/3.png" />
|
||
<div class="dataBox">
|
||
<p class="num primaryText">
|
||
{{ statisticsCount.workercount.totalPerson }}
|
||
</p>
|
||
<p class="text">
|
||
{{ $t("message.firmProject.leftBlock1.Block3.numBox1") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="numBox">
|
||
<img src="@/assets/images/companyProject/4.png" />
|
||
<div class="dataBox">
|
||
<p class="num" style="color: #f67f51">
|
||
{{ statisticsCount.workercount.lsPersonTotal }}
|
||
</p>
|
||
<!-- <p class="text">{{$t('message.firmProject.leftBlock1.Block3.numBox2')}}</p> -->
|
||
<p class="text">临时人员数</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="numBoxContainer">
|
||
<div class="numBox">
|
||
<img
|
||
src="@/assets/images/longguang/5.png"
|
||
v-if="company == 'longguang'"
|
||
/>
|
||
<img src="@/assets/images/companyProject/5.png" v-else />
|
||
<div class="dataBox">
|
||
<p class="num primaryText3">
|
||
{{
|
||
(
|
||
(isNaN(
|
||
statisticsCount.workercount.manPersonTotal /
|
||
(statisticsCount.workercount.womanPersonTotal +
|
||
statisticsCount.workercount.manPersonTotal)
|
||
)
|
||
? 0
|
||
: statisticsCount.workercount.manPersonTotal /
|
||
(statisticsCount.workercount.womanPersonTotal +
|
||
statisticsCount.workercount.manPersonTotal)) * 100
|
||
).toFixed(2)
|
||
}}%
|
||
</p>
|
||
<p class="text">
|
||
{{ $t("message.firmProject.leftBlock1.Block3.numBox3") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="numBox">
|
||
<img
|
||
src="@/assets/images/longguang/6.png"
|
||
v-if="company == 'longguang'"
|
||
/>
|
||
<img src="@/assets/images/companyProject/6.png" v-else />
|
||
<div class="dataBox">
|
||
<p class="num" style="color: #7851f6">
|
||
{{ statisticsCount.currentMonthEducationPerson }}
|
||
</p>
|
||
<p class="text">
|
||
{{ $t("message.firmProject.leftBlock1.Block3.numBox4") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!-- 分布地图/宣传视频 -->
|
||
<div class="whiteBlock centerBlock">
|
||
<div class="blockInner">
|
||
<div class="tabBox">
|
||
<ul>
|
||
<li
|
||
:class="mapTabIndex ? 'active' : ''"
|
||
@click="change(1)"
|
||
>
|
||
分布地图
|
||
</li>
|
||
<li
|
||
:class="mapTabIndex ? '' : 'active'"
|
||
@click="change(0)"
|
||
>
|
||
宣传视频
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<el-button
|
||
v-show="
|
||
mapTabIndex == 0 &&
|
||
$store.state.userInfo.propagateFile &&
|
||
$store.state.userInfo.propagateFile != '-1'
|
||
"
|
||
type="danger"
|
||
size="mini"
|
||
class="deleteBtn"
|
||
@click="saveOrDeleteVideo(-1)"
|
||
>删除视频</el-button
|
||
>
|
||
<div class="mapContainer" v-show="mapTabIndex===0">
|
||
<video
|
||
v-if="
|
||
$store.state.userInfo.propagateFile &&
|
||
$store.state.userInfo.propagateFile != '-1'
|
||
"
|
||
:src="
|
||
$store.state.FILEURL + $store.state.userInfo.propagateFile
|
||
"
|
||
width="100%"
|
||
height="100%"
|
||
autoplay
|
||
controls
|
||
loop
|
||
></video>
|
||
<div class="placeholderBox" v-else>
|
||
<img
|
||
src="@/assets/images/longguang/noData.png"
|
||
alt=""
|
||
srcset=""
|
||
v-if="company == 'longguang'"
|
||
/>
|
||
<img src="@/assets/images/noData.png" alt="" srcset="" v-else />
|
||
<p>
|
||
{{ $t("message.videoManage.empty") }},
|
||
<el-upload
|
||
style="display: inline-block"
|
||
class="upload-demo"
|
||
:action="$store.state.UPLOADURL"
|
||
:on-success="(file) => handleSuccess(file, 1)"
|
||
:on-error="(file) => handleError(file, 1)"
|
||
:beforeUpload="(file) => handleBeforeUpload(file, 1)"
|
||
name="files"
|
||
:show-file-list="false"
|
||
>
|
||
<span>点我上传</span>
|
||
</el-upload>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mapContainer" v-show="mapTabIndex===1">
|
||
<div class="mapBack" v-if="showMapBack" @click="goBack">
|
||
<i class="el-icon-arrow-left"></i>
|
||
</div>
|
||
<div class="mapTitle" v-if="backArr.length != 0">
|
||
{{ backArr[backArr.length - 1].name }}
|
||
</div>
|
||
<div class="selectContainer">
|
||
<div
|
||
class="selectBox"
|
||
@click="showMapDialog = !showMapDialog"
|
||
v-show="backArr.length == 1"
|
||
>
|
||
城市列表
|
||
<i v-show="!showMapDialog" class="el-icon-arrow-up"></i>
|
||
<i v-show="showMapDialog" class="el-icon-arrow-down"></i>
|
||
</div>
|
||
<div
|
||
class="selectBox"
|
||
@click="showMapDialog = !showMapDialog"
|
||
v-show="backArr.length == 2"
|
||
>
|
||
项目列表
|
||
<i v-show="!showMapDialog" class="el-icon-arrow-up"></i>
|
||
<i v-show="showMapDialog" class="el-icon-arrow-down"></i>
|
||
</div>
|
||
<div class="selectContent" v-show="showMapDialog">
|
||
<vue-scroll style="height: 100%">
|
||
<div
|
||
class="selectItem"
|
||
@click="mapJumpToNext(index)"
|
||
v-for="(item, index) in mapData"
|
||
:key="index"
|
||
>
|
||
<p class="title">{{ item.name }}</p>
|
||
<div class="datas">
|
||
<div class="numBox2">
|
||
<p>{{ item.videoNum }}</p>
|
||
<p>视频数</p>
|
||
</div>
|
||
<div class="numBox2">
|
||
<p>{{ item.ufaceDevNum }}</p>
|
||
<p>门禁数</p>
|
||
</div>
|
||
<div class="numBox2" v-show="!item.projectName">
|
||
<p>{{ item.projectNum }}</p>
|
||
<p>项目数</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</vue-scroll>
|
||
</div>
|
||
</div>
|
||
<div id="map" class="fullHeight"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!-- 项目概况 -->
|
||
<div class="whiteBlock">
|
||
<div class="blockInner">
|
||
<div class="pageTitle">
|
||
{{ $t("message.firmProject.rightBlock1.title") }}
|
||
</div>
|
||
<div class="statictisBox">
|
||
<div class="numBox">
|
||
<div class="dataBox" v-if="backArr.length < 3">
|
||
<p class="num primaryText">
|
||
{{ statisticsCount.projectcount.projectNum }}
|
||
</p>
|
||
<p class="text">
|
||
{{ $t("message.firmProject.rightBlock1.numBox1") }}
|
||
</p>
|
||
</div>
|
||
<div class="dataBox" v-else>
|
||
<!-- bug100000-->
|
||
<p class="num primaryText">{{ mapData[0].households ||0}}</p>
|
||
<p class="text">
|
||
{{ $t("message.firmProject.rightBlock1.numBox3") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="numBox">
|
||
<div class="dataBox" v-if="backArr.length < 3">
|
||
<p class="num primaryText3">
|
||
{{ statisticsCount.projectcount.saleAcreageTotal }}
|
||
</p>
|
||
<p class="text">销售总面积</p>
|
||
</div>
|
||
<div class="dataBox" v-else>
|
||
<p class="num primaryText3">
|
||
{{ mapData[0].projectAcreage }}
|
||
</p>
|
||
<!-- 在建总面积-->
|
||
<p class="text">
|
||
{{ $t("message.firmProject.rightBlock1.numBox2") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="chart" ref="projectChart"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="bottom blockBox">
|
||
<!-- 年龄结构 -->
|
||
<div class="whiteBlock">
|
||
<div class="blockInner">
|
||
<div class="pageTitle">
|
||
{{ $t("message.firmProject.bottomBlock1.title") }}
|
||
</div>
|
||
<div class="statictisBox">
|
||
<div class="numBox">
|
||
<div class="dataBox">
|
||
<p class="num primaryText">
|
||
{{ statisticsCount.presencecount.avgage.toFixed(0) }}
|
||
</p>
|
||
<p class="text">
|
||
{{ $t("message.firmProject.bottomBlock1.numBox1") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="numBox">
|
||
<div class="dataBox">
|
||
<p class="num primaryText3">
|
||
{{ statisticsCount.workercount.avgage.toFixed(0) }}
|
||
</p>
|
||
<p class="text">
|
||
{{ $t("message.firmProject.bottomBlock1.numBox2") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="chart" ref="ageChart"></div>
|
||
</div>
|
||
</div>
|
||
<!-- 设备在线统计 -->
|
||
<div class="whiteBlock centerBlock">
|
||
<div class="blockInner">
|
||
<div class="pageTitle">
|
||
{{ $t("message.firmProject.bottomBlock2.title") }}
|
||
</div>
|
||
<div class="statictisBox big">
|
||
<div class="numBox">
|
||
<div class="dataBox">
|
||
<p class="num" style="color: #f67f51">
|
||
{{ statisticsCount.devcount.videoNum }}
|
||
</p>
|
||
<p class="text">
|
||
{{ $t("message.firmProject.bottomBlock2.numBox1") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="numBox">
|
||
<div class="dataBox">
|
||
<p class="num primaryText">
|
||
{{ statisticsCount.devcount.ufaceDevNum }}
|
||
</p>
|
||
<p class="text">
|
||
{{ $t("message.firmProject.bottomBlock2.numBox2") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="numBox">
|
||
<div class="dataBox">
|
||
<p class="num primaryText3">
|
||
{{ statisticsCount.devcount.environmentDevNum }}
|
||
</p>
|
||
<p class="text">
|
||
{{ $t("message.firmProject.bottomBlock2.numBox3") }}
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="chart" ref="devChart"></div>
|
||
</div>
|
||
</div>
|
||
<!-- 安全分析 -->
|
||
<div class="whiteBlock">
|
||
<div class="blockInner">
|
||
<div class="pageTitle">
|
||
{{ $t("message.firmProject.bottomBlock3.title") }}
|
||
</div>
|
||
<div
|
||
class="statictisBox"
|
||
style="margin: 5px 0 10px; font-size: 14px"
|
||
>
|
||
<p style="margin-right: 50px">
|
||
{{ $t("message.firmProject.bottomBlock3.numBox1") }}:<span
|
||
class="primaryText"
|
||
>{{ eduPersonTotal }}</span
|
||
>{{ $t("message.firmProject.bottomBlock3.people") }}
|
||
</p>
|
||
<p>
|
||
{{ $t("message.firmProject.bottomBlock3.numBox2") }}:<span
|
||
class="primaryText"
|
||
>{{
|
||
(
|
||
(isNaN(
|
||
eduPersonTotal / statisticsCount.workercount.totalPerson
|
||
)
|
||
? 0
|
||
: eduPersonTotal /
|
||
statisticsCount.workercount.totalPerson) * 100
|
||
).toFixed(2)
|
||
}}%</span
|
||
>
|
||
</p>
|
||
</div>
|
||
<!-- <div class="safeBtns">
|
||
<el-button type="primary" size="mini">安全培训统计</el-button>
|
||
<el-button type="info" size="mini">安全培训统计</el-button>
|
||
</div> -->
|
||
<div
|
||
class="chart"
|
||
ref="safeChart"
|
||
style="height: calc(100% - 50px)"
|
||
></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</vue-scroll>
|
||
<areaTree :videoType="0"></areaTree>
|
||
</div>
|
||
</template>
|
||
<script>
|
||
import {
|
||
getComapnyStatisticsListApi,
|
||
getWorkerStatisticsCountApi,
|
||
editCompanyBySnApi,
|
||
getProjectDevStatisticsCountApi,
|
||
selectWorkerSafeEducationStatisticsApi,
|
||
selectWorkerBlacklistStatisticsApi,
|
||
} from "@/assets/js/api/company/project";
|
||
import {
|
||
getProjectModuleList,
|
||
getAllModuleApi,
|
||
} from "@/assets/js/api/jxjadmin.js";
|
||
import { getProjectDetail } from "@/assets/js/api/baseInfo.js";
|
||
import areaTree from "@/components/areaTree";
|
||
import echarts from 'echarts4';;
|
||
|
||
export default {
|
||
components: { areaTree },
|
||
data() {
|
||
return {
|
||
mapObj: null,
|
||
mapName: "",
|
||
mapData: [],
|
||
backArr: [],
|
||
searchsn: "",
|
||
showMapDialog: false,
|
||
showMapBack: false,
|
||
statisticsCount: {
|
||
currentMonthEducationPerson: 0,
|
||
projectcount: {
|
||
constructionStageCount14: 0,
|
||
constructionStageCount13: 0,
|
||
constructionStageCount15: 0,
|
||
constructionStageCount10: 0,
|
||
constructionStageCount12: 0,
|
||
constructionStageCount11: 0,
|
||
constructionStageCount1: 0,
|
||
saleAcreageTotal: 0,
|
||
constructionStageCount9: 0,
|
||
constructionStageCount8: 0,
|
||
constructionStageCount7: 0,
|
||
constructionStageCount6: 0,
|
||
constructionStageCount5: 0,
|
||
constructionStageCount4: 0,
|
||
constructionStageCount3: 0,
|
||
constructionStageCount2: 0,
|
||
projectNum: 0,
|
||
},
|
||
workercount: {
|
||
lwPersonYesterdayAdd: 0,
|
||
eduPersonTotal: 0,
|
||
jfGlPersonTotal: 0,
|
||
age18: 0,
|
||
age18to25: 0,
|
||
womanPersonTotal: 0,
|
||
lsPersonTotal: 0,
|
||
jlGlPersonTotal: 0,
|
||
age45to60: 0,
|
||
lwPersonTotal: 0,
|
||
manPersonTotal: 0,
|
||
totalPerson: 0,
|
||
age25to35: 0,
|
||
glPersonTotal: 0,
|
||
yfGlPersonTotal: 0,
|
||
avgage: 0,
|
||
age35to45: 0,
|
||
glPersonYesterdayAdd: 0,
|
||
age60: 0,
|
||
},
|
||
devcount: { ufaceDevNum: 0, videoNum: 0, environmentDevNum: 0 },
|
||
presencecount: {
|
||
jfGlPersonTotal: 0,
|
||
age18: 0,
|
||
age18to25: 0,
|
||
womanPersonTotal: 0,
|
||
lsPersonTotal: 0,
|
||
jlGlPersonTotal: 0,
|
||
age45to60: 0,
|
||
lwPersonTotal: 0,
|
||
manPersonTotal: 0,
|
||
totalPerson: 0,
|
||
age25to35: 0,
|
||
glPersonTotal: 0,
|
||
yfGlPersonTotal: 0,
|
||
avgage: 0,
|
||
age35to45: 0,
|
||
age60: 0,
|
||
},
|
||
},
|
||
mapTabIndex: 1,
|
||
fullscreenLoading: null,
|
||
eduPersonTotal: 0,
|
||
company: "",
|
||
};
|
||
},
|
||
watch: {
|
||
"$store.state.mapBackArr": function () {
|
||
this.initData();
|
||
},
|
||
},
|
||
created() {
|
||
this.company = COMPANY;
|
||
|
||
this.$store.commit("setIsShowBackIndex", false);
|
||
},
|
||
mounted() {
|
||
|
||
this.initMap();
|
||
//获取地图数据
|
||
this.initData(true);
|
||
// this.getAllModule();
|
||
},
|
||
methods: {
|
||
//地图/视频切换
|
||
change(index){
|
||
console.log('切换的索引',index);
|
||
this.mapTabIndex=index
|
||
},
|
||
//安全分析
|
||
getSafeData() {
|
||
selectWorkerSafeEducationStatisticsApi({ sn: this.searchsn }).then(
|
||
(res) => {
|
||
console.log('培训学校',res)
|
||
var xData = [],
|
||
yData1 = [],
|
||
yData2 = [];
|
||
if (res.result) {
|
||
this.eduPersonTotal = res.result.totalEducationPerson;
|
||
var arr = res.result.list;
|
||
arr.forEach((element) => {
|
||
xData.push(element.name);
|
||
yData1.push(element.num);
|
||
});
|
||
}
|
||
selectWorkerBlacklistStatisticsApi({ sn: this.searchsn }).then(
|
||
(res) => {
|
||
if (res.result) {
|
||
var arr = res.result.list;
|
||
arr.forEach((element) => {
|
||
if (xData.length == 0) {
|
||
xData.push(element.name);
|
||
}
|
||
yData2.push(element.num);
|
||
});
|
||
}
|
||
this.createdSafeCharts(xData, yData1, yData2);
|
||
}
|
||
);
|
||
}
|
||
);
|
||
},
|
||
//设备在线统计
|
||
getDevCountStatictis() {
|
||
getProjectDevStatisticsCountApi({ sn: this.searchsn }).then((res) => {
|
||
console.log('设备在线统计',res.result.videoList)
|
||
if (res.result) {
|
||
var arr3 = res.result.environmentList;
|
||
var arr2 = res.result.ufaceList;
|
||
var arr1 = res.result.videoList;
|
||
console.log('arr1数据',arr1);
|
||
arr1.forEach((element, index) => {
|
||
arr1[index].value1 = (element.devOnlineNum / element.devNum) * 100;
|
||
arr1[index].value2 =(arr2[index].devOnlineNum / arr2[index].devNum) * 100;
|
||
if(arr1[index].value3){
|
||
arr1[index].value3 =(arr3[index].devOnlineNum / arr3[index].devNum) * 100;
|
||
}else{
|
||
arr1[index].value3=0
|
||
}
|
||
// setTimeout(()=>{
|
||
// arr1[index].value3 =(arr3[index].devOnlineNum / arr3[index].devNum?(arr3[index].devOnlineNum / arr3[index].devNum:0) * 100;
|
||
|
||
// },2000)
|
||
console.log(' arr1[index].value3', arr1[index].value3);
|
||
|
||
arr1[index].name = element.queryTime;
|
||
});
|
||
console.log(arr1);
|
||
this.createDevChart(arr1);
|
||
} else {
|
||
this.createDevChart([]);
|
||
}
|
||
});
|
||
},
|
||
//统计企业下项目各人员统计
|
||
getWorkerStatisticsCount() {
|
||
getWorkerStatisticsCountApi({ sn: this.searchsn }).then((res) => {
|
||
console.log('统计企业下项目各人员',res);
|
||
this.statisticsCount = res.result;
|
||
this.createProjectChart();
|
||
this.createdAgeCharts();
|
||
|
||
});
|
||
},
|
||
//获取所有企业下区域数据
|
||
loadData(type) {
|
||
//type:true代表第一调用
|
||
// console.log('type,',type)
|
||
getComapnyStatisticsListApi({
|
||
sn: this.searchsn,
|
||
}).then((res) => {
|
||
this.mapData = res.result.companyList
|
||
? res.result.companyList
|
||
: res.result.projectList;
|
||
|
||
if (type) {
|
||
// this.showMapBack=false
|
||
this.backArr = [];
|
||
// if(this.$store.state.userInfo.accountType==4){
|
||
if (res.result.firstCompany) {
|
||
this.backArr.push({
|
||
name: res.result.firstCompany.companyName,
|
||
sn: res.result.firstCompany.companySn,
|
||
});
|
||
}
|
||
if (res.result.parentCompany) {
|
||
this.backArr.push({
|
||
name: res.result.parentCompany.companyName,
|
||
sn: res.result.parentCompany.companySn,
|
||
});
|
||
}
|
||
// }
|
||
// if(this.$store.state.userInfo.accountType==3||this.$store.state.userInfo.accountType==4){
|
||
if (res.result.companyInfo) {
|
||
this.backArr.push({
|
||
name: res.result.companyInfo.companyName,
|
||
sn: res.result.companyInfo.companySn,
|
||
});
|
||
}
|
||
// }
|
||
if (
|
||
(this.backArr.length == 0 &&
|
||
this.$store.state.userInfo.accountType == 2) ||
|
||
(this.backArr.length == 1 &&
|
||
this.$store.state.userInfo.accountType == 3) ||
|
||
(this.backArr.length == 2 &&
|
||
this.$store.state.userInfo.accountType == 4) ||
|
||
(this.backArr.length == 3 &&
|
||
this.$store.state.userInfo.accountType == 7)
|
||
) {
|
||
this.showMapBack = false;
|
||
} else {
|
||
this.showMapBack = true;
|
||
}
|
||
this.$store.commit("setMapBackArr", this.backArr);
|
||
}
|
||
if (this.mapData.length > 0) {
|
||
this.mapObj.clearMap();
|
||
this.setAreaMarker();
|
||
} else {
|
||
this.$message("该区域下没有数据!");
|
||
}
|
||
});
|
||
},
|
||
initData(type) {
|
||
console.log('执行',720);
|
||
this.backArr = this.$store.state.mapBackArr;
|
||
//
|
||
if (this.backArr.length > 0) {
|
||
this.searchsn = this.backArr[this.backArr.length - 1].sn;
|
||
} else {
|
||
switch (this.$store.state.userInfo.accountType) {
|
||
case 2:
|
||
this.searchsn = this.$store.state.userInfo.headquartersSn;
|
||
break;
|
||
case 3:
|
||
this.searchsn = this.$store.state.userInfo.sn;
|
||
break;
|
||
case 4:
|
||
this.searchsn = this.$store.state.userInfo.sn;
|
||
break;
|
||
case 7:
|
||
this.searchsn = this.$store.state.userInfo.sn;
|
||
break;
|
||
}
|
||
}
|
||
if (
|
||
(this.backArr.length == 0 &&
|
||
this.$store.state.userInfo.accountType == 2) ||
|
||
(this.backArr.length == 1 &&
|
||
this.$store.state.userInfo.accountType == 3) ||
|
||
(this.backArr.length == 2 &&
|
||
this.$store.state.userInfo.accountType == 4) ||
|
||
(this.backArr.length == 3 &&
|
||
this.$store.state.userInfo.accountType == 7)
|
||
) {
|
||
this.showMapBack = false;
|
||
} else {
|
||
this.showMapBack = true;
|
||
}
|
||
if (this.backArr.length == 4) {
|
||
this.getProjectDetail();
|
||
} else {
|
||
this.loadData(type);
|
||
}
|
||
this.getWorkerStatisticsCount();
|
||
this.getDevCountStatictis();
|
||
this.getSafeData();
|
||
},
|
||
//获取项目详细
|
||
getProjectDetail() {
|
||
let data = {
|
||
projectSn: this.searchsn,
|
||
};
|
||
getProjectDetail(data).then((res) => {
|
||
if (res.code == 200) {
|
||
if (res.result) {
|
||
console.log(res.result);
|
||
this.mapData = [res.result];
|
||
this.mapObj.clearMap();
|
||
this.setAreaMarker();
|
||
}
|
||
}
|
||
});
|
||
},
|
||
initMap() {
|
||
//地图加载
|
||
this.mapObj = new AMap.Map("map", {
|
||
resizeEnable: true,
|
||
});
|
||
},
|
||
goBack() {
|
||
//
|
||
if (this.backArr.length == 1) {
|
||
this.backArr = [];
|
||
} else {
|
||
this.backArr = this.backArr.splice(0, this.backArr.length - 1);
|
||
}
|
||
this.$store.commit("setMapBackArr", this.backArr);
|
||
// this.initData()
|
||
},
|
||
setAreaMarker() {
|
||
this.mapObj.clearMap();
|
||
var _this = this;
|
||
this.mapData.forEach((element, index) => {
|
||
var marker = new AMap.Marker({
|
||
position: [element.longitude, element.latitude],
|
||
icon: new AMap.Icon({
|
||
image: "https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png",
|
||
size: new AMap.Size(230, 43), //图标大小
|
||
imageSize: new AMap.Size(230, 43),
|
||
}),
|
||
});
|
||
var htmls = "";
|
||
if (!element.projectName) {
|
||
htmls = `<div class='datas'>
|
||
<p class='num'>${
|
||
element.projectNum
|
||
}</p><p class='text'>${this.$t(
|
||
"message.firmProject.marker.projectsNum"
|
||
)}</p>
|
||
</div>`;
|
||
}
|
||
marker.setLabel({
|
||
offset: new AMap.Pixel(0, 0), //设置文本标注偏移量
|
||
content: `<div class='mapInfo'>
|
||
<div class='areaName datas'>${
|
||
element.name
|
||
}</div>${htmls}
|
||
<div class='datas'><p class='num'>${
|
||
element.videoNum
|
||
}</p>
|
||
<p class='text'>${this.$t(
|
||
"message.firmProject.marker.videoNum"
|
||
)}</p>
|
||
</div>
|
||
<div class='datas'><p class='num'>${
|
||
element.ufaceDevNum
|
||
}</p>
|
||
<p class='text'>${this.$t(
|
||
"message.firmProject.marker.guardNum"
|
||
)}</p>
|
||
</div>
|
||
</div>`,
|
||
direction: "center", //设置文本标注方位
|
||
});
|
||
AMap.event.addListener(marker, "click", function (e) {
|
||
_this.mapJumpToNext(index);
|
||
//得到的数据
|
||
});
|
||
marker.setMap(this.mapObj);
|
||
this.mapObj.setFitView();
|
||
});
|
||
// this.$nextTick(() => {
|
||
// setTimeout(() => {
|
||
// var infoList = document.getElementsByClassName('mapInfo')
|
||
// // console.log('添加点击marker事件',infoList)
|
||
// infoList.forEach((element, index) => {
|
||
// // console.log(element)
|
||
// // element.removeEventListener("click",_this.mapJumpToNext(index),false);
|
||
// element.addEventListener('click', function () {
|
||
// console.log('点击marker',index)
|
||
// _this.mapJumpToNext(index)
|
||
// })
|
||
// // element.addEventListener('click', _this.mapJumpToNext(index))
|
||
// });
|
||
// }, 1000)
|
||
// })
|
||
},
|
||
// 地图跳转到下一级
|
||
mapJumpToNext(index) {
|
||
console.log("test1");
|
||
var _this = this;
|
||
if (_this.mapData[index].list) {
|
||
console.log("test2");
|
||
var json = {
|
||
sn: _this.mapData[index].companySn,
|
||
name: _this.mapData[index].name,
|
||
};
|
||
_this.backArr.forEach(element=>{
|
||
if(element.name==json.name){
|
||
return
|
||
}
|
||
})
|
||
_this.backArr.push(json);
|
||
_this.$store.commit("setMapBackArr", _this.backArr);
|
||
_this.showMapDialog = false;
|
||
_this.initData()
|
||
} else {
|
||
console.log("test3");
|
||
if (_this.mapData[index].projectName && _this.backArr.length < 3) {
|
||
console.log("test4");
|
||
var json = {
|
||
sn: _this.mapData[index].projectSn,
|
||
name: _this.mapData[index].name,
|
||
};
|
||
_this.backArr.forEach(element=>{
|
||
if(element.name==json.name){
|
||
return
|
||
}
|
||
})
|
||
_this.backArr.push(json);
|
||
_this.$store.commit("setMapBackArr", _this.backArr);
|
||
_this.showMapDialog = false;
|
||
_this.initData()
|
||
} else {
|
||
_this.$message("该区域下没有数据!");
|
||
}
|
||
}
|
||
},
|
||
createDevChart(echartData) {
|
||
let that = this;
|
||
let devChart = echarts.init(this.$refs.devChart);
|
||
// let bgColor = "#fff";
|
||
let color =
|
||
that.company == "longguang"
|
||
? ["#4378D8", "#1AA388",'#BC5D12',"#FF515A", "#8B5CFF", "#00CA69"]
|
||
: ["#5181F6", "#00DBB6", "#F67F51", "#FF515A", "#8B5CFF", "#00CA69"];
|
||
var symbolSize = 10;
|
||
// let echartData = [{
|
||
// name: "10-01",
|
||
// value1: 90,
|
||
// value2: 85,
|
||
// value3: 70
|
||
// },
|
||
// {
|
||
// name: "10-02",
|
||
// value1: 92,
|
||
// value2: 87,
|
||
// value3: 77
|
||
// },
|
||
// {
|
||
// name: "10-03",
|
||
// value1: 95,
|
||
// value2: 88,
|
||
// value3: 74
|
||
// },
|
||
// {
|
||
// name: "10-04",
|
||
// value1: 89,
|
||
// value2: 83,
|
||
// value3: 72
|
||
// },
|
||
// {
|
||
// name: "10-05",
|
||
// value1: 88,
|
||
// value2: 80,
|
||
// value3: 70
|
||
// },
|
||
// {
|
||
// name: "10-06",
|
||
// value1: 95,
|
||
// value2: 90,
|
||
// value3: 80
|
||
// },
|
||
// {
|
||
// name: "10-07",
|
||
// value1: 93,
|
||
// value2: 84,
|
||
// value3: 82
|
||
// },
|
||
// {
|
||
// name: "10-08",
|
||
// value1: 93,
|
||
// value2: 89,
|
||
// value3: 75
|
||
// }
|
||
// ];
|
||
|
||
let xAxisData = echartData.map((v) => v.name);
|
||
// ["1", "2", "3", "4", "5", "6", "7", "8"]
|
||
let yAxisData1 = echartData.map((v) => v.value1?v.value1:0)
|
||
// [100, 138, 350, 173, 180, 150, 180, 230]
|
||
let yAxisData2 = echartData.map((v) => v.value2? v.value2:0)
|
||
let yAxisData3 = echartData.map((v) => v.value3?v.value3:0)
|
||
// [233, 233, 200, 180, 199, 233, 210, 180]
|
||
const hexToRgba = (hex, opacity) => {
|
||
let rgbaColor = "";
|
||
let reg = /^#[\da-f]{6}$/i;
|
||
if (reg.test(hex)) {
|
||
rgbaColor = `rgba(${parseInt("0x" + hex.slice(1, 3))},${parseInt(
|
||
"0x" + hex.slice(3, 5)
|
||
)},${parseInt("0x" + hex.slice(5, 7))},${opacity})`;
|
||
}
|
||
return rgbaColor;
|
||
};
|
||
|
||
var option = {
|
||
// backgroundColor: bgColor,
|
||
color: color,
|
||
legend: {
|
||
right: 10,
|
||
top: 5,
|
||
textStyle: {
|
||
color: "#9fa2ad",
|
||
},
|
||
},
|
||
tooltip: {
|
||
trigger: "axis",
|
||
formatter: function (params) {
|
||
let html = "";
|
||
params.forEach((v) => {
|
||
// console.log(v)
|
||
html += `<div style="color: #666;font-size: 14px;line-height: 24px">
|
||
<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${
|
||
color[v.componentIndex]
|
||
};"></span>
|
||
${v.seriesName}.${v.name}
|
||
<span style="color:${
|
||
color[v.componentIndex]
|
||
};font-weight:700;font-size: 18px">${v.value}</span>
|
||
%`;
|
||
});
|
||
return html;
|
||
},
|
||
extraCssText:
|
||
"background: #fff; border-radius: 0;box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);color: #333;",
|
||
// axisPointer: {
|
||
// type: 'shadow',
|
||
// shadowStyle: {
|
||
// color: '#ffffff',
|
||
// shadowColor: 'rgba(225,225,225,1)',
|
||
// shadowBlur: 5
|
||
// }
|
||
// }
|
||
},
|
||
grid: {
|
||
top: 35,
|
||
right: 45,
|
||
left: 15,
|
||
bottom: 0,
|
||
containLabel: true,
|
||
},
|
||
xAxis: [
|
||
{
|
||
type: "category",
|
||
boundaryGap: false,
|
||
axisLabel: {
|
||
formatter: "{value}",
|
||
textStyle: {
|
||
color: "#9fa2ad",
|
||
},
|
||
},
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
axisLine: {
|
||
lineStyle: {
|
||
color: "#D9D9D9",
|
||
},
|
||
},
|
||
data: xAxisData,
|
||
},
|
||
],
|
||
yAxis: [
|
||
{
|
||
type: "value",
|
||
name: "单位:%",
|
||
axisLabel: {
|
||
textStyle: {
|
||
color: "#9fa2ad",
|
||
},
|
||
},
|
||
nameTextStyle: {
|
||
color: "#9fa2ad",
|
||
fontSize: 12,
|
||
lineHeight: 24,
|
||
},
|
||
splitLine: {
|
||
lineStyle: {
|
||
type: "dashed",
|
||
color: "rgba(231, 233, 243, 0.5)",
|
||
},
|
||
},
|
||
axisLine: {
|
||
show: false,
|
||
},
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
},
|
||
],
|
||
series: [
|
||
{
|
||
name: "视频设备",
|
||
type: "line",
|
||
smooth: true,
|
||
// showSymbol: false,/
|
||
symbolSize: symbolSize,
|
||
zlevel: 3,
|
||
lineStyle: {
|
||
normal: {
|
||
color: color[0],
|
||
shadowBlur: 3,
|
||
shadowColor: hexToRgba(color[0], 0.76),
|
||
shadowOffsetY: 8,
|
||
},
|
||
},
|
||
data: yAxisData1,
|
||
},
|
||
{
|
||
name: "人脸设备",
|
||
type: "line",
|
||
smooth: true,
|
||
// showSymbol: false,
|
||
symbolSize: symbolSize,
|
||
zlevel: 3,
|
||
lineStyle: {
|
||
normal: {
|
||
color: color[1],
|
||
shadowBlur: 3,
|
||
shadowColor: hexToRgba(color[1], 0.76),
|
||
shadowOffsetY: 8,
|
||
},
|
||
},
|
||
data: yAxisData2,
|
||
},
|
||
{
|
||
name: "环境设备",
|
||
type: "line",
|
||
smooth: true,
|
||
// showSymbol: false,
|
||
symbolSize: symbolSize,
|
||
zlevel: 3,
|
||
lineStyle: {
|
||
normal: {
|
||
color: color[2],
|
||
shadowBlur: 3,
|
||
shadowColor: hexToRgba(color[2], 0.76),
|
||
shadowOffsetY: 8,
|
||
},
|
||
},
|
||
data: yAxisData3,
|
||
},
|
||
],
|
||
};
|
||
devChart.setOption(option);
|
||
},
|
||
//年龄结构---图表
|
||
createdAgeCharts() {
|
||
var json1 = this.statisticsCount.presencecount;
|
||
var json2 = this.statisticsCount.workercount;
|
||
var arr1 = [
|
||
json1.age18,
|
||
json1.age18to25,
|
||
json1.age25to35,
|
||
json1.age35to45,
|
||
json1.age45to60,
|
||
json1.age60,
|
||
];
|
||
var arr2 = [
|
||
json2.age18,
|
||
json2.age18to25,
|
||
json2.age25to35,
|
||
json2.age35to45,
|
||
json2.age45to60,
|
||
json2.age60,
|
||
];
|
||
let that = this;
|
||
let ageChart = echarts.init(this.$refs.ageChart);
|
||
// ageChart.clear();
|
||
let option = {
|
||
grid: {
|
||
top: 40,
|
||
left: 0,
|
||
bottom: 0,
|
||
right: 20,
|
||
containLabel: true,
|
||
},
|
||
color:
|
||
that.company == "longguang"
|
||
? ["#4378D8", "#1AA388"]
|
||
: ["#5181F6", "#61D2B9"],
|
||
tooltip: {
|
||
trigger: "axis",
|
||
axisPointer: {
|
||
type: "shadow",
|
||
},
|
||
},
|
||
legend: {
|
||
show: true,
|
||
align: "left",
|
||
top: 5,
|
||
left: 0,
|
||
itemWidth: 13,
|
||
itemHeight: 5,
|
||
textStyle: {
|
||
color: "#9fa2ad",
|
||
},
|
||
},
|
||
xAxis: [
|
||
{
|
||
type: "category",
|
||
data: [
|
||
"18及以下",
|
||
"18-25岁",
|
||
"25-35岁",
|
||
"35-45岁",
|
||
"45-59岁",
|
||
"60及以上",
|
||
],
|
||
boundaryGap: true,
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
axisLine: {
|
||
show: false,
|
||
},
|
||
axisLabel: {
|
||
color: "#9fa2ad",
|
||
fontSize: 12,
|
||
},
|
||
},
|
||
],
|
||
|
||
yAxis: {
|
||
type: "value",
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
axisLine: {
|
||
show: false,
|
||
},
|
||
splitLine: {
|
||
lineStyle: {
|
||
type: "dashed",
|
||
color: "rgba(231, 233, 243, 0.5)",
|
||
},
|
||
},
|
||
axisLabel: {
|
||
color: "#9fa2ad",
|
||
},
|
||
},
|
||
series: [
|
||
{
|
||
name: "在职人数",
|
||
type: "bar",
|
||
data: arr2,
|
||
barWidth: 14,
|
||
barGap: 0.1,
|
||
},
|
||
{
|
||
name: "在场人数",
|
||
type: "bar",
|
||
data: arr1,
|
||
barWidth: 14,
|
||
},
|
||
],
|
||
};
|
||
|
||
ageChart.setOption(option);
|
||
},
|
||
//安全分析---图表
|
||
createdSafeCharts(xData, yData1, yData2) {
|
||
let that = this;
|
||
let safeChart = echarts.init(this.$refs.safeChart);
|
||
// ageChart.clear();
|
||
let option = {
|
||
grid: {
|
||
top: 40,
|
||
left: 0,
|
||
bottom: 15,
|
||
right: 20,
|
||
containLabel: true,
|
||
},
|
||
legend: {
|
||
show: true,
|
||
align: "left",
|
||
top: 0,
|
||
left: 0,
|
||
itemWidth: 13,
|
||
itemHeight: 5,
|
||
selectedMode: "single",
|
||
textStyle: {
|
||
color: "#9fa2ad",
|
||
},
|
||
},
|
||
color:
|
||
that.company == "longguang"
|
||
? ["#4378D8", "#1AA388"]
|
||
: ["#5181F6", "#61D2B9"],
|
||
tooltip: {
|
||
trigger: "axis",
|
||
axisPointer: {
|
||
type: "shadow",
|
||
},
|
||
},
|
||
xAxis: [
|
||
{
|
||
type: "category",
|
||
data: xData,
|
||
boundaryGap: true,
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
axisLine: {
|
||
show: false,
|
||
},
|
||
axisLabel: {
|
||
color: "#9fa2ad",
|
||
fontSize: 12,
|
||
interval:0,
|
||
formatter: function(value){
|
||
let valueTxt = ''
|
||
if (value.length > 4) {
|
||
valueTxt = value.substring(0,4) + '...'
|
||
} else {
|
||
valueTxt = value
|
||
}
|
||
return valueTxt
|
||
}
|
||
},
|
||
|
||
},
|
||
],
|
||
|
||
yAxis: {
|
||
type: "value",
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
axisLine: {
|
||
show: false,
|
||
},
|
||
splitLine: {
|
||
lineStyle: {
|
||
type: "dashed",
|
||
color: "rgba(231, 233, 243, 0.5)",
|
||
},
|
||
},
|
||
axisLabel: {
|
||
color: "#9fa2ad",
|
||
},
|
||
},
|
||
series: [
|
||
{
|
||
name: "安全培训统计",
|
||
type: "bar",
|
||
data: yData1,
|
||
barWidth: 26,
|
||
label: {
|
||
show: true,
|
||
position: "top",
|
||
fontSize: 12,
|
||
color: "rgba(42, 46, 63, 0.44)",
|
||
// formatter:'{c}\n{c}%'
|
||
},
|
||
},
|
||
{
|
||
name: "不良人数统计",
|
||
type: "bar",
|
||
data: yData2,
|
||
barWidth: 26,
|
||
label: {
|
||
show: true,
|
||
position: "top",
|
||
fontSize: 12,
|
||
color: "rgba(42, 46, 63, 0.44)",
|
||
// formatter:'{c}\n{c}%'
|
||
},
|
||
},
|
||
],
|
||
dataZoom: [{
|
||
type: 'slider',
|
||
show: true, //flase直接隐藏图形
|
||
xAxisIndex: [0],
|
||
// left: '9%', //滚动条靠左侧的百分比
|
||
bottom: 5,
|
||
start: 0,//滚动条的起始位置
|
||
end: 20, //滚动条的截止位置(按比例分割你的柱状图x轴长度)
|
||
height:6,
|
||
showDetail: false,
|
||
showDataShadow: false,
|
||
}]
|
||
};
|
||
safeChart.setOption(option);
|
||
},
|
||
createProjectChart() {
|
||
let that = this;
|
||
var arr = [];
|
||
if (this.statisticsCount.projectcount) {
|
||
var json = this.statisticsCount.projectcount;
|
||
arr = [
|
||
json.constructionStageCount1,
|
||
json.constructionStageCount2,
|
||
json.constructionStageCount3,
|
||
json.constructionStageCount4,
|
||
json.constructionStageCount5,
|
||
json.constructionStageCount6,
|
||
json.constructionStageCount7,
|
||
json.constructionStageCount8,
|
||
json.constructionStageCount9,
|
||
json.constructionStageCount10,
|
||
json.constructionStageCount11,
|
||
json.constructionStageCount12,
|
||
json.constructionStageCount13,
|
||
json.constructionStageCount14,
|
||
json.constructionStageCount15,
|
||
];
|
||
}
|
||
|
||
let projectChart = echarts.init(this.$refs.projectChart);
|
||
var option = {
|
||
tooltip: {
|
||
trigger: "axis",
|
||
axisPointer: {
|
||
// 坐标轴指示器,坐标轴触发有效
|
||
type: "shadow", // 默认为直线,可选为:'line' | 'shadow'
|
||
},
|
||
},
|
||
color: that.company == "longguang" ? ["#1AA388"] : ["#44D7B6"],
|
||
grid: {
|
||
left: "0",
|
||
right: "20",
|
||
bottom: "0",
|
||
top: "20",
|
||
containLabel: true,
|
||
},
|
||
xAxis: {
|
||
type: "value",
|
||
splitLine: {
|
||
lineStyle: {
|
||
type: "dashed",
|
||
color: "rgba(231, 233, 243, 0.5)",
|
||
},
|
||
},
|
||
axisLine: {
|
||
lineStyle: {
|
||
color: "#D9D9D9",
|
||
},
|
||
},
|
||
axisLabel: {
|
||
textStyle: {
|
||
color: "#9fa2ad",
|
||
},
|
||
},
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
},
|
||
yAxis: {
|
||
axisLabel: {
|
||
textStyle: {
|
||
color: "#9fa2ad",
|
||
},
|
||
},
|
||
axisLine: {
|
||
lineStyle: {
|
||
color: "#D9D9D9",
|
||
},
|
||
},
|
||
type: "category",
|
||
axisTick: {
|
||
show: false,
|
||
},
|
||
data: [
|
||
"施工证获取",
|
||
"土方开挖",
|
||
"桩基",
|
||
"垫层完成",
|
||
"正负零",
|
||
"工程达到预售条件",
|
||
"主体施工",
|
||
"主体封顶",
|
||
"装饰装修",
|
||
"竣工备案完成",
|
||
],
|
||
},
|
||
series: [
|
||
{
|
||
name: "项目数",
|
||
type: "bar",
|
||
stack: "总量",
|
||
label: {
|
||
show: true,
|
||
position: "insideRight",
|
||
fontSize: 14,
|
||
},
|
||
barMinHeight: 18,
|
||
barMaxWidth: 24,
|
||
data: arr,
|
||
},
|
||
],
|
||
};
|
||
projectChart.setOption(option);
|
||
},
|
||
// 文件上传 之前
|
||
handleBeforeUpload(file, type) {
|
||
console.log(file);
|
||
let fileType = file.type.split("/")[0];
|
||
if (fileType == "video") {
|
||
this.fullscreenLoading = this.$loading({
|
||
lock: true,
|
||
text: "上传中,请稍等。。。",
|
||
spinner: "el-icon-loading",
|
||
background: "rgba(0, 0, 0, 0.7)",
|
||
});
|
||
return true;
|
||
} else {
|
||
this.$message.error("请选择视频");
|
||
return false;
|
||
}
|
||
},
|
||
//上传失败
|
||
handleError(file, type) {
|
||
this.fullscreenLoading.close();
|
||
this.$message.error("上传失败,请重试");
|
||
},
|
||
//上传成功
|
||
handleSuccess(file, type) {
|
||
if (file.code == 200 || file.status == "SUCCESS") {
|
||
var url = file.data[0].imageUrl;
|
||
this.saveOrDeleteVideo(url);
|
||
}
|
||
this.fullscreenLoading.close();
|
||
},
|
||
//保存或删除宣传视频
|
||
saveOrDeleteVideo(url) {
|
||
editCompanyBySnApi({
|
||
companySn: this.$store.state.userInfo.headquartersSn,
|
||
propagateFile: url,
|
||
}).then((res) => {
|
||
// this.$message.success("上传成功");
|
||
var json = this.$store.state.userInfo;
|
||
json.propagateFile = url == "-1" ? "" : url;
|
||
this.$store.commit("setUserInfo", json);
|
||
});
|
||
},
|
||
},
|
||
};
|
||
</script>
|
||
<style lang="less" scoped>
|
||
.pageTitle {
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.blockBox {
|
||
overflow: hidden;
|
||
|
||
&.bottom {
|
||
height: calc(100% - 550px);
|
||
min-height: 230px;
|
||
.chart {
|
||
// height: 170px;
|
||
height: calc(100% - 70px);
|
||
}
|
||
}
|
||
|
||
&.top {
|
||
margin-bottom: 20px;
|
||
height: 530px;
|
||
|
||
.centerBlock {
|
||
height: 100%;
|
||
position: relative;
|
||
.blockInner {
|
||
height: calc(100% - 30px);
|
||
}
|
||
}
|
||
|
||
.chart {
|
||
height: 423px;
|
||
}
|
||
}
|
||
.whiteBlock {
|
||
margin-right: 20px;
|
||
width: 400px;
|
||
float: left;
|
||
height: 100%;
|
||
&:last-child {
|
||
margin-right: 0;
|
||
}
|
||
}
|
||
|
||
.blockInner {
|
||
padding: 15px;
|
||
position: relative;
|
||
height: calc(100% - 30px);
|
||
}
|
||
|
||
.centerBlock {
|
||
width: calc(100% - 800px - 40px);
|
||
}
|
||
}
|
||
.mapContainer {
|
||
margin-top: 12px;
|
||
height: calc(100% - 40px);
|
||
position: relative;
|
||
}
|
||
.item1 {
|
||
display: flex;
|
||
align-items: center;
|
||
padding: 6px;
|
||
}
|
||
|
||
.numBox {
|
||
display: flex;
|
||
align-items: center;
|
||
|
||
.dataBox {
|
||
margin-left: 12px;
|
||
}
|
||
|
||
.num {
|
||
font-size: 20px;
|
||
}
|
||
|
||
.text {
|
||
font-size: 14px;
|
||
// color: #7C829E;
|
||
opacity: 0.7;
|
||
}
|
||
}
|
||
|
||
.todayAdd {
|
||
text-align: center;
|
||
margin-left: 20px;
|
||
|
||
p:nth-child(1) {
|
||
font-size: 17px;
|
||
}
|
||
|
||
p:nth-child(2) {
|
||
font-size: 14px;
|
||
// color: #7C829E;
|
||
opacity: 0.7;
|
||
}
|
||
}
|
||
|
||
.item2 {
|
||
padding: 15px 10px;
|
||
border-bottom: 1px dashed rgba(231, 233, 243, 1);
|
||
|
||
.itemInner {
|
||
display: flex;
|
||
margin-bottom: 9px;
|
||
|
||
&:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.numItem {
|
||
flex: 1;
|
||
// color: rgba(38, 45, 71, 0.6);
|
||
opacity: 0.6;
|
||
font-size: 14px;
|
||
|
||
span {
|
||
font-size: 15px;
|
||
margin-left: 8px;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.numBoxContainer {
|
||
display: flex;
|
||
align-items: center;
|
||
margin-top: 15px;
|
||
|
||
.numBox {
|
||
min-width: 170px;
|
||
}
|
||
}
|
||
/deep/ .amap-marker-label {
|
||
background-color: @--color-primary;
|
||
color: #ffffff;
|
||
border: none;
|
||
border-radius: 5px;
|
||
width: 230px;
|
||
.mapInfo {
|
||
background-color: @--color-primary;
|
||
display: flex;
|
||
padding: 5px 0;
|
||
cursor: pointer;
|
||
.datas {
|
||
flex: 1;
|
||
text-align: center;
|
||
align-self: center;
|
||
}
|
||
.areaName {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border-right: 1px solid #ddd;
|
||
padding: 0 5px;
|
||
white-space: normal;
|
||
}
|
||
}
|
||
}
|
||
|
||
.mapTitle {
|
||
top: 5px;
|
||
font-size: 14px;
|
||
padding: 5px 10px;
|
||
background-color: rgba(0, 0, 0, 0.5);
|
||
color: rgb(255, 255, 255);
|
||
border-radius: 3px;
|
||
transform: translate(-50%);
|
||
left: 50%;
|
||
position: absolute;
|
||
z-index: 9999;
|
||
}
|
||
|
||
.mapBack {
|
||
width: 30px;
|
||
height: 30px;
|
||
border-radius: 50%;
|
||
font-size: 22px;
|
||
color: #ffffff;
|
||
margin: 5px;
|
||
position: absolute;
|
||
background-color: rgba(0, 0, 0, 0.5);
|
||
z-index: 9999;
|
||
text-align: center;
|
||
line-height: 30px;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.statictisBox {
|
||
display: flex;
|
||
align-items: center;
|
||
margin: auto;
|
||
justify-content: center;
|
||
|
||
.numBox {
|
||
margin-right: 87px;
|
||
|
||
&:last-child {
|
||
margin-right: 0 !important;
|
||
}
|
||
}
|
||
|
||
&.big {
|
||
.numBox {
|
||
margin-right: 0;
|
||
flex: auto;
|
||
justify-content: center;
|
||
}
|
||
}
|
||
|
||
.dataBox {
|
||
text-align: center;
|
||
}
|
||
}
|
||
|
||
.safeBtns {
|
||
position: absolute;
|
||
right: 15px;
|
||
top: 15px;
|
||
}
|
||
.selectBox {
|
||
position: absolute;
|
||
right: 10px;
|
||
top: 5px;
|
||
color: @--color-primary;
|
||
font-size: 12px;
|
||
background-color: #fff;
|
||
text-align: center;
|
||
width: 80px;
|
||
height: 30px;
|
||
line-height: 30px;
|
||
border-radius: 10px;
|
||
z-index: 9999;
|
||
cursor: pointer;
|
||
}
|
||
.selectContent {
|
||
padding: 10px;
|
||
box-sizing: border-box;
|
||
font-size: 14px;
|
||
background-color: #fff;
|
||
width: 230px;
|
||
height: calc(100% - 60px);
|
||
top: 50px;
|
||
right: 10px;
|
||
position: absolute;
|
||
z-index: 9999;
|
||
.selectItem {
|
||
cursor: pointer;
|
||
}
|
||
.title {
|
||
margin: 10px 0 5px;
|
||
font-weight: 600;
|
||
}
|
||
.datas {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-around;
|
||
font-size: 12px;
|
||
height: 40px;
|
||
background-color: #fbfbfb;
|
||
.numBox2 {
|
||
p:first-child {
|
||
color: @--color-primary;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
.deleteBtn {
|
||
position: absolute;
|
||
top: 15px;
|
||
right: 15px;
|
||
}
|
||
</style>
|