使用 Cursor AI 开发多端笔记系统全过程分享
前言
本文将分享如何使用 Cursor AI 辅助开发一个基于 ASP Classic + Vue3 + UniApp 的多端笔记系统。通过 AI 辅助开发,不仅可以提高开发效率,还能学习到更多最佳实践。
项目概述
- 技术栈: ASP Classic + Vue3 + UniApp + SQL Server
- 开发工具: Cursor AI + VSCode
- 项目周期: 5天
- 代码量: 约3000行
- 在线演示: http://demo.xiyueta.com/case/20250214-notepad/
- 演示账号: demo
- 演示密码: 123456
主要功能
- 多用户管理
- 笔记本管理
- 笔记管理
- 标签管理
- 移动端适配
界面预览
1. 登录和注册
- 简洁的登录界面
- 支持账号密码登录和注册
- 提供找回密码功能
2. 笔记本管理
- 展示所有笔记本列表
- 支持搜索笔记本
- 显示笔记本下的笔记数量
- 支持新建、编辑和删除操作
2. 新建和编辑笔记本
- 编辑笔记本标题和内容
4. 笔记管理
- 展示当前笔记本下的所有笔记
- 支持按标题搜索笔记
- 显示笔记标题、内容预览、标签和时间
- 支持编辑和删除操作
5. 新建和编辑笔记
- 编辑笔记标题和内容
- 选择所属笔记本
- 添加和管理标签
- 设置星标笔记
6. 标签管理
- 集中管理所有标签
- 显示每个标签下的笔记数量
- 支持添加、编辑和删除标签
7. 用户中心
- 管理用户信息
- 修改登录密码
- 查看操作日志
8. 系统功能
- 查看系统日志
- 显示系统信息
- 管理员功能
开发流程
1. 项目规划与设计
首先向 Cursor AI 描述项目需求:
我想开发一个记事本系统,使用 ASP Classic + Vue3 + UniApp + SQL Server 技术栈。
需要实现用户管理、笔记本管理、笔记管理、标签管理等功能。
请帮我:
1. 设计数据库结构
2. 规划功能模块
3. 设计API接口
4. 制定开发计划
2. 数据库设计
根据 AI 建议,设计了以下核心表:
- 用户表(pre20250214_user)
- 笔记本表(pre20250214_notebooks)
- 笔记表(pre20250214_notes)
- 标签表(pre20250214_tags)
- 笔记标签关联表(pre20250214_note_tags)
- 系统日志表(pre20250214_logs)
2.1 用户表 (pre20250214_user)
CREATE TABLE pre20250214_user (
id INT PRIMARY KEY IDENTITY(1,1), -- 用户ID
username VARCHAR(50) NOT NULL UNIQUE, -- 用户名
password VARCHAR(32) NOT NULL, -- 密码(MD5加密)
nickname VARCHAR(50) NOT NULL, -- 昵称
email VARCHAR(100) NOT NULL UNIQUE, -- 邮箱(用于找回密码)
role TINYINT NOT NULL, -- 角色:1超级管理员,2管理员,3普通用户
token VARCHAR(32), -- 登录token
token_expire DATETIME, -- token过期时间
status TINYINT DEFAULT 1, -- 状态:1启用,0禁用
create_time DATETIME DEFAULT GETDATE(), -- 创建时间
update_time DATETIME DEFAULT GETDATE() -- 更新时间
)
-- 插入测试数据 (密码都是123456的MD5加密: 14e1b600b1fd579f47433b88e8d85291)
INSERT INTO pre20250214_user (username, password, nickname, email, role, status) VALUES
('admin', '14e1b600b1fd579f47433b88e8d85291', '小孙', 'admin@xiyueta.com', 1, 1),
('test', '14e1b600b1fd579f47433b88e8d85291', '小张', 'test@xiyueta.com', 2, 0),
('demo', '14e1b600b1fd579f47433b88e8d85291', '小红', 'demo@xiyueta.com', 3, 1);
测试账号说明:
1. admin: 超级管理员账号(role=1)
3. test: 禁用状态的测试账号(status=0)
4. demo: 演示账号(role=2)
所有账号的初始密码都是: 123456
2.2 笔记本表 (pre20250214_notebooks)
CREATE TABLE pre20250214_notebooks (
notebook_id INT IDENTITY(1,1) PRIMARY KEY, -- 笔记本ID
user_id INT NOT NULL, -- 所属用户ID
title NVARCHAR(100) NOT NULL, -- 笔记本标题
description NVARCHAR(500), -- 描述
sort_order INT DEFAULT 0, -- 排序号
create_time DATETIME DEFAULT GETDATE(), -- 创建时间
update_time DATETIME DEFAULT GETDATE(), -- 更新时间
status TINYINT DEFAULT 1 -- 状态:1正常,0删除
)
-- 插入测试数据
INSERT INTO pre20250214_notebooks (user_id, title, description)
VALUES (1, '我的第一个笔记本', '这是一个测试笔记本')
2.3 笔记表 (pre20250214_notes)
CREATE TABLE pre20250214_notes (
note_id INT IDENTITY(1,1) PRIMARY KEY, -- 笔记ID
notebook_id INT NOT NULL, -- 所属笔记本ID
user_id INT NOT NULL, -- 所属用户ID
title NVARCHAR(200) NOT NULL, -- 笔记标题
content NTEXT, -- 笔记内容
is_starred TINYINT DEFAULT 0, -- 是否星标:1是,0否
create_time DATETIME DEFAULT GETDATE(), -- 创建时间
update_time DATETIME DEFAULT GETDATE(), -- 更新时间
status TINYINT DEFAULT 1 -- 状态:1正常,0删除
)
-- 插入测试数据
INSERT INTO pre20250214_notes (notebook_id, user_id, title, content)
VALUES (1, 1, '第一条笔记', '这是我的第一条笔记内容')
2.4 标签表 (pre20250214_tags)
CREATE TABLE pre20250214_tags (
tag_id INT IDENTITY(1,1) PRIMARY KEY, -- 标签ID
user_id INT NOT NULL, -- 所属用户ID
name NVARCHAR(50) NOT NULL, -- 标签名称
color NVARCHAR(20), -- 标签颜色
create_time DATETIME DEFAULT GETDATE(), -- 创建时间
update_time DATETIME DEFAULT GETDATE(), -- 更新时间
status TINYINT DEFAULT 1, -- 状态:1启用,0禁用
)
-- 插入测试数据
INSERT INTO pre20250214_tags (user_id, name, color)
VALUES (1, '工作', '#FF5733')
2.5 笔记标签关联表 (pre20250214_note_tags)
CREATE TABLE pre20250214_note_tags (
note_id INT NOT NULL, -- 笔记ID
tag_id INT NOT NULL, -- 标签ID
create_time DATETIME DEFAULT GETDATE(), -- 创建时间
status TINYINT DEFAULT 1, -- 状态:1启用,0禁用
)
-- 插入测试数据
INSERT INTO pre20250214_note_tags (note_id, tag_id)
VALUES (1, 1)
2.6 系统日志表(pre20250214_logs)
-- 创建系统日志表
CREATE TABLE pre20250214_logs (
log_id int IDENTITY(1,1) PRIMARY KEY,
user_id int NOT NULL, -- 操作用户ID
username varchar(50) NOT NULL, -- 操作用户名
action varchar(255) NOT NULL, -- 操作内容
ip varchar(50) NOT NULL, -- 操作IP
create_time datetime NOT NULL -- 操作时间
)
-- 添加默认日志记录
INSERT INTO pre20250214_logs (user_id, username, action, ip, create_time)
VALUES (1, 'admin', '系统初始化', '127.0.0.1', GETDATE())
3. 前端开发
使用 Cursor AI 辅助开发前端页面:
1. 项目初始化
请帮我使用 Vue3 + UniApp 创建项目,需要:
1. 配置路由
2. 封装请求
3. 添加UI组件库
4. 设置全局样式
2. 页面开发
请帮我开发[具体页面],要求:
1. 使用 Vue3 组合式API
2. 实现响应式布局
3. 添加加载状态
4. 处理错误情况
4. 后端开发
同样使用 AI 辅助开发后端接口:
请帮我实现[具体接口],要求:
1. 使用 ASP Classic
2. 添加参数验证
3. 规范错误处理
4. 优化SQL查询
5. 项目优化
在基础功能完成后,向 AI 请教优化建议:
请帮我优化项目,重点关注:
1. 性能优化
2. 安全加固
3. 代码重构
4. 用户体验
开发难点与解决方案
1. 跨端兼容性问题
问题: H5端和App端的导航栏表现不一致
解决方案:
- 使用条件编译处理不同平台
- 自定义统一的导航栏组件
// pages.json
{
"globalStyle": {
// #ifdef H5
"navigationStyle": "custom"
// #endif
}
}
2. 标签统计优化
问题: 标签下笔记数量统计性能问题
解决方案:
- 优化SQL查询
- 添加适当的索引
-- 优化前
SELECT COUNT(*) FROM note_tags WHERE tag_id=xxx
-- 优化后
SELECT COUNT(*) FROM note_tags nt
INNER JOIN notes n ON nt.note_id=n.note_id
WHERE nt.tag_id=xxx AND nt.status=1 AND n.status=1
3. 数据安全性
问题: 用户数据隔离和权限控制
解决方案:
- 统一封装用户验证
- 所有数据操作加用户ID限制
- 使用 Token 进行接口认证
4. 移动端适配
问题: 不同设备屏幕适配问题
解决方案:
- 使用 uView UI 组件库
- 采用 flex 布局
- rpx 单位实现等比缩放
项目亮点
1. AI 驱动开发
- 使用 Cursor AI 辅助编码
- 智能代码补全和优化
- 快速解决技术难点
2. 最佳实践示范
- 清晰的项目结构
- 规范的代码风格
- 完善的错误处理
- 统一的接口规范
3. 实用功能集成
- 多用户管理
- 笔记本分类
- 标签管理
- 笔记星标
- 全局搜索
Cursor AI 使用技巧
1. 提示词编写
- 明确说明技术栈和约束
- 分步骤提出需求
- 要求提供完整示例
- 主动询问最佳实践
2. 代码生成
- 先生成框架代码
- 逐步完善细节
- 及时优化重构
- 注意代码规范
3. 问题解决
- 准确描述问题
- 提供上下文信息
- 要求多个解决方案
- 验证解决方案
开发心得
1. AI 辅助开发的优势
- 快速生成代码框架
- 提供最佳实践建议
- 帮助解决技术难点
- 优化代码质量
2. 开发技巧分享
1. 善用 AI 提示词
- 明确说明需求和约束
- 分步骤提问
- 要求提供完整示例
- 主动询问优化建议
2. 代码管理建议
- 及时提交代码
- 编写清晰注释
- 做好代码审查
- 保持代码规范
3. 项目优化要点
- 合理的数据库设计
- 统一的接口规范
- 完善的错误处理
- 良好的用户体验
交流学习
如果您对本项目感兴趣,欢迎交流:
- QQ: 313801120
- 博客: www.xiyueta.com
特别感谢
- Cursor AI 的强大助手功能
- UniApp 优秀的跨端框架
- 开源社区的各种支持
希望本文能帮助大家了解如何使用 AI 辅助开发,提高开发效率。如果对您有帮助,欢迎点赞关注!