|
@@ -4,7 +4,7 @@
|
|
|
|
|
|
|
|
<div class="server_title">
|
|
<div class="server_title">
|
|
|
<el-image
|
|
<el-image
|
|
|
- style="width: 824px; height: 786px"
|
|
|
|
|
|
|
+ style="width: 50%; height: calc(100vh - 120px)"
|
|
|
src="static/images/wgn_title.png"
|
|
src="static/images/wgn_title.png"
|
|
|
fit="cover"
|
|
fit="cover"
|
|
|
/>
|
|
/>
|
|
@@ -38,8 +38,8 @@
|
|
|
fit="cover"
|
|
fit="cover"
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="stat-number">1,248</div>
|
|
|
|
|
- <div class="stat-label">较上月增长12.5%</div>
|
|
|
|
|
|
|
+ <div class="stat-number">{{countData.total.service}}</div>
|
|
|
|
|
+ <div class="stat-label">较上月增长{{countData.grown}}%</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="stat-card card-2">
|
|
<div class="stat-card card-2">
|
|
|
<div class="stat-label">新上线服务统计
|
|
<div class="stat-label">新上线服务统计
|
|
@@ -49,7 +49,7 @@
|
|
|
fit="cover"
|
|
fit="cover"
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="stat-number">86</div>
|
|
|
|
|
|
|
+ <div class="stat-number">{{countData.curMonth.service}}</div>
|
|
|
<div class="stat-label">本月新增服务</div>
|
|
<div class="stat-label">本月新增服务</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="stat-card card-3">
|
|
<div class="stat-card card-3">
|
|
@@ -60,8 +60,8 @@
|
|
|
fit="cover"
|
|
fit="cover"
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="stat-number">24,586</div>
|
|
|
|
|
- <div class="stat-label">本周新增12,34人</div>
|
|
|
|
|
|
|
+ <div class="stat-number">{{countData.total.username}}</div>
|
|
|
|
|
+ <div class="stat-label">本周新增{{countData.curWeek.username}}人</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -131,11 +131,18 @@
|
|
|
<div class="chart-card full-width">
|
|
<div class="chart-card full-width">
|
|
|
<div class="chart-title">用户分布</div>
|
|
<div class="chart-title">用户分布</div>
|
|
|
<!-- <div ref="comparisonChart" class="chart-container"></div> -->
|
|
<!-- <div ref="comparisonChart" class="chart-container"></div> -->
|
|
|
- <el-table :data="tableData" style="width: 100%">
|
|
|
|
|
- <el-table-column prop="name" label="委办单位" />
|
|
|
|
|
- <el-table-column prop="number" label="用户名称" />
|
|
|
|
|
- <el-table-column prop="activity" label="活跃天数" />
|
|
|
|
|
- <el-table-column prop="server" label="服务使用量" />
|
|
|
|
|
|
|
+ <el-table :data="tableData" style="width: 100%"
|
|
|
|
|
+ height="calc(100% - 40px);
|
|
|
|
|
+ background-color: rgba(255, 255, 255, 0.1);"
|
|
|
|
|
+ :header-cell-style="headerCellStyle"
|
|
|
|
|
+ :row-style="rowStyle"
|
|
|
|
|
+ :cell-style="cellStyle"
|
|
|
|
|
+ stripe
|
|
|
|
|
+ border>
|
|
|
|
|
+ <el-table-column prop="unit" label="委办单位" />
|
|
|
|
|
+ <el-table-column prop="user" label="用户数量" />
|
|
|
|
|
+ <el-table-column prop="active" label="活跃天数" />
|
|
|
|
|
+ <el-table-column prop="count" label="服务使用量" />
|
|
|
</el-table>
|
|
</el-table>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -146,8 +153,18 @@
|
|
|
<h2>功能演示</h2>
|
|
<h2>功能演示</h2>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="demo-grid">
|
|
<div class="demo-grid">
|
|
|
- <div class="demo-card">
|
|
|
|
|
- <div class="demo-thumbnail">
|
|
|
|
|
|
|
+ <div class="demo-card" v-for="item in applications" :key="item.id">
|
|
|
|
|
+ <div class="demo-thumbnail" :style="{ backgroundImage: 'url(' + item.backImg + ')',backgroundSize: 'cover' }">
|
|
|
|
|
+ <div class="play-btn" @click="openVideo(item)">▶</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="demo-title">
|
|
|
|
|
+ <div class="demo-label">{{item.title}}</div>
|
|
|
|
|
+ <div class="demo-text">{{item.content}}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- <div class="demo-card">
|
|
|
|
|
+ <div class="demo-thumbnail" :style="{ backgroundImage: 'url(' + imageUrl + ')' }">
|
|
|
<div class="play-btn">▶</div>
|
|
<div class="play-btn">▶</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="demo-title">
|
|
<div class="demo-title">
|
|
@@ -172,16 +189,30 @@
|
|
|
<div class="demo-label">实际业务场景应用</div>
|
|
<div class="demo-label">实际业务场景应用</div>
|
|
|
<div class="demo-text">展示系统在行业中的实际应用案例</div>
|
|
<div class="demo-text">展示系统在行业中的实际应用案例</div>
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ </div> -->
|
|
|
|
|
+
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+
|
|
|
|
|
+ <div>
|
|
|
|
|
+ <el-dialog
|
|
|
|
|
+ v-model="centerDialogVisible"
|
|
|
|
|
+ title="预览"
|
|
|
|
|
+ width="800"
|
|
|
|
|
+ center
|
|
|
|
|
+ :before-close="closeDialog"
|
|
|
|
|
+ >
|
|
|
|
|
+ <video :src="videoUrl" controls style="width: 100%" />
|
|
|
|
|
+ </el-dialog>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
<script>
|
|
|
import * as echarts from 'echarts'
|
|
import * as echarts from 'echarts'
|
|
|
-
|
|
|
|
|
|
|
+import appCenter from "@/api/appCenter";
|
|
|
|
|
+import { countUserList,coutService,totalCountGroupByTime,countUserDataByAutoTime } from "@/api/count";
|
|
|
|
|
+import moment from "moment";
|
|
|
export default {
|
|
export default {
|
|
|
name: 'SpatialTemporalPortal',
|
|
name: 'SpatialTemporalPortal',
|
|
|
data() {
|
|
data() {
|
|
@@ -191,39 +222,63 @@ export default {
|
|
|
activityChart: null,
|
|
activityChart: null,
|
|
|
dataVolumeChart: null,
|
|
dataVolumeChart: null,
|
|
|
comparisonChart: null,
|
|
comparisonChart: null,
|
|
|
- fromTime:{
|
|
|
|
|
- date:[new Date(),new Date()]
|
|
|
|
|
- },
|
|
|
|
|
- tableData:[
|
|
|
|
|
- {
|
|
|
|
|
- number: '1234',
|
|
|
|
|
- name: 'tom',
|
|
|
|
|
- activity:'87',
|
|
|
|
|
- server: '2324',
|
|
|
|
|
|
|
+ centerDialogVisible: false,
|
|
|
|
|
+ videoUrl: "",
|
|
|
|
|
+ imageUrl: "static/images/wgn_title.png",
|
|
|
|
|
+ countData:{
|
|
|
|
|
+ total:{
|
|
|
|
|
+ service:0,
|
|
|
|
|
+ username:0,
|
|
|
},
|
|
},
|
|
|
- {
|
|
|
|
|
- number: '1234',
|
|
|
|
|
- name: 'canver',
|
|
|
|
|
- activity:'78',
|
|
|
|
|
- server: '2324',
|
|
|
|
|
|
|
+ curWeek:{
|
|
|
|
|
+ service:0,
|
|
|
|
|
+ username:0,
|
|
|
},
|
|
},
|
|
|
- {
|
|
|
|
|
- number: '1234',
|
|
|
|
|
- name: 'lina',
|
|
|
|
|
- activity:'88',
|
|
|
|
|
- server: '2324',
|
|
|
|
|
|
|
+ curMonth:{
|
|
|
|
|
+ service:0,
|
|
|
|
|
+ username:0,
|
|
|
},
|
|
},
|
|
|
- {
|
|
|
|
|
- number: '1234',
|
|
|
|
|
- name: 'wang',
|
|
|
|
|
- activity:'86',
|
|
|
|
|
- server: '2324',
|
|
|
|
|
|
|
+ lastMonth:{
|
|
|
|
|
+ service:0,
|
|
|
|
|
+ username:0,
|
|
|
},
|
|
},
|
|
|
- ]
|
|
|
|
|
|
|
+ grown:0,
|
|
|
|
|
+ },
|
|
|
|
|
+ fromTime:{
|
|
|
|
|
+ date:[new Date(new Date().setMonth(new Date().getMonth() - 1)),new Date()],// 默认显示最近一个月
|
|
|
|
|
+ },
|
|
|
|
|
+ tableData:[],
|
|
|
|
|
+ applications:[],
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
|
|
+ computed: {
|
|
|
|
|
+ headerCellStyle() {
|
|
|
|
|
+ return {
|
|
|
|
|
+ backgroundColor: "rgba(24, 144, 255, 0.25)",
|
|
|
|
|
+ color: "#0071e3",
|
|
|
|
|
+ fontWeight: "bold",
|
|
|
|
|
+ borderBottom: "2px solid rgba(24, 144, 255, 0.3)",
|
|
|
|
|
+ padding: "12px 8px",
|
|
|
|
|
+ };
|
|
|
|
|
+ },
|
|
|
|
|
+ rowStyle() {
|
|
|
|
|
+ return {
|
|
|
|
|
+ // 调整行背景色为更浅的黑色,增加透明度
|
|
|
|
|
+ backgroundColor: "rgba(0, 0, 0, 0.05)",
|
|
|
|
|
+ borderBottom: "1px solid rgba(255, 255, 255, 0.05)",
|
|
|
|
|
+ transition: "all 0.3s ease",
|
|
|
|
|
+ };
|
|
|
|
|
+ },
|
|
|
|
|
+ cellStyle() {
|
|
|
|
|
+ return {
|
|
|
|
|
+ color: "#e0e0e0",
|
|
|
|
|
+ padding: "12px 8px",
|
|
|
|
|
+ borderRight: "1px solid rgba(255, 255, 255, 0.05)",
|
|
|
|
|
+ };
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
mounted() {
|
|
mounted() {
|
|
|
- this.initCharts()
|
|
|
|
|
|
|
+ this.initData()
|
|
|
window.addEventListener('resize', this.handleResize)
|
|
window.addEventListener('resize', this.handleResize)
|
|
|
},
|
|
},
|
|
|
beforeUnmount() {
|
|
beforeUnmount() {
|
|
@@ -231,12 +286,198 @@ export default {
|
|
|
this.destroyCharts()
|
|
this.destroyCharts()
|
|
|
},
|
|
},
|
|
|
methods: {
|
|
methods: {
|
|
|
- initCharts() {
|
|
|
|
|
- this.initDeviceChart()
|
|
|
|
|
- this.initStatusChart()
|
|
|
|
|
- // this.initActivityChart()
|
|
|
|
|
- // this.initDataVolumeChart()
|
|
|
|
|
- // this.initComparisonChart()
|
|
|
|
|
|
|
+ initData(){
|
|
|
|
|
+ this.getTimeRange();
|
|
|
|
|
+ this.getCountUserDataByAutoTime();
|
|
|
|
|
+ this.getDmsDataList();
|
|
|
|
|
+ },
|
|
|
|
|
+ getTimeRange(){
|
|
|
|
|
+ this.getTotalCountGroupByTime();
|
|
|
|
|
+ this.getCountUserList();
|
|
|
|
|
+ this.getCoutService();
|
|
|
|
|
+ },
|
|
|
|
|
+ openVideo(param) {
|
|
|
|
|
+ console.log(param)
|
|
|
|
|
+ this.videoUrl = param.url;
|
|
|
|
|
+ this.centerDialogVisible = true;
|
|
|
|
|
+ },
|
|
|
|
|
+ closeDialog() {
|
|
|
|
|
+ this.videoUrl = "";
|
|
|
|
|
+ this.centerDialogVisible = false;
|
|
|
|
|
+ },
|
|
|
|
|
+ getDmsDataList() {
|
|
|
|
|
+ let requestParams = {
|
|
|
|
|
+ columnId: 1666,
|
|
|
|
|
+ states: 0,
|
|
|
|
|
+ orderBy: JSON.stringify([{"field":"update_time","orderByType":2}]),
|
|
|
|
|
+ pageSize: 9999,
|
|
|
|
|
+ page: 0,
|
|
|
|
|
+ };
|
|
|
|
|
+ this.applications = [];
|
|
|
|
|
+ appCenter.getDmsDataList(requestParams).then((res) => {
|
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
|
+ this.applications = res.content.data.map((item) => ({
|
|
|
|
|
+ ...item,
|
|
|
|
|
+ status:
|
|
|
|
|
+ item.status === 0
|
|
|
|
|
+ ? "待审核"
|
|
|
|
|
+ : item.status === 1
|
|
|
|
|
+ ? "待发布"
|
|
|
|
|
+ : item.status === 2
|
|
|
|
|
+ ? "未完成"
|
|
|
|
|
+ : "已完成",
|
|
|
|
|
+ createTime: moment(item.create_time).format("YYYY-MM-DD HH:mm:ss"),
|
|
|
|
|
+ backImg: systemConfig.dmsDataProxy + item.c_picture,
|
|
|
|
|
+ url: item.c_url,
|
|
|
|
|
+ }));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+ getCountUserDataByAutoTime(){
|
|
|
|
|
+ let param = JSON.stringify([
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "total",
|
|
|
|
|
+ start: '2000-01-01 00:00:00', // 从2000年1月1日开始
|
|
|
|
|
+ end: moment(new Date()).format("YYYY-MM-DD HH:mm:ss") // 到当前时间
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "curWeek",
|
|
|
|
|
+ start: moment().weekday(1).format("YYYY-MM-DD 00:00:00"), //本周一00:00:00
|
|
|
|
|
+ end: moment(new Date()).format("YYYY-MM-DD HH:mm:ss")
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "curMonth",
|
|
|
|
|
+ start: moment().startOf('month').format('YYYY-MM-DD 00:00:00'), //本月1日00:00:00
|
|
|
|
|
+ end: moment(new Date()).format("YYYY-MM-DD HH:mm:ss")
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "lastMonth",
|
|
|
|
|
+ start: moment().subtract(1, 'month').startOf('month').format('YYYY-MM-DD 00:00:00'), //上月1日00:00:00
|
|
|
|
|
+ end: moment().subtract(1, 'month').endOf('month').format("YYYY-MM-DD HH:mm:ss") //上月最后一天23:59:59
|
|
|
|
|
+ },
|
|
|
|
|
+ ])
|
|
|
|
|
+ // console.log(param)
|
|
|
|
|
+ countUserDataByAutoTime(param).then(res => {
|
|
|
|
|
+ // console.log(res)
|
|
|
|
|
+ this.countData = res;
|
|
|
|
|
+ this.countData.grown = (res.curMonth.service/res.lastMonth.service)*100;
|
|
|
|
|
+ this.countData.grown = this.countData.grown.toFixed(2)
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ getTotalCountGroupByTime(){
|
|
|
|
|
+ let start = this.fromTime.date[0], end = this.fromTime.date[1];
|
|
|
|
|
+ totalCountGroupByTime(start,end).then(res => {
|
|
|
|
|
+ this.drawLineChart(res)
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ drawLineChart(data){
|
|
|
|
|
+ let that = this;
|
|
|
|
|
+ let times = []
|
|
|
|
|
+ let values = []
|
|
|
|
|
+ data.sort((a, b) => a.time - b.time)
|
|
|
|
|
+ data.forEach((item,index) => {
|
|
|
|
|
+ times.push(moment(item.time).format("YYYY-MM-DD"))
|
|
|
|
|
+ values.push(item.count)
|
|
|
|
|
+ })
|
|
|
|
|
+ // 基于准备好的dom,初始化echarts实例
|
|
|
|
|
+ let lineChart = echarts.init(this.$refs.deviceChart)
|
|
|
|
|
+ const option = {
|
|
|
|
|
+ tooltip: {
|
|
|
|
|
+ trigger: "axis",
|
|
|
|
|
+ axisPointer: { type: "shadow" },
|
|
|
|
|
+ backgroundColor: 'rgba(0, 25, 50, 0.8)',
|
|
|
|
|
+ borderColor: '#1E90FF',
|
|
|
|
|
+ textStyle: {
|
|
|
|
|
+ color: '#fff'
|
|
|
|
|
+ },
|
|
|
|
|
+ formatter: function (params) {
|
|
|
|
|
+ let str = '';
|
|
|
|
|
+ params.forEach(item => {
|
|
|
|
|
+ str += `${item.name} <br/> ${item.seriesName}: ${item.value}次<br/>`;
|
|
|
|
|
+ });
|
|
|
|
|
+ return str;
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ grid: {
|
|
|
|
|
+ left: '3%',
|
|
|
|
|
+ right: '4%',
|
|
|
|
|
+ bottom: '3%',
|
|
|
|
|
+ containLabel: true
|
|
|
|
|
+ },
|
|
|
|
|
+ xAxis: {
|
|
|
|
|
+ type: 'category',
|
|
|
|
|
+ data: times,
|
|
|
|
|
+ axisLabel: {
|
|
|
|
|
+ color: '#a3b6c7',
|
|
|
|
|
+ formatter: function (params) {
|
|
|
|
|
+ let str = '';
|
|
|
|
|
+ let arr = params.split("-")
|
|
|
|
|
+ str = `${arr[1]}/${arr[2]}`
|
|
|
|
|
+ return str;
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ axisLine: {
|
|
|
|
|
+ lineStyle: {
|
|
|
|
|
+ color: '#1E90FF'
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ },
|
|
|
|
|
+ yAxis: {
|
|
|
|
|
+ type: 'value',
|
|
|
|
|
+ axisLabel: {
|
|
|
|
|
+ color: '#a3b6c7'
|
|
|
|
|
+ },
|
|
|
|
|
+ axisLine: {
|
|
|
|
|
+ lineStyle: {
|
|
|
|
|
+ color: '#1E90FF'
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ splitLine: {
|
|
|
|
|
+ lineStyle: {
|
|
|
|
|
+ color: 'rgba(30, 144, 255, 0.2)'
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ series: [
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "访问次数",
|
|
|
|
|
+ type: 'line',
|
|
|
|
|
+ data: values,
|
|
|
|
|
+ itemStyle: {
|
|
|
|
|
+ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
|
|
|
|
+ { offset: 0, color: '#1E90FF' },
|
|
|
|
|
+ { offset: 1, color: '#00BFFF' }
|
|
|
|
|
+ ])
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+ }
|
|
|
|
|
+ // 绘制图表
|
|
|
|
|
+ lineChart.setOption(option);
|
|
|
|
|
+ that.deviceChart = lineChart;
|
|
|
|
|
+ },
|
|
|
|
|
+ getCoutService(){
|
|
|
|
|
+ let start = this.fromTime.date[0], end = this.fromTime.date[1];
|
|
|
|
|
+ coutService(start,end).then(res => {
|
|
|
|
|
+ // console.log('[ res ] >', res)
|
|
|
|
|
+ let arr = [];
|
|
|
|
|
+ res.sort((a, b) => b.count - a.count)
|
|
|
|
|
+ res.forEach(item => {
|
|
|
|
|
+ // let str = { value: item.count, name: item.service_name, itemStyle: { color: '#52C41A' } }
|
|
|
|
|
+ let str = { value: item.count, name: item.service_name }
|
|
|
|
|
+ arr.push(str)
|
|
|
|
|
+ })
|
|
|
|
|
+ this.initStatusChart(arr)
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ getCountUserList(){
|
|
|
|
|
+ let that = this
|
|
|
|
|
+ let start = this.fromTime.date[0], end = this.fromTime.date[1];
|
|
|
|
|
+ countUserList(start,end).then(res => {
|
|
|
|
|
+ res.sort((a, b) => b.count - a.count)
|
|
|
|
|
+ that.tableData = res;
|
|
|
|
|
+ })
|
|
|
},
|
|
},
|
|
|
handleType(param){
|
|
handleType(param){
|
|
|
const end = new Date()
|
|
const end = new Date()
|
|
@@ -244,13 +485,12 @@ export default {
|
|
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * param) //天计算
|
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * param) //天计算
|
|
|
end.setTime(end.getTime() - 3600 * 1000 * 24 * 1) //天计算
|
|
end.setTime(end.getTime() - 3600 * 1000 * 24 * 1) //天计算
|
|
|
// start.setMonth(start.getMonth() - 6)
|
|
// start.setMonth(start.getMonth() - 6)
|
|
|
- this.fromTime.date = [start,end]
|
|
|
|
|
|
|
+ this.fromTime.date = [start,end];
|
|
|
|
|
+ this.getTimeRange();
|
|
|
},
|
|
},
|
|
|
changeTime(v){
|
|
changeTime(v){
|
|
|
- debugger
|
|
|
|
|
- console.log('[ eee ] >', v)
|
|
|
|
|
this.fromTime.date=v
|
|
this.fromTime.date=v
|
|
|
-
|
|
|
|
|
|
|
+ this.getTimeRange();
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
initDeviceChart() {
|
|
initDeviceChart() {
|
|
@@ -323,7 +563,7 @@ export default {
|
|
|
this.deviceChart.setOption(option)
|
|
this.deviceChart.setOption(option)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- initStatusChart() {
|
|
|
|
|
|
|
+ initStatusChart(seriesData) {
|
|
|
this.statusChart = echarts.init(this.$refs.statusChart)
|
|
this.statusChart = echarts.init(this.$refs.statusChart)
|
|
|
const option = {
|
|
const option = {
|
|
|
tooltip: {
|
|
tooltip: {
|
|
@@ -367,12 +607,7 @@ export default {
|
|
|
labelLine: {
|
|
labelLine: {
|
|
|
show: false
|
|
show: false
|
|
|
},
|
|
},
|
|
|
- data: [
|
|
|
|
|
- { value: 400, name: '空间分析', itemStyle: { color: '#52C41A' } },
|
|
|
|
|
- { value: 300, name: '数据查询', itemStyle: { color: '#FAAD14' } },
|
|
|
|
|
- { value: 200, name: '三维可视化', itemStyle: { color: '#F5222D' } },
|
|
|
|
|
- { value: 100, name: '路径规划', itemStyle: { color: '#8C8C8C' } }
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ data: seriesData
|
|
|
}
|
|
}
|
|
|
]
|
|
]
|
|
|
}
|
|
}
|
|
@@ -766,12 +1001,12 @@ export default {
|
|
|
|
|
|
|
|
.stats-grid {
|
|
.stats-grid {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
- justify-content: center;
|
|
|
|
|
|
|
+ justify-content: space-between;
|
|
|
gap: 30px;
|
|
gap: 30px;
|
|
|
flex-wrap: wrap;
|
|
flex-wrap: wrap;
|
|
|
|
|
|
|
|
.stat-card {
|
|
.stat-card {
|
|
|
- width: 29%;
|
|
|
|
|
|
|
+ width: 400px;
|
|
|
height: 150px;
|
|
height: 150px;
|
|
|
border-radius: 12px;
|
|
border-radius: 12px;
|
|
|
padding: 20px;
|
|
padding: 20px;
|
|
@@ -957,8 +1192,10 @@ export default {
|
|
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
|
|
transition: transform 0.3s ease;
|
|
transition: transform 0.3s ease;
|
|
|
|
|
|
|
|
- &:hover {
|
|
|
|
|
|
|
+ &:hover {
|
|
|
transform: translateY(-5px);
|
|
transform: translateY(-5px);
|
|
|
|
|
+ box-shadow: 0 10px 30px rgba(24, 144, 255, 0.3);
|
|
|
|
|
+ border-color: rgba(24, 144, 255, 0.6);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.demo-thumbnail {
|
|
.demo-thumbnail {
|
|
@@ -1072,4 +1309,35 @@ export default {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+// 美化表格行悬停效果
|
|
|
|
|
+:deep(.el-table__body tr:hover > td) {
|
|
|
|
|
+ background-color: rgba(24, 144, 255, 0.1) !important;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// 美化表格边框
|
|
|
|
|
+:deep(.el-table__inner-wrapper) {
|
|
|
|
|
+ border-radius: 6px;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+:deep(.el-table__cell) {
|
|
|
|
|
+ border-right: 1px solid rgba(255, 255, 255, 0.05);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+:deep(.el-table__row) {
|
|
|
|
|
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// 调整奇偶行背景色,使其更明亮
|
|
|
|
|
+:deep(.el-table--striped .el-table__body tr.el-table__row--striped) {
|
|
|
|
|
+ background-color: rgba(255, 255, 255, 0.02) !important;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// 调整表格主体背景色
|
|
|
|
|
+:deep(.el-table__body) {
|
|
|
|
|
+ background-color: rgba(0, 0, 0, 0.05);
|
|
|
|
|
+}
|
|
|
|
|
+:deep(.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell) {
|
|
|
|
|
+ background-color: rgba(255, 255, 255, 0.02);
|
|
|
|
|
+}
|
|
|
</style>
|
|
</style>
|