# Changelog

All notable changes to `@yidun/antd-super-table` will be documented in this file.

## 0.1.34

- 🐛 场景选中值 `sceneCode` 改为独立 localStorage key（`superTable_*_sceneCode` / `superQuery_*_sceneCode`）持久化，不再参与 `useStorage` 的跨 tab 响应式同步；一个 tab 切换场景不会影响其他已打开 tab
- ♻️ 兼容旧数据：首次升级时从原共享 `sceneCode` 自动迁移；其他场景列表、列配置等 localStorage 数据继续沿用原存储逻辑

## 0.1.33

- ✨ 新增多语言支持：内置中文（`zhCNLocale`）与英文（`enUSLocale`）语言包，中文为默认
  - 三层联动：组件自身文案（`messages`）＋ antd 内置文案（`antdLocale`）＋ 日期组件语言（`dayjsLocale`），三者均可独立覆盖
  - 全局配置 `setSuperTableLocale(locale)` 一次生效所有实例；单实例 `:locale="xxx"` 覆盖；旧用法（直接传 antd locale 对象）兼容
  - 导出 `setSuperTableLocale` / `getSuperTableLocale` / `zhCNLocale` / `enUSLocale`，新增类型 `SuperTableLocale` / `SuperTableMessages`
- 🐛 修复 overlay 弹窗（场景配置 / 场景管理）内 antd 文案硬编码中文、未跟随 `locale` prop 的问题
- 🐛 移除 `dayjs.locale('zh-cn')` 硬编码，改为按语言动态设置，避免组件库强切宿主 dayjs 全局语言

## 0.1.32

- ✨ 新增独立查询组件 `SuperQuery`：仅负责查询区与场景，不含表格与 `request`；通过 `@search` 回传查询参数，本地存储键为 `superQuery_*`（与 `SuperTable` 的 `superTable_*` 隔离）
  - 实例标识使用 `queryKey`（对应场景的 `type` / 存储维度），**非** `sceneType`
  - `enableScene` 默认 `false`；`form-item-change` 回调不含表格 `tableOperations`
  - 导出类型：`SuperQueryExpose`、`SuperQuerySlots`、`SuperQueryInstance`、`SuperQueryReloadOptions`、`SuperQueryFetchSource`
  - 示例：`example/query.vue`、`query.html`
- 🐛 修复表格固定列（吸附列）横向滚动时相邻 `td` 及最左/最右外缘出现 1px 透明缝隙、底层内容透出的问题（`border-collapse: separate` + sticky 分 cell 背景）
- 🐛 查询区 `type: 'component'` 且 `showLabel: false` 时垂直居中（如 `Switch`），与同行表单项对齐
- 💄 单元格 `column.align` 透传至 `EllipsisElement`：`center` / `right` 时按钮、标签等多元素列可水平居中；`min-width: 0` 仅作用于 `text` / `link` 省略项，避免 tag、button 等被错误压缩

## 0.1.31

- 🐛 修复高级筛选弹窗（`SceneConfigModal`）「设置查询条件」中选择字段名后，多次 focus 字段名下拉导致控制台报错、下拉浮层异常的问题（如选择「角色 ID」「账号」等含 `type: 'component'` 自定义组件的字段）
  - 现象：`Invalid VNode type: undefined`、`Cannot read properties of null (reading 'emitsOptions')`；部分场景下拉无法收起或浮层残留
  - 根因：`getFieldOptions` 将完整 `SuperTableFormItem`（含 `component`、`props` 等）直接作为 `a-select` 的 `options`，分组渲染时 Ant Design Vue 将组件引用误判为 VNode
  - 修复：下拉选项仅返回 `{ label, name }` 纯数据；`innerFormConfigMap` 初始化时对自定义 `component` 执行 `markRaw`，避免 reactive 包裹组件引用
- ↩️ 回退 `0.1.30` 的拖拽库迁移（`vue-draggable-plus` → 恢复 `vuedraggable@4`）：经复现验证，高级筛选弹窗报错与拖拽库无关，无需替换依赖

## 0.1.30

- 🔧 拖拽库 `vuedraggable@4` 替换为 `vue-draggable-plus@0.6.1`（`DynamicList` / `TableConfig` / `TableConfigModal` / `SceneListModal`）
- ⚠️ 未解决高级筛选弹窗字段名下拉报错问题；请升级至 `0.1.31`

## 0.1.29

- ✨ 新增 `tablePrefix` 插槽（`0.1.29`）：
  - 位置：查询区（`query-section`）与表格区（`table-wrapper`）之间
  - 行为：有插槽内容才渲染容器，无内容不占位；库内不解析插槽内容、不传 scope
  - 间距：仅当 `queryTableGap=true`（含未传且 `enableScene=false` 的默认）时容器 `margin-bottom: 16px`，与查询区块间距一致；`queryTableGap=false`（含未传且 `enableScene=true` 的默认贴合布局）时不加 `margin-bottom`
  - 典型用途：查询后的统计指标卡、汇总条等通栏内容；与 `tableHead`（表格卡片内 toolbar）区分
  - 示例：`example/index.vue` 工具栏可开关「tablePrefix」查看指标卡演示

## 0.1.28

- 🐛 查询区 `showLabel: false` 的自定义组件：`.form-field-control` 内 `width: 100%` 仅作用于**直接子级** ant 控件，避免 compact group（如风险标签「或/且 + TreeSelect」）内嵌套 `ant-select` 被逐个撑满导致宽度与高度错乱

## 0.1.27

- 🐛 修复无场景（`enableScene: false`）时 `setFormItem(name, 'visible', boolean)` 仍不展示：同步更新 `_selected`（如初始 `visible: false` 的 `scope` 在联动设为 `true` 后仍 `_selected: false` 的问题）
- 🐛 无场景 localStorage 恢复 `cache: true` 字段后补发 `form-item-change`，业务可继续做 level → scope 等联动
- 🐛 `formItems` deep watch 合并已存在项时不再用静态 `visible` / `_selected` 覆盖运行时配置

## 0.1.26

- 🐛 修复开启场景时 `setFormItem(name, 'visible', boolean)` 动态显隐不生效：查询区与 `getFormValues` 统一按 `_selected && visible !== false` 过滤（新增 `isFormItemActive`）
- 📚 示例新增「隐藏/显示 多选」按钮，便于验证有/无场景下的 `visible` 切换

## 0.1.25

**查询区 `type: component` 布局修复（请直接升此版本，勿停在 0.1.23/0.1.24）** — 升级步骤见 [docs/upgrade-component-query.md](./docs/upgrade-component-query.md)

- 🐛 `showLabel: false`：无左侧标签，`.form-field-control` + `:deep` 使内部 `ant-select`/`cascader` 等 `width: 100%`（修复约 90px 宽）
- 🐛 `showLabel !== false`：与其它查询项一致走 input-group（左侧标签 + `calc(100% - 标签宽)`），修复 v0.1.14 误排除所有 `component` 的问题
- 🐛 默认 `width: 100%`（0.1.23）；不再向自定义组件透传 `inModal`（0.1.24）

## 0.1.24

- 🐛 修复 v0.1.14 起将所有 `type: 'component'` 排除在查询区 input-group 外的问题：未设 `showLabel: false` 时与其它查询项一致（左侧标签 + `calc(100% - 标签宽)`）
- 🐛 `showLabel: false` 的 `component` 不占左侧标签，由组件库默认 `width: 100%` 撑满栅格（业务无需在 `props.style` 写宽度）
- 🔧 自定义组件不再透传 `inModal` 到根节点，避免 DOM 上出现无效 `inmodal` 属性

## 0.1.23

- 🐛 恢复 `type: 'component'` 查询项默认 `width: 100%`；查询区走 input-group 时由 `calc(100% - 标签宽)` 控制；可通过 `formItem.props.style.width` 覆盖
- 📚 示例新增 `enabledSwitch`（`Switch` 自定义查询项，未配置宽度，便于验证布局）

## 0.1.22

- 💄 表格列固定（吸附）：「固定在左侧 / 右侧」操作图标由上下对齐改为左右对齐（左侧 `VerticalRightOutlined`、右侧 `VerticalLeftOutlined`），与列固定方向一致

## 0.1.21

- ✨ 新增 `autoRequest`、`requestOnFormItemChange`、`formItem.requestOnChange`：拆分自动拉数与表单项变更请求；`quiet` 保留
- ♻️ `autoSearch`、`searchOnFormItemChange` 标记废弃：未传 `autoRequest` 时 `autoSearch` 仍控制无场景旧版总闸；初始化时 `console.warn` 提示下个大版本移除
- ♻️ 暴露方法 `reload(options?)` 替代 `onRefresh`；`onRefresh` 保留为别名并 `console.warn` 废弃提示；导出类型 `SuperTableReloadOptions`、`SuperTableFetchSource`
- ✨ 新增 `queryTableGap`：未传时与原先一致（有场景无间距、无场景有间距），传入后以用户值为准
- 💄 查询区与表格圆角对齐 `theme.token.borderRadius`；`queryTableGap` 控制区块间距与圆角形态
- 🐛 `tableProps.rowKey` 可配置，未传时仍默认 `'id'`
- 💄 操作列按钮行（`EllipsisElement`）link 按钮左对齐
- 📚 示例：`autoRequest` / `requestOnFormItemChange` / `queryTableGap` 演示

## 0.1.20

- 🐛 场景与查询条稳定性修复（`sceneCode` 回落、空列表不覆盖 `_selected`、`enableScene` 竞态、`deleteScene` 时机等，详见 0.1.19）

## 0.1.19

- ✨ 新增 `queryTableGap`：控制查询区与表格间距；未传时与原先一致（有场景无间距、无场景有间距），传入后以用户值为准
- 🐛 修复 `sceneCode` 无法匹配或 `currentScene` 为空时误用空列表同步，导致全部 `_selected` 为 false、整块查询区（无场景时含「查询 / 重置」）不渲染的问题；`updateformConfigMapBySceneItems` 默认不再应用空列表，仅显式允许空选中的路径（高级筛选确定、删除当前场景等）可清空
- 🐛 `enableScene=false` 时不再执行场景同步 watcher，避免与无场景初始化竞态、误清空 `_selected`
- 🐛 `queryScene`：接口返回场景列表但本地 `sceneCode` 无匹配时，回落选用列表首条并写回 `sceneCode`
- 🐛 `deleteScene`：在清空 `sceneCode` 之前判断是否为当前场景，删除当前场景后正确执行清空选中逻辑

## 0.1.18

- ✨ 无场景 `enableScene=false` 时支持查询项 `cache`：与 `advancedFilterItems` 共用 `superTable_*` 本地存储，查询前写入 `cachedFormValues`，下次进入恢复；`serializeStoredFormFieldValue` / `reviveStoredFormFieldValue` 处理 dayjs、范围选择、数字范围、输入框组等形态
- 🐛 无场景重置时同步落盘 `cache` 字段，避免 `autoSearch=false` 等情况下仍沿用旧缓存
- 🐛 场景项未带 `value` 时回落表单项 `_defaultValue`，并对写入值做 revive，避免与运行态旧值不一致
- 🐛 `formConfigMap` 深度合并时剥离静态配置上的 `value`，保留本地恢复后的运行值，避免 rangePicker/dayjs 等被默认值冲掉
- ✨ 查询区操作栏拆分为插槽 `searchActionsExtraBefore`（内置重置/查询/展开之前）与 `searchActionsExtraAfter`（之后）；原 `searchActionsExtra` 仍兼容，内容渲染在 `After` 之后
- ♻️ `searchOnFormItemChange`：输入框、数字框、输入框组、数字范围不再「每次输入变更」自动查询，改为回车或组合内提交语义触发；移除输入类 500ms 防抖；`triggerManualSearch` 调用 `onSearch.flush()` 避免 debounce 读到旧表单
- 🗑️ 主查询条移除内置「高级筛选」按钮（`enableAdvancedFilter` 时通过 `openAdvancedFilter()` 或 `tableHead` / `searchActionsExtraBefore` / `searchActionsExtraAfter` / 兼容旧名 `searchActionsExtra` 等自行放置入口）
- 💄 `EllipsisElement`：间距 token 调整、竖向/图片行对齐、`imageEllipsisTag` 尺寸与居中；`maxRows` 溢出检测改为观察容器并补充 list/尺寸变化后的重测与清理
- 🐛 `maxRows` 列 `v-memo` 依赖补充行维度（含 `record` / rowKey），避免折叠测量与重绘脱节；展开区按钮列支持 `expandFlexDirection: 'column'` 纵向样式
- 📚 示例：`cache` 演示、select 动态 options 与缓存/初始化时序对齐、长文案列测省略

## 0.1.17

- ✨ 新增 `tableConfigMode` prop：支持 `'popover'`(默认，右侧弹出层) 和 `'modal'`(居中弹窗) 两种表格设置模式
- ✨ Modal 模式表格设置弹窗：宽度 1200px，分为全选/使用中字段/未使用字段三个区域
  - 使用中字段按固定状态分组（左固定/不固定/右固定），网格卡片布局，支持拖拽排序和固定切换
  - 未使用字段按 `group` 聚合分组，支持关键词搜索
  - 草稿模式：确定后一次性保存，取消即丢弃
  - 至少选一项才能确定，重置恢复为初始 columns 配置
- ✨ `SuperTableColumn` 新增 `group` 和 `groupTitle` 字段：用于未使用字段分组展示
- ✨ 自实现列宽拖拽：替换 antd 内置 DragHandle，解决拖拽中其他列被挤压/跳动的问题
  - 拖拽中渲染蓝色指示线，松手后一次性更新列宽 + scroll.x + storage
  - 吸收列机制：最后一个非固定列不设 width，接收剩余宽度；出现横向滚动后自动恢复宽度
  - `SuperTableColumn` 新增 `minWidth`/`maxWidth` 支持列级宽度限制
- ✨ `SuperTableFormItem` 新增 `group` 字段：高级筛选弹窗中字段选择下拉框按分组展示
- ✨ 文本列 `ellipsis` 支持关闭：`ellipsis: false` 时自动换行，默认开启单行省略
- ✨ ConfigProvider theme token 新增 `wireframe: true`，并由 `useOverlay` 弹窗系统同步
- ♻️ 弹窗系统重构：`dialogManager`(createApp + mount) → `useOverlay`(render + appContext 继承)
  - 弹窗继承父级 appContext（router/store），ConfigProvider theme 通过 `setOverlayTheme` 同步
- ✨ `SuperTableColumn` 新增 `expandFlexDirection`：展开区域（描述组件）布局方向，默认 `'row'` 横向换行，与表格内 `flexDirection` 解耦
- 📚 示例新增 `tableConfigMode` 切换、`group` 分组、`ellipsis: false` 自动换行、表单 `group` 分组

## 0.1.16

- ✨ 列配置新增 `maxRows`：基于视觉行检测的溢出折叠模式，替代 `maxCount` 的个数截断
  - 设置后 `EllipsisElement` 启用内联「展开(N)/收起」按钮，替代 popover/dropdown
  - 通过 `offsetTop` 检测子元素行号，`ResizeObserver` 响应容器尺寸变化
- 💄 展开区域 `a-descriptions` 默认启用 `bordered` + `label-style="{ width: '150px' }"`
- 🐛 修复列宽拖拽时 columns 反复重建导致关联列异常跳动：改为直接修改渲染列宽度，storage 持久化 debounce 300ms
- 🐛 修复无内容字段在主表格显示空而展开区显示 `-` 不一致的问题（`formatExpandValue` 空值 → `''`）
- 🐛 修复 `slotName` 列无 `type`/`content` 时单元格空白（`TableCellContent` 兜底 `content` → `'-'`）
- 📚 示例新增「标签列表(行折叠)」列（`maxRows: 1`）

## 0.1.14

- ✨ 查询条件操作区新增插槽 `searchActionsExtra`：与内置查询/重置/高级筛选/展开同一行右侧，作用域参数 `loading` / `search` / `reset`
- 🐛 修复关闭「展开/收起」时，若本地缓存为收起态导致仅显示第一行查询条件的问题
- 🐛 修复 `type: 'component'` 查询项误走 input-group 从而在左侧展示 label 的问题（与 `showLabel` 语义一致）
- 🔧 修复构建：`SuperTable.vue` 补充 `SuperTableDataItem` 类型导入，保证 `vue-tsc` 生成声明通过
- 📚 类型：`SuperTableSearchActionsExtraSlotProps`、`SuperTableSlots.searchActionsExtra`
- 📚 文档：`README` 补充 `searchOnFormItemChange`、`showExpandButton`、`showResetButton` 及插槽示例（修正 `toolBar` → `toolBarExtra`）

## 0.1.13

- 🔧 `addonAfter` 展示条件收紧：仅在显式配置非空对象且表单项类型为 `input`（支持 antd Input 的 `addonAfter` 插槽）时渲染；空配置 `{}` 不展示

## 0.1.12

- ✨ 查询项 `input` 新增 `addonAfter` 能力：
  - 支持 `link + small` 按钮
  - 支持 `text / className / show / disabled / onClick` 配置
  - 兼容历史错拼字段 `addonAffter`、`addonAter`
- 🧩 查询项视觉与交互优化：
  - `FormFieldItem` 拼接样式优化，减少 label 与输入组件边框断点和缝隙
- ✨ 请求行为增强：
  - 新增 `autoSearch`，支持关闭自动请求并保留手动查询能力
  - `customQueryParams` 在请求阶段持续合并，切换场景后依然生效
- ✨ 新增 `enableAdvancedFilter`：
  - 支持 `enableScene=false` 时独立使用“高级筛选”弹窗
  - 不开场景时可按 `fixed/selected` 控制默认展示项
- 📚 文档与示例更新：
  - 更新 `README` API/用法说明
  - 更新 `example`：新增独立高级筛选开关示例

## 0.1.10

- ✨ 支持通过列配置 `slotName` 渲染自定义单元格插槽：
  - 当 `column.slotName` 命中外层具名插槽时，优先使用插槽渲染
  - 未命中时保持原有 `table-cell-content` 渲染逻辑（`type/component` 等）不变
- ✨ 新增自定义单元格插槽类型声明：
  - `SuperTableColumn` 新增 `slotName?: string`
  - `SuperTableSlots` 支持动态具名插槽索引签名
- 💄 插槽单元格样式增强：
  - 自定义插槽分支新增独立容器样式
  - 对插槽内容设置 `white-space: normal`，避免受单行文本策略影响
- 📚 示例更新：
  - `example/tableColumns.ts` 增加 `slotName` 列示例
  - `example/index.vue` 增加多行列表 + 非纯文本元素（badge/button/tag）插槽示例
- ✨ 查询条件新增 `tooltip`（`string | number`）：
  - 主页面查询条件标签支持 icon + tooltip（默认 `placement="top"`）
  - 场景弹窗筛选条件行支持 icon + tooltip（默认 `placement="top"`）
- 🎯 布局一致性优化：
  - 查询条件标签区域按 tooltip 图标预留宽度，避免输入区域换行或遮挡
  - 场景弹窗统一预留 tooltip 占位，无 tooltip 时不展示 icon 但保留宽度

## 0.1.6

- 🐛 修复依赖问题：将 `jsonpath-plus` 从 `optionalDependencies` 移到 `dependencies`，解决其他项目使用 `npm ci` 时的依赖缺失问题
- ✨ 优化场景初始化：当没有选中过场景 code 且有默认场景时，自动选中默认场景并触发查询
- 📝 示例代码优化：添加默认场景配置示例，新增清空缓存功能，场景功能默认开启

## 0.1.2

- 新增 `tableWrapperStyle` 属性，支持自定义表格容器样式
- 修复 `toolBarExtra` 插槽在未提供 `tableHead` 时无法展示的问题
- 修复 `rowKey` 为函数时构建声明文件的类型错误

## 0.0.7

- 🔄 **重构场景管理 API**：`sceneRequestUrls` 重构为 `sceneRequest`，由 URL 字符串改为请求函数，便于自定义逻辑与错误处理
- 🔧 **错误处理**：`sceneStorageType` 为 `api` 但未配置 `sceneRequest` 时给出明确提示并降级
- 🗑️ **架构**：移除 `apiSceneService` 中间层，直接使用 `sceneRequest`
- 📚 **文档**：补充本地 / API 两种存储模式说明与示例
- 🖼️ **文档资源**：示例图改为 CDN，修复 npm 包内图片无法展示的问题

## 0.0.6

- 🐛 修复场景管理相关问题
- 🐛 修复表格列配置缓存问题
- 💄 优化 UI 样式与交互

## 0.0.2

- ✨ 表格拖拽排序、表格配置、自定义查询参数、多种插槽、级联/树形选择等能力
- 🐛 场景与列配置相关问题修复
- 📚 TypeScript 类型与文档示例完善
