Compare commits

...

2 Commits

Author SHA1 Message Date
qinzhenpen 55ae2f3789 refactor: 重构实训页面底部导航,统一步骤按钮样式并移除重复代码
将各实训页面分散的步骤操作按钮整合为统一的工具栏式导航组件,移除重复的重置按钮和样式代码,新增上一步、保存进度、下一步按钮及步骤进度显示,优化响应式布局适配不同屏幕尺寸,提升界面一致性和可维护性。
2 weeks ago
qinzhenpen 3d83fefbce style: 统一使用学生端字号变量替代硬编码字体大小
本次提交将多处硬编码的字体大小值替换为统一定义的学生端字号 CSS 变量,同时移除了各页面重复声明的字号变量定义,确保全站学生端字号梯度统一,提升样式一致性和可维护性。
2 weeks ago

@ -500,8 +500,8 @@ const taskRequirement = computed(() => taskConfig.value?.requirements || default
box-shadow: none !important;
.step-tab {
flex: 1 1 0 !important;
max-width: 240px !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
@ -1352,7 +1352,7 @@ watch(() => JSON.stringify(buildDraft()), persistDraft);
#app .studentLayout section.app-main:has(.new-product-value-page) .step-indicator {
display: flex !important; gap: 0 !important;
.step-tab {
flex: 1 1 0 !important; height: 42px !important;
height: 42px !important;
border-radius: 0 !important; border: 1px solid #e5e7eb !important;
background: #ffffff !important; color: #6b7280 !important;
/* 首尾圆角 */

@ -1134,9 +1134,14 @@
--el-menu-sub-item-height: 46px;
}
/* 侧栏 Logo 标题(Logo.vue scoped 写死 14px,此处仅学生端放大一档) */
.sidebar-container.is-student-nav .sidebar-title {
font-size: var(--student-fs-body);
}
/* 一级行(直跳项 / 分组标题):教育蓝极简文字行,白底深灰字。
EP 会给 title 绑内联 color/background,必须 !important 才能覆盖。
一级用最深字色 + 700 加粗 + 14px,与二级(浅灰 13px/400)拉开层级 */
一级用最深字色 + 700 加粗 + 15px,与二级(浅灰 14px/400)拉开层级 */
.student-course-menu > li.el-menu-item,
.student-course-menu > li.el-sub-menu > .el-sub-menu__title {
position: relative;
@ -1145,7 +1150,7 @@
margin: 10px 0 2px;
border-radius: 6px;
color: #1f2937 !important;
font-size: 14px;
font-size: var(--student-fs-body);
font-weight: 700;
letter-spacing: 0.01em;
background: transparent !important;
@ -1252,8 +1257,8 @@
background: #ffffff;
}
/* 二级菜单项:透明底浅灰字、13px/400、左侧缩进,明显从属于一级分组。
与一级(#1f2937 14px/700)拉开三重对比:字色 / 字号 / 字重。
/* 二级菜单项:透明底浅灰字、14px/400、左侧缩进,明显从属于一级分组。
与一级(#1f2937 15px/700)拉开三重对比:字色 / 字号 / 字重。
老规则对嵌套项写了 transparent !important(L80-90),背景必须 !important 才能覆盖 */
.sidebar-container.is-student-nav .el-sub-menu .el-menu-item {
position: relative;
@ -1263,7 +1268,7 @@
padding-left: 40px !important;
border-radius: 8px;
color: #6b7280;
font-size: 13px;
font-size: var(--student-fs-body-sm);
font-weight: 400;
background: transparent;
transition:
@ -1394,7 +1399,7 @@
line-height: 36px;
border-radius: 8px;
color: #6b7280;
font-size: 13px;
font-size: var(--student-fs-body-sm);
font-weight: 400;
background: transparent;
transition:

@ -18,6 +18,25 @@
--student-fs-data: 16px; /* 小四 12pt - 数字/成绩/金额 */
}
/* ===== 字号梯度(全站唯一定义处)=====
标题19 / 步骤17 / 面板16 / 区块15 / 正文15 / 表格14 / 辅助13 / 按钮15 / 数据16
同时挂到 body.student-light-mode(仅 role=4 学生登录后挂载):
顶部导航 / 侧栏菜单 / 用户下拉等学生端 chrome 与实训页共用同一套令牌,
教师端/超管端无此类名,完全不受影响 */
.student-training-shell,
body.student-light-mode {
--student-fs-display: 19px;
--student-fs-h1: 17px;
--student-fs-h2: 16px;
--student-fs-h3: 15px;
--student-fs-body: 15px;
--student-fs-body-sm: 14px;
--student-fs-caption: 13px;
--student-fs-button: 15px;
--student-fs-button-lg: 15px;
--student-fs-data: 16px;
}
.student-training-shell {
--student-step-height: 40px;
--student-step-font: 13px;
@ -351,10 +370,10 @@
display: none !important;
}
.student-training-shell .flow-pill,
.student-training-shell .step-tab {
flex: 1 1 0 !important;
max-width: 240px !important;
#app #app .student-training-shell .flow-pill,
#app .student-training-shell .step-tab {
flex: 0 0 auto !important;
max-width: none !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
@ -370,11 +389,11 @@
background: #ffffff !important;
box-shadow: none !important;
color: #6b7280 !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
white-space: nowrap !important;
line-height: 1.3 !important;
letter-spacing: 0 !important;
white-space: normal !important;
text-align: center !important;
cursor: pointer;
transition: background-color .16s ease, color .16s ease, border-color .16s ease !important;
@ -403,7 +422,7 @@
background: #f3f4f6 !important;
color: #6b7280 !important;
font-family: ui-monospace, "SF Mono", Consolas, monospace !important;
font-size: 12px !important;
font-size: var(--student-fs-body-sm) !important;
font-weight: 700 !important;
line-height: 1 !important;
letter-spacing: 0 !important;
@ -413,8 +432,8 @@
.step-name { color: inherit !important; }
}
.student-training-shell .flow-pill:hover:not(.active):not(.complete),
.student-training-shell .step-tab:hover:not(.active):not(.complete) {
#app .student-training-shell .flow-pill:hover:not(.active):not(.complete),
#app .student-training-shell .step-tab:hover:not(.active):not(.complete) {
border-color: #2563eb !important;
background: #eff6ff !important;
color: #2563eb !important;
@ -426,8 +445,8 @@
}
}
.student-training-shell .flow-pill.complete:not(.active),
.student-training-shell .step-tab.complete:not(.active) {
#app .student-training-shell .flow-pill.complete:not(.active),
#app .student-training-shell .step-tab.complete:not(.active) {
border-color: #e5e7eb !important;
color: #374151 !important;
.step-no,
@ -447,8 +466,8 @@
}
}
.student-training-shell .flow-pill.active,
.student-training-shell .step-tab.active {
#app .student-training-shell .flow-pill.active,
#app .student-training-shell .step-tab.active {
border-color: #2563eb !important;
background: #2563eb !important;
color: #ffffff !important;
@ -467,21 +486,21 @@
}
/* 综合实训导航(GenericTrainingPage):步骤多、可拖动,tab 固定宽,视觉沿用胶囊 */
.student-training-shell .comprehensive-step-strip .step-tab {
#app .student-training-shell .comprehensive-step-strip .step-tab {
flex: 0 0 190px !important;
max-width: 190px !important;
}
/* 窄屏步骤导航横向滑动 */
@media (max-width: 900px) {
.student-training-shell .step-indicator {
#app .student-training-shell .step-indicator {
overflow-x: auto !important;
flex-wrap: nowrap !important;
justify-content: flex-start !important;
}
.student-training-shell .step-tab,
.student-training-shell .flow-pill {
flex: 0 0 140px !important;
#app .student-training-shell .step-tab,
#app .student-training-shell .flow-pill {
flex: 0 0 auto !important;
min-width: 0 !important;
max-width: none !important;
}
@ -504,7 +523,7 @@
.student-training-shell .flow-step {
display: flex !important;
flex: 1 1 0 !important;
//
align-items: center !important;
justify-content: center !important;
gap: 6px !important;
@ -517,7 +536,7 @@
color: #6b7280 !important;
background: transparent !important;
box-shadow: none !important;
font-size: 12px !important;
font-size: var(--student-fs-body-sm) !important;
font-weight: 600 !important;
letter-spacing: 0 !important;
text-align: center !important;
@ -535,7 +554,7 @@
border-radius: 6px !important;
color: #6b7280 !important;
background: #f3f4f6 !important;
font-size: 12px !important;
font-size: var(--student-fs-body-sm) !important;
font-weight: 700 !important;
line-height: 1 !important;
}
@ -543,7 +562,7 @@
.student-training-shell .flow-step strong {
min-width: 0 !important;
color: inherit !important;
font-size: 12px !important;
font-size: var(--student-fs-body-sm) !important;
font-weight: 600 !important;
line-height: 1.25 !important;
letter-spacing: 0 !important;
@ -587,7 +606,7 @@
min-height: 34px !important;
margin: 10px 0 8px !important;
color: #1f2937 !important;
font-size: 16px !important;
font-size: 18px !important;
font-weight: 700 !important;
line-height: 1.45 !important;
letter-spacing: 0 !important;
@ -621,7 +640,7 @@
.training-step-area .el-table {
margin-top: 12px !important;
margin-bottom: 18px !important;
font-size: 14px !important;
font-size: var(--student-fs-h2) !important;
}
.training-step-area .el-button {
@ -842,7 +861,7 @@
color: #2563eb !important;
background: #ffffff !important;
box-shadow: none !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
line-height: 1 !important;
letter-spacing: 0 !important;
@ -905,7 +924,7 @@
border-radius: 8px !important;
color: #2563eb !important;
background: #ffffff !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
line-height: 1 !important;
white-space: nowrap !important;
@ -962,7 +981,7 @@
.student-training-shell .field-block > span,
.student-training-shell .large-field > span,
.student-training-shell .product-field > span {
font-size: 16px !important;
font-size: 18px !important;
line-height: 1.45 !important;
letter-spacing: 0 !important;
}
@ -1063,8 +1082,8 @@
flex-direction: column !important;
}
.student-training-shell .flow-pill,
.student-training-shell .step-tab,
#app .student-training-shell .flow-pill,
#app .student-training-shell .step-tab,
.student-training-shell .flow-step,
.student-training-shell .training-actions .el-button.training-action,
.student-training-shell .training-actions button.training-action {
@ -1125,7 +1144,7 @@ body.student-light-mode {
.el-dialog__title {
color: #1f2937 !important;
font-size: 16px !important;
font-size: 18px !important;
font-weight: 700 !important;
font-family: var(--student-font-base) !important;
}
@ -1145,7 +1164,7 @@ body.student-light-mode {
padding: 20px !important;
background: #ffffff !important;
color: #1f2937 !important;
font-size: 14px !important;
font-size: var(--student-fs-h2) !important;
line-height: 1.6 !important;
}
@ -1169,14 +1188,14 @@ body.student-light-mode {
padding: 16px 20px 0 !important;
.el-message-box__title {
color: #1f2937 !important;
font-size: 16px !important;
font-size: 18px !important;
font-weight: 700 !important;
}
.el-message-box__headerbtn .el-message-box__close { color: #6b7280 !important; }
}
.el-message-box__content {
color: #374151 !important;
font-size: 14px !important;
font-size: var(--student-fs-h2) !important;
padding: 14px 20px !important;
}
.el-message-box__btns {
@ -1197,7 +1216,7 @@ body.student-light-mode {
border-bottom: 1px solid #e5e7eb !important;
.el-drawer__title {
color: #1f2937 !important;
font-size: 16px !important;
font-size: 18px !important;
font-weight: 700 !important;
}
.el-drawer__close-btn {
@ -1283,7 +1302,7 @@ body.student-light-mode {
.el-dialog__title {
color: #1f2937 !important;
font-size: 16px !important;
font-size: 18px !important;
font-weight: 700 !important;
font-family: var(--student-font-base) !important;
}
@ -1386,17 +1405,7 @@ body.student-light-mode {
--el-input-focus-ring-color: rgba(59, 130, 246, 0.15);
--el-textarea-hover-border-color: #3b82f6;
--el-textarea-focus-border-color: #2563eb;
/* 紧凑字号梯度:与 new-product-survey 一致(11→17px) */
--student-fs-display: 17px;
--student-fs-h1: 15px;
--student-fs-h2: 14px;
--student-fs-h3: 13px;
--student-fs-body: 13px;
--student-fs-body-sm: 12px;
--student-fs-caption: 11px;
--student-fs-button: 13px;
--student-fs-button-lg: 13px;
--student-fs-data: 14px;
/* 字号梯度统一由 .student-training-shell 提供(legacy 页根元素同挂该类),此处不再重复 */
}
/* legacy 页顶部工具栏按钮(TrainingTaskToolbar):教育蓝统一,
@ -1416,14 +1425,14 @@ body.student-light-mode {
background: #ffffff !important;
box-shadow: none !important;
text-shadow: none !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
transition: all 0.16s ease !important;
}
#app .studentLayout .app-main:has(.legacy-training-page) .legacy-training-page .task-toolbar-button.el-button .el-icon,
#app .teacherLayout .app-main:has(.legacy-training-page) .legacy-training-page .task-toolbar-button.el-button .el-icon {
font-size: 14px !important;
font-size: var(--student-fs-h2) !important;
color: inherit !important;
}
@ -1470,7 +1479,7 @@ body.student-light-mode {
color: #2563eb !important;
background: #ffffff !important;
box-shadow: none !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
transition: all 0.16s ease !important;
}

@ -770,7 +770,7 @@ onMounted(() => {
.nacber-name {
color: #1f2937;
font-size: 15px;
font-size: var(--student-fs-h2);
font-weight: 700;
letter-spacing: 0;
text-shadow: none;
@ -781,6 +781,7 @@ onMounted(() => {
// 导航菜单:文字式,灰字 → hover 深黑 → 激活教育蓝 + 下划线指示条
.el-ment {
color: #6b7280;
font-size: var(--student-fs-body);
.el-ment-item {
color: #6b7280;
@ -1089,13 +1090,13 @@ onMounted(() => {
.user-name {
color: #1f2937 !important;
font-size: 14px;
font-size: var(--student-fs-body);
font-weight: 600;
letter-spacing: 0;
}
.user-role {
color: #6b7280 !important;
font-size: 12px;
font-size: var(--student-fs-caption);
font-weight: 400;
}
}
@ -1123,7 +1124,7 @@ onMounted(() => {
border-radius: 8px;
background: transparent !important;
color: #4b5563 !important;
font-size: 13px;
font-size: var(--student-fs-body-sm);
font-weight: 400;
transition: background 0.15s ease, color 0.15s ease;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -464,7 +464,7 @@ function plainText(value) {
font-size: var(--ai-fs-body);
font-weight: var(--ai-fw-emphasized);
.el-icon { color: var(--ai-accent); font-size: 15px; }
.el-icon { color: var(--ai-accent); font-size: var(--student-fs-h1); }
}
.ai-head__close {
display: inline-flex;
@ -506,7 +506,7 @@ function plainText(value) {
cursor: pointer;
transition: color 0.16s ease, background 0.16s ease, border-color 0.16s ease;
.el-icon { font-size: 13px; }
.el-icon { font-size: var(--student-fs-body); }
&:hover { color: var(--ai-text); background: var(--ai-soft); }
@ -627,7 +627,7 @@ function plainText(value) {
font-size: var(--ai-fs-caption);
font-weight: var(--ai-fw-emphasized);
.el-icon { color: var(--ai-accent); font-size: 13px; }
.el-icon { color: var(--ai-accent); font-size: var(--student-fs-body); }
}
.reference-card__text {
display: block;
@ -687,7 +687,7 @@ function plainText(value) {
cursor: pointer;
transition: background 0.16s ease;
.el-icon { font-size: 14px; }
.el-icon { font-size: var(--student-fs-h2); }
&:hover:not(:disabled) { background: var(--ai-accent-deep); }
&:disabled { cursor: not-allowed; opacity: 0.45; }

@ -1,250 +1,240 @@
<template>
<section class="training-intro">
<div class="training-intro__head">
<div>
<p class="training-intro__eyebrow">Training Brief</p>
<h2>{{ displayTitle }}</h2>
</div>
<span class="training-intro__hint">实训说明</span>
</div>
<TrainingTaskBrief
:background="briefBackground"
:goals="remoteGoals"
:requirements="briefRequirements"
:material-name="remoteTask?.materialName"
:material-url="remoteTask?.materialUrl"
/>
<nav v-if="remoteSteps.length" class="step-indicator training-intro__steps" aria-label="实训步骤">
<button
v-for="(step, index) in remoteSteps"
:key="`${step}-${index}`"
type="button"
:class="['step-tab', { active: activeStep === index }]"
@click="activeStep = index"
>
<span>{{ step }}</span>
</button>
</nav>
</section>
<section class="training-intro">
<div class="training-intro__head">
<div>
<p class="training-intro__eyebrow">Training Brief</p>
<h2>{{ displayTitle }}</h2>
</div>
<span class="training-intro__hint">实训说明</span>
</div>
<TrainingTaskBrief :background="briefBackground" :goals="remoteGoals" :requirements="briefRequirements"
:material-name="remoteTask?.materialName" :material-url="remoteTask?.materialUrl" />
<nav v-if="remoteSteps.length" class="step-indicator training-intro__steps" aria-label="实训步骤">
<button v-for="(step, index) in remoteSteps" :key="`${step}-${index}`" type="button"
:class="['step-tab', { active: activeStep === index }]" @click="activeStep = index">
<span>{{ step }}</span>
</button>
</nav>
</section>
</template>
<script setup>
import { getTrainingTaskByKey } from "@/api/trainingTask";
import { parseTrainingArray, resolveTrainingTaskKey } from "@/views/training/taskKeyMap";
import TrainingTaskBrief from "@/views/components/TrainingTaskBrief.vue";
import { getTrainingTaskByKey } from "@/api/trainingTask"
import { parseTrainingArray, resolveTrainingTaskKey } from "@/views/training/taskKeyMap"
import TrainingTaskBrief from "@/views/components/TrainingTaskBrief.vue"
const route = useRoute();
const route = useRoute()
const props = defineProps({
title: {
type: String,
default: "实训任务",
},
taskKey: {
type: String,
default: "",
},
});
const remoteTask = ref(null);
const activeStep = ref(0);
const currentTaskKey = computed(() => resolveTrainingTaskKey(route, props.taskKey));
const displayTitle = computed(() => remoteTask.value?.taskName || props.title);
const remoteGoals = computed(() => parseTrainingArray(remoteTask.value?.objectives));
const remoteSteps = computed(() => parseTrainingArray(remoteTask.value?.steps).slice(0, 4));
const briefBackground = computed(() => remoteTask.value?.background || "");
const briefRequirements = computed(() => remoteTask.value?.requirements || "");
title: {
type: String,
default: "实训任务",
},
taskKey: {
type: String,
default: "",
},
})
const remoteTask = ref(null)
const activeStep = ref(0)
const currentTaskKey = computed(() => resolveTrainingTaskKey(route, props.taskKey))
const displayTitle = computed(() => remoteTask.value?.taskName || props.title)
const remoteGoals = computed(() => parseTrainingArray(remoteTask.value?.objectives))
const remoteSteps = computed(() => parseTrainingArray(remoteTask.value?.steps).slice(0, 4))
const briefBackground = computed(() => remoteTask.value?.background || "")
const briefRequirements = computed(() => remoteTask.value?.requirements || "")
watch(
() => currentTaskKey.value,
loadRemoteTask,
{ immediate: true }
);
() => currentTaskKey.value,
loadRemoteTask,
{ immediate: true }
)
async function loadRemoteTask(taskKey) {
remoteTask.value = null;
if (!taskKey) return;
try {
const res = await getTrainingTaskByKey(taskKey);
remoteTask.value = res?.data || null;
} catch (error) {
remoteTask.value = null;
}
remoteTask.value = null
if (!taskKey) return
try {
const res = await getTrainingTaskByKey(taskKey)
remoteTask.value = res?.data || null
} catch (error) {
remoteTask.value = null
}
}
</script>
<style lang="scss" scoped>
/* 教育蓝 · 精炼文档风:纯白画布 + 教育蓝点缀(对齐 new-product-survey) */
.training-intro {
margin-bottom: 24px;
overflow: hidden;
border: 1px solid #e5e7eb;
border-radius: 12px;
background: #ffffff;
box-shadow: none;
&__head {
display: flex;
justify-content: space-between;
align-items: center;
padding: 18px 20px 14px 24px;
border-bottom: 1px solid #e5e7eb;
position: relative;
&::before {
content: "";
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 4px;
background: #2563eb;
margin-bottom: 24px;
overflow: hidden;
border: 1px solid #e5e7eb;
border-radius: 12px;
background: #ffffff;
box-shadow: none;
&__head {
display: flex;
justify-content: space-between;
align-items: center;
padding: 18px 20px 14px 24px;
border-bottom: 1px solid #e5e7eb;
position: relative;
&::before {
content: "";
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 4px;
background: #2563eb;
}
h2 {
margin: 4px 0 0;
color: #1f2937;
font-size: var(--student-fs-display);
line-height: 1.4;
font-weight: 700;
letter-spacing: -0.01em;
}
}
h2 {
margin: 4px 0 0;
color: #1f2937;
font-size: var(--student-fs-display);
line-height: 1.4;
font-weight: 700;
letter-spacing: -0.01em;
&__eyebrow {
margin: 0;
color: #2563eb;
font-size: var(--student-fs-caption);
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
font-family: var(--student-font-data);
}
}
&__eyebrow {
margin: 0;
color: #2563eb;
font-size: var(--student-fs-caption);
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
font-family: var(--student-font-data);
}
&__hint {
flex: 0 0 auto;
padding: 4px 10px;
border: 1px solid #bfdbfe;
border-radius: 999px;
color: #1d4ed8;
background: #eff6ff;
font-size: var(--student-fs-caption);
font-weight: 600;
}
&__body {
display: grid;
gap: 14px;
margin: 0 24px 24px;
padding: 18px 20px;
border: 1px solid #e5e7eb;
border-radius: 10px;
background: #fafbfc;
color: #374151;
font-size: var(--student-fs-body);
line-height: 1.65;
p,
ol {
margin: 0;
&__hint {
flex: 0 0 auto;
padding: 4px 10px;
border: 1px solid #bfdbfe;
border-radius: 999px;
color: #1d4ed8;
background: #eff6ff;
font-size: var(--student-fs-caption);
font-weight: 600;
}
&__body {
display: grid;
gap: 14px;
margin: 0 24px 24px;
padding: 18px 20px;
border: 1px solid #e5e7eb;
border-radius: 10px;
background: #fafbfc;
color: #374151;
font-size: var(--student-fs-body);
line-height: 1.65;
p,
ol {
margin: 0;
}
ol {
padding-left: 18px;
}
}
&__section+&__section {
padding-top: 12px;
border-top: 1px solid #e5e7eb;
}
ol {
padding-left: 18px;
&__subtitle {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 8px;
color: #1f2937;
font-weight: 700;
}
&__steps {
margin: 0 24px 20px !important;
}
}
&__section + &__section {
padding-top: 12px;
border-top: 1px solid #e5e7eb;
}
&__subtitle {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 8px;
color: #1f2937;
font-weight: 700;
}
&__steps {
margin: 0 24px 20px !important;
}
}
/* 步骤导航:胶囊分段 + 教育蓝激活态(覆盖全局墨黑 !important 规则) */
.training-intro__steps.step-indicator {
display: flex !important;
flex-wrap: nowrap !important;
align-items: stretch !important;
justify-content: center !important;
gap: 0 !important;
width: auto !important;
padding: 0 !important;
border: none !important;
border-radius: 0 !important;
background: transparent !important;
box-shadow: none !important;
.step-tab {
flex: 1 1 0 !important;
max-width: 240px !important;
min-width: 0 !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
flex-wrap: nowrap !important;
align-items: stretch !important;
justify-content: center !important;
gap: 8px !important;
height: auto !important;
min-height: 40px !important;
margin: 0 !important;
padding: 8px 14px !important;
border: 1px solid #e5e7eb !important;
border-right: none !important;
gap: 0 !important;
width: auto !important;
padding: 0 !important;
border: none !important;
border-radius: 0 !important;
background: #ffffff !important;
background: transparent !important;
box-shadow: none !important;
color: #6b7280 !important;
font-size: 13px !important;
font-weight: 600 !important;
line-height: 1.3 !important;
white-space: normal !important;
text-align: center !important;
cursor: pointer;
transition: all 0.16s ease !important;
&:first-child {
border-radius: 8px 0 0 8px !important;
}
&:last-child {
border-radius: 0 8px 8px 0 !important;
border-right: 1px solid #e5e7eb !important;
}
&:hover:not(.active) {
border-color: #2563eb !important;
background: #eff6ff !important;
color: #2563eb !important;
position: relative;
z-index: 1;
}
&.active {
border-color: #2563eb !important;
background: #2563eb !important;
color: #ffffff !important;
font-weight: 700 !important;
position: relative;
z-index: 2;
&:hover {
background: #1d4ed8 !important;
border-color: #1d4ed8 !important;
}
.step-tab {
min-width: 0 !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: center !important;
gap: 8px !important;
height: auto !important;
min-height: 40px !important;
margin: 0 !important;
padding: 8px 14px !important;
border: 1px solid #e5e7eb !important;
border-right: none !important;
border-radius: 0 !important;
background: #ffffff !important;
box-shadow: none !important;
color: #6b7280 !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
line-height: 1.3 !important;
white-space: normal !important;
text-align: center !important;
cursor: pointer;
transition: all 0.16s ease !important;
&:first-child {
border-radius: 8px 0 0 8px !important;
}
&:last-child {
border-radius: 0 8px 8px 0 !important;
border-right: 1px solid #e5e7eb !important;
}
&:hover:not(.active) {
border-color: #2563eb !important;
background: #eff6ff !important;
color: #2563eb !important;
position: relative;
z-index: 1;
}
&.active {
border-color: #2563eb !important;
background: #2563eb !important;
color: #ffffff !important;
font-weight: 700 !important;
position: relative;
z-index: 2;
&:hover {
background: #1d4ed8 !important;
border-color: #1d4ed8 !important;
}
}
}
}
}
</style>

@ -131,7 +131,7 @@ async function downloadMaterial(material, label) {
color: #2563eb;
background: #ffffff;
font-family: inherit;
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 600;
cursor: pointer;
transition: border-color 0.16s ease, background 0.16s ease, color 0.16s ease, transform 0.16s ease, box-shadow 0.16s ease;

@ -178,7 +178,7 @@ function normalizeGoals(value) {
color: var(--brief-text-secondary);
background: var(--brief-accent-soft);
cursor: pointer;
font-size: 12px;
font-size: var(--student-fs-body-sm);
font-weight: 600;
line-height: 1;
transition: border-color 0.16s ease, color 0.16s ease, background 0.16s ease;
@ -211,7 +211,7 @@ function normalizeGoals(value) {
display: block;
width: 16px;
height: 16px;
font-size: 16px;
font-size: 18px;
line-height: 1;
}
}
@ -239,7 +239,7 @@ function normalizeGoals(value) {
padding: 0 14px;
border-bottom: 1px solid var(--brief-panel-border);
color: var(--brief-text);
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
line-height: 1;
}
@ -257,7 +257,7 @@ function normalizeGoals(value) {
margin: 0;
padding: 10px 16px 12px;
color: var(--brief-text-secondary);
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.6;
}
@ -269,7 +269,7 @@ function normalizeGoals(value) {
padding: 4px 0 4px 12px;
border-left: 2px solid var(--brief-panel-border);
color: var(--brief-text-secondary);
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.55;
}
@ -307,7 +307,7 @@ function normalizeGoals(value) {
.brief-tab {
height: 34px;
padding: 0 8px;
font-size: 11px;
font-size: var(--student-fs-caption);
}
.brief-scroll {

@ -317,7 +317,7 @@ function exportLegacyTraining() {
<style lang="scss" scoped>
.training-task-toolbar { display:flex; flex-wrap:wrap; align-items:center; justify-content:flex-end; gap:8px; }
.training-task-toolbar :deep(.material-actions) { margin-right:auto; }
.task-toolbar-button { min-height:34px; height:34px; padding:0 14px; border-color:rgba(37,99,235,.35); border-radius:8px; color:#2563eb; background:#fff; font-size:13px; font-weight:600; }
.task-toolbar-button { min-height:34px; height:34px; padding:0 14px; border-color:rgba(37,99,235,.35); border-radius:8px; color:#2563eb; background:#fff; font-size: var(--student-fs-body); font-weight:600; }
.task-toolbar-button:hover { border-color:#2563eb; color:#1d4ed8; background:#eff6ff; }
.task-toolbar-button--save { border-color:rgba(43,164,113,.45); color:#2ba471; }
.task-toolbar-button--save:hover { border-color:#2ba471; color:#1f8f62; background:#f0fbf6; }

@ -312,7 +312,7 @@
<Document />
</el-icon></div>
<div class="report-file-meta"><strong>{{ report.name || '可行性论证报告' }}</strong><span>{{
reportKindLabel }} · {{ readableSize(report.size) }}</span></div>
reportKindLabel }} · {{ readableSize(report.size) }}</span></div>
<div class="report-file-actions"><button type="button"
@click="openReportPreview"><el-icon>
<View />
@ -349,19 +349,28 @@
<div class="step-navigation">
<div class="step-nav-left">
<button v-if="currentStep > 1" type="button" class="btn-nav btn-ghost" @click="prevStep">
<el-icon><ArrowLeft /></el-icon>
<el-icon>
<ArrowLeft />
</el-icon>
上一步
</button>
<button type="button" class="btn-nav btn-save" :disabled="saving || uploading" @click="saveCurrentProgress">
<el-icon><CircleCheck /></el-icon>
<button type="button" class="btn-nav btn-save" :disabled="saving || uploading"
@click="saveCurrentProgress">
<el-icon>
<CircleCheck />
</el-icon>
保存当前进度
</button>
</div>
<div class="step-nav-right">
<span class="step-progress">Step {{ String(currentStep).padStart(2, "0") }} / {{ String(trainingSteps.length).padStart(2, "0") }}</span>
<button v-if="currentStep < trainingSteps.length" type="button" class="btn-nav btn-primary" :disabled="saving || uploading" @click="nextStep">
<span class="step-progress">Step {{ String(currentStep).padStart(2, "0") }} / {{
String(trainingSteps.length).padStart(2, "0") }}</span>
<button v-if="currentStep < trainingSteps.length" type="button" class="btn-nav btn-primary"
:disabled="saving || uploading" @click="nextStep">
{{ saving ? "处理中…" : "下一步" }}
<el-icon><ArrowRight /></el-icon>
<el-icon>
<ArrowRight />
</el-icon>
</button>
</div>
</div>
@ -379,7 +388,7 @@ import { checkBusinessFeasibilityStepOne, checkBusinessFeasibilityStepTwo, check
import { getTrainingTaskByKey } from "@/api/trainingTask"
import { parseTrainingArray } from "@/views/training/taskKeyMap"
import TrainingAiSidebar from "@/views/components/TrainingAiSidebar.vue"
import TrainingTaskToolbar from "@/views/components/TrainingTaskToolbar.vue";
import TrainingTaskToolbar from "@/views/components/TrainingTaskToolbar.vue"
const TASK_KEY = "business-feasibility"
const DEFAULT_STEPS = ["商业可行性论证", "项目初步决策", "可行性论证报告", "决策结论"]
const overviewFields = [
@ -486,16 +495,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
--el-input-focus-ring-color: rgba(59, 130, 246, 0.15);
--el-textarea-hover-border-color: #3b82f6;
--el-textarea-focus-border-color: #2563eb;
--student-fs-display: 17px;
--student-fs-h1: 15px;
--student-fs-h2: 14px;
--student-fs-h3: 13px;
--student-fs-body: 13px;
--student-fs-body-sm: 12px;
--student-fs-caption: 11px;
--student-fs-button: 13px;
--student-fs-button-lg: 13px;
--student-fs-data: 14px;
/* 字号梯度统一继承 .student-training-shell,页面不再重复声明 */
position: relative;
z-index: 2;
@ -531,6 +531,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
border-radius: 12px;
background: var(--student-card-bg);
overflow: hidden;
&::before {
content: '';
position: absolute;
@ -566,7 +567,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
.task-title {
margin: 0;
color: var(--student-text);
font-size: 17px;
font-size: var(--student-fs-h1);
font-weight: 700;
line-height: 1.35;
}
@ -574,7 +575,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
.task-brief {
margin: 0;
color: var(--student-text-secondary);
font-size: 12px;
font-size: var(--student-fs-body-sm);
line-height: 1.6;
}
@ -645,13 +646,13 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
justify-content: center;
gap: 6px;
min-height: 36px;
padding: 0 14px;
border: 1px solid rgba(37, 99, 235, 0.35);
border-radius: 8px;
color: var(--student-accent);
background: #ffffff;
font: inherit;
font-size: 13px;
padding: 0 14px;
border: 1px solid rgba(37, 99, 235, 0.35);
border-radius: 8px;
color: var(--student-accent);
background: #ffffff;
font: inherit;
font-size: var(--student-fs-body);
font-weight: 600;
cursor: pointer;
transition: transform 0.16s ease, border-color 0.16s ease, background 0.16s ease, box-shadow 0.16s ease;
@ -705,7 +706,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
.section-eyebrow {
margin: 0 0 2px;
color: var(--student-text-secondary);
font-size: 11px;
font-size: var(--student-fs-caption);
font-weight: 800;
letter-spacing: 0.12em;
}
@ -713,7 +714,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
.step-heading h2 {
margin: 0;
color: var(--student-text);
font-size: 15px;
font-size: var(--student-fs-h1);
font-weight: 700;
}
@ -723,7 +724,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
border-radius: 999px;
color: var(--student-accent-light);
background: var(--student-accent-soft);
font-size: 11px;
font-size: var(--student-fs-caption);
font-style: normal;
font-weight: 700;
white-space: nowrap;
@ -732,7 +733,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
.intro {
margin: 10px 0 0;
color: #374151;
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.6;
}
@ -756,7 +757,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
border-radius: 6px;
color: #ffffff;
background: var(--student-accent);
font-size: 11px;
font-size: var(--student-fs-body);
font-weight: 900;
flex-shrink: 0;
}
@ -764,14 +765,14 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
.section-title h3 {
margin: 0;
color: var(--student-text);
font-size: 14px;
font-size: var(--student-fs-h2);
font-weight: 700;
}
.section-title p {
margin: 2px 0 0;
color: var(--student-text-secondary);
font-size: 12px;
font-size: var(--student-fs-body-sm);
line-height: 1.55;
}
@ -802,7 +803,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
color: var(--student-text);
background: var(--student-panel-bg);
font-weight: 700;
font-size: 13px;
font-size: var(--student-fs-body);
}
.market-table {
@ -829,7 +830,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ task: taskTit
.input-with-suffix b {
color: var(--student-text-secondary);
font-size: 12px;
font-size: var(--student-fs-body-sm);
white-space: nowrap;
font-weight: 700;
}
@ -850,7 +851,7 @@ table {
th {
color: var(--student-text);
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 800;
background: var(--student-panel-bg);
text-align: center;
@ -882,7 +883,7 @@ td:last-child {
.table-wrap td :deep(.el-textarea__inner) {
min-height: 60px !important;
padding: 6px 10px;
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.55;
}
@ -919,7 +920,7 @@ td:last-child {
background: var(--student-panel-bg);
text-align: center;
font-weight: 700;
font-size: 13px;
font-size: var(--student-fs-body);
}
.computed-value {
@ -933,7 +934,7 @@ td:last-child {
color: var(--student-accent);
background: var(--student-accent-soft);
font-weight: 800;
font-size: 13px;
font-size: var(--student-fs-body);
}
/* ===== 底部导航:工具栏式 ===== */
@ -980,7 +981,7 @@ td:last-child {
white-space: nowrap;
.el-icon {
font-size: 14px;
font-size: var(--student-fs-h2);
}
}
@ -1056,7 +1057,7 @@ td:last-child {
}
.placeholder p {
font-size: 15px;
font-size: var(--student-fs-h1);
font-weight: 700;
color: var(--student-text);
}
@ -1076,7 +1077,7 @@ td:last-child {
gap: 8px;
margin: 0;
color: var(--student-text);
font-size: 14px;
font-size: var(--student-fs-h2);
font-weight: 700;
}
@ -1118,7 +1119,7 @@ td:last-child {
strong {
color: var(--student-text);
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
}
@ -1126,7 +1127,7 @@ td:last-child {
display: block;
margin-top: 3px;
color: var(--student-text-secondary);
font-size: 11px;
font-size: var(--student-fs-caption);
line-height: 1.5;
}
@ -1184,7 +1185,7 @@ td:last-child {
strong {
display: block;
color: var(--student-text);
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
}
@ -1192,7 +1193,7 @@ td:last-child {
display: block;
margin-top: 3px;
color: var(--student-text-secondary);
font-size: 11px;
font-size: var(--student-fs-caption);
line-height: 1.5;
}
@ -1241,14 +1242,14 @@ td:last-child {
color: var(--student-accent);
background: var(--student-accent-soft);
text-align: center;
font-size: 11px;
font-size: var(--student-fs-caption);
font-weight: 800;
}
.hint {
margin: 10px 0 0;
color: var(--student-text-secondary);
font-size: 12px;
font-size: var(--student-fs-body-sm);
line-height: 1.55;
}
@ -1260,7 +1261,7 @@ td:last-child {
color: #374151;
background: var(--student-accent-soft);
line-height: 1.7;
font-size: 13px;
font-size: var(--student-fs-body);
border-radius: 0 10px 10px 0;
}
@ -1307,14 +1308,14 @@ td:last-child {
.report-upload-panel h3 {
margin: 4px 0 0;
color: var(--student-text);
font-size: 15px;
font-size: var(--student-fs-h1);
font-weight: 700;
}
.report-upload-panel>p {
margin: 0;
color: var(--student-text-secondary);
font-size: 12px;
font-size: var(--student-fs-body-sm);
}
.report-file-card {
@ -1356,14 +1357,14 @@ td:last-child {
.report-file-meta strong {
color: var(--student-text);
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
}
.report-file-meta span {
margin-top: 3px;
color: var(--student-text-secondary);
font-size: 11px;
font-size: var(--student-fs-caption);
}
.report-file-actions {
@ -1381,7 +1382,7 @@ td:last-child {
color: var(--student-accent);
background: transparent;
font: inherit;
font-size: 12px;
font-size: var(--student-fs-body-sm);
font-weight: 600;
cursor: pointer;
padding: 4px 6px;
@ -1406,7 +1407,7 @@ td:last-child {
align-items: center;
gap: 10px;
color: var(--student-text-secondary);
font-size: 11px;
font-size: var(--student-fs-caption);
}
.text-action:disabled {
@ -1534,8 +1535,8 @@ td:last-child {
box-shadow: none !important;
.step-tab {
flex: 1 1 0 !important;
max-width: 240px !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
@ -1552,7 +1553,7 @@ td:last-child {
background: #ffffff !important;
box-shadow: none !important;
color: #6b7280 !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
line-height: 1.3 !important;
text-align: center !important;
@ -1562,6 +1563,7 @@ td:last-child {
&:first-child {
border-radius: 8px 0 0 8px !important;
}
&:last-child {
border-radius: 0 8px 8px 0 !important;
border-right: 1px solid #e5e7eb !important;
@ -1584,10 +1586,11 @@ td:last-child {
background: #f3f4f6 !important;
color: #6b7280 !important;
font-family: var(--student-font-data), ui-monospace, "SF Mono", Consolas, monospace !important;
font-size: 12px !important;
font-size: var(--student-fs-body-sm) !important;
font-weight: 700 !important;
line-height: 1 !important;
transition: all 0.16s ease !important;
&::after {
display: none !important;
}
@ -1602,6 +1605,7 @@ td:last-child {
background: #eff6ff !important;
color: #2563eb !important;
z-index: 1 !important;
.step-no {
background: #2563eb !important;
color: #ffffff !important;
@ -1611,14 +1615,17 @@ td:last-child {
&.complete:not(.active) {
border-color: #e5e7eb !important;
color: #374151 !important;
.step-no {
background: rgba(43, 164, 113, 0.12) !important;
color: #16915f !important;
}
&:hover {
border-color: #2ba471 !important;
background: #f0fdf6 !important;
z-index: 1 !important;
.step-no {
background: #2ba471 !important;
color: #ffffff !important;
@ -1632,10 +1639,12 @@ td:last-child {
color: #ffffff !important;
font-weight: 700 !important;
z-index: 2 !important;
.step-no {
background: #ffffff !important;
color: #2563eb !important;
}
&:hover {
background: #1d4ed8 !important;
border-color: #1d4ed8 !important;
@ -1650,71 +1659,73 @@ td:last-child {
justify-content: flex-start !important;
overflow-x: auto !important;
}
#app .studentLayout section.app-main:has(.feasibility-page) .step-indicator .step-tab {
flex: 0 0 140px !important;
max-width: none !important;
}
flex: 0 0 140px !important;
max-width: none !important;
}
}
/* ============================================================
* 顶部工具栏:TrainingMaterialButton 资料按钮 → 教育蓝
* ============================================================ */
.feasibility-page .workbench-actions .material-button.el-button {
height: 34px !important;
min-height: 34px !important;
border: 1px solid rgba(37, 99, 235, 0.35) !important;
border-radius: 8px !important;
color: #2563eb !important;
background: #ffffff !important;
font-size: 13px !important;
font-weight: 600 !important;
transition: border-color 0.16s ease, background 0.16s ease, color 0.16s ease, box-shadow 0.16s ease !important;
&:hover {
border-color: #2563eb !important;
height: 34px !important;
min-height: 34px !important;
border: 1px solid rgba(37, 99, 235, 0.35) !important;
border-radius: 8px !important;
color: #2563eb !important;
background: #eff6ff !important;
box-shadow: 0 2px 6px rgba(37, 99, 235, 0.12) !important;
}
background: #ffffff !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
transition: border-color 0.16s ease, background 0.16s ease, color 0.16s ease, box-shadow 0.16s ease !important;
&.is-plain {
border-color: #e5e7eb !important;
color: #9ca3af !important;
&:hover {
border-color: #e5e7eb !important;
color: #9ca3af !important;
background: #ffffff !important;
box-shadow: none !important;
border-color: #2563eb !important;
color: #2563eb !important;
background: #eff6ff !important;
box-shadow: 0 2px 6px rgba(37, 99, 235, 0.12) !important;
}
&.is-plain {
border-color: #e5e7eb !important;
color: #9ca3af !important;
&:hover {
border-color: #e5e7eb !important;
color: #9ca3af !important;
background: #ffffff !important;
box-shadow: none !important;
}
}
}
}
/* ============================================================
* 顶部导出按钮(原生 <button.action-button>)
* ============================================================ */
#app .studentLayout section.app-main:has(.feasibility-page) .workbench-actions > button.action-button {
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
gap: 6px !important;
height: 34px !important;
min-height: 34px !important;
padding: 0 14px !important;
border: 1px solid rgba(37, 99, 235, 0.35) !important;
border-radius: 8px !important;
color: #2563eb !important;
background: #ffffff !important;
font-size: 13px !important;
font-weight: 600 !important;
line-height: 1 !important;
transition: border-color 0.16s ease, background 0.16s ease, color 0.16s ease, box-shadow 0.16s ease !important;
}
#app .studentLayout section.app-main:has(.feasibility-page) .workbench-actions > button.action-button:hover {
border-color: #2563eb !important;
color: #2563eb !important;
background: #eff6ff !important;
box-shadow: 0 2px 6px rgba(37, 99, 235, 0.12) !important;
transform: none !important;
#app .studentLayout section.app-main:has(.feasibility-page) .workbench-actions>button.action-button {
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
gap: 6px !important;
height: 34px !important;
min-height: 34px !important;
padding: 0 14px !important;
border: 1px solid rgba(37, 99, 235, 0.35) !important;
border-radius: 8px !important;
color: #2563eb !important;
background: #ffffff !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
line-height: 1 !important;
transition: border-color 0.16s ease, background 0.16s ease, color 0.16s ease, box-shadow 0.16s ease !important;
}
#app .studentLayout section.app-main:has(.feasibility-page) .workbench-actions>button.action-button:hover {
border-color: #2563eb !important;
color: #2563eb !important;
background: #eff6ff !important;
box-shadow: 0 2px 6px rgba(37, 99, 235, 0.12) !important;
transform: none !important;
}
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -22,7 +22,8 @@
</section>
<section class="task-action-strip">
<TrainingTaskToolbar :task-key="TASK_KEY" :on-submit="submitTask" :on-export="exportOutcome" :on-reset="resetTraining" />
<TrainingTaskToolbar :task-key="TASK_KEY" :on-submit="submitTask" :on-export="exportOutcome"
:on-reset="resetTraining" />
</section>
<section class="task-card">
@ -86,7 +87,7 @@
append-to-body>
<div class="excel-preview-meta">
工作表:{{ form.profilePreview.sheetName || "Sheet1" }} 共 {{ form.profilePreview.totalRows
|| 0 }} 行、{{ form.profilePreview.totalColumns || 0 }} 列,仅展示前 {{
|| 0 }} 行、{{ form.profilePreview.totalColumns || 0 }} 列,仅展示前 {{
form.profilePreview.rows.length }} 行数据。
</div>
<div class="excel-preview-wrap">
@ -324,7 +325,8 @@
</el-icon>
上一步
</button>
<button type="button" class="btn-nav btn-save" :disabled="saving" @click="saveCurrentProgress">
<button type="button" class="btn-nav btn-save" :disabled="saving"
@click="saveCurrentProgress">
<el-icon>
<CircleCheck />
</el-icon>
@ -344,11 +346,6 @@
</div>
</div>
<div class="training-actions">
<el-button class="training-action training-action--reset" @click="resetTraining">
重新实训
</el-button>
</div>
</section>
</section>
</main>
@ -878,17 +875,7 @@ function exportOutcome() {
--el-input-focus-ring-color: rgba(59, 130, 246, 0.15);
--el-textarea-hover-border-color: #3b82f6;
--el-textarea-focus-border-color: #2563eb;
/* 紧凑字号梯度保留原样 */
--student-fs-display: 17px;
--student-fs-h1: 15px;
--student-fs-h2: 14px;
--student-fs-h3: 13px;
--student-fs-body: 13px;
--student-fs-body-sm: 12px;
--student-fs-caption: 11px;
--student-fs-button: 13px;
--student-fs-button-lg: 13px;
--student-fs-data: 14px;
/* 字号梯度统一继承 .student-training-shell,页面不再重复声明 */
position: relative;
z-index: 2;
@ -964,7 +951,7 @@ function exportOutcome() {
.task-title {
margin: 0;
color: var(--student-text);
font-size: 17px;
font-size: var(--student-fs-h1);
line-height: 1.35;
font-weight: 700;
}
@ -972,7 +959,7 @@ function exportOutcome() {
.task-brief {
margin: 0;
color: var(--student-text-secondary);
font-size: 12px;
font-size: var(--student-fs-body-sm);
line-height: 1.6;
}
@ -1056,7 +1043,7 @@ function exportOutcome() {
margin: 0;
padding: 0;
color: var(--student-text-secondary);
font-size: 11px;
font-size: var(--student-fs-caption);
font-weight: 800;
line-height: 1.3;
letter-spacing: 0.12em;
@ -1076,7 +1063,7 @@ function exportOutcome() {
color: var(--student-accent);
background: #ffffff;
font-family: inherit;
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
cursor: pointer;
transition: transform 0.16s ease, border-color 0.16s ease, background 0.16s ease, box-shadow 0.16s ease;
@ -1113,7 +1100,7 @@ function exportOutcome() {
h3 {
margin: 2px 0 0;
color: var(--student-text);
font-size: 15px;
font-size: var(--student-fs-h1);
line-height: 1.35;
font-weight: 700;
}
@ -1138,7 +1125,7 @@ function exportOutcome() {
.task-desc {
margin: 0 0 18px;
color: #374151;
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.6;
}
@ -1166,7 +1153,7 @@ function exportOutcome() {
border-radius: 10px;
color: #ffffff;
background: var(--student-accent);
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
box-shadow: 0 3px 10px rgba(37, 99, 235, 0.28);
transition: transform 0.16s ease, background 0.16s ease, box-shadow 0.16s ease;
@ -1189,7 +1176,7 @@ function exportOutcome() {
border-radius: 10px;
color: var(--student-text-secondary);
background: var(--student-panel-bg);
font-size: 12px;
font-size: var(--student-fs-body-sm);
font-weight: 600;
span {
@ -1204,7 +1191,7 @@ function exportOutcome() {
border-radius: 10px;
color: var(--student-accent);
background: #ffffff;
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
transition: transform 0.16s ease, border-color 0.16s ease, background 0.16s ease;
@ -1218,7 +1205,7 @@ function exportOutcome() {
.upload-tip {
margin: 4px 0 8px;
color: var(--student-text-secondary);
font-size: 12px;
font-size: var(--student-fs-body-sm);
line-height: 1.6;
}
@ -1230,7 +1217,7 @@ function exportOutcome() {
border-radius: 0 12px 12px 0;
color: #374151;
background: var(--student-panel-bg);
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.65;
p {
@ -1249,7 +1236,7 @@ function exportOutcome() {
.excel-preview-meta {
margin-bottom: 12px;
color: var(--student-text-secondary);
font-size: 12px;
font-size: var(--student-fs-body-sm);
line-height: 1.6;
}
@ -1265,7 +1252,7 @@ function exportOutcome() {
min-width: 640px;
border-collapse: collapse;
color: #374151;
font-size: 12px;
font-size: var(--student-fs-body-sm);
th,
td {
@ -1325,7 +1312,7 @@ function exportOutcome() {
h4 {
margin: 0;
color: var(--student-text);
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.45;
font-weight: 700;
}
@ -1340,7 +1327,7 @@ function exportOutcome() {
border-radius: 6px;
color: var(--student-text-secondary);
background: var(--student-accent-soft);
font-size: 11px;
font-size: var(--student-fs-caption);
font-weight: 700;
}
@ -1357,7 +1344,7 @@ function exportOutcome() {
color: #ffffff;
background: var(--student-accent);
cursor: pointer;
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
transition: transform 0.16s ease, background 0.16s ease, box-shadow 0.16s ease;
@ -1376,7 +1363,7 @@ function exportOutcome() {
.rfm-chart-empty {
margin: 12px 0 0;
color: var(--student-text-secondary);
font-size: 12px;
font-size: var(--student-fs-body-sm);
line-height: 1.5;
}
@ -1403,7 +1390,7 @@ function exportOutcome() {
display: block;
overflow: hidden;
color: var(--student-text);
font-size: 12px;
font-size: var(--student-fs-body-sm);
line-height: 1.35;
font-weight: 700;
text-overflow: ellipsis;
@ -1417,7 +1404,7 @@ function exportOutcome() {
color: var(--student-accent-light);
background: transparent;
cursor: pointer;
font-size: 11px;
font-size: var(--student-fs-caption);
font-weight: 600;
&:hover {
@ -1456,7 +1443,7 @@ function exportOutcome() {
text-align: left;
vertical-align: top;
line-height: 1.6;
font-size: 13px;
font-size: var(--student-fs-body);
}
thead th {
@ -1505,7 +1492,7 @@ function exportOutcome() {
border-radius: 8px;
color: var(--student-text);
background: #ffffff;
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.6;
resize: vertical;
transition: border-color 0.16s ease, box-shadow 0.16s ease;
@ -1537,7 +1524,7 @@ function exportOutcome() {
color: var(--student-accent);
background: #ffffff;
font-family: inherit;
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
cursor: pointer;
transition: transform 0.16s ease, border-color 0.16s ease, background 0.16s ease, color 0.16s ease;
@ -1571,7 +1558,7 @@ function exportOutcome() {
background: #ffffff;
cursor: pointer;
font-weight: 700;
font-size: 12px;
font-size: var(--student-fs-body-sm);
&.active {
border-color: #2563eb;
@ -1585,7 +1572,7 @@ function exportOutcome() {
max-height: 58vh;
padding: 20px;
color: var(--student-text, #1f2937);
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.65;
}
@ -1637,7 +1624,7 @@ function exportOutcome() {
span {
color: var(--student-text-secondary);
font-size: 12px;
font-size: var(--student-fs-body-sm);
font-weight: 700;
}
}
@ -1660,7 +1647,7 @@ function exportOutcome() {
:deep(.el-input__inner) {
color: var(--student-text);
font-size: 13px;
font-size: var(--student-fs-body);
}
}
@ -1683,7 +1670,7 @@ function exportOutcome() {
border-left: 1px solid var(--student-panel-border);
color: var(--student-text);
background: var(--student-panel-bg);
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 800;
&:first-child {
@ -1706,7 +1693,7 @@ function exportOutcome() {
border-radius: 0;
color: var(--student-text);
background: #ffffff;
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.6;
resize: vertical;
box-shadow: none;
@ -1733,7 +1720,7 @@ function exportOutcome() {
h4 {
margin: 0;
color: var(--student-text);
font-size: 14px;
font-size: var(--student-fs-h2);
font-weight: 700;
}
}
@ -1751,7 +1738,7 @@ function exportOutcome() {
border-radius: 8px;
color: var(--student-accent);
background: #ffffff;
font-size: 12px;
font-size: var(--student-fs-body-sm);
font-weight: 700;
&:hover:not(.is-disabled) {
@ -1773,7 +1760,7 @@ function exportOutcome() {
.market-segment-tip {
margin: 0 0 10px;
color: var(--student-text-secondary);
font-size: 12px;
font-size: var(--student-fs-body-sm);
}
.market-segment-table-wrap {
@ -1794,7 +1781,7 @@ function exportOutcome() {
border-right: 1px solid var(--student-panel-border);
border-bottom: 1px solid var(--student-panel-border);
vertical-align: top;
font-size: 13px;
font-size: var(--student-fs-body);
}
th {
@ -1860,7 +1847,7 @@ function exportOutcome() {
border-radius: 8px;
color: var(--student-text);
background: #ffffff;
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.6;
resize: vertical;
box-shadow: none;
@ -1907,7 +1894,7 @@ function exportOutcome() {
h4 {
margin: 0 0 12px;
color: var(--student-text);
font-size: 14px;
font-size: var(--student-fs-h2);
font-weight: 700;
line-height: 1.6;
}
@ -1923,7 +1910,7 @@ function exportOutcome() {
border-radius: 10px;
color: var(--student-text);
background: #ffffff;
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.6;
resize: vertical;
box-shadow: none;
@ -1987,7 +1974,7 @@ function exportOutcome() {
white-space: nowrap;
.el-icon {
font-size: 16px;
font-size: 18px;
}
&:hover:not(:disabled) {
@ -2022,7 +2009,7 @@ function exportOutcome() {
white-space: nowrap;
.el-icon {
font-size: 16px;
font-size: 18px;
}
&:hover:not(:disabled) {
@ -2053,7 +2040,7 @@ function exportOutcome() {
white-space: nowrap;
.el-icon {
font-size: 16px;
font-size: 18px;
}
&:hover:not(:disabled) {
@ -2099,7 +2086,7 @@ function exportOutcome() {
border-radius: 8px;
color: var(--student-accent);
background: #ffffff;
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
line-height: 1;
text-shadow: none;
@ -2213,8 +2200,8 @@ function exportOutcome() {
box-shadow: none !important;
.step-tab {
flex: 1 1 0 !important;
max-width: 240px !important;
min-width: 0 !important;
display: flex !important;
flex-direction: row !important;
@ -2231,7 +2218,7 @@ function exportOutcome() {
background: #ffffff !important;
box-shadow: none !important;
color: #6b7280 !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
line-height: 1.3 !important;
letter-spacing: 0 !important;
@ -2266,7 +2253,7 @@ function exportOutcome() {
background: #f3f4f6 !important;
color: #6b7280 !important;
font-family: var(--student-font-data), ui-monospace, "SF Mono", Consolas, monospace !important;
font-size: 12px !important;
font-size: var(--student-fs-body-sm) !important;
font-weight: 700 !important;
line-height: 1 !important;
transition: all 0.16s ease !important;
@ -2338,6 +2325,7 @@ function exportOutcome() {
justify-content: flex-start !important;
overflow-x: auto !important;
}
#app .studentLayout section.app-main:has(.target-profile-page) .step-indicator .step-tab {
flex: 0 0 140px !important;
max-width: none !important;
@ -2354,7 +2342,7 @@ function exportOutcome() {
border-radius: 8px !important;
color: #2563eb !important;
background: #ffffff !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
transition: border-color 0.16s ease, background 0.16s ease, color 0.16s ease, box-shadow 0.16s ease !important;
@ -2368,6 +2356,7 @@ function exportOutcome() {
&.is-plain {
border-color: #e5e7eb !important;
color: #9ca3af !important;
&:hover {
border-color: #e5e7eb !important;
color: #9ca3af !important;
@ -2380,7 +2369,7 @@ function exportOutcome() {
/* ============================================================
* 顶部导出按钮(原生 <button.outline-action>)
* ============================================================ */
#app .studentLayout section.app-main:has(.target-profile-page) .workbench-actions > button.outline-action {
#app .studentLayout section.app-main:has(.target-profile-page) .workbench-actions>button.outline-action {
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
@ -2392,13 +2381,13 @@ function exportOutcome() {
border-radius: 8px !important;
color: #2563eb !important;
background: #ffffff !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
line-height: 1 !important;
transition: border-color 0.16s ease, background 0.16s ease, color 0.16s ease, box-shadow 0.16s ease !important;
}
#app .studentLayout section.app-main:has(.target-profile-page) .workbench-actions > button.outline-action:hover {
#app .studentLayout section.app-main:has(.target-profile-page) .workbench-actions>button.outline-action:hover {
border-color: #2563eb !important;
color: #2563eb !important;
background: #eff6ff !important;

@ -952,17 +952,7 @@ function exportOutcome() {
--el-input-focus-ring-color: rgba(59, 130, 246, 0.15);
--el-textarea-hover-border-color: #3b82f6;
--el-textarea-focus-border-color: #2563eb;
/* 紧凑字号梯度:整体下调一档(11→17px),在此基准上全局 +2px */
--student-fs-display: 19px;
--student-fs-h1: 17px;
--student-fs-h2: 16px;
--student-fs-h3: 15px;
--student-fs-body: 15px;
--student-fs-body-sm: 14px;
--student-fs-caption: 13px;
--student-fs-button: 15px;
--student-fs-button-lg: 15px;
--student-fs-data: 16px;
/* 字号梯度统一继承 .student-training-shell,页面不再重复声明 */
min-width: 0;
color: var(--student-text);
}
@ -1105,7 +1095,8 @@ function exportOutcome() {
h3 {
margin: 0;
color: var(--student-text);
font-size: var(--student-fs-h1);
/* 全局 .step-title-row h3 以 !important 钉为 --student-fs-h2,此处与生效值保持一致 */
font-size: var(--student-fs-h2);
line-height: 1.4;
font-weight: 700;
letter-spacing: -0.01em;
@ -1192,7 +1183,7 @@ function exportOutcome() {
transition: all 0.16s ease;
.el-icon {
font-size: 16px;
font-size: 18px;
}
&:hover:not(:disabled) {
@ -1693,7 +1684,7 @@ function exportOutcome() {
white-space: nowrap;
.el-icon {
font-size: 16px;
font-size: 18px;
}
&:hover:not(:disabled) {
@ -1728,7 +1719,7 @@ function exportOutcome() {
white-space: nowrap;
.el-icon {
font-size: 16px;
font-size: 18px;
}
&:hover:not(:disabled) {
@ -1759,7 +1750,7 @@ function exportOutcome() {
white-space: nowrap;
.el-icon {
font-size: 16px;
font-size: 18px;
}
&:hover:not(:disabled) {
@ -2108,8 +2099,8 @@ function exportOutcome() {
box-shadow: none !important;
.step-tab {
flex: 1 1 0 !important;
max-width: 240px !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
@ -2126,7 +2117,7 @@ function exportOutcome() {
background: #ffffff !important;
box-shadow: none !important;
color: #6b7280 !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
line-height: 1.3 !important;
white-space: normal !important;
@ -2160,7 +2151,7 @@ function exportOutcome() {
background: #f3f4f6 !important;
color: #6b7280 !important;
font-family: var(--student-font-data), ui-monospace, "SF Mono", Consolas, monospace !important;
font-size: 14px !important;
font-size: var(--student-fs-body-sm) !important;
font-weight: 700 !important;
line-height: 1 !important;
transition: all 0.16s ease !important;
@ -2262,13 +2253,13 @@ function exportOutcome() {
background: #ffffff !important;
box-shadow: none !important;
text-shadow: none !important;
font-size: 15px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
transition: all 0.16s ease !important;
}
.new-product-value-page .task-toolbar-button.el-button .el-icon {
font-size: 16px !important;
font-size: var(--student-fs-h2) !important;
color: inherit !important;
}
@ -2315,13 +2306,13 @@ function exportOutcome() {
border-radius: 8px !important;
color: #2563eb !important;
background: #ffffff !important;
font-size: 15px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
transition: all 0.16s ease !important;
}
.new-product-value-page .training-task-toolbar .material-button.el-button .el-icon {
font-size: 16px !important;
font-size: var(--student-fs-h2) !important;
color: inherit !important;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -381,16 +381,7 @@ onMounted(async () => { try { const result = await getTrainingTaskByKey(TASK_KEY
--student-panel-bg: #fafbfc;
--student-text: #1f2937;
--student-text-secondary: #6b7280;
--student-fs-display: 17px;
--student-fs-h1: 15px;
--student-fs-h2: 14px;
--student-fs-h3: 13px;
--student-fs-body: 13px;
--student-fs-body-sm: 12px;
--student-fs-caption: 11px;
--student-fs-button: 13px;
--student-fs-button-lg: 13px;
--student-fs-data: 14px;
/* 字号梯度统一继承 .student-training-shell,页面不再重复声明 */
min-width: 0;
color: var(--student-text);
@ -442,7 +433,7 @@ onMounted(async () => { try { const result = await getTrainingTaskByKey(TASK_KEY
.task-brief {
margin: 0;
color: var(--student-text-secondary);
font-size: 12px;
font-size: var(--student-fs-body-sm);
line-height: 1.6;
}
@ -476,7 +467,7 @@ onMounted(async () => { try { const result = await getTrainingTaskByKey(TASK_KEY
b {
color: var(--student-text);
font-size: 12px;
font-size: var(--student-fs-body-sm);
}
ul {
@ -841,8 +832,8 @@ onMounted(async () => { try { const result = await getTrainingTaskByKey(TASK_KEY
}
.step-tab {
flex: 1 1 0 !important;
max-width: 240px !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
@ -859,7 +850,7 @@ onMounted(async () => { try { const result = await getTrainingTaskByKey(TASK_KEY
background: #ffffff !important;
box-shadow: none !important;
color: #6b7280 !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
line-height: 1.3 !important;
letter-spacing: 0 !important;
@ -891,7 +882,7 @@ onMounted(async () => { try { const result = await getTrainingTaskByKey(TASK_KEY
background: #f3f4f6 !important;
color: #6b7280 !important;
font-family: var(--student-font-data), ui-monospace, "SF Mono", Consolas, monospace !important;
font-size: 12px !important;
font-size: var(--student-fs-body-sm) !important;
font-weight: 700 !important;
line-height: 1 !important;
transition: all 0.16s ease !important;
@ -911,7 +902,7 @@ onMounted(async () => { try { const result = await getTrainingTaskByKey(TASK_KEY
white-space: normal !important;
line-height: 1.3 !important;
color: inherit !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 600 !important;
}
@ -1001,7 +992,7 @@ onMounted(async () => { try { const result = await getTrainingTaskByKey(TASK_KEY
border-radius: 8px;
color: #2563eb;
background: #ffffff;
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 600;
transition: border-color 0.16s ease, background 0.16s ease, color 0.16s ease, box-shadow 0.16s ease;
}
@ -1033,7 +1024,7 @@ onMounted(async () => { try { const result = await getTrainingTaskByKey(TASK_KEY
.release-channel-page .table-actions .el-button,
.release-channel-page .footer-actions .el-button {
border-radius: 8px !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 700 !important;
}

File diff suppressed because it is too large Load Diff

@ -1695,14 +1695,7 @@ function exportOutcome() {
<style lang="scss" scoped>
.student-training-page {
/* 紧凑字号令牌:全局 var(--student-fs-*) 规则在本页自动取紧凑值 */
--student-fs-display: 17px;
--student-fs-h1: 15px;
--student-fs-h2: 14px;
--student-fs-h3: 13px;
--student-fs-body: 13px;
--student-fs-body-sm: 12px;
--student-fs-caption: 11px;
/* 字号梯度统一继承 .student-training-shell,页面不再重复声明 */
position: relative;
z-index: 2;
@ -1761,7 +1754,7 @@ function exportOutcome() {
.task-brief {
margin: 0;
color: #6b7280;
font-size: 12px;
font-size: var(--student-fs-body-sm);
line-height: 1.6;
}
@ -1795,7 +1788,7 @@ function exportOutcome() {
b {
color: #1f2937;
font-size: 12px;
font-size: var(--student-fs-body-sm);
}
ul {
@ -1820,7 +1813,7 @@ function exportOutcome() {
p,
li {
color: #4b5563;
font-size: 13px;
font-size: var(--student-fs-body);
line-height: 1.6;
}
@ -2019,7 +2012,7 @@ function exportOutcome() {
border-radius: 10px;
color: #2563eb;
background: #ffffff;
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
line-height: 1.2;
text-decoration: none;
@ -2130,7 +2123,7 @@ function exportOutcome() {
background: #f3f4f6;
box-shadow: none;
font-family: ui-monospace, "SF Mono", Consolas, monospace;
font-size: 12px;
font-size: var(--student-fs-body-sm);
font-weight: 700;
line-height: 1;
letter-spacing: 0;
@ -2148,7 +2141,7 @@ function exportOutcome() {
display: -webkit-box;
overflow: hidden;
color: inherit;
font-size: 14px;
font-size: var(--student-fs-h2);
font-weight: 800;
line-height: 1.25;
text-overflow: ellipsis;
@ -2235,7 +2228,7 @@ function exportOutcome() {
.comprehensive-step-strip .step-name {
display: block;
white-space: nowrap;
font-size: 13px;
font-size: var(--student-fs-body);
-webkit-line-clamp: unset;
}
@ -2243,7 +2236,7 @@ function exportOutcome() {
flex-basis: 22px;
width: 22px;
height: 22px;
font-size: 11px;
font-size: var(--student-fs-caption);
}
.comprehensive-step-strip .step-copy {
@ -2310,7 +2303,7 @@ function exportOutcome() {
border-right: 1px solid #e5e7eb;
color: #1f2937;
background: #ffffff;
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
text-align: center;
}
@ -2415,7 +2408,7 @@ function exportOutcome() {
.upload-file-name {
color: #1f2937;
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
}
@ -2640,7 +2633,7 @@ function exportOutcome() {
color: #2563eb !important;
background: #ffffff !important;
box-shadow: none !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 700 !important;
line-height: 1 !important;
}
@ -2686,7 +2679,7 @@ function exportOutcome() {
padding: 12px;
border-right-color: #e5e7eb;
background: #ffffff;
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
}
@ -2702,7 +2695,7 @@ function exportOutcome() {
.serial-cell,
.task-name-cell,
.desc-cell {
font-size: 13px;
font-size: var(--student-fs-body);
}
.process-textarea {
@ -2727,13 +2720,13 @@ function exportOutcome() {
border-radius: 8px !important;
background: #2563eb !important;
box-shadow: none !important;
font-size: 13px !important;
font-size: var(--student-fs-body) !important;
font-weight: 700 !important;
}
.upload-file-name {
color: #1f2937;
font-size: 13px;
font-size: var(--student-fs-body);
font-weight: 700;
}
}
@ -3099,7 +3092,7 @@ function exportOutcome() {
.rfm-upload-card > p {
margin: 0;
color: #6b7280;
font-size: 12px;
font-size: var(--student-fs-body-sm);
line-height: 1.5;
text-align: center;
}
@ -3123,7 +3116,7 @@ function exportOutcome() {
display: grid;
gap: 5px;
color: #4b5563;
font-size: 12px;
font-size: var(--student-fs-body-sm);
}
.excel-preview > span {
@ -3170,7 +3163,7 @@ function exportOutcome() {
color: #1f2937;
background: transparent;
font: inherit;
font-size: 12px;
font-size: var(--student-fs-body-sm);
cursor: pointer;
}
@ -3331,7 +3324,7 @@ function exportOutcome() {
color: #ffffff;
background: #2563eb;
box-shadow: none;
font-size: 15px;
font-size: var(--student-fs-h1);
font-weight: 700;
}
@ -3535,7 +3528,7 @@ function exportOutcome() {
.calculated-field,
.value-pricing-result strong {
color: #1f2937;
font-size: 17px;
font-size: var(--student-fs-h1);
font-weight: 900;
}
@ -3567,7 +3560,7 @@ function exportOutcome() {
flex-wrap: wrap;
gap: 12px 18px;
color: #4b5563;
font-size: 13px;
font-size: var(--student-fs-body);
}
.psm-legend span::before {

Loading…
Cancel
Save