|
|
|
|
@ -74,54 +74,6 @@
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- 三个全覆盖完成度 -->
|
|
|
|
|
<div class="progress-container warehouse-table">
|
|
|
|
|
<div class="progress-title">"三个全覆盖"完成度</div>
|
|
|
|
|
<div class="progress-item" v-for="(item, index) in threeCoverageItems" :key="index">
|
|
|
|
|
<div class="progress-label">{{ item.title }}</div>
|
|
|
|
|
<div class="progress-row">
|
|
|
|
|
<div class="progress-bar-wrapper">
|
|
|
|
|
<div class="progress-bar" :style="{ width: getProgressPercent(item) + '%' }">
|
|
|
|
|
<span class="progress-value">{{ item.current }}{{ item.unit }} {{ getProgressPercent(item) }}%</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="progress-tooltip" :style="{ left: getTooltipOffset(getProgressPercent(item)) }">
|
|
|
|
|
<div class="tooltip-percent">{{ getProgressPercent(item) }}%</div>
|
|
|
|
|
<div class="tooltip-value">{{ item.current }}{{ item.unit }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="progress-total">{{ item.total }}{{ item.unit }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- 本月课程表 -->
|
|
|
|
|
<div class="course-table-container warehouse-table">
|
|
|
|
|
<div class="course-title-vertical">
|
|
|
|
|
<span>本月课程</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="course-table">
|
|
|
|
|
<div class="table-header">
|
|
|
|
|
<div class="table-cell">课程</div>
|
|
|
|
|
<div class="table-cell small">地点</div>
|
|
|
|
|
<div class="table-cell small">带班老师</div>
|
|
|
|
|
</div>
|
|
|
|
|
<transition-group name="course-fade" tag="div" class="table-body">
|
|
|
|
|
<div
|
|
|
|
|
v-for="(course, index) in currentCourseGroup"
|
|
|
|
|
:key="`${course.name}-${index}`"
|
|
|
|
|
class="table-row"
|
|
|
|
|
>
|
|
|
|
|
<div class="table-cell">{{ course.name }}</div>
|
|
|
|
|
<div class="table-cell small">{{ course.location }}</div>
|
|
|
|
|
<div class="table-cell small">{{ course.teacher }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</transition-group>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- 中间区域 -->
|
|
|
|
|
<div class="center-section">
|
|
|
|
|
<!-- 课程体系数据总览 -->
|
|
|
|
|
<div class="course-system-container warehouse-table">
|
|
|
|
|
<div class="table-title">课程体系数据总览</div>
|
|
|
|
|
@ -166,8 +118,28 @@
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- 右侧区域 -->
|
|
|
|
|
<div class="right-section">
|
|
|
|
|
<!-- 中间区域 -->
|
|
|
|
|
<div class="center-section">
|
|
|
|
|
<!-- 三个全覆盖完成度 -->
|
|
|
|
|
<div class="progress-container warehouse-table">
|
|
|
|
|
<div class="progress-title">"三个全覆盖"完成度</div>
|
|
|
|
|
<div class="progress-item" v-for="(item, index) in threeCoverageItems" :key="index">
|
|
|
|
|
<div class="progress-label">{{ item.title }}</div>
|
|
|
|
|
<div class="progress-row">
|
|
|
|
|
<div class="progress-bar-wrapper">
|
|
|
|
|
<div class="progress-bar" :style="{ width: getProgressPercent(item) + '%' }">
|
|
|
|
|
<span class="progress-value">{{ item.current }}{{ item.unit }} {{ getProgressPercent(item) }}%</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="progress-tooltip" :style="{ left: getTooltipOffset(getProgressPercent(item)) }">
|
|
|
|
|
<div class="tooltip-percent">{{ getProgressPercent(item) }}%</div>
|
|
|
|
|
<div class="tooltip-value">{{ item.current }}{{ item.unit }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="progress-total">{{ item.total }}{{ item.unit }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- 地图区域 -->
|
|
|
|
|
<div class="map-container warehouse-table">
|
|
|
|
|
<div class="map-title">
|
|
|
|
|
@ -227,6 +199,34 @@
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- 右侧区域 -->
|
|
|
|
|
<div class="right-section">
|
|
|
|
|
<!-- 本月课程表 -->
|
|
|
|
|
<div class="course-table-container warehouse-table">
|
|
|
|
|
<div class="course-title-vertical">
|
|
|
|
|
<span>本月课程</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="course-table">
|
|
|
|
|
<div class="table-header">
|
|
|
|
|
<div class="table-cell">课程</div>
|
|
|
|
|
<div class="table-cell small">地点</div>
|
|
|
|
|
<div class="table-cell small">带班老师</div>
|
|
|
|
|
</div>
|
|
|
|
|
<transition-group name="course-fade" tag="div" class="table-body">
|
|
|
|
|
<div
|
|
|
|
|
v-for="(course, index) in currentCourseGroup"
|
|
|
|
|
:key="`${course.name}-${index}`"
|
|
|
|
|
class="table-row"
|
|
|
|
|
>
|
|
|
|
|
<div class="table-cell">{{ course.name }}</div>
|
|
|
|
|
<div class="table-cell small">{{ course.location }}</div>
|
|
|
|
|
<div class="table-cell small">{{ course.teacher }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</transition-group>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- 动态信息 -->
|
|
|
|
|
<div class="news-container warehouse-table">
|
|
|
|
|
@ -284,8 +284,7 @@ export default {
|
|
|
|
|
statisticsList: {},
|
|
|
|
|
|
|
|
|
|
// 本月课程
|
|
|
|
|
monthCourses: [
|
|
|
|
|
],
|
|
|
|
|
monthCourses: [],
|
|
|
|
|
courseGroupIndex: 0,
|
|
|
|
|
courseTimer: null,
|
|
|
|
|
|
|
|
|
|
@ -394,8 +393,8 @@ export default {
|
|
|
|
|
courseGroups() {
|
|
|
|
|
if (!this.monthCourses || !this.monthCourses.length) return []
|
|
|
|
|
const chunk = []
|
|
|
|
|
for (let i = 0; i < this.monthCourses.length; i += 3) {
|
|
|
|
|
chunk.push(this.monthCourses.slice(i, i + 3))
|
|
|
|
|
for (let i = 0; i < this.monthCourses.length; i += 4) {
|
|
|
|
|
chunk.push(this.monthCourses.slice(i, i + 4))
|
|
|
|
|
}
|
|
|
|
|
return chunk
|
|
|
|
|
},
|
|
|
|
|
@ -1110,7 +1109,7 @@ export default {
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
background: linear-gradient(135deg, rgba(59, 130, 246, 0.2) 0%, rgba(99, 102, 241, 0.1) 100%);
|
|
|
|
|
border: 1px solid rgba(59, 130, 246, 0.3);
|
|
|
|
|
padding: 2vh 1.5vw;
|
|
|
|
|
padding: 2vh 1.5vw!important;
|
|
|
|
|
gap:0!important;
|
|
|
|
|
backdrop-filter: blur(10px);
|
|
|
|
|
}
|
|
|
|
|
@ -1126,7 +1125,7 @@ export default {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
// gap: 1vw;
|
|
|
|
|
padding: 0.5vw 0;
|
|
|
|
|
padding: 0.2vw 0;
|
|
|
|
|
// justify-content: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -1151,14 +1150,14 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.alumni-card .card-icon.flat {
|
|
|
|
|
width: 2.8vw;
|
|
|
|
|
height: 5.6vh;
|
|
|
|
|
width: 2.3vw;
|
|
|
|
|
height: 4.5vh;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.yearly-card .card-icon.flat {
|
|
|
|
|
width: 2.5vw;
|
|
|
|
|
height: 5vh;
|
|
|
|
|
width: 2vw;
|
|
|
|
|
height: 4vh;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.card-icon.flat img {
|
|
|
|
|
@ -1174,10 +1173,11 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.card-value {
|
|
|
|
|
font-size: 1.8vw;
|
|
|
|
|
font-size: 1.5vw;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
background: linear-gradient(90deg, #f4dcae 0%, #b78d60 100%);
|
|
|
|
|
-webkit-background-clip: text;
|
|
|
|
|
background-clip: text;
|
|
|
|
|
color: transparent;
|
|
|
|
|
text-shadow: 0 0 10px rgba(59, 130, 246, 0.25);
|
|
|
|
|
line-height: 1.1;
|
|
|
|
|
@ -1185,14 +1185,14 @@ export default {
|
|
|
|
|
|
|
|
|
|
.card-label {
|
|
|
|
|
color: #fff;
|
|
|
|
|
font-size: 0.8vw;
|
|
|
|
|
margin-top: 0.4vh;
|
|
|
|
|
font-size: 0.7vw;
|
|
|
|
|
margin-top: 0.3vh;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.card-note {
|
|
|
|
|
color: #fff;
|
|
|
|
|
font-size: 0.7vw;
|
|
|
|
|
margin-top: 0.5vh;
|
|
|
|
|
font-size: 0.6vw;
|
|
|
|
|
margin-top: 0.4vh;
|
|
|
|
|
opacity: 0.8;
|
|
|
|
|
width: 100%;
|
|
|
|
|
text-align: left;
|
|
|
|
|
@ -1205,15 +1205,15 @@ export default {
|
|
|
|
|
.training-people-card .card-icon.flat,
|
|
|
|
|
.genban-card .card-icon.flat,
|
|
|
|
|
.invested-company-card .card-icon.flat {
|
|
|
|
|
width: 2.5vw;
|
|
|
|
|
height: 5vh;
|
|
|
|
|
width: 2vw;
|
|
|
|
|
height: 4vh;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.progress-container {
|
|
|
|
|
background: linear-gradient(135deg, rgba(59, 130, 246, 0.2) 0%, rgba(99, 102, 241, 0.1) 100%);
|
|
|
|
|
border: 1px solid rgba(59, 130, 246, 0.3);
|
|
|
|
|
border-radius: 8px;
|
|
|
|
|
padding: 1.5vh 1.5vw!important;
|
|
|
|
|
padding: 3.4vh 1.5vw!important;
|
|
|
|
|
backdrop-filter: blur(10px);
|
|
|
|
|
// padding-bottom: 2vh!important;
|
|
|
|
|
}
|
|
|
|
|
@ -1362,16 +1362,22 @@ export default {
|
|
|
|
|
background: rgba(7, 24, 71, 0.65);
|
|
|
|
|
border: 1px solid rgba(60, 152, 255, 0.4);
|
|
|
|
|
padding: 0;
|
|
|
|
|
flex: 1;
|
|
|
|
|
flex: 0 0 auto; // 不自动伸缩,固定高度
|
|
|
|
|
display: flex;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
gap: 0 !important;
|
|
|
|
|
padding:0!important;
|
|
|
|
|
height: auto; // 由内容决定高度
|
|
|
|
|
width: 100%;
|
|
|
|
|
max-width: 100%;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.course-title-vertical {
|
|
|
|
|
width: 4.5vw;
|
|
|
|
|
min-width: 70px;
|
|
|
|
|
// min-width: 70px;
|
|
|
|
|
// max-width: 4.5vw;
|
|
|
|
|
flex-shrink: 0;
|
|
|
|
|
background: linear-gradient(180deg, rgba(55, 124, 255, 0.4), rgba(15, 51, 135, 0.7));
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
@ -1383,12 +1389,16 @@ export default {
|
|
|
|
|
text-orientation: upright;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
text-shadow: 0 0 12px rgba(57, 146, 255, 0.6);
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.course-table,
|
|
|
|
|
.system-table {
|
|
|
|
|
width: 100%;
|
|
|
|
|
max-width: 100%;
|
|
|
|
|
border-spacing: 0;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.system-table {
|
|
|
|
|
@ -1399,19 +1409,28 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.course-table {
|
|
|
|
|
padding: 2vh 1.2vw;
|
|
|
|
|
flex: 1;
|
|
|
|
|
padding: 2vh 0.8vw;
|
|
|
|
|
flex: 0 0 auto; // 不自动伸缩,使用固定高度
|
|
|
|
|
min-width: 0;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
height: auto; // 由内容决定高度
|
|
|
|
|
width: calc(100% - 4.5vw);
|
|
|
|
|
max-width: 100%;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.table-header,
|
|
|
|
|
.table-row {
|
|
|
|
|
display: grid;
|
|
|
|
|
grid-template-columns: 1.4fr 0.5fr 0.6fr;
|
|
|
|
|
padding: 0.8vh 0.5vw;
|
|
|
|
|
grid-template-columns: 1.1fr 0.6fr 0.8fr;
|
|
|
|
|
padding: 0.6vh 0.3vw;
|
|
|
|
|
align-items: center;
|
|
|
|
|
width: 100%;
|
|
|
|
|
max-width: 100%;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
min-height: 3.5vh; // 确保每行有足够高度
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.table-header {
|
|
|
|
|
@ -1431,6 +1450,13 @@ export default {
|
|
|
|
|
position: relative;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 本月课程表的table-body固定高度 - 4条数据 */
|
|
|
|
|
.course-table .table-body {
|
|
|
|
|
height: 16vh; // 固定高度:4条数据的高度(每行约4vh,4行 = 16vh)
|
|
|
|
|
min-height: 16vh;
|
|
|
|
|
max-height: 16vh;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.table-row {
|
|
|
|
|
position: relative;
|
|
|
|
|
color: #fff;
|
|
|
|
|
@ -1455,6 +1481,15 @@ export default {
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
max-width: 100%;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
padding: 0;
|
|
|
|
|
margin: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 本月课程表格的单元格特殊处理 */
|
|
|
|
|
.course-table .table-cell {
|
|
|
|
|
padding: 0 0.2vw;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.course-table .table-cell:nth-child(2),
|
|
|
|
|
@ -1483,6 +1518,8 @@ export default {
|
|
|
|
|
min-width: 0;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
gap: 2vh;
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.course-system-container {
|
|
|
|
|
@ -1507,7 +1544,7 @@ export default {
|
|
|
|
|
color: #93ccfd;
|
|
|
|
|
font-size: 1.3vw;
|
|
|
|
|
text-align: center;
|
|
|
|
|
margin-bottom: 0.5vh;
|
|
|
|
|
// margin-bottom: 0.5vh;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
}
|
|
|
|
|
.course-system-container .table-header {
|
|
|
|
|
@ -1561,10 +1598,10 @@ export default {
|
|
|
|
|
|
|
|
|
|
/* 年份按钮组 */
|
|
|
|
|
.year-buttons-wrapper {
|
|
|
|
|
margin-bottom: 1.5vh;
|
|
|
|
|
// margin-bottom: 1.5vh;
|
|
|
|
|
overflow: visible;
|
|
|
|
|
position: relative;
|
|
|
|
|
padding: 0.5vh 0;
|
|
|
|
|
// padding: 0.5vh 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.year-buttons {
|
|
|
|
|
@ -1619,10 +1656,11 @@ export default {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
gap: 2vh;
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.map-container {
|
|
|
|
|
flex: 6;
|
|
|
|
|
flex: 1;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
padding: 1.2vh 1.2vw;
|
|
|
|
|
@ -1951,7 +1989,7 @@ export default {
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
padding: 0.6vh 0.8vw;
|
|
|
|
|
padding: 1vh 0.8vw;
|
|
|
|
|
font-size: 1vw;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|