feat:增加简历内容
BIN
src/assets/edge1.png
Normal file
|
After Width: | Height: | Size: 813 KiB |
BIN
src/assets/edge2.png
Normal file
|
After Width: | Height: | Size: 215 KiB |
BIN
src/assets/integrate1.png
Normal file
|
After Width: | Height: | Size: 166 KiB |
BIN
src/assets/integrate2.png
Normal file
|
After Width: | Height: | Size: 242 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
@@ -3,7 +3,6 @@
|
||||
<div class="container">
|
||||
<div class="section-title animate__animated animate__fadeIn">
|
||||
<h2>教育背景</h2>
|
||||
<p>系统的专业学习为我的技术生涯奠定了坚实的基础,培养了我的学习能力和问题解决能力。</p>
|
||||
</div>
|
||||
|
||||
<div class="education-grid">
|
||||
@@ -58,7 +57,7 @@ onMounted(() => {
|
||||
}
|
||||
|
||||
.education-card {
|
||||
background-color: #f9fafb;
|
||||
background-color: white;
|
||||
border-radius: 10px;
|
||||
padding: 2rem;
|
||||
transition: all 0.3s ease;
|
||||
|
||||
@@ -14,23 +14,6 @@
|
||||
</div>
|
||||
|
||||
<p class="description">{{ item.description }}</p>
|
||||
|
||||
<div class="experience-tags">
|
||||
<el-tag
|
||||
v-for="(tag, i) in item.tags"
|
||||
:key="i"
|
||||
type="success"
|
||||
effect="light"
|
||||
>
|
||||
{{ tag }}
|
||||
</el-tag>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 图片 -->
|
||||
<div class="timeline-image">
|
||||
<img :src="getAssetsImageFile(item.image)" :alt="item.company + '项目图片'"
|
||||
class="experience-image">
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -38,7 +21,6 @@
|
||||
<script setup lang="ts">
|
||||
import { defineProps, PropType } from 'vue'
|
||||
import { IExperience } from '@/types'
|
||||
import { getAssetsImageFile } from '@/utils'
|
||||
|
||||
const props = defineProps({
|
||||
item: {
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
<div class="container">
|
||||
<div class="section-title animate__animated animate__fadeIn">
|
||||
<h2>工作经验</h2>
|
||||
<p>多年来在不同企业的工作经历,让我积累了丰富的项目经验和解决问题的能力。</p>
|
||||
</div>
|
||||
|
||||
<div class="timeline">
|
||||
@@ -92,19 +91,6 @@ onMounted(() => {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
}
|
||||
|
||||
.timeline-image {
|
||||
display: none;
|
||||
|
||||
@media (min-width: 768px) {
|
||||
display: block;
|
||||
position: absolute;
|
||||
right: -50%;
|
||||
top: 0;
|
||||
width: calc(50% - 2rem);
|
||||
padding-left: 2rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.timeline-item-right {
|
||||
@@ -121,19 +107,6 @@ onMounted(() => {
|
||||
left: -10px;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.timeline-image {
|
||||
display: none;
|
||||
|
||||
@media (min-width: 768px) {
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: -50%;
|
||||
top: 0;
|
||||
width: calc(50% - 2rem);
|
||||
padding-right: 2rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
@@ -157,16 +130,6 @@ onMounted(() => {
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
//&.timeline-item-left {
|
||||
// left: -10px;
|
||||
// right: auto;
|
||||
//}
|
||||
//
|
||||
//&.timeline-item-right {
|
||||
// left: -10px;
|
||||
// right: auto;
|
||||
//}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
left: 20px;
|
||||
right: auto;
|
||||
@@ -174,7 +137,7 @@ onMounted(() => {
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
background-color: white;
|
||||
background-color: #f9fafb;
|
||||
border-radius: 10px;
|
||||
padding: 1.5rem;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
|
||||
@@ -208,6 +171,8 @@ onMounted(() => {
|
||||
color: #666;
|
||||
line-height: 1.6;
|
||||
margin-bottom: 1rem;
|
||||
text-align: left;
|
||||
text-indent: 2em;
|
||||
}
|
||||
|
||||
.experience-tags {
|
||||
@@ -216,14 +181,6 @@ onMounted(() => {
|
||||
gap: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.experience-image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
<div class="container">
|
||||
<div class="section-title animate__animated animate__fadeIn">
|
||||
<h2>项目经历</h2>
|
||||
<p>参与过的各类项目,展示了我的技术能力和实践经验。</p>
|
||||
</div>
|
||||
|
||||
<div class="timeline">
|
||||
@@ -91,9 +90,9 @@ onMounted(() => {
|
||||
@media (min-width: 768px) {
|
||||
display: block;
|
||||
position: absolute;
|
||||
right: -50%;
|
||||
right: -100%;
|
||||
top: 0;
|
||||
width: calc(50% - 2rem);
|
||||
width: 100%;
|
||||
padding-left: 2rem;
|
||||
}
|
||||
}
|
||||
@@ -122,7 +121,6 @@ onMounted(() => {
|
||||
position: absolute;
|
||||
left: -100%;
|
||||
top: 20%;
|
||||
// width: calc(50% - 2rem);
|
||||
width: 100%;
|
||||
padding-right: 2rem;
|
||||
}
|
||||
@@ -191,6 +189,7 @@ onMounted(() => {
|
||||
color: #666;
|
||||
line-height: 1.6;
|
||||
margin-bottom: 1rem;
|
||||
text-indent: 2em;
|
||||
}
|
||||
|
||||
.content {
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
<div class="container">
|
||||
<div class="section-title animate__animated animate__fadeIn">
|
||||
<h2>专业技能</h2>
|
||||
<p>多年的开发经验使我掌握了多种前端技术和工具,能够独立完成从设计到部署的全流程开发工作。</p>
|
||||
</div>
|
||||
|
||||
<div class="skills-grid">
|
||||
|
||||
@@ -5,7 +5,7 @@ export const useProfileStore = defineStore('profile', {
|
||||
personalInfo: {
|
||||
name: '陈修翔',
|
||||
title: '全栈工程师',
|
||||
description: '拥有5年前端开发经验,专注于构建响应式、高性能的现代Web应用,精通JavaScript、React和Vue等前端技术栈。',
|
||||
description: '拥有5年全栈开发经验,专注医疗康复数字化平台建设,熟悉Vue3与SpringBoot服务架构,具备从0到1打造完整系统的实战能力',
|
||||
socials: [
|
||||
{ name: 'GitHub', icon: 'fa-brands fa-github', url: '#' },
|
||||
{ name: 'LinkedIn', icon: 'fa-brands fa-linkedin', url: '#' },
|
||||
@@ -15,109 +15,111 @@ export const useProfileStore = defineStore('profile', {
|
||||
},
|
||||
skills: [
|
||||
{
|
||||
icon: 'fa-code',
|
||||
icon: 'fab fa-vuejs',
|
||||
title: '前端开发',
|
||||
description: '精通HTML5、CSS3和JavaScript(ES6+),熟悉响应式设计和跨浏览器兼容性处理。',
|
||||
tags: ['HTML5', 'CSS3', 'JavaScript', 'TypeScript']
|
||||
description: '熟练使用Vue3生态系统,具备组件化开发和状态管理经验。',
|
||||
tags: ['Vue3', 'TS', 'Element Plus', 'ECharts']
|
||||
},
|
||||
{
|
||||
icon: 'fa-react',
|
||||
title: '框架与库',
|
||||
description: '熟练使用React、Vue等主流前端框架,以及相关的状态管理和路由库。',
|
||||
tags: ['React', 'Vue', 'Redux', 'Vuex']
|
||||
icon: 'fab fa-java',
|
||||
title: '后端开发',
|
||||
description: '掌握SpringBoot服务开发,熟悉MyBatisPlus数据库操作及API设计。',
|
||||
tags: ['SpringBoot', 'MyBatisPlus', 'SaToken']
|
||||
},
|
||||
{
|
||||
icon: 'fa-paint-brush',
|
||||
title: 'UI/UX设计',
|
||||
description: '具备良好的设计感,熟悉主流UI组件库和设计系统,能够实现高质量的用户界面。',
|
||||
tags: ['Element UI', 'Ant Design', 'Figma', 'SCSS']
|
||||
icon: 'fas fa-database',
|
||||
title: '数据存储',
|
||||
description: '熟悉MySQL数据库设计与优化,具备Redis缓存应用及InfluxDB时序数据处理经验。',
|
||||
tags: ['MySQL', 'Redis', 'InfluxDB', 'SQL优化']
|
||||
},
|
||||
{
|
||||
icon: 'fa-cogs',
|
||||
title: '工程化',
|
||||
description: '熟悉前端工程化工具和流程,能够提高开发效率和代码质量。',
|
||||
tags: ['Webpack', 'Vite', 'Git', 'ESLint']
|
||||
icon: 'fas fa-rocket',
|
||||
title: 'DevOps与运维',
|
||||
description: '熟悉容器化部署与自动化流程,具备系统监控和性能优化实践经验。',
|
||||
tags: ['Docker', 'Jenkins', 'Nginx', 'Linux']
|
||||
},
|
||||
{
|
||||
icon: 'fa-server',
|
||||
title: '后端知识',
|
||||
description: '了解Node.js和常用后端技术,能够与后端团队高效协作,实现全栈开发。',
|
||||
tags: ['Node.js', 'Express', 'RESTful API', 'MongoDB']
|
||||
icon: 'fas fa-tools',
|
||||
title: '工程化与工具',
|
||||
description: '掌握前端工程化工具链,能够规范团队开发流程,提升代码质量与协作效率。',
|
||||
tags: ['Git', 'Vite', 'ESLint']
|
||||
},
|
||||
{
|
||||
icon: 'fa-globe',
|
||||
title: '其他技能',
|
||||
description: '掌握项目管理和沟通技巧,具备良好的英语能力,能够阅读英文技术文档。',
|
||||
tags: ['敏捷开发', '英语', '团队协作', '问题解决']
|
||||
icon: 'fas fa-users',
|
||||
title: '软技能',
|
||||
description: '具备良好的需求沟通与项目推进能力,能够阅读英文技术文档并参与技术方案设计。',
|
||||
tags: ['需求分析', '技术文档', '团队协作', '项目管理']
|
||||
}
|
||||
],
|
||||
experiences: [
|
||||
{
|
||||
period: '2020年3月 - 至今',
|
||||
position: '高级前端工程师',
|
||||
company: '科技创新有限公司',
|
||||
description: '负责公司核心产品的前端架构设计和开发,优化前端性能,提升用户体验。主导多个大型项目的前端开发工作,带领5人团队完成产品迭代和维护。',
|
||||
tags: ['React', 'TypeScript', 'Redux'],
|
||||
image: 'https://picsum.photos/id/0/400/200'
|
||||
},
|
||||
{
|
||||
period: '2017年8月 - 2020年2月',
|
||||
position: '前端开发工程师',
|
||||
company: '互联网科技有限公司',
|
||||
description: '参与多个企业级Web应用的开发,负责前端页面实现和交互逻辑编写。与产品和设计团队紧密合作,将设计稿转化为高质量的代码,解决各种浏览器兼容性问题。',
|
||||
tags: ['Vue', 'SCSS', 'Webpack'],
|
||||
image: ''
|
||||
period: '2021年8月 - 至今',
|
||||
position: 'Web工程师',
|
||||
company: '埃斯顿 (南京)医疗科技有限公司',
|
||||
description: '负责公司康复设备数字化平台的Web全栈设计与开发,独立完成前后端核心功能开发与架构优化,推动公司数字化业务落地。'
|
||||
}
|
||||
],
|
||||
education: [
|
||||
{
|
||||
period: '2015年9月 - 2017年6月',
|
||||
degree: '自动化',
|
||||
degree: '自动化专业 专科(偏软件方向)',
|
||||
school: '南京工业大学',
|
||||
description: '本科期间主修计算机科学与技术专业,系统学习了数据结构、算法、计算机网络等基础知识,参与多个课程设计和科研项目。',
|
||||
description: '主修自动化专业,侧重软件与控制系统开发方向,系统学习数据结构、算法、计算机基础等核心课程,参与多个课程设计与项目实践。',
|
||||
detailsTitle: '主要课程',
|
||||
details: ['数据结构', '算法分析', '计算机网络', '操作系统', '数据库原理']
|
||||
details: ['C/C++程序设计', '数据结构与算法', '计算机网络', '自动控制原理']
|
||||
},
|
||||
{
|
||||
period: '2017年9月 - 2020年6月',
|
||||
degree: '控制科学与工程',
|
||||
school: '南京工业大学',
|
||||
description: '研究生阶段专注于软件工程领域,研究方向为Web前端技术和用户界面设计,发表2篇相关领域的学术论文,参与校企合作项目开发。',
|
||||
description: '研究生阶段专注于软件工程领域,研究方向为Web技术和用户界面设计,参与校企合作项目开发。',
|
||||
detailsTitle: '主要成果',
|
||||
details: ['学术论文2篇', '优秀毕业生', '校企合作项目', '奖学金']
|
||||
details: ['学术论文2篇', '校企合作项目', '奖学金']
|
||||
}
|
||||
],
|
||||
projects: [
|
||||
{
|
||||
name: 'Web边缘管理系统',
|
||||
period: '2024.01 - 2025.11',
|
||||
name: '康复核心管理系统',
|
||||
period: '2024.01 - 2025-01',
|
||||
role: '全栈开发工程师',
|
||||
description: '一个面向医疗设备领域的SaaS平台,核心功能是实现对患者信息、康复报告、治疗排班的集中化管理。',
|
||||
description: '一个面向医疗设备领域的信息化平台,核心功能是实现对患者信息、康复报告、治疗排班的集中化管理。',
|
||||
content: [
|
||||
'前端基于 Vue 3 与 TypeScript 进行开发,采用 Element Plus 组件库构建整体用户界面,并使用 ECharts 实现治疗方案、设备状态等数据的可视化图表与大屏展示。',
|
||||
'后端使用 Spring Boot 2 框架构建 RESTful API,处理核心业务逻辑,集成 MyBatis-Plus 作为数据持久层框架。',
|
||||
'数据库采用 MySQL,负责数据库表结构设计、索引优化与核心 SQL 编写,确保患者信息、治疗报告、排班等数据的高效存储与查询。',
|
||||
'主导开发了患者信息管理中心、多治疗师协同任务管理、康复报告生成与审批、智能治疗排班四大核心功能模块的前端界面与后端接口。',
|
||||
'实现基于 RBAC 模型的权限控制系统,前端进行按钮级权限控制,后端完成接口级访问鉴权。',
|
||||
'使用 Docker 将前后端应用分别容器化,通过 Docker Compose 定义多服务编排,完成项目的一键部署与运维。'
|
||||
'前端基于Vue3与TypeScript进行开发,采用Element Plus组件库构建整体用户界面,并使用ECharts实现治疗方案、设备状态等数据的可视化图表与大屏展示。',
|
||||
'后端使用SpringBoot2框架构建RESTful API,处理核心业务逻辑,集成MyBatis-Plus作为数据持久层框架。',
|
||||
'数据库采用MySQL,负责数据库表结构设计、索引优化与核心 SQL 编写,确保患者信息、治疗报告、排班等数据的高效存储与查询。',
|
||||
'使用Docker将各个服务容器化部署,通过Docker Compose定义多服务编排,结合自定义日志分析系统完成项目的一键部署与运维。'
|
||||
],
|
||||
tags: ['SpringBoot2', 'Vue3', 'TypeScript', 'ECharts', '电商'],
|
||||
images: []
|
||||
images: ['edge1.png', 'edge2.png']
|
||||
},
|
||||
{
|
||||
name: '公司综合服务系统',
|
||||
period: '2025.11 - 至今',
|
||||
role: '全栈开发工程师',
|
||||
description: '独立设计并开发公司综合服务系统,主要包括在线培训、售后服务、发货订单、设备监控等业务模块,实现公司业务的数字化管理,提升了多部门的协调效率和数据可视化能力。',
|
||||
content: [
|
||||
'前端采用Vue3+TypeScript+ElementPlus构建,集成ECharts实现数据可视化看板,采用Vue Router实现路由权限控制,Pinia进行状态管理,支持多端自适应布局。',
|
||||
'后端采用SpringBoot3+MyBatis-Plus构建,集成Satoken权限认证,设计统一RESTful API接口规范。',
|
||||
'数据层采用MySQL存储核心业务,Redis缓存实时状态,InfluxDB存储设备指标数据,通过索引与查询优化保障数据效率。',
|
||||
'基于LangChain框架开发SQL智能体驱动的AI问答系统,支持自然语言查询业务数据,实现公司业务分析。',
|
||||
'使用Docker将各个服务容器化部署,通过Docker Compose定义多服务编排,结合自定义日志分析系统完成项目的一键部署与运维。'
|
||||
],
|
||||
tags: ['Vue3', 'SpringBoot3', 'MySQL', 'InfluxDB', 'LangChain', 'Docker'],
|
||||
images: ['integrate1.png', 'integrate2.png']
|
||||
},
|
||||
{
|
||||
name: '健康安全监护物联网平台',
|
||||
period: '2025.07 - 2025.09',
|
||||
role: '后端开发工程师 / IoT架构核心成员',
|
||||
role: '全栈开发工程师',
|
||||
description: '一个基于云-边协同架构的医疗级实时监护平台。项目整合智能手表、毫米波雷达、摄像头等设备,通过MQTT、TCP、HTTP等多协议接入,实现对生命体征与安全行为的实时采集、传输、存储与Web/移动端可视化告警。',
|
||||
content: [
|
||||
'主导云端通信枢纽架构,使用Python构建高并发TCP服务器与HTTP服务器,可靠接收智能手表、呼叫器等设备的生命体征与告警数据,并统一转发至MQTT消息队列',
|
||||
'负责边缘服务器核心消息处理模块(.NET)开发,实现MQTT客户端订阅、多源数据(心率、血压、异常事件)聚合,并通过WebSocket服务器向Web/Flutter前端进行毫秒级实时推送',
|
||||
'设计并实现时序数据存储方案,集成InfluxDB持久化存储海量传感器数据(如心率曲线),为前端历史查询与分析提供支持;使用MySQL管理设备、用户等业务数据',
|
||||
'集成RTSP to HLS流媒体服务,将视觉相机视频流转换为m3u8格式,供Web前端实现低延迟直播监控,完成“视频+数据”一体化监护',
|
||||
'为Web前端与Flutter移动端提供清晰的HTTP RESTful API,用于设备管理、指令下发与数据查询,确保前后端高效协同'
|
||||
'主导云端通信枢纽架构,使用Python构建高并发TCP服务器与HTTP服务器,可靠接收智能手表、呼叫器等设备的生命体征与告警数据,并统一转发至MQTT消息队列。',
|
||||
'负责边缘服务器核心消息处理模块(.NET)开发,实现MQTT客户端订阅、多源数据(心率、血压、异常事件)聚合,并通过WebSocket服务器向Web前端进行实时推送。',
|
||||
'设计并实现时序数据存储方案,集成InfluxDB持久化存储传感器数据,为前端历史查询与分析提供支持;使用MySQL管理设备、用户等业务数据。',
|
||||
'集成RTSP to HLS流媒体服务,将视觉相机视频流转换为m3u8格式,供Web前端实现低延迟直播监控,完成“视频+数据”一体化监护。'
|
||||
],
|
||||
tags: ['物联网', 'Python', '.NET', 'MQTT', 'WebSocket', 'TCP/HTTP', 'InfluxDB', 'MySQL', '云边协同', '实时数据处理'],
|
||||
images: ['IOT消息通讯框架.png', '健康安全监护大屏.png']
|
||||
tags: ['TCP/HTTP', 'WebSocket', 'MQTT', 'WebRTC', 'MySQL', 'InfluxDB'],
|
||||
images: ['iot1.png', 'iot2.png']
|
||||
}
|
||||
],
|
||||
contactInfo: [
|
||||
|
||||