From 1ca8b42abcb41d14729000a357355b7e372660cb Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Fri, 25 Mar 2022 10:37:10 +0800
Subject: [PATCH] 大屏页面得修改
---
src/router/page/index.js | 13 +
src/components/map/components/dimension.vue | 34 +++
src/pcviews/large/index.vue | 266 +++++++++++++++++++++++++++++
src/components/largeMap/index.vue | 106 +++++++++++
src/components/map/index.vue | 24 +-
src/App.vue | 48 ----
6 files changed, 434 insertions(+), 57 deletions(-)
diff --git a/src/App.vue b/src/App.vue
index fa16554..4dfe049 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -10,41 +10,11 @@
name: 'App',
data () {
return {
- // consoles: 1,
- // consoles1: 1,
cantdoits: false
}
},
mounted () {
- const that = this
-
- // console.log(frames, 789456);
- // setInterval(function () {
- // check();
- // }, 4000);
- // var check = function () {
- // function doCheck(a) {
- // if (("" + a / a)["length"] !== 1 || a % 20 === 0) {
- // // (function () {}["constructor"]("debugger")());
- // console.log("已打开控制台1");
- // that.consoles++;
- // return;
- // } else {
- // // (function () {}["constructor"]("debugger")());
- // // console.log("已打开控制台2");
- // // return;
- // that.consoles++;
- // }
- // doCheck(++a);
- // }
- // try {
- // doCheck(0);
- // } catch (err) {}
- // };
- // check();
- // console.log(this.getQueryString("data"), "window.location");
- // var reg = new RegExp("(^|&)" + "data" + "=([^&]*)(&|$)");
- var data = {}
+ var transmitData = {}
var url = window.location.href
@@ -53,24 +23,15 @@
var brr = arr[1].split('&')
brr.forEach((item, index) => {
var a = item.split('=')
- data[a[0]] = decodeURIComponent(a[1])
+ transmitData[a[0]] = decodeURIComponent(a[1])
})
try {
- data = JSON.parse(data)
+ transmitData = JSON.parse(transmitData)
} catch (error) { }
}
- this.$store.commit('set_urlParameterData', data) // 传入数据
+ this.$store.commit('set_urlParameterData', transmitData) // 传入数据
- const d = {
- methods: 'goto',
- jd: 125.11111,
- wd: 25.555555
- }
- // console.log(
- // "http://192.168.0.222:8080/#/mobileLayout/default?data=" +
- // JSON.stringify(d)
- // );
if (this._isMobile()) {
this.cantdoits = true
// 手机端
@@ -116,6 +77,7 @@
})
} else {
// pc端
+ // this.$router.replace('/large')
this.$router.replace('/pcLayout')
}
},
diff --git a/src/components/largeMap/index.vue b/src/components/largeMap/index.vue
new file mode 100644
index 0000000..35d12f3
--- /dev/null
+++ b/src/components/largeMap/index.vue
@@ -0,0 +1,106 @@
+/* eslint-disable camelcase */
+<template>
+ <div id="large-viewer-container" style="height: 100%; width: 100%"></div>
+</template>
+<script>
+let largeViewer = null
+
+export default {
+ name: 'largeMap',
+ data () {
+ return {
+ samllMapFlag: false
+ }
+ },
+ mounted () {
+ function generatePosition (num, isAdd) {
+ const list = []
+ for (let i = 0; i < num; i++) {
+ const lng = 121.49536592256028 + Math.random() * 0.04 * (isAdd ? 1 : -1)
+ const lat = 31.241616722278213 + Math.random() * 0.04 * (isAdd ? 1 : -1)
+ list.push({ lng, lat })
+ }
+ return list
+ }
+
+ function initViewer () {
+ largeViewer = new global.DC.Viewer('large-viewer-container', {
+ contextOptions: {
+ webgl: {
+ stencil: true,
+ preserveDrawingBuffer: true
+ }
+ }
+ }).setOptions({
+ // showAtmosphere: false, 大气层
+ showMoon: false, // 月亮
+ showSun: false, // 太阳
+ skyBox: {
+ show: false
+ },
+ globe: {
+ baseColor: global.DC.Color.BLACK
+ }
+ })
+
+ // const baseLayer = global.DC.ImageryLayerFactory.createBaiduImageryLayer({
+ // style: 'dark'
+ // })
+ // largeViewer.addBaseLayer(baseLayer, {
+ // iconUrl: 'examples/images/icon/midnight.png',
+ // name: '午夜蓝'
+ // })
+
+ const layerBuild = new global.DC.TilesetLayer('layerBuild').addTo(largeViewer)
+ const build = new global.DC.Tileset(
+ '//resource.dvgis.cn/data/3dtiles/ljz/tileset.json',
+ { skipLevels: true }
+ )
+ const fs = `
+ varying vec3 v_positionEC;
+ void main(void){
+ vec4 position = czm_inverseModelView * vec4(v_positionEC,1); // 位置
+ float glowRange = 100.0; // 光环的移动范围(高度)
+ gl_FragColor = vec4(0.2, 0.5, 1.0, 1.0); // 颜色
+ gl_FragColor *= vec4(vec3(position.z / 100.0), 1.0); // 渐变
+ // 动态光环
+ float time = fract(czm_frameNumber / 360.0);
+ time = abs(time - 0.5) * 2.0;
+ float diff = step(0.005, abs( clamp(position.z / glowRange, 0.0, 1.0) - time));
+ gl_FragColor.rgb += gl_FragColor.rgb * (1.0 - diff);
+ }
+ `
+ build.setCustomShader(fs)
+ layerBuild.addOverlay(build)
+ const layer = new global.DC.PrimitiveLayer('layer').addTo(largeViewer)
+ let positions = generatePosition(50, true)
+ positions = positions.concat(generatePosition(50))
+ positions.forEach(item => {
+ const position = global.DC.Position.fromObject(item)
+ const end = position.copy()
+ end.alt = 5000 * Math.random()
+ const line = new global.DC.FlowLinePrimitive([position, end], 0.5)
+ line.setStyle({
+ speed: 6 * Math.random(),
+ color: global.DC.Color.fromCssColorString('rgb(141,172,172)'),
+ percent: 0.1,
+ gradient: 0.01
+ })
+ layer.addOverlay(line)
+ })
+ largeViewer.zoomToPosition('121.4941629,31.2091462,1859.56,0,-28.71')
+
+ // 视角旋转
+ largeViewer.scene.screenSpaceCameraController.enableTilt = false
+ }
+
+ global.DC.ready(initViewer)
+ },
+ methods: {
+
+ }
+}
+</script>
+
+<style lang="scss" scope>
+</style>
diff --git a/src/components/map/components/dimension.vue b/src/components/map/components/dimension.vue
index 069e60b..4f209e9 100644
--- a/src/components/map/components/dimension.vue
+++ b/src/components/map/components/dimension.vue
@@ -207,6 +207,40 @@
// minimumLevel: 19
}))
+ // global.viewer.imageryLayers.addImageryProvider(
+ // new global.DC.Namespace.Cesium.WebMapTileServiceImageryProvider({
+ // url: 'http://www.tdtfz.com/OneMapServer/rest/services/fzsw2019/MapServer/WMTS',
+ // layer: 'fzsw2019',
+ // style: 'default',
+ // tileMatrixSetID: 'default028mm',
+ // format: 'image/jpgpng',
+ // tilingScheme: new global.DC.Namespace.Cesium.GeographicTilingScheme(),
+ // maximumLevel: 19,
+ // tileMatrixLabels: [
+ // '0',
+ // '1',
+ // '2',
+ // '3',
+ // '4',
+ // '5',
+ // '6',
+ // '7',
+ // '8',
+ // '9',
+ // '10',
+ // '11',
+ // '12',
+ // '13',
+ // '14',
+ // '15',
+ // '16',
+ // '17',
+ // '18',
+ // '19'
+ // ]
+ // })
+ // )
+
// wallLayer = new global.DC.VectorLayer('wallLayer')
// global.viewer.addLayer(wallLayer)
diff --git a/src/components/map/index.vue b/src/components/map/index.vue
index 77c4c38..31e5896 100644
--- a/src/components/map/index.vue
+++ b/src/components/map/index.vue
@@ -15,18 +15,18 @@
<div
style="
- position: fixed;
- left: 4px;
- bottom: 4px;
- width: 80px;
- line-height: 24px;
- text-align: center;
- color: #fff;
- font-size: 14px;
- border-radius: 4px;
- background: #2196f3ed;
- z-index: 11;
- "
+ position: fixed;
+ left: 4px;
+ bottom: 4px;
+ width: 80px;
+ line-height: 24px;
+ text-align: center;
+ color: #fff;
+ font-size: 14px;
+ border-radius: 4px;
+ background: #2196f3ed;
+ z-index: 11;
+ "
>智慧校区</div>
<dimension />
diff --git a/src/pcviews/large/index.vue b/src/pcviews/large/index.vue
new file mode 100644
index 0000000..dd121de
--- /dev/null
+++ b/src/pcviews/large/index.vue
@@ -0,0 +1,266 @@
+<template>
+ <div class="large-container">
+ <div class="map-container">
+ <largeMap ref="largeMap" />
+ </div>
+
+ <div class="header-container">
+ <div class="title">
+ <img src="/img/logo.png" class="logo deblurring" alt />
+ 智慧校园大数据可视化平台
+ <i class="one-line"></i>
+ <i class="two-line"></i>
+ <i class="three-line"></i>
+ </div>
+ </div>
+ <div class="left-container">
+ <div class="top" id="LeftTop"></div>
+ <div class="center" id="LeftCenter"></div>
+ <div class="bottom" id="LeftBottom"></div>
+ </div>
+ <div class="right-container">
+ <div class="top" id="RightTop"></div>
+ <div class="center"></div>
+ <div class="bottom"></div>
+ </div>
+ </div>
+</template>
+
+<script>
+
+export default {
+ components: {
+
+ },
+ data () {
+ return {
+
+ }
+ },
+ created () {
+ },
+ mounted () {
+ this.$nextTick(() => {
+ this.initPillerOne()
+ this.initPillerTwo()
+ this.ecartsInitCircle()
+ })
+ },
+ methods: {
+ initPillerOne () {
+ // 柱形图
+ // 因为初始化echarts 的时候,需要指定的容器 id='main'
+ this.$echarts.init(document.getElementById('LeftTop')).setOption({
+ xAxis: {
+ type: 'category',
+ data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+ },
+ yAxis: {
+ type: 'value'
+ },
+ series: [{
+ data: [120, 200, 150, 80, 70, 110, 130],
+ type: 'bar',
+ showBackground: true,
+ backgroundStyle: {
+ color: 'rgba(220, 220, 220, 0.8)'
+ }
+ }]
+ })
+ },
+ initPillerTwo () {
+ this.$echarts.init(document.getElementById('RightTop')).setOption({
+ title: {
+ text: 'World Population'
+ },
+ tooltip: {
+ trigger: 'axis',
+ axisPointer: {
+ type: 'shadow'
+ }
+ },
+ legend: {},
+ grid: {
+ left: '3%',
+ right: '4%',
+ bottom: '3%',
+ containLabel: true
+ },
+ xAxis: {
+ type: 'value',
+ boundaryGap: [0, 0.01]
+ },
+ yAxis: {
+ type: 'category',
+ data: ['Brazil', 'Indonesia', 'USA', 'India', 'China', 'World']
+ },
+ series: [
+ {
+ name: '2011',
+ type: 'bar',
+ data: [18203, 23489, 29034, 104970, 131744, 630230]
+ },
+ {
+ name: '2012',
+ type: 'bar',
+ data: [19325, 23438, 31000, 121594, 134141, 681807]
+ }
+ ]
+ })
+ },
+ ecartsInitCircle () {
+ this.$echarts.init(document.getElementById('LeftCenter')).setOption({
+ title: {
+ text: 'Referer of a Website',
+ subtext: 'Fake Data',
+ left: 'center'
+ },
+ tooltip: {
+ trigger: 'item'
+ },
+ legend: {
+ orient: 'vertical',
+ left: 'left'
+ },
+ series: [
+ {
+ name: 'Access From',
+ type: 'pie',
+ radius: '50%',
+ data: [
+ { value: 1048, name: 'Search Engine' },
+ { value: 735, name: 'Direct' },
+ { value: 580, name: 'Email' },
+ { value: 484, name: 'Union Ads' },
+ { value: 300, name: 'Video Ads' }
+ ],
+ emphasis: {
+ itemStyle: {
+ shadowBlur: 10,
+ shadowOffsetX: 0,
+ shadowColor: 'rgba(0, 0, 0, 0.5)'
+ }
+ }
+ }
+ ]
+ })
+ }
+ }
+}
+</script>
+
+<style scoped lang='scss'>
+.large-container {
+ position: relative;
+ height: 100%;
+ background: #1a1f33;
+
+ .header-container {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 120px;
+ line-height: 120px;
+ z-index: 11;
+
+ .title {
+ position: absolute;
+ top: 0;
+ left: 80px;
+ right: 40%;
+ width: 60%;
+ height: 100%;
+ color: #5ce7ff;
+ font-size: 40px;
+ // border-bottom: 2px solid #4b6073;
+
+ .logo {
+ width: 60px;
+ vertical-align: middle;
+ }
+
+ .one-line {
+ position: absolute;
+ bottom: 3px;
+ left: 0;
+ width: 0;
+ border: 2px solid #5ce7ff;
+ height: 50px;
+ transform: rotate(-53.13deg);
+ transform-origin: bottom right;
+ border-radius: 100%;
+ }
+
+ .two-line {
+ position: absolute;
+ bottom: 3px;
+ left: -40px;
+ width: 0;
+ border: 2px solid #5ce7ff;
+ height: 50px;
+ transform: rotate(-53.13deg);
+ transform-origin: bottom right;
+ border-radius: 100%;
+ }
+
+ .three-line {
+ position: absolute;
+ bottom: 0;
+ left: 1px;
+ right: 0px;
+ width: 100%;
+ border: 2px solid #5ce7ff;
+ height: 0;
+ border-radius: 100%;
+ }
+ }
+ }
+
+ .map-container {
+ width: 100%;
+ height: 100%;
+ }
+
+ .left-container {
+ position: absolute;
+ top: 130px;
+ left: 10px;
+ width: 24%;
+ height: calc(100% - 140px);
+ // transform: rotateY(10deg);
+ // transform-origin: left center;
+ }
+
+ .right-container {
+ position: absolute;
+ top: 130px;
+ right: 10px;
+ width: 24%;
+ height: calc(100% - 140px);
+ }
+
+ .left-container,
+ .right-container {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-around;
+ & > div {
+ flex: 1;
+ margin: 5px 0;
+ }
+
+ .top {
+ background: rgba(248, 248, 248, 0.75);
+ }
+
+ .center {
+ background: rgba(248, 248, 248, 0.75);
+ }
+
+ .bottom {
+ background: rgba(248, 248, 248, 0.75);
+ }
+ }
+}
+</style>
diff --git a/src/router/page/index.js b/src/router/page/index.js
index 672fc30..f6ef179 100644
--- a/src/router/page/index.js
+++ b/src/router/page/index.js
@@ -2,12 +2,14 @@
* @Author: Morpheus
* @Date: 2021-04-30 14:12:09
* @Last Modified by: Morpheus
- * @Last Modified time: 2022-02-14 15:09:19
+ * @Last Modified time: 2022-03-24 15:25:40
*/
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
+
+const large = () => import('../../pcviews/large/index.vue')
const pcLayout = () => import('../../pcLayout/index.vue')
const pcHome = () => import('../../pcviews/home/index.vue')
@@ -53,8 +55,15 @@
const pcToolLayerManage = () => import('../../pcviews/tool/layer-manage.vue')
const routes = [
+ // 大屏页面
+ {
+ path: '/large',
+ meta: {
+ title: '大屏页面'
+ },
+ component: large
+ },
// pc端
-
{
path: '/pcLayout',
redirect: '/pcLayout/default',
--
Gitblit v1.9.3