| | |
| | | <template>
|
| | | <div class="flex homePage">
|
| | | <div class="leftMap"></div>
|
| | | <!-- 头部 -->
|
| | | <div class="mapTop">
|
| | | <!-- 车辆统计 -->
|
| | | <div class="carCount">
|
| | | <div class="title">车辆统计</div>
|
| | | <div class="fir">
|
| | | <div class="countCard">
|
| | | <img class="iconImg" src="../../assets//homeImg/img1.png" />
|
| | | <div>
|
| | | <div class="name">出租车(辆)</div>
|
| | | <div class="num">888</div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="countCard">
|
| | | <img class="iconImg" src="../../assets//homeImg/img2.png" />
|
| | | <div>
|
| | | <div class="name">网约车(辆)</div>
|
| | | <div class="num">888</div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="countCard">
|
| | | <img class="iconImg" src="../../assets//homeImg/img3.png" />
|
| | | <div>
|
| | | <div class="name">客运(辆)</div>
|
| | | <div class="num">888</div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="sec">
|
| | | <div class="countCard">
|
| | | <img class="iconImg" src="../../assets//homeImg/img4.png" />
|
| | | <div>
|
| | | <div class="name">郊游(辆)</div>
|
| | | <div class="num">888</div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="countCard">
|
| | | <img class="iconImg" src="../../assets//homeImg/img5.png" />
|
| | | <div>
|
| | | <div class="name">公交车(辆)</div>
|
| | | <div class="num">888</div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="countCard">
|
| | | <img class="iconImg" src="../../assets//homeImg/img6.png" />
|
| | | <div>
|
| | | <div class="name">危险品(辆)</div>
|
| | | <div class="num">888</div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="countCard">
|
| | | <img class="iconImg" src="../../assets//homeImg/img7.png" />
|
| | | <div>
|
| | | <div class="name">货运(辆)</div>
|
| | | <div class="num">888</div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <!-- 车辆状态 -->
|
| | | <div class="carStatus">
|
| | | <div class="title">车辆状态</div>
|
| | | <div class="statusFir">
|
| | | <div class="statusCard">
|
| | | <div class="statusLeft">
|
| | | <div class="name">在线</div>
|
| | | <div class="num">8888</div>
|
| | | </div>
|
| | | <el-progress
|
| | | type="circle"
|
| | | :width="20"
|
| | | :show-text="false"
|
| | | stroke-linecap="butt"
|
| | | :percentage="25"
|
| | | color="rgba(91, 143, 249, 1)"
|
| | | define-back-color="rgba(91, 143, 249, 0.25)"
|
| | | class="progressCard"
|
| | | ></el-progress>
|
| | | </div>
|
| | | <div class="statusLine"></div>
|
| | | <div class="statusCard">
|
| | | <div class="statusLeft">
|
| | | <div class="name">离线</div>
|
| | | <div class="num">8888</div>
|
| | | </div>
|
| | | <el-progress
|
| | | type="circle"
|
| | | :width="20"
|
| | | :show-text="false"
|
| | | stroke-linecap="butt"
|
| | | :percentage="25"
|
| | | color="rgba(93, 112, 146, 1)"
|
| | | define-back-color="rgba(93, 112, 146, 0.25)"
|
| | | class="progressCard"
|
| | | ></el-progress>
|
| | | </div>
|
| | | </div>
|
| | | <div class="statusSec">
|
| | | <div class="statusCard">
|
| | | <div class="statusLeft">
|
| | | <div class="name">故障</div>
|
| | | <div class="num">8888</div>
|
| | | </div>
|
| | | <el-progress
|
| | | type="circle"
|
| | | :width="20"
|
| | | :show-text="false"
|
| | | stroke-linecap="butt"
|
| | | :percentage="25"
|
| | | color="rgba(253, 83, 118, 1)"
|
| | | define-back-color="rgba(253, 83, 118, 0.25)"
|
| | | class="progressCard"
|
| | | ></el-progress>
|
| | | </div>
|
| | | <div class="statusLine"></div>
|
| | | <div class="statusCard">
|
| | | <div class="statusLeft">
|
| | | <div class="name">异常</div>
|
| | | <div class="num">8888</div>
|
| | | </div>
|
| | | <el-progress
|
| | | type="circle"
|
| | | :width="20"
|
| | | :show-text="false"
|
| | | stroke-linecap="butt"
|
| | | :percentage="25"
|
| | | color="rgba(246, 189, 22, 1)"
|
| | | define-back-color="rgba(246, 189, 22, 0.25)"
|
| | | class="progressCard"
|
| | | ></el-progress>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <!-- 左边 地图 -->
|
| | | <div class="leftMap">
|
| | | <div class="mapContainer" id="mapContainer"></div>
|
| | | </div>
|
| | | <!-- 右边 内容 -->
|
| | | <div class="right">
|
| | | <div class="firCard">
|
| | | <div class="companyCard">
|
| | |
| | |
|
| | | <script>
|
| | | import * as echarts from "echarts";
|
| | | import html2canvas from 'html2canvas';
|
| | | import AMapLoader from "@amap/amap-jsapi-loader";
|
| | | export default {
|
| | | data() {
|
| | | return {
|
| | |
| | | { name: "滴滴网约车客运公司", value: 10 },
|
| | | { name: "滴滴网约车客运公司", value: 0 },
|
| | | ], //预警排行榜数据
|
| | |
|
| | | map: null, //地图实例
|
| | |
|
| | | carList: [], //车辆列表数据
|
| | | };
|
| | | },
|
| | | onload() {},
|
| | | created() {
|
| | | //初始化窗口点击事件
|
| | | window.toCarDetail = (record) => {
|
| | | console.log("111111111111222222", record);
|
| | | this.toCarDetail(record);
|
| | | };
|
| | | window.fullScreen = () => {
|
| | | this.fullScreen();
|
| | | };
|
| | | window.shotScreen = () => {
|
| | | this.shotScreen();
|
| | | };
|
| | | },
|
| | | onload() {
|
| | | // if (this.carList.length > 0) {
|
| | | // }
|
| | | },
|
| | | mounted() {
|
| | | let arr = [
|
| | | {
|
| | | vehicleType: "出租车",
|
| | | vehicleInfo: {
|
| | | licensePlate: "川A12345",
|
| | | vehicleModel: "BYD E6",
|
| | | color: "Red",
|
| | | },
|
| | |
|
| | | latitude: 31.523333,
|
| | | longitude: 105.444444,
|
| | | },
|
| | | {
|
| | | vehicleType: "公交车",
|
| | | vehicleInfo: {
|
| | | licensePlate: "川A67890",
|
| | | vehicleModel: "Yutong ZK6120",
|
| | | color: "Blue",
|
| | | },
|
| | |
|
| | | latitude: 31.512222,
|
| | | longitude: 105.432111,
|
| | | },
|
| | | {
|
| | | vehicleType: "郊游",
|
| | | vehicleInfo: {
|
| | | licensePlate: "川A34567",
|
| | | vehicleModel: "Toyota Coaster",
|
| | | color: "White",
|
| | | },
|
| | |
|
| | | latitude: 31.498889,
|
| | | longitude: 105.421111,
|
| | | },
|
| | | {
|
| | | vehicleType: "春运",
|
| | | vehicleInfo: {
|
| | | licensePlate: "川A90123",
|
| | | vehicleModel: "King Long XMQ6120",
|
| | | color: "Yellow",
|
| | | },
|
| | |
|
| | | latitude: 31.485556,
|
| | | longitude: 105.412222,
|
| | | },
|
| | | {
|
| | | vehicleType: "快递物流车",
|
| | | vehicleInfo: {
|
| | | licensePlate: "川A45678",
|
| | | vehicleModel: "JAC HFC5041",
|
| | | color: "Green",
|
| | | },
|
| | |
|
| | | latitude: 31.472222,
|
| | | longitude: 105.402111,
|
| | | },
|
| | | {
|
| | | vehicleType: "网约车",
|
| | | vehicleInfo: {
|
| | | licensePlate: "川A11111",
|
| | | vehicleModel: "Geely GC2",
|
| | | color: "Black",
|
| | | },
|
| | |
|
| | | latitude: 31.462222,
|
| | | longitude: 105.392111,
|
| | | },
|
| | | {
|
| | | vehicleType: "客运",
|
| | | vehicleInfo: {
|
| | | licensePlate: "川A22222",
|
| | | vehicleModel: "Yutong ZK6120",
|
| | | color: "Gray",
|
| | | },
|
| | |
|
| | | latitude: 31.452222,
|
| | | longitude: 105.382111,
|
| | | },
|
| | | ];
|
| | | this.carList = arr;
|
| | |
|
| | | this.initMap();
|
| | | setTimeout(() => {
|
| | | this.addMarker(this.carList, [105.444444, 31.523333]);
|
| | | }, 1000);
|
| | | },
|
| | | methods: {
|
| | | handleSelect(key, keyPath) {
|
| | | console.log(key, keyPath);
|
| | | // 初始化地图
|
| | | initMap() {
|
| | | window._AMapSecurityConfig = {
|
| | | securityJsCode: "37ce61ae86efa5ad82b649a277f5097c",
|
| | | };
|
| | | AMapLoader.load({
|
| | | key: "67968c82f27c7e2cb9f40c1a9aa3042b",
|
| | | version: "2.0",
|
| | | plugins: [
|
| | | "AMap.ToolBar",
|
| | | "AMap.AutoComplete",
|
| | | "AMap.Geocoder",
|
| | | "AMap.MarkerCluster",
|
| | | ],
|
| | | })
|
| | | .then((AMap) => {
|
| | | this.map = new AMap.Map("mapContainer", {
|
| | | center: [105.574542, 30.5061493],
|
| | | zoom: 15,
|
| | | });
|
| | | })
|
| | | .catch((e) => {
|
| | | console.log(e);
|
| | | });
|
| | | },
|
| | |
|
| | | // 地图点位渲染
|
| | | addMarker(arr, centerList) {
|
| | | this.map = new AMap.Map("mapContainer", {
|
| | | resizeEnable: true,
|
| | | zoom: 15,
|
| | | center: centerList || [105.444444, 31.523333],
|
| | | });
|
| | |
|
| | | // var cluster;
|
| | | // var _renderClusterMarker = function (context) {
|
| | | // //context 为回调参数,
|
| | | // //包含如下属性 marker:当前聚合点,count:当前聚合点内的点数量
|
| | | // var clusterCount = context.count; //聚合点内点数量
|
| | | // context.marker.setContent("<div>" + clusterCount + "</div>");
|
| | | // };
|
| | | // var renderMarker = function (context) {
|
| | | // //context 为回调参数,
|
| | | // var clusterCount = context.count;
|
| | | // //包含如下属性 marker:当前聚合点,count:当前聚合点内的点数量
|
| | | // context.marker.setContent("<div>" + clusterCount + "</div>");
|
| | | // };
|
| | | // if (cluster) {
|
| | | // cluster.setMap(null);
|
| | | // }
|
| | | // if (arr.length > 0) {
|
| | | // let points = arr.map((item) => {
|
| | | // return {
|
| | | // lnglat: [Number(item.longitude), Number(item.latitude)],
|
| | | // };
|
| | | // });
|
| | | // cluster = new AMap.MarkerCluster(this.map, points, {
|
| | | // gridSize: 60,
|
| | | // renderClusterMarker: _renderClusterMarker, //上述步骤的自定义聚合点样式
|
| | | // renderMarker: renderMarker, //上述步骤的自定义非聚合点样式
|
| | | // });
|
| | | // }
|
| | |
|
| | | var infoWindow = new AMap.InfoWindow({
|
| | | offset: new AMap.Pixel(30, 30),
|
| | | autoMove: true,
|
| | | anchor: "top-center",
|
| | | });
|
| | | if (arr.length > 0) {
|
| | | const iconMap = {
|
| | | 出租车: {
|
| | | icon: require("../../assets/homeImg/taxi.png"),
|
| | | size: new AMap.Size(75, 37),
|
| | | },
|
| | | 公交车: {
|
| | | icon: require("../../assets/homeImg/bus.png"),
|
| | | size: new AMap.Size(62, 34),
|
| | | },
|
| | | 郊游: {
|
| | | icon: require("../../assets/homeImg/risk.png"),
|
| | | size: new AMap.Size(69, 32),
|
| | | },
|
| | | 春运: {
|
| | | icon: require("../../assets/homeImg/outing.png"),
|
| | | size: new AMap.Size(61, 31),
|
| | | },
|
| | | 快递物流车: {
|
| | | icon: require("../../assets/homeImg/expressage.png"),
|
| | | size: new AMap.Size(60, 31),
|
| | | },
|
| | | 网约车: {
|
| | | icon: require("../../assets/homeImg/online.png"),
|
| | | size: new AMap.Size(75, 33),
|
| | | },
|
| | | 客运: {
|
| | | icon: require("../../assets/homeImg/passenger.png"),
|
| | | size: new AMap.Size(69, 31),
|
| | | },
|
| | | };
|
| | | arr.forEach((item, index) => {
|
| | | const iconConfig = iconMap[item.vehicleType];
|
| | | let marker = new AMap.Marker({
|
| | | position: [Number(item.longitude), Number(item.latitude)], //经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
|
| | | map: this.map,
|
| | | zooms: [5, 20],
|
| | | icon: new AMap.Icon({
|
| | | size: iconConfig.size,
|
| | | image: iconConfig.icon,
|
| | | imageSize: iconConfig.size,
|
| | | // 图标取图偏移量
|
| | | imageOffset: new AMap.Pixel(0, 0),
|
| | | }),
|
| | | });
|
| | | marker.content = this.listRender(item);
|
| | | marker.on("click", (e) => {
|
| | | infoWindow.setContent(e.target.content);
|
| | | infoWindow.open(this.map, e.target.getPosition());
|
| | | });
|
| | | });
|
| | | }
|
| | | },
|
| | | listRender(record) {
|
| | | return `<div style="background: #ffffff; padding: 24px 20px;z-index: 999">
|
| | | <div style="position: relative; width: 460px; height: 330px">
|
| | | <img
|
| | | style="width: 460px; height: 330px; border-radius: 9px" id="monitoringCard"
|
| | | src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
|
| | | />
|
| | | <div style="position: absolute; right: 11px; top: 10px">
|
| | | <!-- 全屏 -->
|
| | | <div
|
| | | style=" display: flex;flex-direction: column;align-items: center;justify-content: center;
|
| | | background: #ffffff; padding: 3px 10px; border-radius: 6px;margin-bottom: 10px;" onclick="fullScreen()" >
|
| | | <img
|
| | | style="width: 20px; height: 20px" src="${require("../../assets//homeImg/full.png")}" />
|
| | | <div style="font-size: 12px;font-weight: 400; line-height: 17px; color: rgba(0, 0, 0, 0.88); " > 全屏</div>
|
| | | </div>
|
| | | <!-- 截屏 -->
|
| | | <div
|
| | | style="display: flex;flex-direction: column;align-items: center; justify-content: center;
|
| | | background: #ffffff;padding: 3px 10px;border-radius: 6px; " onclick="shotScreen()">
|
| | | <img style="width: 20px; height: 20px" src="${require("../../assets//homeImg/slot.png")}" />
|
| | | <div style="font-size: 12px; font-weight: 400; line-height: 17px; color: rgba(0, 0, 0, 0.88);"> 截屏</div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div style="display: flex;justify-content: space-between;margin-top: 15px;margin-bottom: 12px;">
|
| | | <div style=" font-weight: 500;font-size: 18px;color: rgba(0, 0, 0, 0.85);line-height: 25px; "> 车牌号:川A 88888 </div>
|
| | | <div style="font-weight: 500; font-size: 18px;color: rgba(0, 0, 0, 0.85);line-height: 25px;" > 驾驶员:李雷</div>
|
| | | </div>
|
| | | <div style="display: flex; justify-content: space-between">
|
| | | <div style=" font-weight: 500; font-size: 14px; color: rgba(0, 0, 0, 0.65);line-height: 26px;">位置:涪江文化广场</div>
|
| | | <div style="font-weight: 500;font-size: 14px; color: rgba(0, 0, 0, 0.65);line-height: 26px; "> 经纬度:104.004284.30.579328</div>
|
| | | </div>
|
| | | <div style="display: flex; justify-content: space-between">
|
| | | <div style="font-weight: 500;font-size: 14px; color: rgba(0, 0, 0, 0.65);line-height: 26px; " > 当前时速:104km/h </div>
|
| | | <div style="font-weight: 500;font-size: 14px; color: rgba(0, 0, 0, 0.65);line-height: 26px; "> 驾驶时长:5小时15分钟 </div>
|
| | | </div>
|
| | | <div style="margin-top: 14px;display: flex;justify-content: flex-end;align-items: center;cursor: pointer;" onclick="toCarDetail(${"111"})" >
|
| | | <div style="font-weight: 400;font-size: 18px; color: rgba(22, 119, 255, 1);line-height: 25px; ">车辆详情</div>
|
| | | <img style="width:18px;height: 18px;margin-left: 8px;" src="${require("../../assets//homeImg/right.png")}" />
|
| | | </div>
|
| | | </div>`;
|
| | | },
|
| | | // 获取预警情况统计
|
| | | getCountList() {
|
| | |
| | | },
|
| | | // 获取预警排行榜数据
|
| | | getRankList() {},
|
| | | // 跳转车辆详情
|
| | | toCarDetail() {
|
| | | console.log("跳转车辆详情");
|
| | | },
|
| | | fullScreen() {
|
| | | console.log("全屏");
|
| | | },
|
| | | shotScreen() {
|
| | | console.log("截图");
|
| | | setTimeout(() => {
|
| | | let targetDom = document.querySelector("#monitoringCard");
|
| | | console.log('targetDom',targetDom)
|
| | | html2canvas(targetDom, {
|
| | | height: document.querySelector("#monitoringCard").scrollHeight,
|
| | | windowHeight: document.querySelector("#monitoringCard").scrollHeight,
|
| | | backgroundColor: null, //画出来的图片有白色的边框,不要可设置背景为透明色(null)
|
| | | useCORS: true, //支持图片跨域
|
| | | scale: 2, //设置放大的倍数
|
| | | }).then((canvas) => {
|
| | | let url = canvas.toDataURL("image/png"); // toDataURL: 图片格式转成 base64
|
| | | this.downloadImage(url);
|
| | | });
|
| | | }, 10);
|
| | | },
|
| | | downloadImage(base64) {
|
| | | const link = document.createElement("a");
|
| | | link.href = base64;
|
| | | link.download = "image.png"; // 你希望下载的文件名
|
| | | document.body.appendChild(link);
|
| | | link.click();
|
| | | document.body.removeChild(link);
|
| | | },
|
| | | },
|
| | | };
|
| | | </script>
|
| | |
| | | <style scoped lang="less">
|
| | | .homePage {
|
| | | display: flex;
|
| | | height: 100vh;
|
| | | position: relative;
|
| | |
|
| | | .leftMap {
|
| | | width: 100%;
|
| | | // width: 100%;
|
| | | height: 100%;
|
| | | flex: 1;
|
| | | display: flex;
|
| | | position: relative;
|
| | |
|
| | | #mapContainer {
|
| | | flex: 1;
|
| | | width: 100%;
|
| | | height: 100%;
|
| | | }
|
| | | }
|
| | | .mapTop {
|
| | | z-index: 99;
|
| | | position: absolute;
|
| | | top: 20px;
|
| | | left: 20px;
|
| | | right: 513px;
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | width: calc(100% - 570px);
|
| | |
|
| | | .title {
|
| | | font-weight: 600;
|
| | | font-size: 18px;
|
| | | color: #000000;
|
| | | line-height: 25px;
|
| | | text-transform: none;
|
| | | text-align: center;
|
| | | }
|
| | |
|
| | | .carCount {
|
| | | flex: 8;
|
| | | background: #ffffff;
|
| | | box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
|
| | | border-radius: 10px;
|
| | | padding: 14px 20px 20px 20px;
|
| | | margin-right: 20px;
|
| | |
|
| | | .fir {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | margin-bottom: 10px;
|
| | | margin-top: 11px;
|
| | |
|
| | | .countCard {
|
| | | margin-right: 20px;
|
| | | }
|
| | |
|
| | | .countCard:last-child {
|
| | | margin-right: none;
|
| | | }
|
| | | }
|
| | |
|
| | | .sec {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | |
|
| | | .countCard {
|
| | | margin-right: 15px;
|
| | | }
|
| | |
|
| | | .countCard:last-child {
|
| | | margin-right: none;
|
| | | }
|
| | | }
|
| | |
|
| | | .countCard {
|
| | | flex: 1;
|
| | | background: linear-gradient(
|
| | | 180deg,
|
| | | rgba(246, 246, 252, 0) 0%,
|
| | | #f3f4f8 100%
|
| | | );
|
| | | box-shadow: inset 0px -1px 4px 0px #ffffff;
|
| | | border-radius: 10px;
|
| | | border: 1px solid #f1f1f1;
|
| | | padding: 14px 20px 18px 14px;
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | |
|
| | | .iconImg {
|
| | | width: 30px;
|
| | | height: 30px;
|
| | | border-radius: 10px;
|
| | | }
|
| | |
|
| | | .iconImg:nth-child(1) {
|
| | | box-shadow: 0px 7px 14px 0px rgba(14, 110, 253, 0.4);
|
| | | }
|
| | |
|
| | | .iconImg:nth-child(2) {
|
| | | box-shadow: 0px 7px 14px 0px rgba(255, 102, 39, 0.5);
|
| | | }
|
| | |
|
| | | .iconImg:nth-child(3) {
|
| | | box-shadow: 0px 7px 14px 0px rgba(254, 41, 94, 0.5);
|
| | | }
|
| | |
|
| | | .iconImg:nth-child(4) {
|
| | | box-shadow: 0px 7px 14px 0px rgba(248, 204, 65, 0.5);
|
| | | }
|
| | |
|
| | | .iconImg:nth-child(5) {
|
| | | box-shadow: 0px 7px 14px 0px rgba(2, 179, 118, 0.5);
|
| | | }
|
| | |
|
| | | .iconImg:nth-child(6) {
|
| | | box-shadow: 0px 7px 14px 0px rgba(169, 14, 253, 0.4);
|
| | | }
|
| | |
|
| | | .iconImg:nth-child(7) {
|
| | | box-shadow: 0px 7px 14px 0px rgba(109, 200, 236, 0.5);
|
| | | }
|
| | |
|
| | | .name {
|
| | | font-weight: 500;
|
| | | font-size: 12px;
|
| | | color: rgba(0, 0, 0, 0.6);
|
| | | line-height: 17px;
|
| | | margin-top: 2px;
|
| | | }
|
| | |
|
| | | .num {
|
| | | font-weight: 900;
|
| | | font-size: 16px;
|
| | | color: rgba(0, 0, 0, 0.8);
|
| | | line-height: 19px;
|
| | | text-align: right;
|
| | | margin-top: 1px;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .carStatus {
|
| | | flex: 5;
|
| | | background: #ffffff;
|
| | | box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
|
| | | border-radius: 10px;
|
| | | padding: 14px 84px 20px 84px;
|
| | |
|
| | | .statusFir {
|
| | | margin-top: 23px;
|
| | | margin-bottom: 28px;
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | align-content: center;
|
| | | }
|
| | |
|
| | | .statusSec {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | align-content: center;
|
| | | }
|
| | |
|
| | | .statusCard {
|
| | | display: flex;
|
| | | align-content: center;
|
| | |
|
| | | .statusLeft {
|
| | | margin-right: 9px;
|
| | | display: flex;
|
| | | flex-direction: column;
|
| | | justify-content: center;
|
| | |
|
| | | .name {
|
| | | font-weight: 500;
|
| | | font-size: 12px;
|
| | | color: rgba(0, 0, 0, 0.6);
|
| | | line-height: 17px;
|
| | | }
|
| | |
|
| | | .num {
|
| | | font-weight: 900;
|
| | | font-size: 16px;
|
| | | color: rgba(0, 0, 0, 0.8);
|
| | | line-height: 19px;
|
| | | }
|
| | | }
|
| | |
|
| | | .progressCard {
|
| | | width: 56px;
|
| | | height: 56px;
|
| | |
|
| | | ::v-deep .el-progress-circle {
|
| | | width: 56px !important;
|
| | | height: 56px !important;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .statusLine {
|
| | | width: 1px;
|
| | | height: 46px;
|
| | | border: 1px solid #dedede;
|
| | | box-sizing: border-box;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .right {
|
| | | width: 493px;
|
| | | height: calc(100% - 20px);
|
| | |
| | | box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
|
| | | border-radius: 10px 10px 0px 0px;
|
| | | padding: 20px;
|
| | |
|
| | | .title {
|
| | | margin-top: 30px;
|
| | | font-weight: 600;
|
| | |
| | | text-transform: none;
|
| | | margin-bottom: 10px;
|
| | | }
|
| | |
|
| | | .firCard {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | |
|
| | | .companyCard {
|
| | | width: 140px;
|
| | | height: 90px;
|
| | | background: #f4f4ff;
|
| | | border-radius: 0px 10px 10px 0px;
|
| | | position: relative;
|
| | |
|
| | | .lineCard {
|
| | | position: absolute;
|
| | | left: 0;
|
| | |
| | | background: #0e6efd;
|
| | | border-radius: 2px;
|
| | | }
|
| | |
|
| | | .name {
|
| | | margin: 18px 0 12px 19px;
|
| | |
|
| | |
| | | color: rgba(0, 0, 0, 0.6);
|
| | | line-height: 17px;
|
| | | }
|
| | |
|
| | | .value {
|
| | | margin-bottom: 22px;
|
| | | text-align: center;
|
| | |
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .todayWarn {
|
| | | .warnList {
|
| | | height: 134px;
|
| | | overflow-y: auto;
|
| | |
|
| | | .warnItem {
|
| | | height: 26px;
|
| | | background: rgba(39, 129, 255, 0.06);
|
| | |
| | | display: flex;
|
| | | align-content: center;
|
| | | margin-bottom: 10px;
|
| | |
|
| | | .grade {
|
| | | height: 22px;
|
| | | background: #e6f4ff;
|
| | |
| | | color: #1677ff;
|
| | | line-height: 20px;
|
| | | }
|
| | |
|
| | | .info {
|
| | | font-size: 12px;
|
| | | color: rgba(0, 0, 0, 0.8);
|
| | | line-height: 26px;
|
| | | }
|
| | | }
|
| | |
|
| | | .warnItem:last-child {
|
| | | margin-bottom: 0 !important;
|
| | | }
|
| | |
|
| | | .oneWarn {
|
| | | background: rgba(255, 77, 79, 0.06);
|
| | |
|
| | | .grade {
|
| | | background: #fff1f0;
|
| | | border: 1px solid #ffccc7;
|
| | | color: rgba(255, 77, 79, 1);
|
| | | }
|
| | | }
|
| | |
|
| | | .twoWarn {
|
| | | background: rgba(250, 173, 20, 0.06);
|
| | |
|
| | | .grade {
|
| | | background: #fffbe6;
|
| | | border-radius: 4px;
|
| | |
| | | color: rgba(250, 173, 20, 1);
|
| | | }
|
| | | }
|
| | |
|
| | | .threeWarn {
|
| | | background: rgba(39, 129, 255, 0.06);
|
| | |
|
| | | .grade {
|
| | | background: #e6f4ff;
|
| | | border: 1px solid #bae0ff;
|
| | | color: #1677ff;
|
| | | }
|
| | | }
|
| | |
|
| | | .fourWarn {
|
| | | background: rgba(82, 196, 26, 0.06);
|
| | |
|
| | | .grade {
|
| | | background: #f6ffed;
|
| | | border-radius: 4px;
|
| | |
| | | background-color: #aaa;
|
| | | }
|
| | | }
|
| | |
|
| | | .warnCount {
|
| | | position: relative;
|
| | |
|
| | | .countChart {
|
| | | width: 453px;
|
| | | height: 150px;
|
| | | }
|
| | |
|
| | | .noData {
|
| | | display: flex;
|
| | | flex-direction: column;
|
| | |
| | | height: 150px;
|
| | | }
|
| | | }
|
| | |
|
| | | .warnRank {
|
| | | position: relative;
|
| | |
|
| | | .rankChart {
|
| | | width: 453px;
|
| | | height: 300px;
|
| | |
|
| | | .rankItem {
|
| | | display: flex;
|
| | | align-content: center;
|
| | | margin-bottom: 14px;
|
| | |
|
| | | .left {
|
| | | flex: 2;
|
| | | padding-right: 25px;
|
| | |
| | | line-height: 17px;
|
| | | text-align: right;
|
| | | }
|
| | |
|
| | | .rankRight {
|
| | | flex: 5;
|
| | | height: 15px;
|
| | | background: rgba(93, 112, 146, 0.2);
|
| | | border-radius: 8px;
|
| | |
|
| | | .rank {
|
| | | height: 15px;
|
| | | border-radius: 8px;
|
| | | background: rgba(93,112,146,0.6);
|
| | | background: rgba(93, 112, 146, 0.6);
|
| | | }
|
| | | }
|
| | |
|
| | | .rankColor {
|
| | | background: rgba(91, 143, 249, 0.2);
|
| | |
|
| | | .rank {
|
| | | background: rgba(91, 143, 249, 0.85);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .rankItem:last-child {
|
| | | margin-bottom: 0 !important;
|
| | | }
|
| | | }
|
| | |
|
| | | .noData {
|
| | | display: flex;
|
| | | flex-direction: column;
|