master
lion 3 months ago
parent 07651e2b63
commit f31c4d2ff7

@ -18,6 +18,12 @@
console.warn('无法获取baseURL', e);
}
// 注册自定义图标,使用 📎 emoji
var icons = editor.ui.registry.getAll().icons;
if (!icons || !icons.attachment) {
editor.ui.registry.addIcon('attachment', '<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg"><foreignObject width="24" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="font-size: 18px; line-height: 24px; text-align: center;">📎</div></foreignObject></svg>');
}
editor.ui.registry.addButton('attachment', {
icon: 'attachment',
tooltip: '上传附件',

@ -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; // 44vh4 = 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;
}

@ -318,7 +318,7 @@ export default {
key: 'company_market_total',
icon: 'el-icon-office-building',
value: '0',
label: '上市公司数',
label: '上市公司覆盖数',
cardClass: 'student-card-1'
},
{
@ -1326,21 +1326,21 @@ export default {
}
.stats-card {
border-radius: 15px;
padding: 20px 15px;
border-radius: 12px;
padding: 16px 12px;
margin-bottom: 0;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
transition: all 0.4s ease;
position: relative;
overflow: hidden;
text-align: center;
height: 150px;
height: 120px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
flex: 1 1 calc(20% - 15px);
min-width: 180px;
min-width: 150px;
&::before {
content: '';
@ -1348,25 +1348,25 @@ export default {
top: 0;
left: 0;
right: 0;
height: 4px;
height: 3px;
background: linear-gradient(90deg, #00a8ff, #0097e6);
}
&:hover {
transform: translateY(-8px);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
transform: translateY(-6px);
box-shadow: 0 16px 32px rgba(0, 0, 0, 0.15);
}
h3 {
font-size: 1.6rem;
font-size: 1.3rem;
font-weight: bold;
margin-bottom: 8px;
margin-bottom: 6px;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
flex-shrink: 0;
}
p {
font-size: 0.85rem;
font-size: 0.75rem;
opacity: 0.95;
margin: 0;
font-weight: 500;
@ -1391,9 +1391,9 @@ export default {
}
.stats-icon {
font-size: 2rem;
font-size: 1.6rem;
opacity: 0.9;
margin-bottom: 8px;
margin-bottom: 6px;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
flex-shrink: 0;
}

@ -416,12 +416,8 @@ import { download } from '@/utils/downloadRequest'
label: '邮箱',
align: 'center',
width: 120,
}, {
prop: 'is_company_schoolmate_text',
label: '是否校友企业',
align: 'center',
width: 120,
}, {
},
{
prop: 'company_name',
label: '公司名称',
align: 'left',

@ -430,7 +430,11 @@
this.table_item.map(item => {
if (item.type === 'index') {
} else {
_export[item.prop] = item.label
if(item.prop === 'is_yh_invested'){
_export['is_yh_invested_text'] = '集团标签'
}else{
_export[item.prop] = item.label
}
}
})
download(

Loading…
Cancel
Save