diff --git a/src/app/equipment/page.tsx b/src/app/equipment/page.tsx index 0efdfb0..8e6b9f1 100755 --- a/src/app/equipment/page.tsx +++ b/src/app/equipment/page.tsx @@ -9,7 +9,32 @@ interface Equipment { export default async () => { const { data } = (await getPageConfigDataByNameAPI('equipment')) || { data: {} as Config }; - const { list } = data.value as { list: Equipment[] }; + const value = (data?.value as { list: Equipment[] }) || { list: [] }; + + const defaultItem = { + name: '未命名设备', + image: '', + price: '0', + description: '暂无描述', + color: '#f5f5f5', + }; + + const defaultGroup = { + category: '未分类', + description: '暂无描述', + items: [] as Equipment['items'], + }; + + const safeList: Equipment[] = (value.list || []).map((group) => ({ + ...defaultGroup, + ...group, + items: (group?.items || []).map((item) => ({ + ...defaultItem, + ...item, + price: `${item.price ?? defaultItem.price}`, + color: item.color || defaultItem.color, + })), + })); return ( <> @@ -18,7 +43,7 @@ export default async () => {
- {list.map((group, index) => ( + {safeList.map((group, index) => (

{group.category}

{group.description}

diff --git a/src/app/my/page.tsx b/src/app/my/page.tsx index 2c8b8be..efc0b47 100755 --- a/src/app/my/page.tsx +++ b/src/app/my/page.tsx @@ -14,7 +14,42 @@ import InfoOne from './component/InfoOne'; export default async () => { const { data } = (await getPageConfigDataByNameAPI('my')) || { data: {} as Config }; - const { info_style, info_one, info_two, character, goals, project, technology_stack, hometown } = data.value as MyData; + const value = (data?.value as MyData) || ({} as MyData); + + const defaultInfoOne = { + name: '未命名', + notes: '', + avatar: '', + profession: '', + introduction: '', + }; + + const defaultInfoTwo = { + author: '未提供作者', + know_me: '#', + left_tags: [] as string[], + right_tags: [] as string[], + avatar_url: '', + }; + + const defaultCharacter = [] as MyData['character']; + const defaultGoals = [] as MyData['goals']; + const defaultProject = [] as MyData['project']; + const defaultTechStack = [] as MyData['technology_stack']; + const defaultHometown = [0, 0] as MyData['hometown']; + + const safeData: MyData = { + info_style: value.info_style || 'info_one', + info_one: { ...defaultInfoOne, ...(value.info_one || {}) }, + info_two: { ...defaultInfoTwo, ...(value.info_two || {}) }, + character: value.character ?? defaultCharacter, + goals: value.goals ?? defaultGoals, + project: value.project ?? defaultProject, + technology_stack: value.technology_stack ?? defaultTechStack, + hometown: value.hometown ?? defaultHometown, + }; + + const { info_style, info_one, info_two, character, goals, project, technology_stack, hometown } = safeData; return ( <> @@ -34,7 +69,7 @@ export default async () => {
- +
diff --git a/src/app/resume/resume.tsx b/src/app/resume/resume.tsx index 2a7d790..ee53472 100644 --- a/src/app/resume/resume.tsx +++ b/src/app/resume/resume.tsx @@ -8,6 +8,58 @@ import { Resume } from '@/types/app/resume'; export default ({ data }: { data: Resume }) => { const { personalInfo, advantages, links, skills, workExperience, projects, education } = data || {}; + const defaultPersonalInfo = { + name: '神秘人', + title: '前端开发工程师', + age: '22岁', + location: '中国', + avatar: 'https://q1.qlogo.cn/g?b=qq&nk=3311118881&s=640', + contact: { + phone: '10000000000', + email: 'example@example.com', + github: 'https://github.com', + }, + }; + + const safePersonalInfo = { + ...defaultPersonalInfo, + ...personalInfo, + contact: { + ...defaultPersonalInfo.contact, + ...personalInfo?.contact, + }, + }; + + const defaultLinks = { + github: 'https://github.com', + csdn: 'https://blog.csdn.net', + blog: 'https://example.com', + }; + + const safeLinks = { + ...defaultLinks, + ...links, + }; + + const defaultEducation = { + school: '未提供学校', + major: '未提供专业', + degree: '未提供学历', + period: '未提供时间', + achievements: ['暂无成就'], + }; + + const safeEducation = { + ...defaultEducation, + ...education, + achievements: education?.achievements ?? defaultEducation.achievements, + }; + + const safeSkills = skills ?? ['未填写技能']; + const safeAdvantages = advantages ?? ['暂无优势']; + const safeWorkExperience = workExperience ?? []; + const safeProjects = projects ?? []; + useEffect(() => { document.documentElement.style.scrollBehavior = 'smooth'; }, []); @@ -36,8 +88,8 @@ export default ({ data }: { data: Resume }) => { // 技能标签云数据处理 const getSkillTags = () => { - if (!skills || skills.length === 0) return []; - return skills.map((skill) => { + if (!safeSkills || safeSkills.length === 0) return []; + return safeSkills.map((skill) => { // 提取技能名称和熟练度(如果有) const parts = skill.split('('); const name = parts[0].trim(); @@ -56,8 +108,8 @@ export default ({ data }: { data: Resume }) => { return ( <> - {`${personalInfo?.name ?? ''} - ${personalInfo?.title ?? ''}`} - + {`${safePersonalInfo.name || '匿名用户'} - ${safePersonalInfo.title || '前端开发工程师'}`} +
@@ -67,37 +119,37 @@ export default ({ data }: { data: Resume }) => {
- {personalInfo?.name} + {safePersonalInfo.name
-

{personalInfo?.name}

-

{personalInfo?.title}

+

{safePersonalInfo.name || '匿名用户'}

+

{safePersonalInfo.title || '前端开发工程师'}

年龄: - {personalInfo?.age} + {safePersonalInfo.age || '22岁'} 地点: - {personalInfo?.location} + {safePersonalInfo.location || '中国'}
- {advantages?.map((advantage, index) => ( + {safeAdvantages.map((advantage, index) => (

{advantage}

@@ -151,9 +203,9 @@ export default ({ data }: { data: Resume }) => {
-

{education?.school}

+

{safeEducation.school || '未提供学校'}

- {education?.major} | {education?.degree} + {safeEducation.major || '未提供专业'} | {safeEducation.degree || '未提供学历'}

{/*

{education?.period} @@ -161,7 +213,7 @@ export default ({ data }: { data: Resume }) => {

    - {education?.achievements?.map((achievement, index) => ( + {safeEducation.achievements?.map((achievement, index) => (
  • {achievement} @@ -179,20 +231,20 @@ export default ({ data }: { data: Resume }) => {
- {links?.github && ( - + {safeLinks?.github && ( + GitHub )} - {links?.csdn && ( - + {safeLinks?.csdn && ( + CSDN 技术博客 )} - {links?.blog && ( - + {safeLinks?.blog && ( + 开源项目作品 )} @@ -210,16 +262,16 @@ export default ({ data }: { data: Resume }) => {
- {workExperience?.map((job, index) => ( + {safeWorkExperience.map((job, index) => (
-

{job.company}

- {job.period} +

{job.company || '未提供公司'}

+ {job.period || '未提供时间'}
-

{job.position}

+

{job.position || '未提供职位'}

    - {job.responsibilities?.map((responsibility, index) => ( + {(job.responsibilities ?? ['暂无职责']).map((responsibility, index) => (
  • {responsibility} @@ -239,14 +291,14 @@ export default ({ data }: { data: Resume }) => {
- {projects?.map((project, index) => ( + {safeProjects.map((project, index) => (
-

{project.name}

- {project.period} +

{project.name || '未命名项目'}

+ {project.period || '未提供时间'}
-

{project.role}

+

{project.role || '未提供角色'}

@@ -268,12 +320,12 @@ export default ({ data }: { data: Resume }) => {
技术栈
{typeof project.techStack === 'string' ? ( - project.techStack + project.techStack || '未提供技术栈' ) : ( <> - 前端: {project.techStack.frontend} - 后端: {project.techStack.backend} - 部署: {project.techStack.deployment} + 前端: {project.techStack?.frontend || '未提供'} + 后端: {project.techStack?.backend || '未提供'} + 部署: {project.techStack?.deployment || '未提供'} )}
@@ -314,9 +366,9 @@ export default ({ data }: { data: Resume }) => {
{project.repositories?.map((item, index) => ( ))}