仿 Mac 个人网站开发 |项目复盘

news/2024/10/16 18:24:53 标签: macos, reactjs, 前端, javascript, web
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

一、前言

1.1 灵感来源

早年有幸看到国外大佬做的一个 基于 Web 的 Windows XP 桌面娱乐系统, 那时刚好有搭建一个个人博客的想法, 所以就想是否可以基于 WEB 实现一个仿 Mac UI 的个人博客, 以应用的形式来展示博客各个功能!

1.2 相关链接(求个 Star)

  1. 前端开源代码
  2. 后端开源代码
  3. 组件库(项目开发过程中抽离出独立的组件库)
  4. 在线预览(游客权限有限无法查看所有应用)

1.3 效果图如下

image

二、为什么要写这个项目

  1. 将自己所学应用到具体项目, 同时项目所有依赖、框架版本都尽可能保持最新, 以求能够及时掌握最新知识
  2. 个人感觉只有不断思考、头脑风暴才能更好的促进成长, 通过在项目对产品、架构、UI、交互、项目部署、需求管理等进行深入思考, 从而扩展自己的能力
  3. 体验后端(node)开发, 了解每个功能模块整体运行的流程
  4. 将自己的一些奇思妙想, 在具体项目中实现出来, 能够给自己带来满满成就感, 让自己对技术时刻保持着热情
    ……

三 技术栈

3.1 前端

  1. 使用 React Hooks 以函数式组件来进行编码, 并使用新版 Antd 来进行开发
  2. 使用个人组件库 qyrc 进行项目开发, 并将项目中部分组件封装到 qyrc 并进行发布
  3. 使用 Redux 来管理状态, 并使用 redux-saga 解决异步问题
  4. 使用 Sass 预处理器来编写样式
  5. 使用 Webpack 从零搭建项目, 完成基本的项目配置
  6. 使用 Eslint 规范代码语法、风格
  7. 使用 husky + commitlint 规范 git commit 提交信息

3.2 后端

  1. 使用 Graphql + Koa 构建后端系统
  2. 使用 Mongo + mongoose 来存储后端数据
  3. 使用 node-rsa 对用户登录密码进行 rsa 加解密
  4. 使用 jsonwebtoken 对用户身份进行验证(JWT
  5. 使用 tinify 对上传的图片进行压缩
  6. 使用 cron 来管理系统定时任务(目前已实现系统数据的每日定时备份)
  7. 使用 nodemailer 实现邮件发送功能(主要用于数据备份, 将备份数据发送指定邮箱)
  8. 使用 pm2 来部署后端主项目以及定时任务
  9. 使用 boxen + inquirer + ora + shelljs + chalk 来实现交互式 npm 脚本, 可选脚本有: 数据备份、数据恢复、角色授权、创建秘钥、创建临时 Token ……
  10. 使用 winston 记录日志, 包括日志文件的生成、终端日志的打印输出、 配合 websocket 将日志在前端进行可视化展示
  11. 使用 docker + docker-compose 以容器的方式来部署项目

四、系统截图

4.1 编辑器

image.png

用于管理个人文章, 左侧目录就相当于文件 tag
已完成功能: 文章以及目录(tag) 增删改查、文章发布、缩略图设置、预览……

4.2 日记(下图数据为模拟数据)

image.png

用于记录每天起居、体重、体脂、饮食、运动、账单
已完成功能: 数据的增删改查、历史收支统计、每日账单统计图、身体体征(体征、体脂)统计图……

4.3 Mac Touchbar 扩展功能(下图数据为模拟数据)

image.png

在 Mac Touchbar 上展示每日体重以及本月开销

4.4 图片管理

image.png

用于管理系统图片资源, 包括文章插图、缩略图、默认头像、桌面壁纸……
已完成功能: 图片的批量上传、删除、图片压缩(后端实现)

4.5 系统偏好设置

image.png

用于对系统的偏好进行设置
以实现功能: 程序坞自动隐藏设置、菜单栏全屏图标显示、菜单栏是否显示星期、自定义菜单栏日期格式

4.6 数据字典管理

image.png

用于管理系统数据字段数据
已实现功能: 数据的增、删、改、查……

4.7 系统通知栏

image.png

仿 Mac 通知栏, 展示用户信息(包含登出功能)、天气预报……
已实现功能: 用户信息展示(包含登出功能)

4.8 日志监控

image.png

用于实时查看后台服务输出的日志信息(websocket 实现)
已实现功能: 日志的获取、展示

五、ToDo List

  • 阅读器: 用于博客文章展示、查询、阅读
  • 权限管理: 用角色设置权限(目前通过脚本设置)
  • 脚本管理: 在线脚本指定的增删改查、可设置定时运行、可通过以聊天窗口方式发送指定来实现
  • 音乐播发器: 播放音乐(尝试接入网易云)
  • 评论留言模块: 在通知栏添加留言功能、文章添加评论功能、后台添加评论留言回复功能、桌面可开启弹幕(留言)功能
  • 图形功能: 在线编辑流程图、思维导图……
  • 系统配置: 桌面壁纸设置、动态壁纸实现(canvaswebGL)……
  • 系统监控: 日志监控、系统资源监控、前后端埋点……
    ……
    image

http://www.niftyadmin.cn/n/5708339.html

相关文章

第二十七篇:传输层讲解,TCP系列一

一、传输层的功能 ① 分割与重组数据 传输层也要做数据分割,所以必然也需要做数据重组。 ② 按端口号寻址 IP只能定位数据哪台主机,无法判断数据报文应该交给哪个应用,传输层给每个应用都设置了一个编号,这个编号就是端口&…

【C++刷题】力扣-#66-加一

题目描述 给定一个非负整数数组 digits,表示一个非负整数。每次操作将整个数组增加 1(即加一操作)。你需要找出加一操作后的数组表示。 示例 示例 1 输入: digits [1,2,3] 输出: [1,2,4] 解释: 数组表示数字 123,加一操作后变为…

黑龙江等保测评:APP安全性的重要性与实施策略

在数字化时代,信息安全已成为各类应用程序(APP)开发与运营中不可忽视的重要环节。尤其是在黑龙江省,随着网络安全等级保护(等保)政策的逐步落实,APP的等保测评也逐渐成为企业合规的重要组成部分…

令人惊叹的超前城市规划,竟是200年前的设计

在世界的建筑版图上,西班牙巴塞罗那以其独特的城市规划和丰富的文化遗产,成为了无可争议的“建筑界最疯狂的城市”。 这座城市,仿佛被一位天才建筑师精心雕琢,每一个角落都散发着独特的魅力与疯狂。 超前的城市规划 最令人惊叹…

Dify实现text2sql工作流[SQL调用篇],并查询Postgres数据库 or Mysql数据库(docker容器)

Dify 实现text2sql,查询Postgres数据库 1.Postgres数据库设置 1.1.docker-compose.yml修改 为了让 sandbox 容器能够与 docker-db-1 容器互相通信,你需要确保几个条件得到满足: 网络配置:确保 sandbox 和 db 都位于同一个 Docker 网络中。如果它们不在同一个网络中,数据…

MySQL数据库从入门到精通 第1讲 基本概念

MySQL数据库从入门到精通 第1讲 基本概念 小可爱们,接下来我们要学习的知识是数据库相关的知识,从本贴开始,从0基础带大家入门到精通,要加油哦~ 1 前言 1.1 为什么要学习数据库? 那我们首先要搞清楚第一个问题&…

Android 防止截屏和录屏

通过给当前的window对象设置标记WindowManager.LayoutParams.FLAG_SECURE来防止截屏和录屏 protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 防止截屏getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManage…

同行评审流程详解

同行评审流程中,稿件被拒很正常,可能是由于稿件结构有问题,论据不足,表达不准确等诸多因素,接下来带你走一遍同行评审流程,看论文投稿过程中有哪些拦路虎,掌握拒稿因素,论文投稿才能…