主题
实验帮 LabCalc · 微信小程序(前端)
懂实验设计的科研计算助手 —— 不只算配药,还提醒你怎么做对照。 面向细胞 / 动物 / 斑马鱼方向的湿实验科研人员。
完整产品设计见
产品设计方案.md。后端见同级../labcalc-server。
一、技术栈
- 微信小程序原生(WXML / WXSS / JS),无构建步骤,直接导入开发者工具
- 纯前端计算离线可用;登录 / 云同步 / AI / 化合物搜索为联网增强(需后端)
- LC50 剂量-反应曲线用原生 Canvas 2D(未引入 ECharts,控制包体)
二、目录结构
labcalc-miniprogram/
├── app.json 全局配置(注册 43 页面 + tabBar + 全局组件 refs)
├── styles/icons.wxss 统一线性图标(脚本生成的 SVG data-URI,class="ic ic-<key>")
├── app.js / app.wxss 全局逻辑 + 设计令牌(#0f766e 主色)
├── project.config.json ★ AppID 填这里
├── utils/
│ ├── calc.js 浓度/稀释/百分比/给药/离心 纯计算
│ ├── calc-bio.js 溶剂对照/斑马鱼/Tricaine/显微注射
│ ├── calc-tox.js LC50/EC50(Probit + Reed-Muench)+ TI
│ ├── calc-animal.js 采血量 / 麻醉给药
│ ├── calc-cell.js 铺板 / 转染 / 血球计数
│ ├── api.js ★ 后端 BASE_URL 填这里
│ ├── auth.js 登录态 / token
│ ├── ui.js 复制 / 本地历史 / toast
│ └── records-store.js 实验记录本本地存储
└── pages/ 24 个页面(见下)页面清单(36 注册 + ai 暂下线保留)
| 分组 | 页面 | 联网? |
|---|---|---|
| Tab | index 工具首页、mine 我的 | 否 / 登录 |
| 浓度 | molarity 摩尔浓度、dilution 稀释、serial 梯度稀释、percent 百分比、solvent 智能溶剂对照★ | 否 |
| 动物 | animal(hub)、hed 种间换算、random 随机分组(ARRIVE)、dosing 批量给药、anesthesia 麻醉、blood 采血、vehicle 体内配方 | 否 |
| 斑马鱼 | zebrafish(hub)、zf-dpf 日历、zf-water 工作液配制★、zf-tricaine 麻醉、zf-inject 注射、zf-lc50 LC50/EC50★、zf-anatomy 部位/表型图谱 | 否 |
| 细胞 | cell(hub)、cell-plating 铺板、cell-transfection 转染、cell-count 计数 | 否 |
| 浓度计算 | concentration(hub)、mw 分子量、molarity 摩尔浓度(四向求解)、dilution 稀释、serial 梯度稀释(含log)、percent 百分比、solvent 智能溶剂★ | 否 |
| 分子生物 | nucleic(hub)、nuc-conc 核酸浓度、nuc-tm 引物Tm、nuc-amount 量换算、nuc-ligation 连接反应、qpcr 相对定量★ | 否 |
| 蛋白 | protein(hub)、prot-gel SDS-PAGE配胶、prot-curve BCA/Bradford标曲、prot-antibody 抗体稀释 | 否 |
| 试剂 | buffer 缓冲液/试剂配方库 | 否 |
| 通用 | centrifuge 离心、od OD600 菌液浓度/倍增时间 | 否 |
| 我的 | mine 我的、history 计算历史、records 记录本 | 否/登录 |
| 联网 | compound 化合物库 | 需后端 |
| 暂下线 | ai AI助手(代码保留、未注册,后续按情况补充) | — |
分享卡片:
utils/share.js可把结果画成品牌图调起分享菜单;已接入 dilution / serial / buffer,其余页面按同一模板(隐藏 canvas + onShare)即可扩展。
三、🚀 上传前自检清单(Checklist)
按顺序逐项确认。纯计算功能不需要后端,可先上线;登录/AI/化合物搜索随后端接通。
A. 必改的两处
- [ ] AppID —— 打开
project.config.json,把"appid": "touristappid"改成你的小程序真实 AppID (微信公众平台 → 开发 → 开发管理 → 开发者ID → AppID) - [ ] 后端地址 BASE_URL —— 打开
utils/api.js,把const BASE_URL = '';- 暂不上后端:保持空字符串(登录/AI/化合物会显示"待上线",其余照常) - 后端已部署:改成const BASE_URL = 'https://labapi.你的备案域名';
B. 开发者工具设置
- [ ] 用微信开发者工具打开本目录(labcalc-miniprogram)
- [ ] 右上角「详情 → 本地设置」:
- [ ] ES6 转 ES5:开启(项目已设
es6:true) - [ ] 增强编译:开启
- [ ] 上传代码时样式自动补全 / 压缩:可开
- [ ] 不校验合法域名…: · 备案未完成、本地联调后端时 勾上(绕过域名校验,仅开发期有效) · 正式上传审核前取消勾选,确保走真实合法域名
- [ ] ES6 转 ES5:开启(项目已设
- [ ] 基础库版本 ≥ 3.6.0(
project.config.json已设libVersion:"3.6.0")
C. 联网功能上线时(备案后端就绪后)
- [ ] 微信公众平台 → 开发 → 开发管理 → 服务器域名 → request 合法域名添加:
https://labapi.你的备案域名 - [ ]
utils/api.js的BASE_URL已改为该域名(见 A) - [ ] 后端
.env填入真实 WX_APPID + WX_APPSECRET (AppSecret:公众平台 → 开发管理 → 开发者ID → AppSecret,只存后端,绝不写进前端) - [ ] 后端按
../labcalc-server/deploy/README.md部署完成,/healthz返回 200
D. 功能自检(开发者工具模拟器逐页点)
- [ ] 首页分区排版(浓度计算 / 实验领域[斑马鱼领衔] / 通用工具)10 项图标正常、可进入
- [ ] 长按工具卡可收藏 → 首页「⭐收藏」置顶;复制后「我的→计算历史」有记录
- [ ] 首次启动弹引导浮层(只一次)
- [ ] 斑马鱼专区:简介卡 + 部位图谱(含侧视示意图+编号),图谱已前移到第 2 位
- [ ] 斑马鱼水体给药 24 孔预设 = 1 mL
- [ ] 斑马鱼水体给药:工作液配制模型(母液+E3水→总量+DMSO%+分装)
- [ ] OD600:菌液浓度(菌种系数)+ 倍增时间两栏均出结果
- [ ] 梯度稀释:填 C0/因子/点数/体积出各管浓度 + 转移/稀释剂方案
- [ ] 配方库:选配方 + 改体积,各组分按比例缩放;「分享到群」能生成卡片图
- [ ] 核酸计算 hub:浓度(A260)/引物Tm/量换算(ng↔pmol↔拷贝)/连接反应/qPCR 五子页均出结果
- [ ] qPCR:填对照+样本 Ct,可增删样本行,出 ΔΔCt/log2/2^-ΔΔCt(上调绿、下调红)
- [ ] 蛋白 hub:配胶(分离/浓缩切换出组分)/标准曲线(增删标准点+R²+反算)/抗体稀释 三子页均出结果
- [ ] 动物 hub 种间换算:选源/目标物种+剂量出 HED mg/kg + 总量(小鼠10→成人≈0.81 mg/kg)
- [ ] 摩尔浓度 / 稀释 / 百分比:随手输入有结果、可复制、公式可展开
- [ ] 动物给药:批量体重超 Diehl 上限标红
- [ ] 斑马鱼 LC50:填 4+ 组数据出曲线 + LC50/CI/TI
- [ ] 离心 rpm↔rcf 双向
- [ ] 细胞铺板/转染/计数
- [ ] 「我的」Tab:未配后端时点登录有友好提示;记录本可新建/编辑/删除(本地)
E. 提交审核
- [ ] 点开发者工具「上传」,填版本号 + 项目备注
- [ ] 公众平台 → 版本管理 → 提交审核
- [ ] 类目:选「工具」或「教育」,禁选医疗类目(个人主体)
- [ ] 审核备注里说明:科研计算工具,结果附"仅供科研参考"免责
四、⚠️ 合规红线
- 个人主体小程序只能注册工具 / 教育类,不得选医疗类目
- 文案不得宣称医疗 / 诊断 / 治疗功效
- 全站已内置免责:「结果仅供科研参考,不构成医疗或临床建议,以权威文献及本单位 SOP/IACUC 规程为准」
- 计算本地完成,不采集用户实验数据上云
五、本地预览(无需 AppID)
project.config.json 当前 appid 为测试号 touristappid,可直接在开发者工具里 真机预览体验纯计算功能;登录/AI/化合物需真实 AppID + 后端。
六、常见问题
| 现象 | 原因 / 处理 |
|---|---|
| 化合物搜索点了没反应 | 后端未配置(BASE_URL 为空),属预期降级,先手动填分子量 |
| 登录提示"云端服务待上线" | 同上,备案 + 部署后端后即可 |
| LC50 不出结果 | 需存在 0%~100% 之间的死亡组;剂量需 >0 且有梯度 |
| 上传报"域名不合法" | 取消勾选"不校验合法域名"前,须先在公众平台加 request 合法域名 |
| 记录本数据会丢吗 | 存本地 storage,卸载小程序会清;登录云同步上线后可跨设备 |