微信小程序 + 云开发(云函数 Node.js + 云数据库 MongoDB)。云函数与集合统一使用 cyt_ 前缀。
创研通是一个科研协作社区小程序,旨在连接研究者,促进学术交流与合作。主要功能包括:
- 课题发现 — 浏览、搜索感兴趣的科研课题
- 课题发布 — 发布自己的研究方向,吸引志同道合的研究者
- 协作申请 — 申请加入感兴趣的课题,发布者审核通过后可协作
- 进展追踪 — 发布课题进展、评论互动
- AI 构思助手 — 智能辅助构思课题方向、生成摘要
- 消息通知 — 申请审核结果、课题动态实时通知
CYT/
├── miniprogram/ # 小程序端
│ ├── app.ts # 应用入口
│ ├── app.json # 应用配置
│ ├── app.wxss # 全局样式(设计系统)
│ ├── pages/
│ │ ├── index/ # 课题大厅(首页)
│ │ ├── topic-detail/ # 课题详情页
│ │ ├── publish-topic/ # 发布课题页
│ │ ├── publish-update/ # 发布进展页
│ │ ├── profile/ # 个人中心
│ │ ├── messages/ # 消息列表
│ │ ├── login/ # 登录页
│ │ ├── apply-list/ # 申请管理
│ │ └── admin/ # 管理面板
│ ├── components/ # 自定义组件
│ │ ├── topic-card/ # 课题卡片
│ │ ├── timeline-item/ # 时间线项
│ │ ├── tag-group/ # 标签组
│ │ └── ai-assist-drawer/ # AI 助手抽屉
│ ├── utils/
│ │ ├── cloud.ts # 云函数封装
│ │ └── util.ts # 工具函数
│ └── images/ # 图片资源
├── cloudfunctions/ # 云函数
│ ├── cyt_topic/ # 课题 CRUD
│ ├── cyt_apply/ # 申请与审核
│ ├── cyt_update/ # 进展发布
│ ├── cyt_comments/ # 评论管理
│ ├── cyt_user/ # 用户管理
│ ├── cyt_ai_assist/ # AI 构思助手
│ └── cyt_notify/ # 消息通知
└── README.md
| 页面 | 路径 | 功能描述 |
|---|---|---|
| 课题大厅 | pages/index |
首页,展示课题列表,支持按最新/活跃排序 |
| 课题详情 | pages/topic-detail |
查看课题详情、时间线、AI摘要,申请加入/发布进展 |
| 发布课题 | pages/publish-topic |
发布新课题,支持 AI 构思助手辅助 |
| 发布进展 | pages/publish-update |
发布课题进展更新 |
| 个人中心 | pages/profile |
查看/编辑个人信息,管理我的课题 |
| 消息中心 | pages/messages |
查看审核结果、课题动态等通知 |
| 登录页 | pages/login |
微信授权登录,获取头像昵称 |
| 申请管理 | pages/apply-list |
课题发布者审核加入申请 |
| 管理面板 | pages/admin |
管理员数据监控、课题管理 |
项目采用统一的设计系统,确保视觉一致性和高质量的用户体验。
| 类型 | 颜色 | 用途 |
|---|---|---|
| 品牌蓝 | #0066ff |
主按钮、链接、重要元素 |
| 亮青色 | #8AF4FF |
标签、徽章、高亮装饰 |
| 紫色 | #6449e8 |
渐变端点、次要按钮 |
| 页面背景 | #f5f9ff |
淡蓝灰背景 |
| 卡片背景 | #ffffff |
白色卡片 |
- 圆角:统一使用
20rpx大圆角,小元素12rpx,全圆999rpx - 渐变按钮:品牌渐变
linear-gradient(135deg, #0066ff, #6449e8) - 阴影:柔和蓝色阴影
0 2rpx 20rpx rgba(0, 102, 255, 0.06) - 间距:基于
8rpx网格系统 - 字体:系统字体栈
-apple-system, BlinkMacSystemFont, 'PingFang SC' - 点击反馈:
transform: scale(0.97)缩放效果
支持暗夜模式,通过 CSS 变量切换:
- 主色变为亮青
#8AF4FF - 背景变为深蓝黑
#060b18 - 卡片背景变为
#0f172a
详细设计规范参见 .cursor/skills/wechat-miniprogram-ui/。
| 云函数 | 职责 | 主要 action |
|---|---|---|
cyt_topic |
课题管理 | list, get, create, update |
cyt_apply |
申请审核 | create, list, approve |
cyt_update |
进展管理 | create, list |
cyt_comments |
评论管理 | create, list |
cyt_user |
用户管理 | get, update, myTopics, messages |
cyt_ai_assist |
AI 辅助 | draft, summary |
cyt_notify |
消息通知 | 定时/事件触发 |
| 集合 | 说明 |
|---|---|
cyt_users |
用户信息(openid、昵称、头像、角色) |
cyt_topics |
课题(标题、描述、标签、发布者、成员) |
cyt_applies |
申请记录(课题、申请人、状态) |
cyt_updates |
课题进展(课题、内容、发布者、时间) |
cyt_comments |
评论(关联进展/课题、内容、时间) |
cyt_messages |
消息通知(用户、类型、内容、已读) |
-
在微信开发者工具里配置(推荐)
- 顶部菜单点击 「云开发」 打开云开发控制台
- 在控制台 「设置」 中查看 「环境 ID」(形如
xxx-xxxxx) - 工具会自动把当前选中的环境作为默认云环境
-
可选:在代码里写死环境 ID
- 打开
miniprogram/app.ts,修改CLOUD_ENV_ID - 在
wx.cloud.init()里加上env: CLOUD_ENV_ID
- 打开
-
若出现「模拟器启动失败」或「Failed to fetch」
- 检查本机网络、代理/VPN
- 查看开发者工具 「调试器 → Console」 和 「构建日志」
用微信开发者工具打开本项目,确认 AppID 配置正确。
若工具未识别云函数目录,在 project.config.json 中确认:
"cloudfunctionRoot": "cloudfunctions/"在云开发控制台 → 数据库中创建以下集合:
cyt_userscyt_topicscyt_appliescyt_updatescyt_commentscyt_messages
权限设置:「所有用户不可读写」(仅云函数可读写,更安全)
为以下字段建立索引以优化查询性能:
| 集合 | 索引字段 |
|---|---|
cyt_topics |
createdAt(降序)、updatedAt(降序) |
cyt_updates |
createdAt(降序)、topicId |
cyt_comments |
createdAt(降序)、targetId |
cyt_messages |
userId、createdAt(降序) |
在微信开发者工具中:
- 展开
cloudfunctions目录 - 右键每个
cyt_*云函数 - 选择 「上传并部署:云端安装依赖」(必须选这个,不是「上传并部署」)
- 等待部署完成
⚠️ 云函数部署只能在微信开发者工具中完成,不能在 VS Code / Cursor 中操作
云开发控制台 → 云函数:应能看到已部署的云函数,状态为「部署成功」。
在 cyt_topics 中手动添加测试数据:
{
"title": "示例课题",
"desc": "这是一个测试课题",
"tags": ["技术", "创新"],
"publisherId": "你的openid",
"createdAt": "2026-02-08T00:00:00.000Z",
"updatedAt": "2026-02-08T00:00:00.000Z"
}原因:模拟器下没有完整微信登录态
解决:
- 使用真机预览/真机调试
- 模拟器中确认已用微信扫码登录
原因:模拟器云调用问题
解决:
- 真机预览/真机调试
- 检查云函数是否部署成功
- 查看云函数日志排查错误
原因:云函数部署时未安装依赖
解决:重新部署,选择 「上传并部署:云端安装依赖」
| 层级 | 技术 | 说明 |
|---|---|---|
| 前端 | 微信小程序原生 | TypeScript + WXML + WXSS |
| 后端 | 云函数 Node.js | 业务逻辑、权限校验、AI 调用 |
| 数据库 | 云数据库 MongoDB | 文档型数据库 |
| AI | 云函数内 HTTP 调用 | DeepSeek 等大模型 API |
| 认证 | 微信云开发 | 微信登录,无需自建会话 |
当前 TabBar 配置:
| Tab | 页面 | 图标 |
|---|---|---|
| 首页 | pages/index/index |
tab_home.png |
| 发布 | pages/publish-topic/publish-topic |
tab_publish.png |
| 我的 | pages/profile/profile |
tab_profile.png |
选中色为品牌蓝 #0066ff,图标位于 miniprogram/images/tabbar/。
- 入参格式:
{ action, payload } - 响应格式:
{ success: true, data: {...} }或{ success: false, error: {...} } - 错误处理:统一 try/catch,返回错误码和消息
全局样式定义了丰富的 CSS 变量,页面样式应优先使用:
/* 推荐 */
.card {
background: var(--card-bg);
border-radius: var(--radius);
box-shadow: var(--shadow);
}
/* 不推荐 */
.card {
background: #ffffff;
border-radius: 20rpx;
box-shadow: 0 2rpx 20rpx rgba(0,0,0,0.06);
}- v1.0 — MVP 版本,完成核心功能
- 课题发布与浏览
- 申请加入与审核
- 进展与评论
- AI 构思助手
- 消息通知
- 管理面板
- 统一 UI 设计系统
MIT