来源：https://basicapp.docs.xihanfun.com/changelog

# 更新日志 · XiHan.BasicApp

本文件记录 XiHan.BasicApp 各版本的变更。每条标注 **新增 / 修复 / 优化 / 调整 / 升级 / 移除** 类别。只收录使用者可感知的变更，仓库自身的配置、CI 与测试工程不列入。升级前请留意「调整」类中的破坏性变更。

## v5.9.1 (2026-10-23)

::: warning 升级须知
本次权限条件开始参与鉴权，并新增访问策略，有数据库变更；反向代理不在本机的部署要补受信代理配置。**升级前请备份平台库。**

5.9.0 没有单独发布稳定版：从 v5.8.0 直接升到本版的，还要按 [v5.9.0-rc.1 的升级须知](#v5-9-0-rc-1-2026-10-22)处理打印模板、直打客户端与 XiHan.UI 5.0.0 的改名，启动时依次执行 `UpdateScripts/5.9.0` 与 `5.9.1`。

- **数据库**：随附 `UpdateScripts/5.9.1`，可重复执行，与以往一样由启动时的升级检查自动执行。访问策略、访问策略条件两张表与按月分表的条件命中记录由建表步骤新建；脚本只删除开发版本里出现过的参数 `saas.security.ip-blacklist`，正式版本的库里没有这一行。权限条件表结构不变
- **权限条件**：挂在角色授权与用户直授上的条件从本版起参与鉴权，写在授予上是满足才授予，写在禁止上是满足才禁止，不满足返回 403「当前条件下不允许此操作」。生效模式 `Saas:PermissionConditions:Mode` 缺省 `Enforce`。**存量里配过条件的部署，升级前先设为 `LogOnly`**：照常求值但不拦截，本该拒绝的请求记进「审计中心 → 条件命中」；升级后在「身份权限 → 权限管理」的条件盘点里看诊断、用条件试算确认影响，再改回 `Enforce`。`Disabled` 只作应急。平台超管与租户所有者不受权限条件约束，要限制他们用访问策略，见[权限模型 · 权限条件](backend/permission.md#权限条件-syspermissioncondition)
- **条件写法**：条件属性改为登记制，保存与重新启用时校验属性已登记、运算符适用、条件值能解析；存量里不合规的条件不改写，但改不了也启用不了，直到改对为止。`subject.role`、`subject.department`、`resource.permissionCode`、`environment.location` 作为旧名照常可用，编辑时提示改用的新名。数据行属性（`resource.<字段>`）要由业务模块按权限码登记后才能用，没登记的所在条件组恒不满足。时间类属性按新配置 `Saas:Conditions:TimeZone`（缺省 `Asia/Shanghai`）计算
- **反向代理**：客户端 IP 只采用转发头中间件按受信代理还原后的地址，不再直接读 `X-Forwarded-For`、`X-Real-IP`。代理与应用不在同一台主机（另一台主机上的 nginx、容器网络里的网关、云负载均衡）的，**升级后必须**在 `XiHan:Web:Api:ForwardedHeaders` 里配置代理地址 `KnownProxies` 或网段 `KnownNetworks`，多级代理同时调大 `ForwardLimit`，否则日志、会话、访问策略与自动封禁看到的客户端 IP 都是代理的地址；配置写错时启动失败。同机经本机回环转发的不用改，见[配置 · 受信代理](configuration.md#api-forwardedheaders)
- **访问策略**：平台初始化写入六条预置策略，只记录的三条（非工作时间、境外、爬虫与脚本）启用，拒绝的三条（IP 黑名单、管理员只能在办公网、敏感操作限定网络）停用，升级后不会拦截任何请求；模板里的办公网段是文档保留网段，启用前换成真实网段。登录失败自动封禁缺省关闭。误封自己时用总开关 `Saas:AccessPolicy:Enabled` 解围，见[部署 · 误封了自己](deployment.md#误封了自己)
- **权限与套餐**：新增权限码 `saas:access-policy:*`（查看、新增、编辑、启停、删除、试运行、解除封禁）、`saas:access-policy-hit:read` 与 `saas:permission-condition:trial`，菜单「系统管理 → 访问策略」「审计中心 → 条件命中」由菜单种子补入。**已有套餐不会自动带上新权限码**：要给租户开放的，到「租户管理 → 版本套餐」给套餐勾上，再给租户角色授权；新初始化的专业版、企业版套餐已含（解除封禁只在平台）
- **登录方式**：登录页的方式切换栏只列参数 `saas.auth.login` 的 `methods` 开放的方式，缺省只有账号密码 `password`，之前四个入口一律显示。登录页上要保留邮箱验证码登录的，升级后到「参数配置」把 `email` 加进 `methods`；开放手机号验证码登录（`phone`）还要配好平台默认短信网关，阿里云、腾讯云网关的模板映射里要有 `auth-sms-login-code`，见[认证 · 手机号验证码](backend/authentication.md#手机号验证码)
- **登录失败计数**：失败登录从本版起写登录日志并累加账号失败次数，此前随事务回滚丢失，「输错次数达到上限锁定账号」从没生效过；升级后连续输错的账号会按锁定规则被锁，需要时在用户管理里解锁
- **接口**：登录结果 `LoginResult` 新增 `AccessDenied`（6，访问策略拒绝）。被访问策略拒绝的请求返回 403「访问被安全策略拒绝。」，登录时被拒绝提示「当前网络或时段不允许登录。」，自动封禁中的 IP 返回 429 并带 `Retry-After`。新增匿名接口 `POST /api/Auth/PhoneLoginCode`、`POST /api/Auth/PhoneLogin`，`methods` 里没有 `phone` 时两个接口都拒绝
- **依赖**：后端随附 XiHan.Framework 4.8.0
:::

- **新增** 访问策略：按 IP、地区、时段、User-Agent、路径、用户、角色、客户端类型、接口权限码等条件放行、拒绝或只记录请求，分平台与租户两层，在认证前、认证后与登录时求值，平台超管同样受约束；从六条预置模板新建，新建一律只记录，可试运行已保存的策略或编辑中的条件，启用拦截前先用当前请求试一次、会拦下自己的不保存。见[访问策略](backend/access-policy.md)
- **新增** 登录失败自动封禁：同一 IP 在计数窗口内跨账号登录失败达到上限即暂时封禁，24 小时内再犯时长翻倍；在访问策略页查看当前封禁、解封并改参数，缺省关闭
- **新增** 条件命中记录（「审计中心 → 条件命中」）：访问策略与权限条件的命中按分钟合并留痕，可从访问策略跳过来只看某一条，接入日志链路追踪
- **新增** 权限条件参与鉴权：角色授权与用户直授上的条件按当前请求求值，含数据行属性的条件在模型绑定之后按数据行补算；条件的增删改与启停即时生效，并记一条「授权条件变更」权限变更日志。见升级须知
- **新增** 权限条件的编辑、盘点与试算：角色、用户页的「授权条件」抽屉按授权编辑条件并试算受影响的人，权限页的「条件盘点」逐条诊断存量条件并可导出 CSV，「条件试算」给出某人某权限在模拟的时间、IP 等上下文下的结论与逐条取值；分配权限的穿梭框标出有条件的授权
- **新增** 手机号验证码登录：登录页的「手机登录」可用（此前接口不存在、一直 401），只认账号上验证过的手机号，同号在多个账号上都验证过时提示改用账号密码；短信经平台默认网关与登录验证码模板发送，网关没配好时发码直接报错。见[认证 · 手机号验证码](backend/authentication.md#手机号验证码)
- **新增** 演示开关 `Saas:Seed:EnableDemoData` 下的演示流程：示例企业里创建并发布费用报销、请假、采购、入职四个流程，覆盖可演示的全部节点种类与九种受理人规则。见[工作流 · 演示流程](backend/workflow.md#演示流程)
- **新增** 演示开关下的打印演示：五个演示数据源与六张平台全局模板，对应打印设计器文档站的模板示例，另有一张「打印元素总览」摆出全部元素种类。见[打印模板 · 演示模板](backend/printing.md#演示模板)
- **调整** 登录页的方式切换栏按登录设置显示，只列开放的方式，只开放一种时也显示这一个标签；缺省只开放账号密码，见升级须知
- **调整** 客户端 IP 只认受信代理还原后的地址，客户端无法再伪造日志、会话里的 IP 与归属地；代理不在本机的须配置受信代理，见升级须知
- **修复** 登录失败不写登录日志、账号失败次数始终为 0，「输错次数达到上限锁定账号」不生效：失败的工作单元回滚把这些写入一并丢掉了。密码、邮箱、手机号登录与两步验证都已改正，见升级须知
- **修复** 审批详情点「加签」报 404
- **修复** 个人中心「开发者」页删除 API 凭证，以及「我的 OAuth 应用」的删除与重置密钥，报「请求的资源不存在」
- **修复** 部分 Linux 节点（新版 tzdata 不再带 `Asia/Calcutta`、`Europe/Kiev` 这类旧时区别名）上，编号规则的时区是旧别名或对应的 Windows 时区 ID 时，保存、预览与发号报「规则时区无效」
- **修复** 数据库升级的维护期间，维护模式没有拦住业务请求：命中路由的请求照常进入，改为在请求管线最前返回 503
- **修复** IPv6 客户端的登录地址与归属地一直为空
- **升级** 后端 XiHan.Framework 升至 4.8.0
- **升级** 发布 v5.9.1

## v5.9.0-rc.1 (2026-10-22)

::: warning 升级须知
本版是 5.9.0 的候选版本：打印与流程设计器整体换成 XiHan 打印设计器与 XiHan 流程设计器，有数据库变更，前端二次开发要跟上 XiHan.UI 5.0.0 的破坏性改名。**升级前请备份平台库。**

- **数据库**：随附 `UpdateScripts/5.9.0`，可重复执行。`XiHan:Upgrade:EnableAutoCheckOnStartup` 开启（缺省）时，启动在建表之后、播种之前对平台库与各数据库隔离租户库逐库自动执行，执行失败即中断启动；关掉该开关的，须先手工执行再启动。新建的库直接登记为最新版本，不跑本次脚本。脚本内容：打印模板表删除记录 hiprint 引擎版本的 `engine_version` 列（打印模板只在平台库建表，独立库上整段空转）
- **打印模板**：模板 JSON 改存 XiHan 打印设计器的格式（`schemaVersion` 为 1），**存量的 hiprint 模板不迁移**：在「打印模板」页打开时换成空白模板并提示，重新设计保存后覆盖；重新设计之前，按编码打印这些模板会明确报格式错误
- **直打**：打印机列表与静默直打改用 [XiHan 打印客户端](https://print.docs.xihanfun.com/guide/client)，每台要直打的电脑安装并运行客户端，原 hiprint 客户端与 `VITE_HIPRINT_HOST` / `VITE_HIPRINT_TOKEN` 不再使用。网站第一次连接时，客户端在桌面上弹出授权窗口，允许后才能打印；Chrome / Edge 147 起，网页连接本机客户端前还要先过浏览器的本机网络访问授权（每个网站询问一次），生产站点须用 HTTPS，页面嵌在 iframe 里时每层 iframe 都要允许 `loopback-network`。连不上、未授权或打印机出错时按原因提示，不退回浏览器打印，见[打印模板](backend/printing.md)
- **接口**：打印模板的 DTO 与命令去掉 `EngineVersion`；服务端保存校验改为结构检查：模板 JSON 须是对象、`schemaVersion` 为 1、`pages` 为非空的对象数组，完整校验由前端设计器在保存前做
- **流程定义**：存量定义原样打开、不迁移，节点坐标照旧存在 `extraProperties.designerLayout`，旧版受理人写法照旧在打开时并入受理人规则
- **二次开发**：
  - 打印：`@xihan/printing` 的 `previewPrintByCode`、`directPrintByCode`、数据源注册与目录、打印机偏好入口与签名不变；hiprint 适配与 `vue-plugin-hiprint` 依赖删除，读到旧格式模板 JSON 时抛 `PrintTemplateFormatError`
  - 流程：设计器与查看器换成 `@xihan-flow` 的 `<xh-flow-designer>` / `<xh-flow-viewer>`，X6 封装 `@xihan/diagram`（`packages/diagram`）与 `@antv/x6` 依赖删除，只看流程图的页面改用 `~/designers/flow`
  - 跟上 XiHan.UI 5.0.0 的破坏性改名（见 [XiHan.UI 升级须知](https://ui.docs.xihanfun.com/changelog#v5-0-0-2026-10-21)）：菜单族（Menu、ContextMenu、Menubar 等）的选中事件 `select` 改为 `item-select`，条目行首内容（`item-prefix` 插槽）落到 `item-icon`、随条目字色，`item-indicator` 只当对号；Popconfirm 的取消事件 `cancel` 改为 `cancel-press`；Tree 的 `multiple` 改为 `selectionMode`；`formatHotkey`、`matchesHotkey`、`detectKbdPlatform` 移出 headless，改从 `@xihan-ui/core/hotkey` 引入。BasicApp 自带的 `XDropdown`、`TabbarContextMenu`、`XPopconfirm` 对外事件与 `XTree` 的 `multiple` 属性不变，直接用 XiHan.UI 组件的代码须照改
- **依赖**：后端随附 XiHan.Framework 4.7.1（自写的动态 API 在 `POST` / `PUT` / `PATCH` 上靠查询串传集合参数的，需给参数加 `[FromQuery]`，BasicApp 自带接口不受影响）；前端随附 XiHan.UI 5.1.0、XiHan 打印设计器与 XiHan 流程设计器 1.0.0-rc.2，已有 `node_modules` 须重新 `pnpm install`
:::

- **调整** 打印模板的设计换成 XiHan 打印设计器：画布、物料、页面模板、标尺、属性面板、问题列表、撤销重做与 JSON 编辑由设计器提供；数据源字段列在物料面板的「字段」一组，拖上画布就是绑好字段的元素（图片、条码、二维码字段生成对应元素，明细生成表格），自由模板可导入字段与示例数据；保存、样例预览、直接打印与打印机并进设计器菜单栏，模板名称与编码在菜单栏正中，所绑数据源与保存状态在状态栏，右上角关闭；有错误级问题时拦下保存，改了又撤销回原样即显示已保存。见升级须知
- **调整** 流程设计器与查看器换成 XiHan 流程设计器：画布、带图标的节点面板、属性面板、流程结构、问题列表、撤销重做、缩放、对齐分布与自动布局（缺省自左而右）由设计器提供，启动变量用设计器内建的编辑器，连线条件可一键填入源节点的常见结果，人工任务只显示受理人规则；保存与导出 PNG / SVG 在菜单栏，导出的图片按流程编码命名，引擎定义 JSON 只在开发者模式下出现在「文件」菜单；流程定义预览与实例轨迹改用同一套查看器
- **调整** 打印模板与流程定义的「编辑」和「设计」分开：名称、分类、描述、数据源等元数据在列表页的「编辑」弹窗里改，「设计」满屏打开设计器、只管版面与流程图；新建先在弹窗里填好，建好空白模板或草稿后直接进设计器
- **调整** 直打改用 XiHan 打印客户端，网站首次连接需在客户端里授权，浏览器另需本机网络访问授权，见升级须知
- **新增** 打印与流程设计器的设置（语言、主题色、菜单栏、状态栏、自动保存、开发者模式、面板布局与工具栏）存进用户设置，跨端同步；设计器界面按应用语言切换；开着自动保存时未保存的设计存为本机草稿，保存后自动删除
- **修复** 打印模板列表的「设计」、样例预览与样例直打打不开已有模板：模板详情接口一律返回 404
- **修复** 开着跨端同步时，另一台设备推来同一页的设置或首次拉取失败之后，本端再改的表格设置、搜索设置、个人视图与仪表盘，重新打开页面时读回旧值
- **修复** 模仿登录横幅在暗色下文字糊在暗琥珀底上：改用与通知横幅同一套警示配色
- **优化** 文档站生态导航补「设计器」一组，加公告横幅，文档主题升至 1.2.1；架构图跟上设计器替换
- **移除** hiprint 打印引擎（`vue-plugin-hiprint`）与 X6 流程图封装（`@xihan/diagram`、`@antv/x6`），打印模板的引擎版本字段一并删除，见升级须知
- **升级** 前端 XiHan.UI 由 4.2.0 升至 5.1.0：亮色主题的警告色加深一档，菜单条目的图标随条目字色（危险条目随字转红）；二次开发须跟上 5.0.0 的改名，见升级须知
- **升级** 后端 XiHan.Framework 升至 4.7.1；前端接入 XiHan 打印设计器与 XiHan 流程设计器 1.0.0-rc.2
- **升级** 发布 v5.9.0-rc.1

## v5.8.0 (2026-10-15)

::: warning 升级须知
本次审批统一改走工作流，Saas 自带的「系统审查」整体撤掉，有数据库变更，后端接口与前端二次开发接口都有破坏性变更。**升级前请备份平台库与全部数据库隔离租户库。**

- **数据库**：随附 `UpdateScripts/5.8.0`，可重复执行。`XiHan:Upgrade:EnableAutoCheckOnStartup` 开启（缺省）时，启动在建表之后、播种之前对平台库与各数据库隔离租户库逐库自动执行，执行失败即中断启动；关掉该开关的，须先在每个库上按版本顺序手工执行再启动。新建的库直接登记为最新版本，不跑本次脚本。脚本内容：
  - 删除系统审查的 `sys_review`、`sys_review_log` 两张表，旧审查单与审查日志不迁移
  - 权限申请表以 `workflow_instance_id`（审批流程实例）取代 `review_id`。**仍在待审批的存量申请统一置为「已撤回」**，备注写明原因，需要的请申请人重新提交，走新的审批流程；已批准、已拒绝等已完结的申请保持原样
  - 删除 `saas:review:*` 与 `saas:review-log:read` 共 9 个权限码，连同它们在角色、用户、版本套餐、权限委托里的授权，以及申请这些权限的权限申请；引用它们的菜单解除权限绑定，权限变更日志保留原样
  - 删除平台菜单「审批 → 审批中心」（系统审查，`/approval/review`）与「工作台 → 我的待办」（`/workflow/todo`）及其按钮。新的「审批 → 审批中心」（`/approval/center`）由菜单种子补入，「审批」目录默认打开「审批约束」
  - 工作流实例新增「流程结果」列与按发起人查询的索引，存量实例的结果为空；审批记录表由建表阶段新建。「我已审批」「抄送我的」只收录升级后产生的办理与抄送
  - 菜单标签类型换成新取值：`default` → `neutral`、`primary` → `brand`、`error` → `danger`，`info` / `success` / `warning` 不变，其余无法识别的值清空，按未设置处理
- **权限**：权限申请由「权限申请」流程的受理人审批，不再凭 `saas:permission-request:status`。默认流程在租户第一次提交权限申请时自动建好并发布，只有租户所有者（平台为超级管理员）能审批；原先靠该权限码审批的其他角色，需在「工作流 → 流程定义」给「权限申请」新建版本、调整受理人规则后发布。审批人仍须有权授出所申请的角色或权限。审批中心不绑权限码，「审批」目录对所有登录用户可见
- **接口**：
  - 删除 `Review`、`ReviewQuery`、`ReviewLogQuery` 三个服务，以及 `PermissionRequest/ApprovePermissionRequest`、`PermissionRequest/RejectPermissionRequest` 与 `PermissionRequestApprovalDto`。审批改在审批中心办理：待办与办理仍是 `WorkflowTodo`，我已审批、抄送我的、我发起的与审批详情走 `WorkflowApprovalQuery`，发起人撤回走 `WorkflowApproval/Withdraw`
  - 权限申请 DTO 的 `ReviewId`、`ReviewCode`、`ReviewTitle`、`ReviewDescription`、`ReviewStatus`、`ReviewResult` 换成 `WorkflowInstanceId` 与审批进度 `Workflow`，分页查询与状态更新去掉 `ReviewId`
  - 工作流 DTO 的时间字段由 `DateTime` 改为 `DateTimeOffset`，返回值带时区偏移
  - 菜单的 `badgeType` 只接受 `neutral`、`brand`、`info`、`success`、`warning`、`danger`，传旧值会被拒绝
- **二次开发**：
  - 后端 Saas 的 `SysReview` / `SysReviewLog` 实体、`IReviewDomainService` 与对应仓储删除。业务单据要走审批的，实现 `IWorkflowBusinessHandler` 接入工作流，见[审批业务接入](backend/workflow.md#审批业务接入)
  - 权限申请依赖工作流模块：宿主去掉工作流模块后，权限申请的提交、列表与详情都会报「工作流模块未启用」
  - 前端删除 `reviewApi`、`approvalManagementApi`、`review.types.ts`、`REVIEW_STATUS_OPTIONS` / `REVIEW_RESULT_OPTIONS` 与 `permissionRequestApi.approve` / `reject`
  - Schema 页面操作的 `type`（`primary` / `error` 等）改为 `tone`，取 XiHan.UI 的语气词（`brand` / `danger` 等）；`TableDensity` 改为 `sm` / `md` / `lg`，`TableStyle.singleLine` 改为 `ruled`（含义相反），本地与跨端同步里旧版存下的表格设置读到时自动换算；灵动岛按钮语气 `default` / `primary` 改为 `neutral` / `brand`
- **流程定义**：人工任务的受理人改按规则配置。旧流程里的 `Assignees`、`AssigneesExpression`、`CcUserIds` 在设计器打开时并入受理人规则，保存即为新写法，已发布的版本照常运行
- **站内通知**：升级前产生的待办、转办通知仍链接到已删除的「我的待办」（`/workflow/todo`），点开找不到页面，到「审批 → 审批中心」办理即可
- **依赖**：后端随附 XiHan.Framework 4.7.0（审批流程用到其受理人规则与结果结束节点），前端随附 XiHan.UI 4.2.0，已有 `node_modules` 须重新 `pnpm install`
:::

- **新增** 审批中心（「审批 → 审批中心」，`/approval/center`）取代「工作台 → 我的待办」，登录即可见：待我审批、我已审批、我发起的、抄送我的四个页签；详情抽屉依次是概要、业务单据、办理区与只读竖向步骤条式的审批轨迹，可同意 / 驳回 / 转办 / 加签并填写意见，发起人可撤回进行中的流程；待办、转办、抄送与流程故障的站内通知直接打开对应页签
- **新增** 流程设计器的人工任务按规则选审批人：指定用户、角色、部门成员、部门负责人、岗位、发起人本人、发起人的第 N 级上级或逐级上级、表达式，可多条组合；另可设置跳过发起人本人、找不到受理人时的处理（流程报错 / 自动通过 / 自动驳回 / 转交兜底受理人）、兜底受理人与抄送人。角色、部门、岗位按编码引用，用户可远程搜索
- **新增** 业务单据可接入审批流程：与审批业务同编码的流程即该业务的审批流，设计器里可绑定审批业务，每个结束节点须声明结果（通过 / 驳回）才能发布，流程结束后结论自动回写单据；租户首次发起时按业务的默认模板自动建好并发布流程。流程定义列表标出关联业务，流程实例列表与详情显示流程结果
- **新增** 授权申请页补上「发起申请」：选择角色或权限，填期望有效期、原因与备注，提交即进入审批流程（此前后端有接口与按钮码，页面没有入口）
- **修复** 办理待办、取消或终止流程实例时报「数据已被其他操作修改」：同一流程的运行时数据从第二次更新起被当成并发冲突
- **修复** 流程定义的发布时间、流程实例的开始 / 结束时间与待办时间比实际多出服务器所在时区的偏移（东八区多 8 小时）
- **修复** 授权申请、权限委托与权限中心里，成员没填租户内显示名时申请人、委托人、接收人显示成用户主键：改为依次取账号的真实姓名、昵称、用户名
- **修复** 流程设计器在窄窗口里工具栏按钮挤压重叠、溢出对话框：工具栏分左右两组，放不下时整组换行；三栏放不下时节点面板与属性面板收成浮在画布上的抽屉，由工具栏开关，选中节点即打开属性、点空白收起；点击添加的节点不在视野内时画布平移过去
- **修复** 流程设计器的画布与 JSON 视图下方留出大块空白、JSON 视图出现两条滚动条：两个视图铺满工具栏以下的高度
- **修复** 流程设计器切到 JSON 视图时控制台报小地图错误；暗色下画布缩略图是一块白板
- **修复** 流程设计器自动布局、应用 JSON 后画布上残留旧连线与端口，每操作一次翻一倍；自动布局改为只移动节点，选中状态与撤销历史保留
- **修复** 日志列表与详情里跳转链路追踪的文字链铺成一块按钮底：只留品牌色文字，悬停加下划线
- **修复** AI 提供商表单里清单之外的供应商填不进去：恢复可自填，输入后回车或离开即收下；公共组件 `XCombobox` 新增 `allowCustomValue`
- **修复** 菜单标签在侧栏与菜单管理页颜色对不上：侧栏不认「主要」、退成中性，菜单管理页未设类型时圆点是灰的、侧栏却是红的。标签类型改为中性 / 品牌 / 信息 / 成功 / 警告 / 危险六种，两处同色，存量取值由升级脚本换算
- **修复** 用户列表与用户详情的头像是灰底黑字，与顶栏的品牌色头像对不上：全应用统一为同一种头像
- **修复** 顶栏用户菜单钮与旁边的上下文切换钮圆角、高度与悬停效果不一致；顶栏按钮用键盘聚焦时看不到焦点环
- **修复** 多处颜色不随主题与深浅色变化：打印模板设计器与设置抽屉、任务调度的异常信息、顶部通知横幅写死了浅色或旧组件库的固定色；关于页、服务监控、我的消息、知识库、通知公告等处的次要文字与卡片底引用了不存在的样式变量，一直没有生效；暗色下打开过打印模板设置后，全应用的表头都被改了颜色。这些地方改用 XiHan.UI 语义令牌，仪表盘公告的类型配色也与通知公告、我的消息的类型标签统一
- **调整** 权限申请改由工作流审批：提交即发起「权限申请」流程，默认由租户所有者（平台为超级管理员）审批、申请人不审批自己的申请，可在流程定义里新建版本调整审批人；通过即自动授予角色或权限，驳回即置为已拒绝；修改申请会撤回原流程、按新内容重新发起，撤回、删除或手工改到终态会撤回进行中的审批。授权申请列表与权限中心的申请明细显示审批进度，可跳到审批中心查看轨迹；授权申请页的「通过」「驳回」按钮移除，改在审批中心办理，见升级须知
- **调整** 详情类描述列表统一为参数配置详情的样式（描边、标签在上、紧凑尺寸）：文件、任务调度、编号规则、消息模板与通知、版本、流程定义与实例、代码生成历史、日志与审批详情不再各用一套
- **优化** 日志详情（9 个日志页共用）改为「摘要抬头 + 分组」：抬头直接写出做了什么与结果（结果带配色，耗时、状态码成标签），下一行是操作人、时间与 IP；其余字段按详情、请求、客户端、运行环境、处理、追踪与标识分组，空值和抬头里已有的字段不再重复；主键、追踪标识等长值等宽显示可复制，链路追踪 ID、会话标识、用户名、IP 点开即按该维度查链路追踪；请求体、堆栈等原始数据排在最后，JSON 展开成树。列表与详情的结果、类型、等级配色一致
- **优化** 流程设计器的属性、节点与连线三块面板按「抬头 → 分节 → 字段」重排：节点属性分「基本 / 参与人 / 表单与结果 / 执行策略」，连线分「基本 / 流转条件」，分节标题写在分隔线中间；兜底受理人只在「转交兜底受理人」时出现，完成策略与找不到受理人时两个下拉的占位写出缺省值；节点面板条目可用键盘添加（仍可拖到画布）；工具栏流程名称为主、编码为辅
- **优化** JSON 展示块（日志详情、审批详情、审批约束、流程定义与实例）改用查看器内建工具条：展开 / 收起全部、树与原文切换、自动换行与复制；原文视图与复制取后端下发的原文，64 位 ID 这类大整数不会因解析而失真，解析不成树的内容直接按原文显示
- **优化** 文档站新增「AI 辅助开发」一册（For Agents、MCP Server、LLMs.txt）；工作流文档补「审批业务接入」与组织架构受理人规则，审批、权限、数据模型等页随审批改走工作流同步
- **移除** Saas 自带的「系统审查」：原「审批 → 审批中心」页（`/approval/review`）、审查单与审查日志的实体和接口、`saas:review:*` / `saas:review-log:read` 权限码一并删除，审批统一走工作流；「审批」目录默认打开「审批约束」，见升级须知
- **升级** 前端 XiHan.UI 升至 4.2.0：JSON 查看器内建工具条与原文着色，描述列表描边档同列标签对齐、格线不再错位，表格单元格内衬随尺寸档换档，图表缺省配色、配色方案与色阶改为浅色调，分隔线竖线铺满行高，树形表父行收起后能再展开，多行文本自增高只剩一层滚动
- **升级** 后端 XiHan.Framework 升至 4.7.0，随附传递依赖 `System.Security.Cryptography.Pkcs` 的漏洞修复（CVE-2026-84008、CVE-2026-70162）；前端 tiptap、vue、vitest、oxlint 等依赖随补丁与次版本更新
- **升级** 发布 v5.8.0

## v5.7.1-fix.1 (2026-10-14)

- **修复** 页面里列数多、超出视口宽的表格横向滚开后，表格外框在半路收口、行线截断，表头却还往右延伸：正文滚动区的收窄只作用于页面外壳那一层，表格自己的滚动区仍按表格宽度撑开
- **升级** 发布 v5.7.1-fix.1

## v5.7.1 (2026-10-13)

- **新增** 仪表盘编辑栏新增「清空小组件」，与其他编辑一样点「完成」才生效，看板已空时不可点
- **新增** 聊天消息发送成功时播放发送音效，失败不响，重发成功时补上；随偏好「消息提示音」开关
- **新增** 聊天图片改为会话图片组：看片浮层里可以左右翻看同一会话的全部图片，不再只能看点开的那一张；往上翻出更早的历史或有新图片进来时，正在看的那张保持不变
- **新增** 前端公共函数 `bindSyncedSetting`（`composables/useSyncedSetting`）：跨端同步的设置接上它，即按「开着同步以后端为准、拉取与推送都写回本地」就绪
- **修复** 开着跨端同步时，在另一台设备或浏览器上刷新，仪表盘、搜索设置、表格设置、个人视图与收藏夹会先闪出旧值再被换掉：改为以后端那份为准，拉取与推送都写回本地，后端超过 1.5 秒未返回才先按本地显示
- **修复** 仪表盘移除全部小组件并保存后，刷新又变回全部小组件；个人视图删光后，其他设备上仍保留旧视图
- **修复** 右下角通知卡片自组件库 4.0 起收窄到 300px，凭证号这类长串撑出横向滚动条：宽度恢复为 24rem
- **调整** 提示音改用组件库 `@xihan-ui/sound` 的语义音效（站内通知、收到消息、发送成功），与组件库文档里试听的是同一套。前端删除 `registerNotificationSound`，`NotifySoundKind` 只收 `notification` / `receive` / `send`，二次开发自定义的音色改用组件库的声音主题
- **升级** 前端 XiHan.UI 升至 4.1.0：看片浮层的复原钮改为回转箭头图标，通知标题与说明里的长串就地折行
- **升级** 后端 XiHan.Framework 升至 4.6.2；前端 vite、vue-router、vue-i18n、vue-plugin-hiprint 等依赖随补丁与次版本更新
- **升级** 发布 v5.7.1

## v5.7.0 (2026-10-12)

::: warning 升级须知
本次没有数据库与后端接口变更。前端升至 XiHan.UI 4.0.1，这是组件库的一次全库视觉改版，已有 `node_modules` 须重新 `pnpm install`。

- **界面密度**：缺省由紧凑改为宽松。XiHan.UI 4.0 起控件整体降一档，宽松档即字段 28 / 按钮 32px，与此前的紧凑档同高，没改过密度的用户看到的控件高度不变。在偏好里选过紧凑、或开着偏好云同步的账号，存下的仍是紧凑，升级后控件会再矮一档（字段 24 / 按钮 28px），到「偏好设置 → 外观」改回宽松或恢复默认即可
- **对话框与抽屉**：`packages/design/ui.css` 的 `.xh-dialog-footer` 删除。二次开发的对话框、抽屉写过它的，改用组件库的 `XhDialogHeader` / `XhDialogBody` / `XhDialogFooter`（抽屉为 `XhDrawer*`）三段；正文段有多块内容要纵向排开时加 `class="xh-overlay-body"`
- **XiHan.UI 4.0**：部分组件的缺省值、尺寸与圆角令牌，以及约 60 个 `--xh-<组件>-*` 覆盖槽有改动，自己写过这些覆盖或依赖原缺省值的，对照 [XiHan.UI 更新日志](https://ui.docs.xihanfun.com/changelog) 迁移
:::

- **新增** 偏好设置的外观页新增「图表」分组：图表配色有主题单色、多彩分类、柔和品牌、莫兰迪柔彩四套，主题单色跟着主题色走；「视口内动画」（缺省开启）让图表露出一半才挂载并播入场，切换配色时视口内的图表按新配色重播。两项随恢复默认与云端同步
- **新增** 表格设置新增「表格对齐」（居左 / 居中 / 居右），数据列一起换，随保存生效，恢复默认回到居左；多选、序号等前缀列不跟着换
- **调整** 界面密度缺省改为宽松，见升级须知
- **调整** 新增 / 编辑弹窗及其余对话框、授权抽屉统一为头、正文、尾三段：头下、尾上有分隔线，内容超高时只在正文里滚动，标题与按钮始终留在原处
- **调整** 下拉、菜单等浮层改为实色底，不再半透明透出下面的内容；浮层圆角随偏好里的圆角一起变
- **调整** 查询面板里的日期区间与其他条件同宽，不再占两格
- **修复** 登录页右上角的图标钮按下时瞬间跳变，改为与其他按钮一致的按下缩放、松开回弹
- **优化** 搜索行的查询、重置钮与表格工具栏的设置、导出等图标钮统一为同一尺寸，同排齐高
- **优化** 文档站改用 XiHan 统一文档主题并升级到 VitePress 2，顶部导航与其他文档站统一为「指南 / 内容栏目 / 生态 / 支持 / 版本」
- **升级** 前端 XiHan.UI 升至 4.0.1：控件高降一档、圆角收窄、字段改为淡底且聚焦不画环、浮层改为实体底，表格行高与标题字号随之调整
- **升级** 发布 v5.7.0

## v5.6.0 (2026-10-06)

::: warning 升级须知
本次有一处小的数据库变更，前端升至 XiHan.UI 3.2.0，已有 `node_modules` 须重新 `pnpm install`。**升级前请备份数据库。**

- **数据库**：随附 `UpdateScripts/5.6.0`，启动时在建表之后、播种之前自动执行，可重复执行。脚本只删除平台菜单里仪表盘下已登记的按钮行（「用户统计」），「用户统计查看」权限本身不变，用户管理与个人中心照常读取；新建的库直接登记为最新版本，不跑本次脚本
- **接口**：工作台的仪表盘摘要接口 `WorkbenchQuery/DashboardSummary` 与 `WorkbenchDashboardSummaryDto` 删除，前端 `workbenchApi.dashboard` 与 `workbench.types.ts` 随之删除。二次开发调用过它的，改在 `IWorkbenchQueryService` 上加自己的仪表盘接口；用户统计改用 `userStatisticsApi`
- **权限**：前端 `hasPermission`、`hasCode` 与静态路由过滤不再把 `*` 当通配，只按服务端下发的权限码与按钮码精确匹配。自带后端已把超管的 `*` 展开成当前上下文生效的全部码，不受影响；接了自建后端且只下发 `*` 的，需改为下发展开后的码
- **组件库文案**：`packages/locales/xihan-ui.ts` 的 `xhTranslations` 改为 `xhLocales`，即应用语言到 XiHan.UI 内建语言包的对应表。改过 `xhTranslations` 里文案的，改在组件实例上用 `translations` 覆盖；新增语言时在 `xhLocales` 登记对应语言包
:::

- **新增** 仪表盘新增 14 个示例图表，用按日期生成的零售经营示例数据展示 XiHan.UI 的图表能力：迷你图、渠道堆叠柱与均线、环形 / 玫瑰 / 半环、漏斗与雷达、排行与气泡、箱线与小提琴、矩阵与日历热力、桑基图、层级图、关系图、K 线、瀑布、仪表与分段进度条，标题旁标「示例数据」
- **新增** 欢迎卡片改写介绍并标「官方」，显示当前版本，附更新日志与 GitHub、Gitee、GitCode 源码仓库入口
- **新增** 页面切换、面包屑与图标切换补上动效：旧页淡出与新页交叠，面包屑逐项滑入，主题、全屏、侧栏收起与内容最大化按钮的图标旋转切换，图标按钮按下回弹
- **新增** 内容最大化与侧栏收起改为滑动过渡，不再一帧消失；收起的侧栏退出键盘与读屏
- **调整** 仪表盘默认看板重排：欢迎、时间、收藏三等分起头，今日统计改用示例数据，与经营指标、销售构成、转化漏斗同排，其余图表三个一排
- **修复** 用户管理与个人中心的接口调用数恒为 0：用户统计按用户与今日 / 本周 / 本月累加开放接口的调用
- **修复** 月初几天本周跨月时，上月末的登录、访问、操作、接口调用与在线时长没有计入本周
- **修复** 平台态下超管能看到部门、数据范围等租户侧操作，点了被服务端拒绝；用户页只在能分配或撤销部门时显示部门页签，平台态不再请求部门树报 403
- **修复** 切换页面时控制台报面包屑 `Duplicate keys`，出入场动效认错节点
- **修复** 侧栏底部的收起开关不能用键盘聚焦与触发，读屏念不出名称
- **修复** 小屏下公告轮播的指示点与翻页钮压住正文；只有一条公告时不再自动播放、不显示翻页
- **修复** 仪表盘销售构成环心的合计金额折行
- **修复** 演示公告中权限体系、租户隔离、存储等描述与当前实现不符（种子只首写，已有库里的公告不会被覆盖）
- **优化** 偏好抽屉打开与反复开合卡顿：主题监听合一，加载动画只在可见时运行，四个标签页第一次切到才挂载，收起只隐藏不卸载
- **优化** 下拉选择、语言下拉与分页每页条数的选项第一次展开才渲染，列表页与表单里成片的下拉不再各自先铺一遍
- **优化** 组件库内置文案改用 XiHan.UI 内建语言包，日语、韩语、繁体中文、德语下日期、分页等组件文案不再退回英文或简体中文
- **优化** Markdown 编辑器从 CDN 加载的代码高亮与公式样式表补上 `crossorigin`，开合浮层不再整表重算样式
- **优化** 文档站新增前后端全景架构图，功能预览改为特色截图；权限、升级、模块与数据库文档对齐当前实现，权限口径统一为 RBAC + 数据范围 + 字段脱敏
- **升级** 前端 XiHan.UI 升至 3.2.0，回到顶部按钮随浮动圆钮同步缩放
- **升级** 发布 v5.6.0

## v5.5.0 (2026-10-03)

::: warning 升级须知
本次没有数据库变更。前端升至 XiHan.UI 3.1.0，并有三个依赖的大版本升级，影响二次开发代码；已有 `node_modules` 须重新 `pnpm install`。

- **代码生成**：5.4.2 及更早版本生成的页面，含日期时间列的表重新生成后，`schema.generated.ts` 里该字段改为时间戳，旧 `index.vue` 需按新模板手工迁移，见[代码生成：表单控件的取值口径](backend/code-generation.md#表单控件的取值口径)；不含日期时间列的表不受影响
- **XiHan.UI 3.1.0**：直接使用 `XhTimePicker`、`XhColorPicker` 的代码，`update:value`、`value-change` 与 `api.value` 由字符串改为字符串数组，读值处取 `value[0]`；应用封装的 `XColorPicker` 仍收发单个 hex 串，不受影响
- **AntV X6 3.x**：插件并入主包，`@antv/x6-plugin-*` 七个包移除，`Selection`、`History` 等改从 `@antv/x6` 导入，`@antv/x6-vue-shape` 同步升到 3.x；只经 `packages/diagram` 使用图编辑器的代码不受影响
- **md-editor-v3 7.x**：暗色主题选择器 `.md-editor-dark` 改为 `.md-editor[data-theme="dark"]`，事件 `oninputBoxWidthChange` 改名 `onInputBoxWidthChange`
- **monaco-editor 0.57**：worker 导入路径去掉 `esm/vs/`，如 `monaco-editor/esm/vs/editor/editor.worker?worker` 改为 `monaco-editor/editor/editor.worker?worker`
- **悬浮工具组**：拖到的位置改按「贴哪条边 + 视口高度比例」记录，旧版本记下的位置作废，升级后回到默认位置一次
:::

- **新增** 代码生成的关联表列在表单里改为可输入筛选的下拉；列表字段新增 `searchFilterable`，搜索区的单选下拉可换成可搜索下拉，生成的关联表搜索项默认开启
- **新增** 新增版本套餐时，版本编码可一键随机生成
- **新增** 搜索区的日期与日期区间显示占位文字，区间两端为「开始时间」「结束时间」；`XDatePicker` 新增 `placeholder`，`XDateRangePicker` 新增 `startPlaceholder` / `endPlaceholder`
- **优化** 代码生成的前端模板改用新版表单封装：日期时间列用带时刻的日期选择、按本地时间提交；整数列数字框按 0 位小数收值，`decimal` 列按列定义的小数位；文本框带上列长度上限，文本域显示字数
- **优化** 悬浮工具组的拖动与贴边改由组件库提供，窗口尺寸变化后仍停在原来那一侧、同一高度比例处，不再回到默认位置
- **优化** 对话框与抽屉打开后，焦点落在内容里第一个可操作的控件上，不再停在关闭钮
- **修复** 可搜索下拉在编辑表单里比相邻下拉窄（权限的资源 / 操作、租户支持人员）
- **修复** 小屏下搜索区的下拉、日期等控件没有像文本框一样占满整行；日期区间与上下行的列边对不齐，带时刻时终点的分钟段被日历钮压住
- **修复** 弹窗里的次级表格中设为居中的列，复选框等控件没有居中（如代码生成的列配置）
- **升级** 后端 XiHan.Framework 升至 4.6.1；前端 XiHan.UI 升至 3.1.0，AntV X6 升至 3.x，md-editor-v3 升至 7.x，monaco-editor 升至 0.57，pnpm 升至 11.28.3
- **升级** 发布 v5.5.0

## v5.4.2 (2026-10-01)

- **新增** 公共组件 `XCombobox`：可输入筛选、支持远程搜索的下拉选择。权限资源 / 操作、租户支持人员、时区、字段安全与聊天选人改用它
- **新增** `XDatePicker` 支持 `showTime` 选到时分与 `min` / `max` 限制，`XDateRangePicker` 支持 `showTime` 与 `defaultTime`：生效、过期等时间字段可以选时刻，生日不能晚于今天；日志等列表的时间区间搜索精确到分，只点日期时起止补 00:00 与 23:59，终点含到所选的那一分钟
- **新增** `XInput` 的清空事件、字数计数与后缀插槽；`XNumberInput` 的小数精度、前后缀与只读
- **修复** 在线聊天的图片点开后一直转圈：预览从点开的那张开始，计数、翻页、缩放 / 旋转 / 翻转工具条与关闭钮各归其位
- **修复** 发布公告后右侧弹出的实时通知卡片撑满整屏、露出 Markdown 记号：卡片与顶部横幅只显示一句纯文本摘要，正文过长时在卡片内滚动
- **修复** 日期选择浮层的时间列比日历矮、底部空一格，确认钮被挤出浮层
- **修复** 手输日期区间先填一端时存不下来；级联选择的占位文字与选中勾不显示
- **修复** 侧栏悬停展开不生效、混合布局主栏标题不可见、顶栏菜单选中直链后不收起；菜单项改为真链接，可在新标签页打开
- **修复** 公告轮播不能翻页（并补暂停钮）；表格展开行、导入错误表与分页省略浮层显示错乱；导出进度条与热力图阈值不对
- **修复** 打印模板设置抽屉的保存钮跑到抽屉外，新模板保存不了；打印设计器的自定义纸张字段误触减号
- **修复** 代码生成导入表在输入框按回车误提交；知识库检索在输入法上屏时就触发检索
- **修复** Cron 编辑器的方向键串到模式单选；偏好设置的单选组可被清空；字段安全的目标选择把空值当成已选
- **修复** `XTooltip` 的子节点被条件渲染掉时报错
- **优化** 读屏与键盘：加载按钮、图标按钮、开关、复选框、树与进度条补齐名称；偏好抽屉关闭钮、右键菜单与面包屑可用键盘操作；对话框标题常驻；服务器用量改为计量条
- **优化** 表格表头、行悬停与列表行跟随应用配色与圆角偏好；个人中心修改邮箱 / 手机改为对话框
- **调整** `XInput` 的 `enter` 事件改在按键按下时触发，输入法上屏的回车不再触发；`XSelect` 多选改为标签行显示
- **升级** 发布 v5.4.2

## v5.4.1 (2026-10-01)

- **新增** 注册页的「隐私政策」「服务条款」点击后弹窗查看全文。正文为七种语言的 Markdown 文书，放在 `frontend/packages/views/_core/authentication/legal/<语言>/`，按当前语言懒加载；仓库自带的是通用范本，上线前请按运营主体改写，见[部署：隐私政策与服务条款](deployment.md#隐私政策与服务条款)
- **调整** 版本套餐的「版本权限」改用与角色权限分配相同的穿梭框：右栏是生效中的权限，移回左栏即撤销；已停用的权限留在左栏并标「已停用」，移到右栏保存即重新启用，抽屉内不再单独启停
- **修复** 注册页的两个协议链接为 `href="#"`，在哈希路由下点击会回到首页
- **修复** 注册、找回密码与重置密码页在表单任意位置按回车即直接提交：绕过表单校验，输入框里一次回车提交两次，在按钮或复选框上按回车也会误触提交。回车改由原生表单提交，先过校验
- **修复** 授权穿梭框中间两个移动按钮的读屏名称是英文「Move to target list」：改为按目标栏标题取当前语言的说法，同一页的两个穿梭框可以区分
- **优化** 注册页的密码强度移到确认密码下方，输入密码与确认密码紧挨着
- **优化** 代码生成表配置的行操作把「编辑」「列配置」排在最前
- **移除** 前端公共组件 `XPermissionGrantPanel`（已无页面使用），二次开发引用处改用 `XPermissionTransfer`
- **升级** 发布 v5.4.1

## v5.4.0 (2026-10-01)

::: warning 升级须知
本次重做字段安全与角色继承，含破坏性变更，前端依赖升至 XiHan.UI 3.0.0，前后端须配套发布。**升级前请备份数据库。**

- **数据库**：随附 `UpdateScripts/5.4.0` 的 `5.4.0.sql` 与 `5.4.0-page-codes.sql`，启动时在建表之后、播种之前按文件名顺序自动执行，可重复执行；新建的库直接登记为最新版本，不跑本次脚本
- **字段安全**：规则改挂「实体 + 字段」。脚本把只对应一个实体的资源换成实体；多个实体共用资源上的规则与目标为「权限」的规则无法确定实体，直接删除（5.4.0 之前字段安全只对用户列表与详情生效，这些规则从未起作用），需要的请在字段安全页按实体重新配置。「可读」开关、优先级、「自定义」方式与「我的字段规则」接口删除
- **角色继承**：只存直接继承边，系统角色不再参与继承；每个角色按自己的继承链结算授予与拒绝，一个角色的拒绝不再影响用户持有的其他角色，要绝对拒绝请用用户直授拒绝；停用角色不贡献权限，也切断经由它的继承。`RoleAncestors` / `RoleDescendants` 去掉 `includeSelf`、改返回继承链，`RoleHierarchyDetail` 删除
- **通知权限码**：通知公告改用 `saas:notification:*`，脚本删除 `saas:message:publish` 及其全部引用；自建角色若靠 `saas:message:*` 维护通知，需补授 `saas:notification:*`
- **页面码**：前端页面的 `pageCode` 统一为后端页面登记表里的页面码，一页多表用「页面码.子表」；脚本迁移列设置、搜索设置、个人视图、导入历史与导出任务，用户导出的业务类型由 `system.user` 改为 `identity.user`。二次开发的页面与 `IExportProvider.BusinessType` 需按新口径修改
- **代码生成配置**：改为 `CodeGeneration:EnableGenerateToProject`、`BackendRootPath`、`FrontendRootPath`、`TablePrefixes`，只放 `appsettings.Development.json`，其他环境只能生成并下载；`EnableCustomPathDisk`、`AllowedRootPaths` 与表配置的生成路径删除（脚本删 `gen_path` 列），生成类型 `CustomPath` 改名 `Project`
- **业务模块**：权限目录与菜单改由 `IPermissionCatalogContribution`、`IMenuPageContribution` 登记，SaaS 统一写入，业务模块不再自写种子；同一编码多处登记时启动即报错
- **前端**：XiHan.UI 升至 3.0.0（轻提示并入通知、分段并入单选组、令牌 `--xh-shimmer-duration` 改名 `--xh-motion-loop-shimmer`）；turbo 下限提至 2.11.5，已有 `node_modules` 须重新 `pnpm install`；聊天抽屉改为浮动面板，`AppChatDrawer`、`requestOpenChatDrawer`、文案桶 `chat.drawer` 分别改名为 `AppChatPanel`、`requestOpenChatPanel`、`chat.panel`
- **示例模块**：`XiHan.BasicApp.Sample` 删除，已建出的 `Sample_Note` 表与 Erp 模块库里的 `Sample_Erp_Order` 表不会自动清理，确认无用后可手动删除
:::

- **新增** 代码生成的包含操作新增导入导出、状态切换与打印：导入逐行走新增接口，导出复用查询服务分页；按启用状态列生成启停接口与行内、批量启停；打印生成数据源与行内打印按钮。未配置时缺省为增删改与导入导出
- **新增** 代码生成列配置支持字典下拉、图片 / 文件上传、关联表与关联树（按主键存，列表显示名称，不建外键）与唯一字段（租户内唯一索引，新增与编辑前查重）
- **新增** 代码生成表配置可选父菜单（平台目录树，只有带菜单码的目录可选）；表由手写实体建出时沿用该实体，不再重复生成；生成的权限与菜单重启即生效
- **新增** 字典选项接口：按字典编码取下拉选项，登录即可用，本租户的字典优先于平台全局；列表字段支持系统字典与异步选项，新增只存文件主键的上传控件
- **新增** 角色列表「设置上级」；角色详情显示继承的权限与继承方式；分配权限抽屉标出已继承与被上级拒绝的权限
- **新增** 字段安全的实体与字段改为下拉选择；脱敏且可编辑即「只写」；平台规则对所有租户生效；部门规则对下级部门成员同样生效
- **新增** 日志链路追踪的「链路分析」：流向桑基图与时间分布堆叠柱
- **新增** 顶栏工具（命令面板、语言、时区、主题、全屏、偏好设置）可设为自动 / 顶栏 / 悬浮 / 隐藏，悬浮的收进可拖动的悬浮组，顶栏挤压时逐个让出
- **新增** 在线聊天改为浮动面板：可拖动、改尺寸、收拢或铺满，边聊边看页面
- **修复** 字段安全此前只对用户列表与详情生效，列表还一个字段都没打码：改为在响应输出处统一打码，覆盖列表、详情、选项与写接口回传；新建、修改与改状态校验只读字段，表单交回的脱敏值不再覆盖原值；查询剔除受保护字段上的排序、过滤与关键字搜索
- **修复** 没设过继承的角色跳过职责分离与模仿登录授出校验；有替代路径的直接上级无法解除
- **修复** 通知公告的接口与菜单要求 `saas:message:*`，与权限目录里的通知分组对不上
- **修复** 批量授权改按本次实际操作鉴权，菜单授权不再收回未挂菜单的权限；补齐撤销、分配部门、登录策略、编辑归属等按钮码，不再看得到按钮却保存到一半被拒
- **修复** 已撤销的历史成员、授权与数据范围让角色永远删不掉
- **修复** 带枚举筛选的导出悄悄变成全量；导出改按页面导出按钮绑定的权限码校验，提交时即拦截；查询快照解析失败时任务明确失败并写明原因
- **修复** 代码生成产物非空列留空时整单 400 或落库报错；树表可把父级挂到自身或下级、可删除带子节点的父级；生成到项目遇到同名手写类时写出重复定义
- **修复** 删除、启停、撤销、重置密钥、重发、立即执行等危险操作缺少二次确认
- **修复** 用户详情的状态徽标深字压深底看不清；表格单元格与树标签里自定义的样式从未生效
- **修复** 减弱动效下位移、缩放与尺寸过渡重新动起来
- **修复** 登录页验证码图在暗色下露出灰边；账号框提示改为「请输入用户名或邮箱」
- **调整** 种子权限全部挂上资源与操作，权限管理页的「资源」「操作」两列不再显示「-」，聊天、打印等模块不再显示组码；操作字典补齐 28 个动作，启动即对齐已有行
- **调整** 下拉菜单的危险操作按语气着色并配命令图标；日志列表的请求方法列改用标签
- **调整** 弹窗与抽屉里的次级表格与列表页同一样式，带同款分页底栏
- **调整** 页脚应用名链接到 GitHub 仓库；登录方式标签按可用宽度取尺寸
- **升级** XiHan.UI 3.0.0
- **移除** 示例业务模块 `XiHan.BasicApp.Sample`
- **升级** 发布 v5.4.0

## v5.3.1 (2026-09-26)

- **修复** 查询接口被记进操作日志：分页、「我的」列表、时间线等以 POST 发起的查询被记成新增 / 审核 / 修改，导出中心每轮询一次就多一条「新增」。查询服务的接口不再记操作日志，已写入的历史记录随保留策略过期
- **修复** 登录日志、操作日志与个人中心登录记录中，模仿登录、登录、登出、查询显示为「-」：登录结果与操作类型改取后端枚举文案，七种语言齐备；操作类型改为按语义着色的标签
- **修复** 聊天输入框多行正文溢出到发送行、外层多出一层描边：改为多行文本字段，默认 5 行、最多 10 行；群聊工具条新增「@」按钮打开成员列表
- **修复** 顶栏聊天未读角标的数字在红底上看不见
- **调整** 各日志页的链路追踪 ID 列位置统一：开放接口与异常日志排在请求标识之前，权限变更日志排在操作人之后
- **调整** 删除前端的登录结果、操作类型文案键（`log.login.result_*`、`log.operation.type_*`、`profile.login_logs.result_*`），二次开发引用处改用 `useEnumOptions` 取后端枚举
- **升级** 发布 v5.3.1

## v5.3.0 (2026-09-25)

::: warning 升级须知
本次重构多租户边界，含破坏性变更，依赖升至 XiHan.Framework 4.6.0，前后端须配套发布。**升级前请备份数据库。**

- **数据库**：随附 `UpdateScripts/5.3.0`，启动时在建表之后、播种之前自动执行，可重复执行；新建的库直接登记为最新版本，不再补跑历史脚本
- **库隔离租户**：平台库改为目录库，租户独立库只放租户业务数据；5.2.0 及更早开通的库隔离租户需按[多租户：库隔离](backend/multi-tenancy.md#库隔离-平台库是目录库)人工迁移
- **接口**：用户角色、直授权限、部门、数据范围与角色继承的单条授予 / 撤销接口删除，只留批量接口；建租户不再带管理员，改由 `InitializeTenantAdmin` 开通；隔离模式创建后不可修改
- **参数**：同一功能的参数合并为一条 JSON（`saas.auth.login`、`saas.auth.password`、`saas.auth.impersonation`、`saas.bot.telegram`、`chat.policy`），脚本自动合并旧值；强制改密改为 `saas.auth.password` 的 `forceChange`，默认关闭
- **配置**：移除 `Saas:Seed:SuperAdminPassword`，超管初始密码固定为 `SuperAdmin@123`；`Saas:Seed:EnableDemoData` 缺省改为关闭，需在各环境配置中写明
- **种子**：不再创建默认租户 `default`；菜单、权限等依赖缺失时启动直接失败
:::

- **新增** 权限作用侧（平台 / 租户 / 两侧）：租户内生效的权限 = 授权 ∩ 作用侧 ∩ 套餐白名单，超级管理员只在平台成立
- **新增** 租户所有者改为随套餐生效的系统角色，平台可转移所有权；租户侧新增「我的订阅」页
- **新增** 角色成员、角色授权与用户直授改用穿梭框批量维护；角色成员上限与职责分离对所有授予路径生效
- **新增** 角色与成员共用的数据范围编辑器，成员可按租户单独设置数据范围
- **新增** 页头显示当前上下文（平台 / 租户名）；模仿登录可先选范围
- **新增** 租户列表支持行级启用 / 暂停 / 禁用
- **新增** 演示数据按开关写入：10 个演示租户覆盖各套餐、租户状态、成员类型与数据范围，演示账号密码均为 `Demo@123`
- **新增** 前端构建产出 `version.json`，发版后才打开的页面也能收到更新提示
- **调整** 平台就是 0 号租户：平台与各租户只看、只写各自的数据；切换租户会换新会话，只有平台账号能进平台
- **调整** 账号归属注册地租户，外部成员在所在租户只能维护角色、部门等成员关系
- **调整** 全局角色、参数与字典在租户内只读，租户可建同键参数覆盖全局参数
- **调整** 带密钥的配置按租户隔离，邮件、短信与存储在租户未自配时回退平台默认
- **调整** AI 提示词、助手与知识库归平台维护；助手对话改由聊天权限控制
- **调整** 管理页写操作一律按按钮权限显示
- **修复** 平台专属权限在业务租户中同样生效
- **修复** 租户可读取平台的带密钥配置
- **修复** 更换默认存储后，既有文件按新存储取凭证导致无法下载或删除
- **修复** 后台导出未按发起人身份执行，会话下线或模仿态下权限与在线请求不一致
- **修复** 已停用角色仍参与数据范围过滤；撤销过的角色重新授予时报错
- **修复** 顶栏菜单下拉被裁切、切页进度条被顶栏遮住、窄栅格下仪表盘与编辑弹窗溢出
- **优化** 页面切换动画改用 Web Animations API，切页卡顿明显减少
- **升级** 升级依赖至 XiHan.Framework 4.6.0 与 XiHan.UI 2.1.0，发布 v5.3.0

## v5.2.0 (2026-09-22)

::: warning 升级须知
前端依赖升至 XiHan.UI 2.0.0，后端依赖升至 XiHan.Framework 4.4.0。在本仓前端上做过二次开发的项目，自有页面需按 XiHan.UI 2.0 的更名迁移：`@xihan-ui/kernel` 导入改为 `@xihan-ui/core`；退役组件的替代——`XhResult` → `XhEmptyState`、`XhCountdown` → `XhTimer`、`XhQrCode` → `XhMatrixCode`、`XhCodeBlock` → `XhCodeView`、`XhDynamicInput` → `XhFieldArray`、`useThread` → `useMessageFeed`、`XhHotkeys` / `useHotkeys` → `XhKbd` 展示配合应用自带的 `useHotkey` 注册；轻提示与通知的失败语气 `error` 改为 `danger`，通知的 `type` 改为 `tone`；`XhFormFieldGroup` 的 `value` 改为 `name`；边框轴并入 `variant`，`Flex` 的方向属性改为 `orientation`，`Tree` 的选择模式改为布尔 `multiple`；`Switch` 改为监听 `update:checked`。日期选择封装拆为 `XDatePicker`（单选）与 `XDateRangePicker`（区间）。

新增界面语言后，后端 `XiHan:Localization:SupportedCultures` 白名单为必需配置：文化中间件对未登记的语言静默回退默认文化。每个环境的 `appsettings` 均需登记；生产配置不入库，需在服务器上单独补充。
:::

- **新增** 界面语言由 2 种增至 7 种：新增繁体中文、日语、韩语、印地语、德语，前后端资源齐备（每种语言前端 26 个文件，后端 `ApiResponse` / `Errors` / `Enums` 三份资源）。未选择语言时界面跟随浏览器语言，重置偏好时同样按浏览器语言而非固定回简体中文；组件库文案按主语言回退（zh 系回退 zh-CN，其余回退 en-US）
- **新增** 界面密度偏好：外观设置新增「宽松 / 紧凑」两档，默认紧凑，全站控件高度收为 28 / 32。此前应用未设置密度，使用的是 XiHan.UI 的 comfortable 档，比 Naive UI 时期高一档
- **新增** 验证码输入统一改用组件库的 PinInput：登录图形码四格，短信、邮件与联系方式验证六格
- **调整** 表格列头接入 XiHan.UI 的 `column-label` 与独立排序按钮；表格设置的密度 / 风格 / 功能三行改为切换按钮组；全站标签页增加滑动指示条，图标选择器的图标集页签溢出时可两端翻页
- **调整** 文本输入封装接入 Field Chrome，视觉盒与前缀改用组件库的 `control` / `prefix` 部件；侧栏与顶栏菜单的行几何与状态配色改经 XiHan.UI 公开槽设置；顶栏聊天按钮的未读角标改用组件库的小号徽标
- **调整** 令牌桥补充浮层材质，弹出面与对话框跟随应用配色；共享样式中写死的 px 字号改引 XiHan.UI 字号令牌，控件文字回到 14px；动效令牌桥中的临时补位删除，改由 `@xihan-ui/tokens` 提供
- **修复** 两步验证与图形验证码同时开启时无法登录：两步验证为无状态三段式提交，图形验证码一次性消费，第二段起服务端固定返回「验证码错误或已过期」。改为首段通过后随挑战签发 10 分钟有效的两步验证票据，后续阶段持票即跳过图形码，签发令牌后作废票据
- **修复** 两步验证票据绑定首段登录名：票据此前只记录用户主键且在密码认证之后比对，持有本人合法票据者可在有效期内免图形码尝试他人账号密码。改为在密码认证之前比对登录名，不匹配立即作废票据并返回统一的「两步验证已过期」，不进入密码认证
- **修复** 登录页各阶段提交增加同步进入守卫，连续点击、连续回车与自动提交并发时只发出一次登录请求
- **修复** 跨租户成员切换到其他租户后打开个人中心提示「当前用户不存在」：账号、安全记录、会话、三方绑定、偏好、设置、凭证均带归属租户标记，被全局租户过滤拦截。上述数据改为按用户跨租户读写；活跃度统计与操作 / 访问 / 登录日志仍按当前租户切分
- **修复** 刷新令牌存储改用应用配置的分布式缓存（`SaasRefreshTokenStore`），不再使用框架的进程内默认实现：启用 Redis 时跨实例共享，未启用时仍按绝对过期回收
- **修复** 在线用户概览改为数据库计数，不再加载全部会话；作业存储在任务到达终态时清理实例映射；在线用户页在标签页停用时停止轮询
- **修复** 封装控件的 `disabled` / `readOnly` / `invalid` 不再默认为 `false`：XiHan.UI 按「本处 > 字段 > 表单」取值，默认 `false` 会覆盖外层 Field / Form 的状态，导致字段校验失败或表单禁用时控件边框不变化。涉及 XInput、XSelect、XCascader、XTreeSelect、XNumberInput、XDatePicker、XDateRangePicker、XColorPicker、XSlider、XTagsInput、XSegmented 共 11 个封装
- **修复** 扫码登录占位二维码的码点固定为深色，暗色主题下可见；登录方式切换器改用短标签，非中文语言下扫码入口不再被裁切；编辑器与时钟组件跟随应用语言
- **修复** 模板属性对齐 XiHan.UI 现行契约；标签页总览空态的覆盖槽跟随 `EmptyStateIcon` → `EmptyStateIndicator` 更名；确认框服务按新契约补充动作失败的提示文案
- **优化** 登录页小屏适配：方式切换器四段一行，卡片避让工具条与页脚；认证页与布局壳的辅助文字统一引用语义排版令牌；弹窗内字段与并排按钮统一为 sm 档
- **优化** Cron 表达式与「构建」按钮合并为一行输入组；导入数据库表的数据源与关键字纳入表单网格并带标签；抽屉明细表的样式收入共用样式
- **升级** 升级依赖至 XiHan.Framework 4.4.0 与 XiHan.UI 2.0.0，发布 v5.2.0

## v5.1.0 (2026-09-04)

::: warning 升级须知
随附 `UpdateScripts/5.1.0`：把存量代码生成列配置里 bigint 列的 TS 类型与控件刷成字符串加文本框，与后端全局 `LongJsonConverter` 的报文形状一致（雪花 ID 超出 JavaScript Number 安全范围，`long` 在报文里一律是字符串）。
:::

- **调整** 代码生成的前端模板迁到 XiHan.UI：前端 naive-ui 整体下线、按钮门控改成服务端下发按钮码
- **调整** 生成产物的 `actions.permission` 改成按钮码 `{页面码}.{按钮键}`，与 `PageRegistry` 片段同一处推导；按钮码只能由 `PageRegistry.Buttons` 下发，`MenuSeeder` 不种按钮行
- **调整** 生成产物的 `DetailDto` 继承 `ListItemDto`，接口导出名由 `xxxManagementApi` 改为 `xxxApi`
- **修复** 控件类型判定收敛到渲染器：此前六份模板各自判定，判定次序不一致时会生成控件与表单模型类型不匹配的代码，且编译期无法发现。改为由渲染器统一计算 `ControlKind` / `FormTsType`，标志、渲染、回填、提交、表单模型与默认值均引用该结果
- **修复** `TsType` 在渲染期按 C# 类型归一化，`long` 列一律产出 `string`，产物正确性不再依赖存量列配置
- **修复** 纯日期列改用日期选择器并按本地年月日提交，不再因 UTC 换算退掉一天；日期时间与时间列组件库没有对应包装，暂用文本框加提交前格式校验
- **修复** 生成期三处改 fail-closed：页面码码形、树表显示名列未进列表、常量候选项形状
- **升级** 升级依赖至框架 v4.2.0，发布 v5.1.0

## v5.0.0 (2026-08-31)

::: warning 升级须知
本次为主版本升级，含多处破坏性变更：

- **连接与缓存的默认节点名统一为 `Default`**（跟随框架 v4.1.0）：数据库 `ConfigId` 由 `"1"` 改为 `"Default"`，升级模块的 `ConnectionConfigId` 同步；Redis 键前缀 `InstanceName` 由 `"XiHan:"` 改为 `"Default:"`；主从示例的第二连接由 `"2"` 改为 `"Report"`——纯数字 `ConfigId` 会被租户连接解析按 `tenantId.ToString()` 优先匹配，导致租户被路由到该库。修改过连接名或 Redis 键前缀的部署需同步更新配置。
- **升级脚本移入版本子目录**：框架的 `FileSystemUpgradeScriptProvider` 只扫描 `UpdateScripts/<版本>/*.sql`，此前脚本直接放在根目录，四个脚本从未被执行且无任何报错。目录修正后，配合框架 v4.1.0 修复的迁移执行，这些脚本将在启动时按序全部执行。本版另随附 `4.0.1`（租户存储用量统计改用覆盖索引）、`4.0.2`（四张表唯一索引补租户维度、AI 密钥列扩容）、`4.0.3`（`sys_user_session` 新增模仿登录六列与索引）。**升级前请备份数据库。**
- **页面按钮门控改由服务端下发按钮码**：`PermissionInfoDto` 新增 `Buttons` 字段，前端 141 处硬编码权限码全部移除。该字段缺省视为无任何按钮权限，前后端必须配套发布。
- **通知公告页的权限码由 `saas:notification:*` 改为 `saas:message:*`**：该页所有端点本就要求 `saas:message:*`，此前菜单可见但所有请求返回 403。菜单种子在下次启动时更新既有行，无需迁移脚本。
- **旧前端 `old-frontend/` 已移除**；`frontend/` 的 `@xihan-ui` 由链接源码改为 npm 正式版，catalog 固定 `^1.1.0`。锁文件不入库，catalog 是唯一的版本约束。
- **示例模块的 `Sample:TenantModuleDataSources` 配置节移除**：租户模块库改由框架约定派生，库隔离租户默认拥有专属模块库；需要指定到其他位置时，实现 `ISqlSugarTenantConnectionProvider` 显式给出 `ModuleDataSourceConfigs`（显式配置优先于约定）。
- **三个接口的标量主键改为查询串传递**：租户初始化数据库、第三方应用重置密钥、版本权限撤销。动态 API 对未标注绑定特性的简单类型参数统一推断为 `[FromQuery]`，此前将 `{ id }` 放入请求体，后端收到的值始终为 `0` 且不返回 400。
:::

- **新增** 模仿登录：超级管理员与租户管理员可以他人身份登录排查问题。以被模仿者的完整身份重新签发令牌并新建一条带模仿者标记的独立会话，鉴权、租户过滤、菜单裁剪与审计字段自动跟随。准入规则：禁止模仿超级管理员、模仿自己、嵌套模仿、目标已禁用或非目标租户有效成员，跨租户模仿另需 `saas:impersonation:cross-tenant`；模仿会话独立短过期（默认 30 分钟）、禁止刷新，退出时按令牌声明与会话行双向校验；模仿态禁用改密、重置 MFA、授权变更、删除、密钥再生成与再次模仿。开始与结束各记录一条登录日志，操作日志标注模仿者，可按配置向被模仿者发送安全通知
- **新增** 模仿登录前端入口：用户菜单「控制中心」之后发起，模仿期间顶部横幅可退出，用户列表提供行操作
- **新增** 示例业务模块 `backend/src/business/XiHan.BasicApp.Sample`：最小业务模块示例（一个模块类、两个实体、两个仓储，表由框架启动时按实体自动创建），演示「模块分库 × 租户分库」二维路由与新增业务模块所需的全部改动点
- **新增** 租户席位与存储配额的运行时拦截：`UserLimit` / `StorageLimit` 此前只校验入参、无执行点。席位在 `UserDomainService.CreateUserAsync` 拦截（三个应用层入口均经此处），存储在 `FileDomainService.CreateUploadingFileAsync` 拦截（传输开始前拒绝）；新增存量配额核对接口与租户页「配额核对」入口
- **调整** 拖拽排序改用 `@xihan-ui/vue` 的 sortable，六处排序列表全部迁移，移除 `@dnd-kit/vue`、`@dnd-kit/geometry` 与两个包装组件
- **调整** 表格列宽改用组件库的 `XhTableColumnResizeTrigger`，移除自实现版本；同时修复首次拖动时整行列宽跳变的问题（此前以声明宽度而非实际渲染宽度为基准）
- **修复** 模仿态逃逸与授权绕过（对抗审查确认 21 项）：切换租户、OAuth 同意流、令牌端点 `refresh_token` 三条「以既有会话重签令牌」的路径未透传 `impersonator_*` 声明，导致模仿约束失效；刷新链的模仿拒绝与会话校验依赖按有效期校验的解析路径，在刷新场景下从未生效；停用、删除、强制下线发起人时无法吊销其模仿会话（会话行的 `UserId` 为被模仿者）；权限申请审批与权限委托直授权限 / 角色时未经授权准入
- **修复** 改密与锁定后吊销会话：`SysUserSecurity.SecurityStamp` 只写不读，管理员重置密码、锁定账号与自助改密后旧令牌仍可使用至会话自然过期
- **修复** 租户开通改在平台上下文执行：此前整段开通在新租户上下文内执行，库隔离租户的独立库尚未创建即被查询（3D000 / 42P01）；`ExistsEmailGloballyAsync` 应全平台判重却跟随当前上下文。开通与套餐回收改为全程平台上下文，账号注册与授权绑定落平台库
- **修复** 租户开通时同时创建模块库（改调框架的 `InitializeCurrentLayoutAsync`），此前只创建租户主库
- **修复** 租户停用与成员撤销后缓存未失效：租户暂停 / 过期 / 禁用后会话状态缓存未清理，最长 60 秒内仍可通行；撤销租户成员后授权快照缓存未清理，被移除的角色权限持续生效至缓存过期
- **修复** 四张表的唯一索引补充租户维度（工作流定义、代码生成的数据源 / 表 / 模板）：约束为全局而读写按租户过滤，租户间同编码记录互相冲突且不可见；三条代码生成索引同时补 `is_deleted`；AI `api_key` 列按密文长度扩容
- **修复** 前端一批安全与正确性问题：静态路由模式下路由级权限过滤失效；密文被当作业务消息展示；并发 401 重复登出；权限数组含空串时整组放行；草稿预览值被上传并推送到其他设备，`$reset` 失效；树工具丢数据与栈溢出，`getParentIds` 在 `parentId` 成环时死循环；动态路由装载完成后重进丢参，装载持续失败时 `/500` 循环跳转
- **修复** 聊天、AI、代码生成、打印与工作流的领域层问题：普通成员无法主动退群，保留期清理遗漏表情回应，NaN 温度值未校验，解密失败的异常语义不准确，枚举值未校验、备注被清空，校验缺口与异常参数名错位
- **修复** 导出中心「我的任务」等分页与枚举缓存的边界问题；`params` 位置覆盖调用方配置；重复的重置密码入口
- **优化** 前端体验：认证页与登录页的切换条加高、第三方渠道收进「更多」、提交按钮与输入框同高且圆角跟随控件形状令牌；在线聊天输入框、表情选择框与表格样式；搜索条件列宽跟随字号；正文滚动区不再被页内最宽表格撑破视口；四处交互补充就地提示；标签悬停提示先读标签名
- **升级** 升级依赖，发布 v5.0.0

## v4.0.0 (2026-08-26)

::: warning 升级须知
**前端整体换成自家组件库。** `frontend/` 是用 XiHan.UI 重建的新前端，naive-ui 与 highlight.js 全量下线，177 个引用第三方组件库的文件逐页改写成组件库的解剖写法；旧实现暂存在 `old-frontend/`，下个版本移除。在旧前端上做过二次开发的，自有页面需按解剖写法迁移。样式一致靠令牌桥接——组件库的 `--xh-*` 映射到应用既有的 HSL 令牌，`:root` 与 `.dark` 两处都声明；存库取值不跟着组件库的词汇走，只在渲染边界换算。

随附 `UpdateScripts/3.13.0.sql`，把第三方登录清单 `saas.auth.oauth.providers` 的官方默认值补到八家：只改 `tenant_id=0` 且仍是官方默认值的行（历史上的三家版与四家版都认），自定义过的值与 `[]`（关掉全部三方登录的合法写法）一律不动。脚本可重复执行，启动时自动跑。

后端移除 15 个从未落地的空壳示例模块工程（APS / BI / CMS / CRM / EAM / ERP / FMS / HRM / MES / OA / PLM / QMS / SCM / TMS / WMS）。
:::

- **调整** 用 XiHan.UI 重建前端，naive-ui 全量下线；重复三次以上的解剖块收成应用组件（`XDataTable` / `XSegmented` / `XTree` / `XCascader` / `XTagsInput` / `XPopconfirm`）
- **调整** 组件库切到 npm 发布版 1.0.0，前端工作区接入 turbo 任务调度
- **调整** 移除 15 个空壳示例模块工程
- **新增** 接入微信、企业微信、飞书、钉钉登录（扫码方式），账号授权方式的配置以注释给出；登录页画哪几个按钮由存库清单决定、能不能登由 `appsettings` 的 `Providers` 决定，两份清单的 name 必须对齐
- **新增** 密码登录接入图形验证码：匿名端点 `/api/Auth/Captcha` 下发 4 位数字码，复用框架一次性码服务（加密随机、消费即销毁、恒定时间比较），有效期 5 分钟，开关 `Saas:Auth:CaptchaEnabled` 默认开启
- **新增** 默认密码强制改密：登录命中内置或配置种子的默认密码即创建锁定会话，中间件 423 仅放行改密、登出与刷新端点，改密成功自动解锁并同步下发安全告警通知
- **新增** 密码登录按「账号 + IP」与纯 IP 双维度固定窗口节流（每分钟 5 次 / 30 次），与框架的账号锁定互补
- **新增** 约束规则执法领域服务：按约束类型评估角色集合，目标匹配展开角色继承链，同组互斥按 `Parameters.maxAllowed` 判定，违规按规则优先级降序返回
- **新增** 用户角色授予与权限申请审批自动授权在落库前执行静态职责分离评估，拒绝与需审批类违规阻断并给出规则编码与冲突角色，警告与记录类放行并留痕
- **新增** 导出中心的我的任务加搜索条件，关键字打任务名与文件名，业务类型、状态、范围、格式多选，创建与完成时间做区间；排序与过滤先过字段白名单再过字段级安全门控
- **新增** 菜单授权里子项全是按钮的菜单并排铺开，整棵树不再被按钮级权限拉长
- **新增** 日期浮层补上快速跳年，四颗翻页钮都有可读名字
- **调整** 令牌回传一律拼进 URL 片段，回调地址配成 history 模式的真实路由时，访问令牌与刷新令牌不再落进查询串、进访问日志并随 Referer 外发
- **调整** 顶部进度条、通知下拉与两层文本的消息改用组件库的命令式服务与浮层，行内状态药丸从徽标迁到标签
- **调整** 正文滚动区换成组件库的滚动区域，滚动条浮在内容之上不占宽度
- **修复** 导出中心的我的任务分页此前没有 `[HttpPost]` 也不吃查询条件，前端发什么都返回第一页无条件数据
- **修复** 页脚署名的链接地址为空串，点击等于刷新页面；改为链到 XiHan.Framework 与 XiHan.UI 两个仓库，应用页脚与登录页页脚共用一份
- **优化** 表格状态标签统一为描边形态，实心底上的前景按 WCAG 相对亮度挑选
- **优化** 移除登录相关页面的大标题
- **升级** 升级依赖，发布 v4.0.0

## v3.13.0 (2026-08-16)

::: warning 升级须知
随附 `UpdateScripts/3.12.1.sql`，修正两处存量数据：非库隔离租户卡在「待配置」而永远登不进去，以及代码生成表配置里已废弃的 `gen_type = 2`。脚本可重复执行，启动时自动跑。

另：`tenant:initdb` 收归平台专属权限。它按租户主键操作且不校验调用方归属，此前落在企业版白名单里，租户管理员可初始化任意租户的独立库。
:::

- **新增** 代码生成拆成「生成并下载」与「生成到项目」两个动作，后者带二次确认
- **新增** 代码生成的预览与生成拆为两个行操作，产物预览改目录树
- **新增** 为生成产物接通 i18n 的命名与转义基建，键段一律 snake 并在渲染前自校验
- **新增** 接入框架的建表与种子按需选取，演示种子归入 `Demo` 分组
- **新增** 补齐租户成员的添加与邀请入口，以及删除租户
- **调整** 代码生成方式收敛为 `Zip` 与 `CustomPath` 两种，`Preview` 本就不是生成方式
- **调整** 内置模板改为只读并随版本回刷，模板版权头置顶
- **调整** 用完整 XML 文档替换全部 `inheritdoc`
- **修复** 修复生成产物不可编译不可运行的九处缺陷，单表与树表均 0 错误 0 告警
- **修复** 让列配置的列表、新增、编辑、查询四个开关真正生效，人工修改不再被同步冲掉
- **修复** 补齐 PostgreSQL 方言的类型映射
- **修复** 修复基类列判定恒为 false，并在列配置中禁用其编辑
- **修复** 接通生成产物的枚举选项，字典列改为显式占位
- **修复** 打通生成页的排序与区间搜索，清掉不生效的搜索框
- **修复** 修复运行时数据分页报列不存在，横向滚动条贴底
- **修复** 导入表不再留下 0 列的僵尸配置
- **修复** 补齐生成留痕，模板渲染失败可定位
- **修复** 修复新建租户不可用：管理员账号改为必填，非库隔离租户创建即置已配置
- **修复** 数据源改动后注销动态连接
- **修复** 补上行、页面与批量操作的二次确认
- **修复** 统一表格状态标签的配色与形态
- **修复** 修复表配置编辑弹窗无法渲染与打开时闪烁
- **升级** 升级依赖，发布 v3.13.0

## v3.12.0 (2026-08-13)

::: warning 破坏性变更：权限码与配置键更名
权限码 `saas:chat:*` → `chat:*`、`saas:print-template:*` → `print-template:*`，聊天配置键 `saas:chat:retention-days` / `saas:chat:sensitive-words` 同步去掉 `saas:` 前缀。

**表结构没有变化，不必重建数据库**，但种子只新增不删除，旧码对应的权限行会留在库里、角色与版本上的既有授权指向的仍是旧行。升级后需要做两件事：

1. **重新分配聊天与打印的授权**——这两个模块在所有角色上都会回到未授权状态；
2. **按新键重配聊天的保留期与敏感词**——新键以默认值播种，此前自定义的值不会迁移。

旧的 `saas:chat:*` / `saas:print-template:*` 权限行成为孤儿，可自行清理。菜单无需处理：菜单码未变，种子按码逐字段更新父目录与权限码。
:::

- **调整** 在线聊天拆为独立模块 `XiHan.BasicApp.Chat`，权限、菜单、种子与 Hub 端点自持
- **调整** 打印模板拆为独立模块 `XiHan.BasicApp.Printing`，权限、菜单、缓存与种子自持
- **调整** 前端新增 `src/modules/` 约定，五个可选模块删目录即卸载
- **调整** 聊天壳层下沉 `@xihan/chat` 包，布局层改经扩展注册点挂载
- **调整** AI 助手解耦为提供方扩展点，删 AI 模块后聊天照常
- **调整** 打印数据源目录后端化，注册表为单一事实源，写路径拦未注册绑定
- **调整** 审批菜单目录独立，消除与工作流模块的目录双登记
- **修复** 打印引擎改为按注册表版本号重初始化，不再每次创建模板都重置连接配置
- **修复** 租户版本白名单新增重算种子，模块权限首启即进企业版白名单
- **升级** 升级依赖，发布 v3.12.0

## v3.11.1 (2026-08-12)

- **新增** 打印模板设计器，支持可视化排版、数据源绑定与示例数据预览
- **修复** Redis 未启用时延迟队列不注册导致应用起不来，改由进程内队列承载
- **升级** 升级依赖，发布 v3.11.1

## v3.11.0 (2026-08-11)

::: warning 破坏性变更
`SysUser` 的时区与语言两列移除，相关 DTO、表单项、查询过滤与种子赋值一并删除。这两列从未被任何行为消费——后端时间换算读请求头 `X-Timezone`，界面语言取前端偏好，二者都随偏好设置跨设备同步，用户表那份是并存的第二份事实源，改了不生效。升级脚本 `UpdateScripts/3.10.1.sql` 负责落列，可重复执行；**读过这两个字段的自建客户端需改取偏好设置**。
:::

- **新增** 聊天支持语音消息，按住空格录音、最长 60 秒，气泡内就地播放，未听挂红点
- **新增** 聊天消息与站内通知加提示音，两者分用不同音色，可在偏好里单独开关
- **新增** 灵动岛补齐卡片态，形成胶囊、卡片与内容三形态，多条消息按后进先出堆叠
- **新增** 不在聊天页时新消息弹灵动岛，点击直达对应会话
- **新增** 建群、拉人与退群补系统提示，并通知全体成员而非仅当事人
- **新增** 新增时区目录端点，顶栏、个人中心与编号规则三处共用同一份目录
- **调整** 破坏性变更：移除 `SysUser` 的时区与语言字段，二者改由跨设备同步的偏好设置承载
- **调整** 聊天四张表改用严格租户隔离，租户态只看本租户、平台态只看平台会话
- **优化** 主题扩散动画的起点随偏好同步带到其它设备
- **修复** 聊天参与者与候选人按当前租户作用域收窄，不再拉进跨作用域成员
- **修复** 聊天候选人的 `In` 过滤此前被静默丢弃，作用域收窄形同未做
- **修复** 动态路由加载失败不再静默锁死在 404，改为跳 500 并允许刷新重试
- **修复** 设备指纹的音频分量改用离线渲染，消除同一设备两种指纹导致的设备变更误报
- **修复** SignalR 通知载荷的枚举统一投影为名称，Markdown 通知不再被当纯文本渲染
- **修复** 其它设备推来的语言变更真正生效
- **修复** 角色、权限、字段级安全、租户与字典等编辑弹窗改按详情回填，修复备注等字段被清空
- **修复** 用户详情补齐邮箱、手机与生日，修复编辑后被清空
- **修复** 接口报错改为显示后端返回的具体原因，165 处裸 catch 不再吞掉明细
- **修复** 登录日志落库设备指纹
- **修复** 参数配置的编辑与启停回到行操作，去掉对内置配置的过度限制
- **升级** 升级依赖，发布 v3.11.0

## v3.10.1 (2026-08-06)

::: warning 破坏性变更
版本管理改为只读：`SysVersion` 自此由升级引擎独占写入，`VersionAppService` 的五个写端点与 `saas:version` 的 create / update / upgrade / delete 四个权限码一并移除。另移除无调用方的 `TaskAppService.SyncAllActiveJobsAsync` 与 `code_gen:export` 权限码。调用过这些端点的自建客户端需要下线相应逻辑。
:::

- **新增** 接入框架升级引擎，`SysVersion` 与 `SysMigrationHistory` 成为其版本状态与迁移台账存储
- **新增** 实现维护模式，升级期间返回 503 并带 `Retry-After`，放行健康检查与发现文档
- **新增** 审计中心新增升级记录页，可查看每次脚本的执行结果与失败错误信息
- **新增** 权限授予改为批量提交，新增用户直授与版本权限两个批量端点
- **新增** 新增权限目录、启用岗位、启用部门与文件存储等不分页端点，下拉与子列表一次取全
- **新增** 新增统一权限授予面板 `XPermissionGrantPanel`，角色、用户直授与版本权限三处收敛
- **新增** 新增长文本编辑组件 `XContentEditorField`，公告、消息模板与代码生成模板正文改在弹窗内编辑
- **调整** 破坏性变更：版本管理改为只读，移除其五个写端点与四个 `saas:version` 权限码
- **调整** 破坏性变更：移除两个无调用方的写端点与 `code_gen:export` 权限码
- **调整** 退役自研迁移执行器，脚本统一由框架升级引擎执行
- **调整** 框架模块依赖与服务注册收归 `XiHan.BasicApp.Core` 与 `XiHan.BasicApp.Web.Core`
- **调整** 版本管理详情抽屉移除迁移台账，该数据改由升级记录页承载
- **调整** 各模块权限种子的资源标识改引用常量，不再重复书写字符串
- **优化** 权限目录、启用岗位与启用部门三个列表端点接入分布式缓存，并补齐岗位写路径的失效调用
- **优化** 租户成员列表接上分页，成员超过 200 的租户不再看不到剩余成员
- **优化** 内容编辑弹窗按视口撑满，编辑区不再受编辑器固定高度限制
- **修复** 修复 3.10.1 升级脚本使用大写标识符导致 PostgreSQL 报 42P01 并中断启动
- **修复** 小屏一律按垂直布局渲染，头部与侧栏不再绕过强制降级
- **修复** 修复组织机构、用户、角色与权限四处详情端点查询参数名与后端形参不符
- **修复** 修复批量删除接口路径参数未改走 query 导致的 404
- **修复** 修复用户权限直授切换授权动作报错，改为按用户与权限 upsert
- **修复** 补齐 AI、代码生成与工作流权限的模块编码，权限列表模块列不再为空
- **修复** 权限分组标题解析不出显示名时回退资源名，不再显示原始权限码
- **修复** 恢复误删的缓存按模式删除端点
- **升级** 升级依赖，发布 v3.10.1

## v3.10.0 (2026-08-05)

::: warning 破坏性变更
本版动态 API 的路径参数全面改走 query，接口 URL 随之改变（如 `GET /api/User/User/{id}` 变为 `GET /api/User/User?id=1`）。前端已随本版一并改完，自建客户端与外部调用方需同步调整。
:::

- **新增** 接入 OIDC，SSO 补齐发现文档、JWKS、id_token 与用户信息
- **新增** 新增容器化编排，一条命令拉起前端、后端与 PostgreSQL / Redis / Qdrant
- **调整** 破坏性变更：动态 API 路径参数全面改走 query
- **调整** 升级状态改为数据库台账驱动，废除 `version.txt` 状态机，并接入脚本失败记录能力
- **调整** 升级基础设施纳入租户独立库，各库自持版本与迁移台账（当前执行入口状态见[升级与迁移](./backend/upgrade)）
- **调整** 各模块自持 `PageRegistry`，菜单种子按编码幂等落库，页面缓存默认开启
- **调整** 一级菜单按功能域重排，新增 AI 应用与功能配置目录，日志独立为审计中心
- **调整** 菜单名统一：身份与权限改身份权限、租户改租户管理、AI 改 AI 应用
- **调整** MCP Server 改用框架 `Web.Mcp` 模块，应用层不再直接引用协议包
- **修复** 补齐 10 个端点漏标的授权特性，服务监控不再对任意登录用户开放
- **修复** 模块权限链种子改在平台租户上下文内播种，补回缺失的 7 个菜单
- **修复** 修复升级通道读取租户时启动崩溃
- **修复** 修复连接测试、同步表结构、重置应用密钥三处路由不一致导致的 404
- **修复** 表格局部全屏在暗色模式下底色为白
- **升级** 升级依赖，发布 v3.10.0

## v3.9.0 (2026-07-30)

- **新增** 聊天页接入 AI 助手，支持可配置多助手、流式回复推送与助手管理页
- **新增** 新增业务编号功能，支持按规则发号与周期重置
- **新增** 向量集合名与嵌入维度纳入 RAG 配置，连接测试同时探测会话与嵌入两个端点
- **新增** 新增向量库健康检查
- **调整** 发号统一独立提交，语义对齐数据库序列，编号发出即永久消耗
- **调整** 通道配置页迁入系统设置，开放平台目录合并
- **调整** 代码生成术语「机器 / 人类文件」改为「自动 / 手动文件」
- **优化** 代码生成模块编辑器换用 monaco-editor，代码预览弹窗放大
- **修复** 重设计业务编号发号并发方案，修复调用方事务内取号永不收敛
- **修复** 修复 AI 助手选择与会话打开的主键字段名与前端契约不一致
- **修复** 标签栏标题跟随语言切换
- **升级** 升级依赖，发布 v3.9.0

## v3.8.0 (2026-07-23)

- **新增** 代码生成产物按所有权分离为机器文件与手写文件，重新生成不再冲掉自定义实现
- **新增** 代码生成落地树表与主子表模板，主表行展开区按需加载子表明细
- **新增** 代码生成接通多数据源，可从外部库导入表结构
- **新增** 代码生成新增表配置推断引擎，导入即近乎零配置
- **新增** 代码生成支持同步表结构与批量导入，人工改过的字段冻结、未改的跟随重新推断
- **新增** 代码生成新增菜单与权限种子代码生成器，落地压缩为复制文件加重建库
- **新增** 代码生成新增生成范围与操作开关，按需裁剪前后端产物
- **调整** 移除 `.Local` 双份工程，框架引用改为按解决方案自动切换
- **修复** 登录日志补齐切换租户与会话撤销结果标签
- **修复** 自助踢下线不再给操作者本人发送会话撤销通知
- **修复** 修复会话撤销通知在 PostgreSQL 上抛空引用异常
- **修复** 修复锁屏遮罩卡死、背景透明与口令提示不实
- **修复** 修复错误页按钮贴合与返回首页仍停留在 404
- **修复** 主题切换扩散动画改从点击处开始
- **升级** 升级依赖，发布 v3.8.0

## v3.7.0 (2026-07-18)

- **新增** 新增工作流模块，含后端四表与领域服务、前端可视化设计器、通用图封装包
- **新增** 工作流设计器支持运行态可视化、工具栏与流程校验
- **新增** 接入 OpenAPI 签名网关，凭证密钥可逆加密并落数据库客户端存储
- **新增** 开放接口日志填充凭证归属用户名与 API 名称，配套端到端自测端点与脚本
- **新增** 新增统一编辑弹窗组件 `XEditModal` 与共享表单网格规范，全部新增编辑弹窗接入
- **新增** 列表骨架屏对应真实表格的列宽与行高
- **调整** 锁屏改为服务端强制，会话吊销在全部端点生效，移除全部客户端绕过口
- **调整** 会话锁定与锁屏解耦，锁屏只是锁定原因之一
- **调整** OpenApi 收敛为垂直切片，端点改为自动注册的动态 API，安全存储回归基础设施层
- **调整** packages 层去业务化，业务代码下沉 src，包管理 Catalogs 化
- **修复** 根治一页空白后全部空白，渲染核心禁用 `out-in` 过渡模式
- **修复** 修复 keep-alive 失效，路由名统一为唯一缓存标识
- **修复** 切换租户复用当前会话，杜绝重复登录设备与并发登录误报
- **修复** 修复锁屏可被新开标签页绕过
- **修复** SignalR 协商 401 借道会话刷新重试一次，失败即登出
- **修复** 用户主体自有行写入接入租户写入守卫显式豁免
- **修复** 修正开放接口保护路径被配置追加语义污染导致误伤前端
- **修复** 分表日志清理改用带表筛选的重载
- **修复** 修复 MySQL 索引长度问题与语言包 JSON 示例花括号转义
- **升级** 升级依赖，发布 v3.7.0

## v3.6.0 (2026-07-15)

::: warning 升级须知
本版跟随框架移除 `QueryBehavior`，前端不再传 `behavior` 与 `ignoreTenant`。数据变更日志依赖 `XiHan:Data:SqlSugarCore:EnableDiffLog`，而 `appsettings.Production.json` 被 gitignore，**生产环境需在服务器上手工补该键**。
:::

- **新增** 新增租户到期自动停用后台服务，到期后自动置为过期并失效版本门控与授权缓存
- **新增** 导出支持 Xlsx 格式，导出文件扩展名与 ContentType 跟随实际写出器格式
- **新增** SQL 升级脚本随发布自动执行
- **新增** 租户 Logo 支持上传，新增文档菜单、外链菜单图标与文件管理图标
- **调整** 破坏性变更：跟随框架移除 `QueryBehavior`，前端不再传 `behavior` 与 `ignoreTenant`
- **调整** 小屏禁用分屏并统一小屏断点判定
- **优化** 优化多语言并清理无用键，数据变更日志页链路追踪 ID 列移至用户名后
- **修复** 开启 `EnableDiffLog`，修复数据变更日志恒空
- **修复** 安全状态变更（密码 / 2FA 密钥 / 账号锁定）纳入数据变更日志
- **修复** 租户详情成员列表串租户与成员显示名恒空
- **修复** 修复雪花 ID 配置非法值
- **升级** 升级依赖，发布 v3.6.0

## v3.5.0 (2026-07-10)

- **新增** 激活 OpenTelemetry 可观测性装配，链路可导出至 OTLP 后端
- **新增** 新增链路追踪查询页，含时间线聚合查询与卡片化时间线视图
- **新增** 新增权限变更日志独立页，授权写路径全链路接线并快照名称与操作 IP
- **调整** 登录日志 `TraceId` 口径统一收口到 `ITraceIdProvider`
- **修复** 根治布局滚动模型，内容区定高内部滚动
- **修复** 角色权限抽屉仅按有效授权判定勾选
- **升级** 升级依赖，发布 v3.5.0

## v3.4.0 (2026-07-08)

- **新增** 接入 Gitee 第三方登录，含后端配置、种子与前端 Provider
- **移除** 移除演示模式与演示环境写操作拦截
- **升级** 升级依赖，发布 v3.4.0

## v3.3.0 (2026-07-08)

- **调整** 审计写入器与上下文引用迁移至框架新包 `XiHan.Framework.Auditing`
- **优化** 清理未使用的历史遗留前端组件
- **修复** 控制中心修复超管进入平台管理，当前态收敛为单一事实源，命名统一
- **修复** 导出全部只导出首页，请求页大小对齐框架最大页大小
- **升级** 升级依赖，发布 v3.3.0

## v3.2.0 (2026-07-06)

- **新增** 新增 `XiHan.BasicApp.AI` 模块，支持 AI Provider 库化管理与配置页
- **新增** 新增知识库（RAG），含文档管理、检索试玩与 Provider 嵌入模型
- **新增** 新增知识检索技能与 MCP Server，支持应用管理密钥
- **新增** 新增提示词库与 AI 提示词管理页
- **新增** 代码生成器支持代码高亮与表级结构字段暴露
- **新增** 代码生成支持字典三分（字典 / 枚举 / 常量），外键关联不入生成代码
- **新增** 代码生成即产出菜单与按钮权限代码片段，支持树表与主子表上下文
- **新增** 聊天支持粘贴图片与文件直接发送，一条消息支持多附件
- **优化** 秒传改为探测语义，未命中返回空不再报错
- **优化** 默认不打印 SQL，appsettings 补主从配置示例与逐节注释
- **修复** 登录 500，锁定时间标量投影类型硬转崩溃
- **修复** 代码生成改用原生 Scriban 渲染，修复模板变量不替换与未找到可用模板
- **修复** 响应信封判定改用 `isSuccess` 主判据，修复空数据被整包透传
- **升级** 升级依赖，发布 v3.2.0

## v3.1.0 (2026-07-03)

- **新增** 新增在线聊天系统，支持单聊、群聊与部门群
- **新增** 聊天支持回复、编辑、限时撤回、已读回执、表情回应、转发与附件秒传
- **新增** 聊天群治理与安全，支持群信息编辑、转让群主、成员禁言与敏感词拦截
- **新增** 通知支持四渠道扇出投递，可达站内信、邮箱、短信与机器人
- **新增** 新增 OAuth2 授权服务端，支持授权码、PKCE 与令牌轮换
- **新增** 新增租户数据库级隔离，支持独立建库、连接串加密与初始化数据库
- **新增** 消息网关配置迁入数据库并加密，短信实装阿里云与腾讯云真实发送
- **新增** 新增用户职位管理、健康检查与日志保留清理定时任务
- **调整** 消息网关未配置时 fail-closed，不再假成功
- **优化** 仪表盘与小组件合并，聊天输入区与右键菜单优化
- **优化** 顶部横幅公告升级，支持类型配色、关闭记忆与轮播
- **修复** 聊天实时链路雪花 ID 精度丢失
- **修复** 多语言文案裸 @ 导致白屏
- **修复** 通知横幅顶部空白条及多项聊天交互问题
- **升级** 配置真加密、存储密钥加密与短信验证码防刷等安全加固
- **升级** 升级依赖，发布 v3.1.0

## v3.0.1 (2026-06-27)

- **新增** 新增代码生成模块与配套权限链
- **新增** 消息中心重构，支持五类消息分级、角色与部门定向投递、强制阅读与运营闭环
- **新增** 全栈国际化铺量，后端异常与枚举资源化，前端业务页中英双语
- **新增** 表格支持服务端多字段动态排序、搜索时间区间与枚举多选
- **新增** 新增工作台小组件看板与 Cron 表达式可视化组件
- **新增** 超级管理员可进入所有租户并快捷登录
- **调整** 分页查询统一改走 POST，查询对象作为请求体
- **调整** 标准化表名与列名，种子数据按代码生成、演示与系统基线解耦
- **优化** 枚举元数据整库取一次并全局语言监听，切换语言由多次请求降为一次
- **优化** 修复 Cron 组件卡顿与浅色主题深色侧栏不变暗
- **升级** 升级依赖

## v3.0.0 (2026-06-20)

- **新增** 上线第三方登录与邮箱全局唯一登录，配套控制中心与租户切换入口
- **新增** 新增导出中心，全部列表页零配置获得同步导出，日志大表支持异步导出
- **新增** 列表页全量铺开细粒度权限门控，导入导出与批量操作按资源逐一门控
- **新增** 新增在线用户实时视图、个人 API 凭证、用户统计聚合与消息模板管理
- **新增** 文件管理支持多文件并发上传、回收站三段式与下载访问计数
- **调整** 线上发布与本地测试分离，异常统一化输出
- **调整** 种子数据正式化并移除演示数据
- **优化** 灵动岛重构为任务中心模型，支持进度环、三态形变与服务端任务
- **优化** 偏好、搜索、表格与收藏夹同步由手动推送升级为实时推拉
- **优化** 优化仪表盘、字典、菜单与登录页样式

## v2.3.1 (2026-06-11)

- **新增** 新增分屏与双栏对照功能，支持左右屏内容互换与分屏打开
- **新增** 页面设置升级为用户设置，偏好支持后端同步与草稿式预览、保存、还原
- **新增** 新增灵动岛开关、全屏水印与页面加载动画
- **调整** 顶部刷新按钮改为整页刷新
- **优化** 分屏交互打磨，互换时分割线固定，左右切换不再刷新
- **修复** 修复分屏左右屏空隙背景不一致

## v2.3.0 (2026-06-10)

- **新增** 引入 Schema 驱动页面框架，数十个列表页迁移其上
- **新增** Schema 页内置高级搜索、列设置、视图管理、树形模式与导出
- **新增** 落地字段级权限，新增管理页、服务端读脱敏引擎与写校验
- **新增** 授权申请接入审批流并审批通过自动授权，新增权限委托
- **新增** 完善多租户体系，含平台运维闸门、租户切换与套餐运行时门控
- **新增** 新增动态取色、命令面板、灵动岛、菜单收藏夹、自主注册与找回密码
- **新增** 个人中心重设计，头像上传落地，通知偏好全栈保存
- **调整** 拆分用户、权限与个人中心等上帝服务为子聚合服务
- **调整** 前端契约类型下沉 packages，查询改用类型安全条件
- **优化** 权限、菜单、部门树与租户版本接入分布式缓存并补齐失效链路

## v2.2.0 (2026-03-14)

- **新增** 权限模型从 RBAC 升级为 RBAC 加轻量 ABAC，引入拒绝优先权限引擎
- **新增** 接入统一授权变更事件与权限缓存版本失效机制，变更后即时生效
- **新增** 前端全面重建，含偏好设置、多种布局模式、主题色系与图标选择器
- **新增** 新增 OpenAPI 加密、离线图标、可复用表格组件与系统监控页
- **新增** 补齐认证链路 2FA 与多端会话策略
- **调整** 项目整体升级为 SaaS 形态并重构应用结构
- **调整** RBAC 收敛为聚合与关系仓储语义
- **修复** 修复菜单图标与名称显示、刷新跳转 404、标签栏错位

## v2.0.0 (2026-01-26)

- **新增** 落地全新 RBAC 权限模型，完成认证授权链路与权限数据范围
- **新增** 补齐核心业务服务，含日志、通知、用户会话、账号安全与风控
- **新增** 接入代码生成能力并生成基础业务实体
- **调整** 仓储与服务层整体重构，统一命名空间、主键与表名规范
- **优化** 优化种子数据初始化与实体序列化，完善数据库配置
- **升级** 升级底层框架依赖，发布 v2.0.0

## v1.4.5 (2025-11-12)

- **调整** 合并多批补丁与优化改动
- **优化** 统一优化各系统实体的基础数据类型定义
- **升级** 升级底层依赖，发布 v1.4.5

## v1.4.3 (2025-10-31)

- **升级** 升级底层依赖，发布 v1.4.3

## v1.4.1 (2025-10-19)

- **升级** 升级底层依赖，发布 v1.4.1

## v1.3.6 (2025-10-18)

- **升级** 升级框架依赖，发布 v1.3.6

## v1.3.5 (2025-10-16)

- **优化** 优化实体数据结构
- **优化** 优化整体实现细节
- **升级** 升级框架依赖，发布 v1.3.5

## v1.3.0 (2025-09-20)

- **优化** 优化整体实现细节
- **升级** 升级框架依赖，发布 v1.3.0

## v1.2.1 (2025-09-08)

- **新增** 定义系统核心实体，搭建基础数据模型
- **新增** 实体主键支持泛型 ID
- **优化** 优化整体实现细节
- **升级** 升级框架依赖，发布 v1.2.1

## v0.11.1 (2025-06-25)

- **升级** 升级底层框架依赖，发布 v0.11.1

## v0.9.3 (2025-06-03)

- **优化** 优化整体代码结构
- **移除** 移除核心包中尚未实现的空壳子包
- **升级** 升级底层框架依赖

## v0.8.28 (2025-05-06)

- **优化** 优化代码生成脚本模板与整体细节
- **升级** 连续发布 v0.8.26 至 v0.8.28

## v0.8.20 (2025-04-02)

- **升级** 发布 v0.8.20

## v0.8.18 (2025-03-19)

- **升级** 同步依赖，发布 v0.8.18

## v0.8.17 (2025-03-18)

- **优化** 优化启动配置

## v0.8.10 (2025-01-27)

- **优化** 常规细节优化与打磨

## v0.8.9 (2025-01-21)

- **升级** 升级依赖包版本

## v0.8.7 (2025-01-05)

- **新增** 初始搭建基础应用框架与分层解决方案骨架
- **新增** 新增权限模块与代码生成模块
- **新增** 提供完整示例项目与 API 测试入口
- **优化** 重命名项目以兼容 macOS
