Medcord 项目集

Medcord·易录 —— 自托管、隐私优先的家庭病历管理系统。本仓库是 Medcord 项目的总索引;服务端代码位于 server/ 子目录,微信小程序端位于 miniapp/ 子目录,安卓/iOS 客户端规划中。


项目结构

子目录 用途 状态
server/ 服务端(Next.js 16 + PostgreSQL + pgvector) v0.4.4 已交付
miniapp/ 微信小程序(Taro + React + TypeScript) v1.0.1 已交付
AndroidApp/ 安卓 APP 规划中
iOS-APP/ iOS APP 规划中

Server

服务端详情请查看 server/README.md(开发、部署、API、版本演进等详细信息)。

概述

Medcord·易录是一套面向家庭场景的私有病历管理 Web 应用:以手机验证码登录,以家庭成员为档案主体,录入每次就诊记录(含报告图片等附件),由 AI 自动识别化验指标、生成结构化摘要,并支持跨成员的混合语义检索。

核心特性:手机验证码登录 · 成员权限矩阵 · AI 多模态录入 · 摘要三要素 · 混合语义检索(关键词 + pgvector 向量,RRF 融合)· 附件 AES-256-GCM 加密 · 管理后台 · 优雅降级。

版本演进

版本 要点
v0.3.4 数据库底座升级到 PG 18.6 + pgvector 0.8.6;首个 1Panel 应用商店包
v0.4.0 运行时升级 Node 24(trixie-slim);@types/node ^24;HEALTHCHECK 改用 node -e
v0.4.1 1Panel 打包重构:PostgreSQL/Redis 改 service 依赖,阿里云/短信/AI 凭证非必填
v0.4.2 1Panel 打包修复数据库破坏性删除:DB 连接改 5 个纯文本字段,绕开 deleteAppLink 自动建库
v0.4.3 成员详情页白屏修复:/api/members/{id} 与 /api/members/{id}/trend 重写为真实 handler(修复此前错位成 member-requests 的 Bug);fail() 支持 404
v0.4.4 里程碑 5「微信小程序登录」上线 + Web 端对齐 miniapp(D1–D5)+ 权限矩阵 race 修复:新增 POST /api/auth/wechat/login(code→openid,已绑定签发 7 天 JWT,未绑定下发 5 分钟一次性 openid_session 令牌)与 POST /api/auth/wechat/bind-phone(短信验证码绑定手机号);users.openid VARCHAR(64) + 部分唯一索引;1Panel 包新增 WX_APPID / WX_SECRET 非必填配置。同时修复 /api/auth/* 在 Next.js 16.3.1 Edge runtime 下 body 解析失败、附件物理文件丢失返回 410 Gone(attachments.is_orphan)、用户管理 PATCH 改 PUT(对齐服务端单一契约,含编辑弹窗 / 重置密码输入弹窗 / 启停)、附件在线预览(?disposition=inline)、搜索历史(localStorage 最近 10 条)、趋势图异常点着色、权限矩阵一键全开 useRef 化(消除 stale closure)

部署

  • 镜像源(本地 Registry 短标签):medcord-server + medcord-ocr(NAS 自托管 Gitea 内建本地 Registry;CI workflow 同步推送长格式 localhost:5000/arutera-docker/medcord-server 与短标签 medcord-server,NAS 本机直 pull 用短标签即可)。含独立 OCR Sidecar 容器。
  • 版本号命名:
    • main 分支 release tag:vX.Y.Z(如 v0.4.4),同时打 latest;
    • develop 分支 Web 页面侧边栏显示的版本号:vX.Y.Z_dev(如 v0.4.4_dev),与 main 同源的最近 tag 加 _dev 后缀。该命名仅用于 Web 页面显示(见 server/src/app/(dashboard)/layout.tsx 兜底值),与 docker build 参数、镜像标签版本号无关。
  • 1Panel 一键安装:通过 server/1panel-app/medcord/(当前唯一 0.4.4/ 目录,镜像 medcord-server:v0.4.4 + medcord-ocr:v0.4.4;表单含微信小程序 WX_APPID / WX_SECRET 非必填项)上传至 1Panel 「本地应用」(实际路径 /1p/1panel/resource/apps/local/medcord/),详见 server/产品说明书.md §18.3/§25
  • CI/CD:push 到 develop 构建 develop 镜像、push tag(v*)构建 {tag} + latest → Gitea Actions(.gitea/workflows/build-and-push-medcord.yml)自动构建并推送至本地 Registry(GitHub 端仅作双远端同步,GitHub Actions 已弃用)

技术栈

层级 技术
服务端 Next.js 16 (App Router) + TypeScript 5 + React 19
数据库 PostgreSQL 18.6 + pgvector 0.8.6(2560 维 halfvec HNSW)
缓存 Redis (ioredis)
OCR 独立 Sidecar 容器(@arcships/light-ocr)
大模型 MiniMax M3 / DashScope Embedding(可降级 mock)
短信认证 阿里云 Dypnsapi
部署 Docker Compose + 1Panel

详细文档


MiniApp(微信小程序)

与 服务端 配套的首个已交付客户端,里程碑 0–8 全部完成并通过逐里程碑验收。完整说明请查看 miniapp/README.md(快速开始、目录结构、里程碑交付、FAQ)。

概述

Medcord·易录微信小程序是服务端 Web 端的功能子集 + 移动场景增强:以验证码/密码登录,覆盖家庭成员列表与详情、AI 录入就诊(多附件上传 + 智能识别回填)、化验指标趋势图、就诊详情(AI Markdown 摘要 + 化验表格 + 附件预览)、跨成员混合语义检索、我的(改昵称/改密码/退出)、回收站,以及管理员的审批/权限矩阵/系统设置/用户管理/归档成员管理。

形态:Taro 3.6.35 + React 18 + TypeScript 5 微信小程序 · AppID wxc4ad1c9566d83af2 · API 基址 https://medcord.arutera.top · 主包 624KB/2MB 限额。

核心特性:验证码 + 密码双通道登录 · AI 录入就诊(multipart 多附件 + 识别回填)· ECharts 指标趋势图(异常着色 + 参考范围标线)· AI 摘要 Markdown 渲染 · 混合语义检索(防抖 + 历史记录)· 管理后台(审批/权限矩阵/系统设置/用户管理/归档)。

版本演进

版本 要点
v1.0.0 里程碑 0–8 全量交付:工程骨架(分包 + tabBar)→ 基础架构(请求/状态/路由守卫)→ 登录 → 成员与就诊时间轴 → 指标趋势图 → AI 录入与就诊详情 → 混合语义检索 → 管理后台 → CI 自动上传(miniprogram-ci)
v1.0.1 修复「我的」「管理」页相关问题:TextEncoder 惰性 polyfill(消除管理页白屏)、Switch _num 崩溃规避、用户详情缺失 id 拦截、settings 去除无脑 fetchMe 与全站 requireAuth() 守卫;配套 产品说明书.md 与 产品说明书-CodeReview报告.md

技术栈

维度 技术
框架 Taro 3.6.35(Webpack5)+ React 18 + TypeScript 5(strict)
状态 Zustand 4.x(persist + Taro storage 适配)
样式 Tailwind CSS 3.4 + weapp-tailwindcss 2.11.3(类名转义)+ postcss-rem-to-responsive-pixel(1rem=32rpx,750 设计稿)
组件 taro-ui 3.1.1(精确锁定)
图表 echarts 5.x(core 按需引入,LineChart + markLine)
网络 wx.request / wx.downloadFile(Bearer 鉴权 + 统一响应剥壳);自定义 multipart 上传

构建与部署

  • 本地开发:cd miniapp && npm install && npm run dev:weapp;生产构建 npm run build:weapp,产物输出至 miniapp/dist/(miniprogramRoot 已指向)。
  • 环境变量:.env.production 的 TARO_APP_API_BASE=https://medcord.arutera.top(变更域名仅改此文件)。
  • 合法域名(真机/上线必需):微信公众平台将 https://medcord.arutera.top 加入 request / uploadFile / downloadFile 三类合法域名。
  • CI/CD:push 到 main 触发 .gitea/workflows/deploy-miniapp.yml(miniprogram-ci 自动上传),此处 Gitea 与 Server 共用同一实例。

详细文档


AndroidApp

规划中。


iOS-APP

规划中。


许可证

私有项目,未指定开源许可证。

S
Description
Medcord·易录·自托管、隐私优先的家庭病历管理系统。
https://medcord.arutera.top/
Readme
2.9 MiB
2026-09-06 12:54:05 +08:00
Languages
TypeScript 92.6%
Shell 4.4%
JavaScript 1.5%
PLpgSQL 0.5%
Dockerfile 0.4%
Other 0.5%