feat: fictional demo persona (profile seed), word export mirrors preview layout, print scrollbar fix

This commit is contained in:
root
2026-10-17 13:23:36 +08:00
parent 603e39d2bd
commit 68043d309e
19 changed files with 142 additions and 122 deletions
+17 -2
View File
@@ -370,9 +370,9 @@ export const DEMO_ROWS = [
['学生工作', '院学生会宣传部副部长', '主导', '院级', null, '院学生会', '2025-09-01', null, 'ongoing',
'统筹部门工作,管理 8 名干事,主导院级活动宣传方案', '', ['管理'], ['综合素养', '职业发展'],
{ duties: '部门统筹、活动宣传方案设计', term: '2025.09 - 至今' }, {}],
['荣誉惩处', '校级二等奖学金', '参加', '校级', null, '重庆城市科技学院', '2025-10-15', '2025-10-15', 'finished',
['荣誉惩处', '校级二等奖学金', '参加', '校级', null, '云川理工学院', '2025-10-15', '2025-10-15', 'finished',
'2024-2025 学年综合测评前列', '二等奖学金', ['奖学金'], ['学业深造'],
{ issued_by: '重庆城市科技学院' }, {}],
{ issued_by: '云川理工学院' }, {}],
['荣誉惩处', '优秀共青团员', '参加', '校级', null, '校团委', '2025-05-04', '2025-05-04', 'finished',
'五四表彰', '优秀共青团员', ['表彰'], ['综合素养'],
{ issued_by: '共青团重庆城市科技学院委员会' }, {}],
@@ -398,6 +398,19 @@ export const DEMO_ROWS = [
'参与企业授权渗透测试项目 3 个,编写测试报告', '获实习优秀评价', ['实习', '安全'], ['职业发展'],
{ position: '渗透测试实习生', mentor: '陈工' }, {}]
];
// 演示个人档案(虚构人设:云川理工学院 · 信息安全 · 林晓阳)
export const DEMO_PROFILE = {
info: {
name: '林晓阳', gender: '男', birth: '2004-06', nation: '汉族', native: '四川成都',
political: '共青团员', school: '云川理工学院', college: '信息工程学院', major: '信息安全',
className: '信安2201', studentId: '2023110245', degree: '本科', eduLength: '四年',
eduStart: '2023-09', eduEnd: '2027-06',
majorCourses: '计算机网络、数据库技术、操作系统、信息安全导论、密码学基础、网络安全、云计算与虚拟化技术',
phone: '138****8000', email: 'linxy.demo@example.com', homepage: 'https://blog.example.com/linxy',
photoUrl: '', selfIntro: '性格沉稳踏实,做事有计划性,习惯提前预判风险并准备预案;对网络安全方向有持续热情,动手能力强,能独立完成从方案设计到落地验证的完整流程;责任心强,注重细节与条理,是可靠的技术执行者。'
}
};
// 学期: { term, gpa, rank, total, courses: [课程名, 学分, 分数, 绩点][] }
export const DEMO_SEMESTERS = [
{ term: '2023-2024-1', gpa: 3.42, rank: 38, total: 156, courses: [
@@ -1173,6 +1186,8 @@ function listFootprints(d, query) {
const fpCnt = d.prepare('SELECT COUNT(*) AS c FROM footprint WHERE deleted_at IS NULL').get().c;
const semCnt = d.prepare('SELECT COUNT(*) AS c FROM semester WHERE deleted_at IS NULL').get().c;
if (fpCnt > 0 || semCnt > 0) return { seeded: false, footprints: fpCnt, semesters: semCnt };
// 个人档案(简历与个人信息页展示用)
handleCommand('profile_upsert', { content: DEMO_PROFILE });
const typeIds = Object.fromEntries(d.prepare('SELECT id, name FROM footprint_type').all().map((r) => [r.name, r.id]));
const dimIds = Object.fromEntries(d.prepare('SELECT id, name FROM dimension').all().map((r) => [r.name, r.id]));
let n = 0;