# 项目长期记忆(kyj-yanglao-web-new)
## 项目身份
湖北省养老机构系统前端(yudao 框架:Vue3 + TS + Element Plus)。重点模块:九防看板、合同(湖北2024版)、入住登记、长期/临时医嘱单、护士执行医嘱。
## ⚠️ 登录页真实组件是 `src/views/Login/Login.vue`
- `components/LoginForm.vue`(yudao 原版)在 Login.vue 里**被注释掉**,改它不生效。真实页面用原生 `` + `.inputM/.inputS` 自定义样式,特征文案「账号登录/使用谷歌浏览器」
- 2026-09-23 已在 Login.vue 实现「记住密码」:企业名/账号下拉(Teleport 到 body + fixed 定位 + 点击外部关闭,不依赖 blur)、密码框下「记住密码」复选框;账号列表存 `src/utils/auth.ts` 的 SavedAccounts(localStorage,RSA 加密,365 天,上限 20 条),两处登录组件共用
## ⚠️ 两个踩过的坑(改登录/记住密码相关代码前必看)
1. `utils/auth.ts` 的 `setLoginForm()` 曾**原地改写传入对象**(`password = encrypt(...)`)→ 后续再拿同一表单去存账号会**二次加密**导致密码永久丢失。
已改成 `{ ...loginForm, password: encrypt(...) }`。**教训:写枚举/工具函数不要就地修改入参**
2. 自绘下拉面板不要用 `absolute` 放在本项目 `overflow:auto` 容器里(会撑出滚动条触发重排→失焦→面板关闭);
用 `Teleport to="body"` + `fixed` + `getBoundingClientRect()` 定位,关闭逻辑用 `document.mousedown` 判定而不是 blur
## 医嘱模块(2026-08 搭建)
- 长期医嘱 `long-doctor-order/`:长者 + 多条 entries 子表,条目含 status 启用/停止
- 临时医嘱 `short-doctor-order/`:一次性,无启停,含 executeTime
- 护士执行 `execute-doctor-order/`:前端按频次展开待执行行 + 执行/跳过弹窗 + 打印 Dialog(v-print 走可见 Dialog,禁止离屏)
- API 集中在 `src/api/elderly/elder/bed-change/index.ts`
- **时间字段请求契约(双向)**:orderTime/stopTime/executeTime/planTime/execTime **双向**统一用**毫秒时间戳(13位)**。
- 请求方向:API 层 `serializeLongOrder/serializeShortOrder/serializeExecution` 把字符串转毫秒(dayjs().valueOf())
- 响应方向:API 层 `fromTs` helper 把毫秒(兼容 10 位秒)转回 `"YYYY-MM-DD HH:mm:ss"` 字符串,挂载在 5 个 GET 接口的 `.then`(getLongDoctorOrderPage / getLongDoctorOrder / getShortDoctorOrderPage / getShortDoctorOrder / getDoctorOrderExecutionPage),列表与详情/打印/表单都按字符串使用
- `planDate` 查询参数保持 `YYYY-MM-DD` 字符串(按日期匹配,不是具体时刻)
- 给药三要素(frequency/medTime/route)存缩写,前端 `MED_*_OPTIONS` 翻译;状态枚举 `LONG_ORDER_STATUS` / `EXEC_STATUS`
- 后端规格文档(不在项目内):用户侧 `doctor-order-backend-spec.md`,已交付后端
## 用户偏好 / 约定
- ⚠️ **保持项目目录整洁**:非源码文件(.md 规格、交付物等)不要 Write 到项目根;交付文档走用户指定位置或先问
- 打印页(v-print)打印区必须在可见 `