Skip to content

Repository files navigation

CYT — 创研通 科研协作社区

微信小程序 + 云开发(云函数 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 管理员数据监控、课题管理

UI 设计系统

项目采用统一的设计系统,确保视觉一致性和高质量的用户体验。

色彩体系

类型 颜色 用途
品牌蓝 #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 配置

  1. 在微信开发者工具里配置(推荐)

    • 顶部菜单点击 「云开发」 打开云开发控制台
    • 在控制台 「设置」 中查看 「环境 ID」(形如 xxx-xxxxx
    • 工具会自动把当前选中的环境作为默认云环境
  2. 可选:在代码里写死环境 ID

    • 打开 miniprogram/app.ts,修改 CLOUD_ENV_ID
    • wx.cloud.init() 里加上 env: CLOUD_ENV_ID
  3. 若出现「模拟器启动失败」或「Failed to fetch」

    • 检查本机网络、代理/VPN
    • 查看开发者工具 「调试器 → Console」「构建日志」

本地运行

1. 打开项目

用微信开发者工具打开本项目,确认 AppID 配置正确。

2. 配置云函数目录

若工具未识别云函数目录,在 project.config.json 中确认:

"cloudfunctionRoot": "cloudfunctions/"

3. 创建数据库集合

在云开发控制台 → 数据库中创建以下集合:

  • cyt_users
  • cyt_topics
  • cyt_applies
  • cyt_updates
  • cyt_comments
  • cyt_messages

权限设置:「所有用户不可读写」(仅云函数可读写,更安全)

4. 建立索引

为以下字段建立索引以优化查询性能:

集合 索引字段
cyt_topics createdAt(降序)、updatedAt(降序)
cyt_updates createdAt(降序)、topicId
cyt_comments createdAt(降序)、targetId
cyt_messages userIdcreatedAt(降序)

5. 部署云函数

在微信开发者工具中:

  1. 展开 cloudfunctions 目录
  2. 右键每个 cyt_* 云函数
  3. 选择 「上传并部署:云端安装依赖」(必须选这个,不是「上传并部署」)
  4. 等待部署完成

⚠️ 云函数部署只能在微信开发者工具中完成,不能在 VS Code / Cursor 中操作

6. 验证部署

云开发控制台 → 云函数:应能看到已部署的云函数,状态为「部署成功」。

7. 添加种子数据(可选)

cyt_topics 中手动添加测试数据:

{
  "title": "示例课题",
  "desc": "这是一个测试课题",
  "tags": ["技术", "创新"],
  "publisherId": "你的openid",
  "createdAt": "2026-02-08T00:00:00.000Z",
  "updatedAt": "2026-02-08T00:00:00.000Z"
}

常见问题

报错 41001(access_token missing)

原因:模拟器下没有完整微信登录态

解决

  1. 使用真机预览/真机调试
  2. 模拟器中确认已用微信扫码登录

登录/提交显示「网络异常」

原因:模拟器云调用问题

解决

  1. 真机预览/真机调试
  2. 检查云函数是否部署成功
  3. 查看云函数日志排查错误

Cannot find module 'wx-server-sdk'

原因:云函数部署时未安装依赖

解决:重新部署,选择 「上传并部署:云端安装依赖」

技术栈

层级 技术 说明
前端 微信小程序原生 TypeScript + WXML + WXSS
后端 云函数 Node.js 业务逻辑、权限校验、AI 调用
数据库 云数据库 MongoDB 文档型数据库
AI 云函数内 HTTP 调用 DeepSeek 等大模型 API
认证 微信云开发 微信登录,无需自建会话

TabBar 配置

当前 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 变量使用

全局样式定义了丰富的 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 设计系统

License

MIT

About

人大创研通

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages