新大屏

This commit is contained in:
JenniferW 2025-09-03 10:11:18 +08:00
parent 0a1ff41d67
commit 0f1bb5320f
6 changed files with 1283 additions and 15 deletions

View File

@ -8,7 +8,7 @@
transform: translate(-50%, -50%);
transform-origin: left top;
overflow: hidden;
.bg {
width: 100%;
height: 100%;
@ -21,31 +21,37 @@
.host-body {
width: 100%;
height: 100%;
.dv-dec-10,
.dv-dec-10-s {
width: 33.3%;
height: 5px;
}
.dv-dec-10-s {
transform: rotateY(180deg);
}
.dv-dec-8 {
width: 200px;
height: 50px;
}
.title {
position: relative;
width: 500px;
text-align: center;
background-size: cover;
background-repeat: no-repeat;
img{
width: 25%;
img {
width: 25%;
position: absolute;
bottom: 10px;
left: 22%;
transform: translate(-22%);
}
}
.title-text {
font-size: 40px;
position: absolute;
@ -63,7 +69,83 @@
height: 8px;
transform: translate(-50%);
}
}
}
}
}
#bigScreen {
color: #d3d6dd;
width: 1920px;
height: 1080px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
transform-origin: left top;
overflow: hidden;
.bg {
width: 100%;
height: 100%;
padding: 16px 16px 0 16px;
background-image: url("../assets/bg.jpg");
background-size: cover;
background-position: center center;
}
.host-body {
width: 100%;
height: 100%;
.dv-dec-10,
.dv-dec-10-s {
width: 33.3%;
height: 5px;
}
.dv-dec-10-s {
transform: rotateY(180deg);
}
.dv-dec-8 {
width: 200px;
height: 50px;
}
.title {
position: relative;
width: 500px;
text-align: center;
background-size: cover;
background-repeat: no-repeat;
img {
width: 25%;
position: absolute;
bottom: 10px;
left: 22%;
transform: translate(-22%);
}
.title-text {
font-size: 40px;
width: 100%;
position: absolute;
bottom: 0;
left: 50%;
transform: translate(-50%);
font-weight: bold;
}
.dv-dec-6 {
position: absolute;
bottom: -10px;
left: 50%;
width: 250px;
height: 8px;
transform: translate(-50%);
}
}
}
}
@ -71,38 +153,39 @@
.data-table-wrapper {
width: 100%;
overflow-x: auto;
.data-table {
width: 100%;
border-collapse: collapse;
th, td {
th,
td {
padding: 12px;
text-align: left;
border: 1px solid #ddd;
@media screen and (max-width: 768px) {
padding: 8px;
font-size: 14px;
}
@media screen and (max-width: 480px) {
padding: 6px;
font-size: 12px;
}
}
input {
width: 100%;
padding: 4px;
border: 1px solid #ddd;
border-radius: 4px;
&:focus {
outline: none;
border-color: #409EFF;
}
@media screen and (max-width: 768px) {
padding: 2px;
}
@ -122,9 +205,9 @@
.row {
flex-direction: column;
}
.col {
width: 100%;
margin-bottom: 15px;
}
}
}

View File

@ -0,0 +1,172 @@
<template>
<div id="bigScreen" ref="appRef">
<div class="bg">
<!-- 原有加载态保留 -->
<dv-loading v-if="loading">Loading...</dv-loading>
<div v-else class="host-body">
<!-- 原有标题头部不修改保持样式统一 -->
<div class="d-flex jc-center">
<dv-decoration-10 class="dv-dec-10" />
<div class="d-flex jc-center">
<dv-decoration-8 class="dv-dec-8" :color="decorationColor" />
<div class="title">
<div class="title-text">数据中台运行监控中心</div>
<dv-decoration-6
class="dv-dec-6"
:reverse="true"
:color="['#50e3c2', '#67a1e5']"
/>
</div>
<dv-decoration-8
class="dv-dec-8"
:reverse="true"
:color="decorationColor"
/>
</div>
<dv-decoration-10 class="dv-dec-10-s" />
</div>
<!-- 新主体内容替换原学校信息卡片和仪表盘组合新组件 -->
<div class="new-dashboard-container">
<!-- 1. 第一行业务系统 -->
<div class="dashboard-row first-row">
<BusinessSystem class="component-container" />
</div>
<!-- 2. 第二行开放共享独占一行图表内容多 -->
<div class="dashboard-row second-row">
<OpenShare class="component-container" />
</div>
<!-- 3. 第三行数据仓库内容较多+ 数据质量检测左右布局 -->
<div class="dashboard-row third-row">
<div class="dashboard-col left-col">
<DataWarehouse class="component-container" />
</div>
<div class="dashboard-col right-col">
<DataQuality class="component-container" />
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { formatNumber } from "@/utils/format";
import drawMixin from "../utils/drawMixin";
// 2.
import BusinessSystem from "./component/BusinessSystem.vue"; //
import OpenShare from "./component/OpenShare"; //
import DataWarehouse from "./component/DataWarehouse"; //
import DataQuality from "./component/DataQuality"; //
export default {
mixins: [drawMixin],
data() {
return {
loading: true,
decorationColor: ["#568aea", "#000000"],
};
},
// 4.
components: {
BusinessSystem,
OpenShare,
DataWarehouse,
DataQuality,
},
mounted() {
this.cancelLoading(); //
},
methods: {
//
cancelLoading() {
setTimeout(() => {
this.loading = false;
}, 500);
},
formatNumber, // 使
},
};
</script>
<style lang="scss" scoped>
// 1.
@import "../assets/scss/index.scss";
.title {
position: relative;
padding: 0 50px;
margin-bottom: 20px; //
.title-text {
font-size: 36px;
font-weight: bold;
background: linear-gradient(to top, #4a90e2, #ffffff);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-family: "Microsoft YaHei", sans-serif;
}
}
// 2. dashboard-container
.new-dashboard-container {
width: 100%;
padding: 0 20px 20px;
gap: 20px;
display: flex;
flex-direction: column;
overflow-y: auto;
//
&::-webkit-scrollbar {
width: 0;
background: transparent;
}
//
.dashboard-row {
display: flex;
flex-direction: column;
gap: 12px; //
margin-bottom: 20px; //
//
&.first-row,
&.second-row {
width: 100%;
}
//
&.third-row {
flex-direction: row;
gap: 20px;
.dashboard-col {
flex: 1; //
display: flex;
flex-direction: column;
gap: 12px;
}
}
}
//
.component-container {
width: 100%;
flex: 1; //
border-radius: 12px;
transition: all 0.3s ease;
// hover
&:hover {
box-shadow: 0 0 20px rgba(74, 144, 226, 0.15);
transform: translateY(-2px);
}
}
}
</style>

View File

@ -0,0 +1,252 @@
<template>
<div class="business-system">
<!-- 左右结构容器标题区域 + 内容区域 -->
<div class="business-container">
<!-- 左侧标题区域 - 单独分离出来 -->
<div class="title-section">
<div class="title-content">
<div class="main-title">
<i class="el-icon-monitor"></i>
<span>业务系统</span>
</div>
<div class="system-stats">
<div class="stat-number">{{ systemCount }}</div>
<div class="stat-label">使用数据的业务系统数</div>
</div>
</div>
</div>
<!-- 右侧内容区域 -->
<div class="content-section">
<div class="system-items" ref="systemList">
<div
class="system-card"
v-for="(item, index) in systems"
:key="index"
ref="systemCards"
>
<div class="card-icon"></div>
<div class="card-name">{{ item }}</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
systems: [
"学工系统",
"就业指导网管理系统",
"大数据应用平台",
"评教系统",
"健康评估系统",
"辅助助手工具",
"迎新系统(验证)",
"科研系统(验证)",
"教务管理系统",
"财务管理平台",
"图书管理系统",
"资产管理系统",
"校园一卡通系统",
"网络教学平台",
"智慧校园系统",
],
};
},
computed: {
systemCount() {
return this.systems.length;
},
},
mounted() {},
beforeDestroy() {},
methods: {},
};
</script>
<style scoped lang="scss">
.business-system {
background: linear-gradient(
to bottom,
rgba(30, 60, 100, 0.8),
rgba(10, 30, 60, 0.8)
);
border: 1px solid rgba(74, 144, 226, 0.3);
border-radius: 12px;
padding: 15px;
box-shadow: 0 0 15px rgba(74, 144, 226, 0.2);
height: 100%;
box-sizing: border-box;
overflow: hidden; /* 防止内容溢出组件 */
}
//
.business-container {
display: flex;
height: 100%;
gap: 20px;
}
// -
.title-section {
flex: 0 0 220px; //
display: flex;
align-items: center;
justify-content: center;
border-right: 1px solid rgba(74, 144, 226, 0.2); // 线
padding-right: 20px;
box-sizing: border-box;
}
//
.content-section {
flex: 1; //
display: flex;
flex-direction: column;
justify-content: center;
padding: 10px;
box-sizing: border-box;
}
.system-items {
display: inline-flex;
gap: 15px;
will-change: scroll-position; //
padding: 5px 0; //
}
.system-card {
display: flex;
flex-direction: column;
align-items: center;
min-width: 120px;
background: rgba(74, 144, 226, 0.1);
border-radius: 8px;
padding: 15px 10px;
margin: 0; // margin
transition: all 0.3s ease;
box-sizing: border-box;
&:hover {
transform: translateY(-3px);
background: rgba(74, 144, 226, 0.2);
box-shadow: 0 0 10px rgba(74, 144, 226, 0.3);
}
.card-icon {
width: 50px;
height: 50px;
background: #4a90e2;
border-radius: 8px;
margin-bottom: 10px;
position: relative;
overflow: hidden;
&::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(
45deg,
rgba(255, 255, 255, 0.1) 0%,
rgba(255, 255, 255, 0) 50%,
rgba(255, 255, 255, 0.1) 100%
);
transform: skewX(-20deg) translateX(-120%);
animation: shine 2s infinite;
}
}
.card-name {
font-size: 14px;
color: #fff;
text-align: center;
text-shadow: 0 0 3px rgba(74, 144, 226, 0.5);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 100px;
}
}
//
.title-content {
text-align: center;
}
.main-title {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20px;
i {
font-size: 28px;
color: #4a90e2;
margin-right: 10px;
filter: drop-shadow(0 2px 2px rgba(74, 144, 226, 0.3));
}
span {
font-size: 22px;
color: #fff;
font-weight: 600;
text-shadow: 0 0 5px rgba(74, 144, 226, 0.5);
}
}
.system-stats {
display: flex;
flex-direction: column;
align-items: center;
.stat-number {
font-size: 40px;
font-weight: bold;
background: linear-gradient(to top, #4a90e2, #fff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin-bottom: 10px;
}
.stat-label {
font-size: 16px;
color: rgba(255, 255, 255, 0.9);
line-height: 1.5;
}
}
@keyframes shine {
0% {
transform: skewX(-20deg) translateX(-120%);
}
100% {
transform: skewX(-20deg) translateX(120%);
}
}
//
@media (max-width: 1200px) {
.business-container {
flex-direction: column;
}
.title-section {
flex: none;
border-right: none;
border-bottom: 1px solid rgba(74, 144, 226, 0.2);
padding-right: 0;
padding-bottom: 20px;
margin-bottom: 15px;
width: 100%;
}
}
</style>

View File

@ -0,0 +1,279 @@
<template>
<div class="data-quality">
<div class="quality-header">
<i class="el-icon-check"></i>
<span>数据质量检测</span>
</div>
<!-- 质量评分卡片 -->
<div class="quality-score-card">
<div class="score-label">整体数据质量评分</div>
<div class="score-value">95.92<span class="percent">%</span></div>
<div class="score-bar">
<div class="bar-bg">
<div class="bar-fill" :style="{ width: '95.92%' }"></div>
</div>
</div>
</div>
<!-- 详细统计数据 -->
<div class="quality-stats">
<div class="stat-item">
<span class="stat-label">标准类数据质量</span>
<span class="stat-value">95.92%</span>
</div>
<div class="stat-item">
<span class="stat-label">标准类表空率</span>
<span class="stat-value">2.52%</span>
</div>
<div class="stat-item">
<span class="stat-label">数据完整率</span>
<span class="stat-value">98.37%</span>
</div>
<div class="stat-item">
<span class="stat-label">数据准确率</span>
<span class="stat-value">96.85%</span>
</div>
<div class="stat-item">
<span class="stat-label">数据一致性</span>
<span class="stat-value">94.21%</span>
</div>
<div class="stat-item">
<span class="stat-label">今日质量问题数</span>
<span class="stat-value error">3</span>
</div>
</div>
<!-- 质量趋势图表 -->
<div class="quality-chart">
<div class="chart-title">近7日数据质量趋势</div>
<div class="chart-content">
<!-- 模拟图表区域 -->
<div class="mock-chart">
<div class="chart-line"></div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "DataQuality",
data() {
return {
//
};
},
};
</script>
<style lang="scss" scoped>
.data-quality {
background: linear-gradient(
to bottom,
rgba(30, 60, 100, 0.8),
rgba(10, 30, 60, 0.8)
);
border: 1px solid rgba(74, 144, 226, 0.3);
border-radius: 12px;
padding: 15px;
box-shadow: 0 0 15px rgba(74, 144, 226, 0.2);
height: 100%;
display: flex;
flex-direction: column;
gap: 15px;
.quality-header {
display: flex;
align-items: center;
i {
font-size: 24px;
color: #4a90e2;
margin-right: 8px;
filter: drop-shadow(0 2px 2px rgba(74, 144, 226, 0.3));
}
span {
font-size: 18px;
color: #fff;
font-weight: 500;
text-shadow: 0 0 5px rgba(74, 144, 226, 0.5);
}
}
//
.quality-score-card {
background: rgba(74, 144, 226, 0.15);
border-radius: 8px;
padding: 15px;
text-align: center;
.score-label {
font-size: 14px;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 10px;
}
.score-value {
font-size: 42px;
font-weight: bold;
background: linear-gradient(to top, #4a90e2, #fff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
position: relative;
.percent {
font-size: 24px;
position: absolute;
top: 5px;
margin-left: 5px;
}
}
.score-bar {
margin-top: 10px;
padding: 0 10px;
.bar-bg {
height: 8px;
background: rgba(255, 255, 255, 0.1);
border-radius: 4px;
overflow: hidden;
.bar-fill {
height: 100%;
background: linear-gradient(90deg, #4a90e2, #36d1dc);
border-radius: 4px;
transition: width 1s ease-in-out;
}
}
}
}
//
.quality-stats {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
.stat-item {
background: rgba(74, 144, 226, 0.1);
padding: 10px;
border-radius: 8px;
transition: all 0.3s ease;
&:hover {
background: rgba(74, 144, 226, 0.2);
box-shadow: 0 0 10px rgba(74, 144, 226, 0.3);
transform: translateY(-2px);
}
.stat-label {
font-size: 13px;
color: rgba(255, 255, 255, 0.7);
display: block;
margin-bottom: 5px;
}
.stat-value {
font-size: 18px;
font-weight: bold;
background: linear-gradient(to top, #4a90e2, #fff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
&.error {
background: linear-gradient(to top, #ff4d4f, #fff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
}
}
//
.quality-chart {
background: rgba(74, 144, 226, 0.1);
border-radius: 8px;
padding: 10px;
flex: 1;
display: flex;
flex-direction: column;
.chart-title {
font-size: 14px;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 10px;
}
.chart-content {
flex: 1;
position: relative;
.mock-chart {
width: 100%;
height: 100%;
background: rgba(74, 144, 226, 0.05);
border-radius: 4px;
overflow: hidden;
position: relative;
// 线
.chart-line {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 60%;
background: linear-gradient(
180deg,
rgba(74, 144, 226, 0.2) 0%,
rgba(74, 144, 226, 0) 100%
);
clip-path: polygon(
0% 60%,
15% 40%,
30% 50%,
45% 30%,
60% 45%,
75% 35%,
90% 30%,
100% 25%,
100% 100%,
0% 100%
);
}
//
&::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(
90deg,
rgba(74, 144, 226, 0.1) 0%,
rgba(74, 144, 226, 0) 50%,
rgba(74, 144, 226, 0.1) 100%
);
animation: chartShine 4s infinite;
}
}
}
}
}
//
@keyframes chartShine {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
</style>

View File

@ -0,0 +1,241 @@
<template>
<div class="data-warehouse">
<div class="warehouse-header">
<i class="el-icon-data-line"></i>
<span>数据仓库</span>
</div>
<div class="warehouse-layers">
<div class="layer-item">
<div class="layer-title">DWS(数据服务层)</div>
<div class="layer-stats">
<div class="stat-item">
<span class="stat-label">/视图数</span>
<span class="stat-value">231</span>
</div>
<div class="stat-item">
<span class="stat-label">指标数</span>
<span class="stat-value">187</span>
</div>
<div class="stat-item">
<span class="stat-label">标签数</span>
<span class="stat-value">18</span>
</div>
<div class="stat-item">
<span class="stat-label">剩余存储容量 (MB)</span>
<span class="stat-value">183.27</span>
</div>
</div>
</div>
<div class="layer-item">
<div class="layer-title">DWD(数据明细层)</div>
<div class="layer-charts">
<div class="chart-item">
<div class="chart-title">各类型数据田分布情况</div>
<div class="chart-content">
<!-- 模拟图表占位 -->
<div
class="mock-chart"
style="
width: 100%;
height: 100px;
background: rgba(74, 144, 226, 0.1);
"
></div>
</div>
</div>
<div class="chart-item">
<div class="chart-title">各数据子集数据田分布</div>
<div class="chart-content">
<!-- 模拟图表占位 -->
<div
class="mock-chart"
style="
width: 100%;
height: 100px;
background: rgba(74, 144, 226, 0.1);
"
></div>
</div>
</div>
</div>
</div>
<div class="layer-item">
<div class="layer-title">DIM(维表层)</div>
<div class="layer-stats">
<div class="stat-item">
<span class="stat-label">分类数量</span>
<span class="stat-value">12</span>
</div>
<div class="stat-item">
<span class="stat-label">维度表数量</span>
<span class="stat-value">132</span>
</div>
<div class="stat-item">
<span class="stat-label">学子数</span>
<span class="stat-value">215</span>
</div>
<div class="stat-item">
<span class="stat-label">数据量</span>
<span class="stat-value">1237563</span>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {};
},
};
</script>
<style scoped lang="scss">
.data-warehouse {
background: linear-gradient(
to bottom,
rgba(30, 60, 100, 0.8),
rgba(10, 30, 60, 0.8)
);
border: 1px solid rgba(74, 144, 226, 0.3);
border-radius: 12px;
padding: 15px;
box-shadow: 0 0 15px rgba(74, 144, 226, 0.2);
.warehouse-header {
display: flex;
align-items: center;
margin-bottom: 10px;
i {
font-size: 24px;
color: #4a90e2;
margin-right: 8px;
filter: drop-shadow(0 2px 2px rgba(74, 144, 226, 0.3));
}
span {
font-size: 18px;
color: #fff;
font-weight: 500;
text-shadow: 0 0 5px rgba(74, 144, 226, 0.5);
}
}
.warehouse-layers {
display: flex;
flex-direction: column;
gap: 10px;
.layer-item {
background: rgba(74, 144, 226, 0.1);
padding: 8px;
border-radius: 8px;
transition: all 0.3s ease;
&:hover {
background: rgba(74, 144, 226, 0.2);
box-shadow: 0 0 10px rgba(74, 144, 226, 0.3);
}
.layer-title {
font-size: 16px;
color: #fff;
margin-bottom: 8px;
text-shadow: 0 0 3px rgba(74, 144, 226, 0.5);
}
.layer-stats {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
.stat-item {
background: rgba(74, 144, 226, 0.15);
padding: 6px;
border-radius: 6px;
transition: all 0.3s ease;
&:hover {
background: rgba(74, 144, 226, 0.25);
}
.stat-label {
font-size: 12px;
color: rgba(255, 255, 255, 0.7);
display: block;
margin-bottom: 4px;
}
.stat-value {
font-size: 14px;
font-weight: bold;
background: linear-gradient(to top, #4a90e2, #fff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
}
.layer-charts {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
.chart-item {
background: rgba(74, 144, 226, 0.15);
padding: 6px;
border-radius: 6px;
transition: all 0.3s ease;
&:hover {
background: rgba(74, 144, 226, 0.25);
}
.chart-title {
font-size: 12px;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 4px;
}
.mock-chart {
width: 100%;
height: 100px;
background: rgba(74, 144, 226, 0.1);
border-radius: 4px;
position: relative;
overflow: hidden;
&::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(
90deg,
rgba(74, 144, 226, 0.2) 0%,
rgba(74, 144, 226, 0) 50%,
rgba(74, 144, 226, 0.2) 100%
);
animation: chartShine 3s infinite;
}
@keyframes chartShine {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
}
}
}
}
}
}
</style>

View File

@ -0,0 +1,241 @@
<template>
<div class="open-share">
<div class="share-header">
<i class="el-icon-share"></i>
<span>开放共享</span>
</div>
<div class="share-stats">
<div class="stat-item">
<span class="stat-label">今日交换数据量</span>
<span class="stat-value">18646</span>
</div>
<div class="stat-item">
<span class="stat-label">数据接口数</span>
<span class="stat-value">87</span>
</div>
<div class="stat-item">
<span class="stat-label">累计交换数据量</span>
<span class="stat-value">1898646</span>
</div>
<div class="stat-item">
<span class="stat-label">接口累计调用次数</span>
<span class="stat-value">98648</span>
</div>
<div class="stat-item">
<span class="stat-label">异常交换数据量</span>
<span class="stat-value">2</span>
</div>
<div class="stat-item">
<span class="stat-label">调用异常接口数</span>
<span class="stat-value">1</span>
</div>
</div>
<div class="share-charts">
<div class="chart-item">
<div class="chart-title">接口资源调用 TOP20</div>
<div class="chart-content">
<ul class="chart-list">
<li v-for="(item, index) in top20Apis" :key="index">
<span>{{ item.name }}</span>
<span>{{ item.count }}</span>
</li>
</ul>
</div>
</div>
<div class="chart-item">
<div class="chart-title">应用今日调用 TOP5</div>
<div class="chart-content">
<ul class="chart-list">
<li v-for="(item, index) in top5Apps" :key="index">
<span>{{ item.name }}</span>
<span>{{ item.count }}</span>
</li>
</ul>
</div>
</div>
<div class="chart-item">
<div class="chart-title">近七日数据开放共享情况</div>
<div class="chart-content">
<!-- 模拟图表占位 -->
<div
class="mock-chart"
style="
width: 100%;
height: 120px;
background: rgba(74, 144, 226, 0.1);
"
></div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
top20Apis: [
{ name: "排课信息", count: 209 },
{ name: "学生人数信息", count: 193 },
{ name: "教职工科研信息", count: 127 },
{ name: "教职工基础信息", count: 231 },
],
top5Apps: [
{ name: "人事系统", count: 209 },
{ name: "科研系统", count: 193 },
{ name: "门禁系统", count: 127 },
{ name: "学工系统", count: 231 },
],
};
},
};
</script>
<style scoped lang="scss">
.open-share {
background: linear-gradient(
to bottom,
rgba(30, 60, 100, 0.8),
rgba(10, 30, 60, 0.8)
);
border: 1px solid rgba(74, 144, 226, 0.3);
border-radius: 12px;
padding: 15px;
box-shadow: 0 0 15px rgba(74, 144, 226, 0.2);
.share-header {
display: flex;
align-items: center;
margin-bottom: 10px;
i {
font-size: 24px;
color: #4a90e2;
margin-right: 8px;
filter: drop-shadow(0 2px 2px rgba(74, 144, 226, 0.3));
}
span {
font-size: 18px;
color: #fff;
font-weight: 500;
text-shadow: 0 0 5px rgba(74, 144, 226, 0.5);
}
}
.share-stats {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
margin-bottom: 15px;
.stat-item {
background: rgba(74, 144, 226, 0.1);
padding: 8px;
border-radius: 8px;
transition: all 0.3s ease;
&:hover {
background: rgba(74, 144, 226, 0.2);
box-shadow: 0 0 10px rgba(74, 144, 226, 0.3);
}
.stat-label {
font-size: 12px;
color: rgba(255, 255, 255, 0.7);
display: block;
margin-bottom: 4px;
}
.stat-value {
font-size: 16px;
font-weight: bold;
background: linear-gradient(to top, #4a90e2, #fff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
}
.share-charts {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
.chart-item {
background: rgba(74, 144, 226, 0.1);
padding: 8px;
border-radius: 8px;
transition: all 0.3s ease;
&:hover {
background: rgba(74, 144, 226, 0.2);
box-shadow: 0 0 10px rgba(74, 144, 226, 0.3);
}
.chart-title {
font-size: 14px;
color: #fff;
margin-bottom: 8px;
text-shadow: 0 0 3px rgba(74, 144, 226, 0.5);
}
.chart-content {
ul.chart-list {
list-style: none;
padding: 0;
li {
display: flex;
justify-content: space-between;
margin-bottom: 4px;
font-size: 12px;
color: rgba(255, 255, 255, 0.8);
transition: all 0.3s ease;
&:hover {
color: #fff;
transform: translateX(3px);
}
}
}
.mock-chart {
width: 100%;
height: 120px;
background: rgba(74, 144, 226, 0.1);
border-radius: 4px;
position: relative;
overflow: hidden;
&::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(
90deg,
rgba(74, 144, 226, 0.2) 0%,
rgba(74, 144, 226, 0) 50%,
rgba(74, 144, 226, 0.2) 100%
);
animation: chartShine 3s infinite;
}
@keyframes chartShine {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
}
}
}
}
}
</style>