@qynpm/ui 1.0.24 → 1.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +229 -229
  2. package/dist/index.cjs +11 -11
  3. package/dist/index.mjs +11 -11
  4. package/dist/qy-action-bar/index.cjs +1 -1
  5. package/dist/qy-action-bar/index.mjs +1 -1
  6. package/dist/qy-checkbox/index.cjs +1 -1
  7. package/dist/qy-checkbox/index.mjs +1 -1
  8. package/dist/qy-checkbox-group/index.cjs +1 -1
  9. package/dist/qy-checkbox-group/index.mjs +1 -1
  10. package/dist/qy-dialog/index.cjs +1 -1
  11. package/dist/qy-dialog/index.mjs +1 -1
  12. package/dist/qy-file-picker/index.cjs +1 -1
  13. package/dist/qy-file-picker/index.mjs +1 -1
  14. package/dist/qy-form-section/index.cjs +1 -1
  15. package/dist/qy-form-section/index.mjs +1 -1
  16. package/dist/qy-image/index.cjs +1 -1
  17. package/dist/qy-image/index.mjs +1 -1
  18. package/dist/qy-image-upload/index.cjs +1 -1
  19. package/dist/qy-image-upload/index.mjs +1 -1
  20. package/dist/qy-input-number/index.cjs +2 -0
  21. package/dist/qy-input-number/index.mjs +2 -0
  22. package/dist/qy-legacy-selection-dialog/index.cjs +1 -1
  23. package/dist/qy-legacy-selection-dialog/index.mjs +1 -1
  24. package/dist/qy-menu-actions/index.cjs +1 -1
  25. package/dist/qy-menu-actions/index.mjs +1 -1
  26. package/dist/qy-money-input/index.cjs +1 -1
  27. package/dist/qy-money-input/index.mjs +1 -1
  28. package/dist/qy-radio/index.cjs +1 -1
  29. package/dist/qy-radio/index.mjs +1 -1
  30. package/dist/qy-radio-group/index.cjs +1 -1
  31. package/dist/qy-radio-group/index.mjs +1 -1
  32. package/dist/qy-record-quote-search/index.cjs +1 -1
  33. package/dist/qy-record-quote-search/index.mjs +1 -1
  34. package/dist/qy-remark-image/index.cjs +1 -1
  35. package/dist/qy-remark-image/index.mjs +1 -1
  36. package/dist/qy-remote-select/index.cjs +1 -1
  37. package/dist/qy-remote-select/index.mjs +1 -1
  38. package/dist/qy-search-input/index.cjs +1 -1
  39. package/dist/qy-search-input/index.mjs +1 -1
  40. package/dist/qy-select/index.cjs +1 -1
  41. package/dist/qy-select/index.mjs +1 -1
  42. package/dist/qy-selection-dialog/index.cjs +1 -1
  43. package/dist/qy-selection-dialog/index.mjs +1 -1
  44. package/dist/qy-switch/index.cjs +1 -1
  45. package/dist/qy-switch/index.mjs +1 -1
  46. package/dist/qy-table-column-settings/index.cjs +1 -1
  47. package/dist/qy-table-column-settings/index.mjs +1 -1
  48. package/dist/qy-tag/index.cjs +1 -1
  49. package/dist/qy-tag/index.mjs +1 -1
  50. package/dist/qy-upload/index.cjs +1 -1
  51. package/dist/qy-upload/index.mjs +1 -1
  52. package/dist/shared/{index-B_mI-37S.cjs → index-9v7CIwzO.cjs} +1 -1
  53. package/dist/shared/{index-DJnmpqCc.mjs → index-B7uyWUhS.mjs} +2 -2
  54. package/dist/shared/{index-ClmefDi6.cjs → index-BF1_Rib_.cjs} +1 -1
  55. package/dist/shared/{index-BYme5QGm.cjs → index-BTPk2zzq.cjs} +1 -1
  56. package/dist/shared/{index-dEWJKTS-.cjs → index-BcCZMWAj.cjs} +1 -1
  57. package/dist/shared/{index-aiJ7R6G-.cjs → index-C1YwUATr.cjs} +1 -1
  58. package/dist/shared/{index-fBuu4V3A.mjs → index-C6jcSQSF.mjs} +1 -1
  59. package/dist/shared/{index-c7lnX4vT.mjs → index-C98mN7sQ.mjs} +14 -14
  60. package/dist/shared/{index-DixSXWJj.mjs → index-CbCpXtYr.mjs} +5 -5
  61. package/dist/shared/{index-BrV6CR4H.mjs → index-Cl5cuyVG.mjs} +1 -1
  62. package/dist/shared/{index-wIXCDvwC.cjs → index-CuusBxhR.cjs} +1 -1
  63. package/dist/shared/{index-DMGXEAyl.mjs → index-DZroPZ8B.mjs} +8 -8
  64. package/dist/shared/{index-M4vEHYZ_.cjs → index-DmhpD4Cp.cjs} +1 -1
  65. package/dist/shared/{index-8u4DJZwd.mjs → index-DrJuMzr1.mjs} +1 -1
  66. package/dist/shared/{index-CczrP1H7.mjs → index-Du2IqeCI.mjs} +1 -1
  67. package/dist/shared/{index-C8CA7nkO.cjs → index-EGnVOaC9.cjs} +1 -1
  68. package/dist/shared/{index-9WJeVamR.cjs → index-QQkDJv3q.cjs} +1 -1
  69. package/dist/shared/{index-DYohs_aV.mjs → index-R5B1rjXo.mjs} +1 -1
  70. package/dist/shared/{index-BDFscU3G.mjs → index-yf2Ijz_G.mjs} +5 -5
  71. package/dist/shared/{index-CTtAQ1LD.cjs → index-zJN0M-bx.cjs} +1 -1
  72. package/dist/shared/{index.vue_vue_type_script_setup_true_lang-tyM4_aoa.cjs → index.vue_vue_type_script_setup_true_lang-C3F8M9sD.cjs} +1 -1
  73. package/dist/shared/{index.vue_vue_type_script_setup_true_lang-DmmW8UUK.mjs → index.vue_vue_type_script_setup_true_lang-CKZHI_y-.mjs} +1 -1
  74. package/dist/shared/{index.vue_vue_type_script_setup_true_lang-BF82tses.cjs → index.vue_vue_type_script_setup_true_lang-CsKjCWIN.cjs} +1 -1
  75. package/dist/shared/{index.vue_vue_type_script_setup_true_lang-BNjoxcAR.mjs → index.vue_vue_type_script_setup_true_lang-N12Nn2uu.mjs} +1 -1
  76. package/index.d.ts +155 -155
  77. package/package.json +1 -1
  78. package/qy-autocomplete/index.d.ts +5 -5
  79. package/qy-checkbox/index.d.ts +45 -45
  80. package/qy-checkbox-group/index.d.ts +48 -48
  81. package/qy-date-picker/index.d.ts +140 -140
  82. package/qy-file-picker/index.d.ts +49 -49
  83. package/qy-image/index.d.ts +28 -28
  84. package/qy-image-preview/index.d.ts +20 -20
  85. package/qy-input/index.d.ts +50 -50
  86. package/qy-input-number/index.d.ts +45 -45
  87. package/qy-menu-actions/index.d.ts +29 -29
  88. package/qy-popover/index.d.ts +63 -63
  89. package/qy-radio/index.d.ts +44 -44
  90. package/qy-radio-group/index.d.ts +60 -60
  91. package/qy-select/index.d.ts +67 -67
  92. package/qy-switch/index.d.ts +46 -46
  93. package/qy-table-column-settings/index.d.ts +18 -18
  94. package/qy-tag/index.d.ts +44 -44
  95. package/qy-tooltip/index.d.ts +54 -54
  96. package/qy-tree-select/index.d.ts +5 -5
package/README.md CHANGED
@@ -35,13 +35,13 @@ app.use(QyUI)
35
35
 
36
36
  ```ts
37
37
  import {
38
- QyUpload,
39
- QyFilePicker,
40
- QySwitch,
41
- QyTag,
42
- QyTooltip,
43
- QyPopover,
44
- QyImage,
38
+ QyUpload,
39
+ QyFilePicker,
40
+ QySwitch,
41
+ QyTag,
42
+ QyTooltip,
43
+ QyPopover,
44
+ QyImage,
45
45
  QyImagePreview,
46
46
  QyImageUpload,
47
47
  QyDialog,
@@ -51,10 +51,10 @@ import {
51
51
  QyInput,
52
52
  QyInputNumber,
53
53
  QyMoneyInput,
54
- QyDatePicker,
55
- QyCheckbox,
56
- QyRadio,
57
- QyAutocomplete,
54
+ QyDatePicker,
55
+ QyCheckbox,
56
+ QyRadio,
57
+ QyAutocomplete,
58
58
  QyMenuActions,
59
59
  QyTableColumnSettings,
60
60
  QyRadioGroup,
@@ -86,28 +86,28 @@ import QyDropdown from '@qynpm/ui/qy-dropdown'
86
86
  import QySearchInput from '@qynpm/ui/qy-search-input'
87
87
  import QyRecordQuoteSearch from '@qynpm/ui/qy-record-quote-search'
88
88
  import QyDialog from '@qynpm/ui/qy-dialog'
89
- import QyUpload from '@qynpm/ui/qy-upload'
90
- import QyFilePicker from '@qynpm/ui/qy-file-picker'
91
- import QySwitch from '@qynpm/ui/qy-switch'
92
- import QyTag from '@qynpm/ui/qy-tag'
93
- import QyTooltip from '@qynpm/ui/qy-tooltip'
94
- import QyPopover from '@qynpm/ui/qy-popover'
89
+ import QyUpload from '@qynpm/ui/qy-upload'
90
+ import QyFilePicker from '@qynpm/ui/qy-file-picker'
91
+ import QySwitch from '@qynpm/ui/qy-switch'
92
+ import QyTag from '@qynpm/ui/qy-tag'
93
+ import QyTooltip from '@qynpm/ui/qy-tooltip'
94
+ import QyPopover from '@qynpm/ui/qy-popover'
95
95
  import QyImage from '@qynpm/ui/qy-image'
96
96
  import QyImagePreview from '@qynpm/ui/qy-image-preview'
97
97
  import QyImageUpload from '@qynpm/ui/qy-image-upload'
98
98
  import QyRemarkImage from '@qynpm/ui/qy-remark-image'
99
99
  import QyInputNumber from '@qynpm/ui/qy-input-number'
100
- import QyDatePicker from '@qynpm/ui/qy-date-picker'
101
- import QyCheckbox from '@qynpm/ui/qy-checkbox'
102
- import QyRadio from '@qynpm/ui/qy-radio'
100
+ import QyDatePicker from '@qynpm/ui/qy-date-picker'
101
+ import QyCheckbox from '@qynpm/ui/qy-checkbox'
102
+ import QyRadio from '@qynpm/ui/qy-radio'
103
103
  import QyAutocomplete from '@qynpm/ui/qy-autocomplete'
104
104
  import QyMenuActions from '@qynpm/ui/qy-menu-actions'
105
- import QyTableColumnSettings from '@qynpm/ui/qy-table-column-settings'
106
- ```
107
-
108
- 后台公共包必须通过 `@qynpm/ui/<子组件>` 使用 UI 能力。每个被后台公共包消费的子入口必须是自包含入口,直接组装对应组件并保留该子入口的命名导出,禁止再转发到 `../index.js` 加载 UI 根入口。这样可以保证发布包按需加载,也能让本地源码联调稳定解析到唯一物理模块。
109
-
110
- 本地 file 依赖联调说明:单组件入口的 `package.json exports` 指向 `dist/qy-*/index.mjs` 和 `dist/qy-*/index.cjs`,而 `dist` 不提交到仓库。消费项目如果通过 `file:../qy-components/packages/ui` 引用本包,必须先在 `qy-components` 执行:
105
+ import QyTableColumnSettings from '@qynpm/ui/qy-table-column-settings'
106
+ ```
107
+
108
+ 后台公共包必须通过 `@qynpm/ui/<子组件>` 使用 UI 能力。每个被后台公共包消费的子入口必须是自包含入口,直接组装对应组件并保留该子入口的命名导出,禁止再转发到 `../index.js` 加载 UI 根入口。这样可以保证发布包按需加载,也能让本地源码联调稳定解析到唯一物理模块。
109
+
110
+ 本地 file 依赖联调说明:单组件入口的 `package.json exports` 指向 `dist/qy-*/index.mjs` 和 `dist/qy-*/index.cjs`,而 `dist` 不提交到仓库。消费项目如果通过 `file:../qy-components/packages/ui` 引用本包,必须先在 `qy-components` 执行:
111
111
 
112
112
  ```bash
113
113
  pnpm --filter @qynpm/ui build
@@ -121,91 +121,91 @@ pnpm install --frozen-lockfile --ignore-scripts
121
121
 
122
122
  不要依赖本机残留的 `packages/ui/dist`。如果后续希望免 build 联调,应在消费项目显式配置源码 alias,而不是把包 export 指向未发布源码。
123
123
 
124
- ## 组件说明
125
-
126
- ### `QyFilePicker`
127
-
128
- 单文件选择组件,支持点击选择、拖拽、替换、清空以及后缀和大小校验。
129
-
130
- - `v-model` 只输出浏览器原始 `File | null`。
131
- - `extensions` 忽略大小写,可传 `xls` 或 `.xlsx`。
132
- - `maxSizeMb` 的边界值允许,默认 20MB。
133
- - 校验失败触发 `invalid`,并保留原有 `modelValue`。
134
- - 组件只选择本地文件,不发送请求、不读取 token、不生成或保存 URL,也不复用 `QyUpload` 的业务上传协议。
135
-
136
- ```vue
137
- <QyFilePicker
138
- v-model="file"
139
- :extensions="['xls', 'xlsx']"
140
- :max-size-mb="20"
141
- placeholder="选择或拖拽 Excel 文件"
142
- @invalid="handleInvalid"
143
- />
144
- ```
145
-
146
- ### `QySwitch`
147
-
148
- 受控开关组件,`modelValue`、`activeValue`、`inactiveValue` 和 `update:modelValue` / `change` payload 均为 `boolean | string | number`,不进行隐式布尔化。
149
-
150
- ```vue
151
- <QySwitch
152
- v-model="enabled"
153
- active-text="启用"
154
- inactive-text="停用"
155
- @change="handleChange"
156
- />
157
- ```
158
-
159
- 支持 `disabled`、`loading`、`size`、`inlinePrompt`、`name`、`id`、`tabindex` 和 `ariaLabel`,以及 `class`、`style`、`role`、`title`、`data-*`、其它 `aria-*` 安全属性。只发出 `update:modelValue`、`change`、`focus`、`blur`;不提供 `beforeChange`、`input`、图标/slot 或底层实例、focus/blur 等命令式方法。
160
-
161
- ### `QyTag`
162
-
163
- 通用紧凑标签,内部使用 `ElTag`,公开 `tone`、`size`、`effect`、`closable`、`round`、`disabled` 和默认 slot。`tone` 支持 `neutral`、`primary`、`success`、`warning`、`danger`、`info`;`size` 为 `sm`、`md`、`lg`,默认分别映射为 Element Plus 的 `small`、`default`、`large`。
164
-
165
- ```vue
166
- <QyTag tone="success" size="sm" closable @close="removeTag">
167
- 已完成
168
- </QyTag>
169
- ```
170
-
171
- `disabled` 会设置 `aria-disabled="true"`、隐藏关闭按钮并抑制 `click` / `close`;非禁用状态下这两个事件各发出一次 `MouseEvent`。支持 `class`、`style`、`title`、`role`、`data-*`、`aria-*` 安全属性,不公开 `color`、`hit`、`disableTransitions` 或底层 Element Plus 实例。QyTag 不是按钮,不新增键盘按钮语义;需要动作语义时使用 `QyButton`。
172
-
173
- ### `QyTooltip`
174
-
175
- 只读提示组件。默认插槽是唯一触发内容,不增加触发元素包装 DOM;`content` 插槽(content slot)优先于 `content` 属性。组件支持 hover / focus、完整 `placement`、`light` / `dark` effect、延迟、偏移和可收缩的 `maxWidth`。
176
-
177
- ```vue
178
- <QyTooltip content="说明文字" placement="top-start">
179
- <button type="button">查看提示</button>
180
- </QyTooltip>
181
-
182
- <QyTooltip content="属性内容">
183
- <button type="button">插槽内容</button>
184
- <template #content>只读插槽内容</template>
185
- </QyTooltip>
186
- ```
187
-
188
- 默认值为 `placement="top"`、`effect="dark"`、`disabled=false`、`showDelay=0`、`hideDelay=200`、`offset=12`、`maxWidth=320`。事件只有 `open` / `close`,且只在实际可见状态转换时各发一次;不公开 `trigger`、受控 `open`、raw HTML、交互内容、Element Plus attrs/listeners 或实例方法。
189
-
190
- ### `QyPopover`
191
-
192
- 交互浮层组件。`reference` 插槽是触发元素,默认插槽是可交互面板内容,不增加触发元素包装 DOM;支持 `click`、`hover`、`focus`、`contextmenu`、完整 `placement`、`light` / `dark` effect、数字或 CSS 字符串 `width`、延迟、偏移、箭头和窄视口收缩。
193
-
194
- ```vue
195
- <QyPopover placement="bottom-start" :width="280" @open-change="onOpenChange">
196
- <template #reference><button type="button">打开操作</button></template>
197
- <button type="button" @click="submit">确认</button>
198
- </QyPopover>
199
-
200
- <QyPopover v-model:open="open" trigger="contextmenu">
201
- <template #reference><div>右键区域</div></template>
202
- <div>受控交互内容</div>
203
- </QyPopover>
204
- ```
205
-
206
- 默认值为 `trigger="click"`、`placement="bottom"`、`effect="light"`、`width=240`、`offset=12`、`showDelay=0`、`hideDelay=200`、`showArrow=true`、`disabled=false`。`open` 未传时组件内部管理状态,传入时通过 `v-model:open` 由父级回传决定状态;`update:open` 是状态意图,`open-change` / `open` / `close` 只在实际显隐转换时发出。唯一暴露的方法是 `close()`,不公开 Element Plus 实例、定位更新、`teleported`、`appendTo` 或 `popperOptions`。
207
-
208
- ### `QyUpload`
124
+ ## 组件说明
125
+
126
+ ### `QyFilePicker`
127
+
128
+ 单文件选择组件,支持点击选择、拖拽、替换、清空以及后缀和大小校验。
129
+
130
+ - `v-model` 只输出浏览器原始 `File | null`。
131
+ - `extensions` 忽略大小写,可传 `xls` 或 `.xlsx`。
132
+ - `maxSizeMb` 的边界值允许,默认 20MB。
133
+ - 校验失败触发 `invalid`,并保留原有 `modelValue`。
134
+ - 组件只选择本地文件,不发送请求、不读取 token、不生成或保存 URL,也不复用 `QyUpload` 的业务上传协议。
135
+
136
+ ```vue
137
+ <QyFilePicker
138
+ v-model="file"
139
+ :extensions="['xls', 'xlsx']"
140
+ :max-size-mb="20"
141
+ placeholder="选择或拖拽 Excel 文件"
142
+ @invalid="handleInvalid"
143
+ />
144
+ ```
145
+
146
+ ### `QySwitch`
147
+
148
+ 受控开关组件,`modelValue`、`activeValue`、`inactiveValue` 和 `update:modelValue` / `change` payload 均为 `boolean | string | number`,不进行隐式布尔化。
149
+
150
+ ```vue
151
+ <QySwitch
152
+ v-model="enabled"
153
+ active-text="启用"
154
+ inactive-text="停用"
155
+ @change="handleChange"
156
+ />
157
+ ```
158
+
159
+ 支持 `disabled`、`loading`、`size`、`inlinePrompt`、`name`、`id`、`tabindex` 和 `ariaLabel`,以及 `class`、`style`、`role`、`title`、`data-*`、其它 `aria-*` 安全属性。只发出 `update:modelValue`、`change`、`focus`、`blur`;不提供 `beforeChange`、`input`、图标/slot 或底层实例、focus/blur 等命令式方法。
160
+
161
+ ### `QyTag`
162
+
163
+ 通用紧凑标签,内部使用 `ElTag`,公开 `tone`、`size`、`effect`、`closable`、`round`、`disabled` 和默认 slot。`tone` 支持 `neutral`、`primary`、`success`、`warning`、`danger`、`info`;`size` 为 `sm`、`md`、`lg`,默认分别映射为 Element Plus 的 `small`、`default`、`large`。
164
+
165
+ ```vue
166
+ <QyTag tone="success" size="sm" closable @close="removeTag">
167
+ 已完成
168
+ </QyTag>
169
+ ```
170
+
171
+ `disabled` 会设置 `aria-disabled="true"`、隐藏关闭按钮并抑制 `click` / `close`;非禁用状态下这两个事件各发出一次 `MouseEvent`。支持 `class`、`style`、`title`、`role`、`data-*`、`aria-*` 安全属性,不公开 `color`、`hit`、`disableTransitions` 或底层 Element Plus 实例。QyTag 不是按钮,不新增键盘按钮语义;需要动作语义时使用 `QyButton`。
172
+
173
+ ### `QyTooltip`
174
+
175
+ 只读提示组件。默认插槽是唯一触发内容,不增加触发元素包装 DOM;`content` 插槽(content slot)优先于 `content` 属性。组件支持 hover / focus、完整 `placement`、`light` / `dark` effect、延迟、偏移和可收缩的 `maxWidth`。
176
+
177
+ ```vue
178
+ <QyTooltip content="说明文字" placement="top-start">
179
+ <button type="button">查看提示</button>
180
+ </QyTooltip>
181
+
182
+ <QyTooltip content="属性内容">
183
+ <button type="button">插槽内容</button>
184
+ <template #content>只读插槽内容</template>
185
+ </QyTooltip>
186
+ ```
187
+
188
+ 默认值为 `placement="top"`、`effect="dark"`、`disabled=false`、`showDelay=0`、`hideDelay=200`、`offset=12`、`maxWidth=320`。事件只有 `open` / `close`,且只在实际可见状态转换时各发一次;不公开 `trigger`、受控 `open`、raw HTML、交互内容、Element Plus attrs/listeners 或实例方法。
189
+
190
+ ### `QyPopover`
191
+
192
+ 交互浮层组件。`reference` 插槽是触发元素,默认插槽是可交互面板内容,不增加触发元素包装 DOM;支持 `click`、`hover`、`focus`、`contextmenu`、完整 `placement`、`light` / `dark` effect、数字或 CSS 字符串 `width`、延迟、偏移、箭头和窄视口收缩。
193
+
194
+ ```vue
195
+ <QyPopover placement="bottom-start" :width="280" @open-change="onOpenChange">
196
+ <template #reference><button type="button">打开操作</button></template>
197
+ <button type="button" @click="submit">确认</button>
198
+ </QyPopover>
199
+
200
+ <QyPopover v-model:open="open" trigger="contextmenu">
201
+ <template #reference><div>右键区域</div></template>
202
+ <div>受控交互内容</div>
203
+ </QyPopover>
204
+ ```
205
+
206
+ 默认值为 `trigger="click"`、`placement="bottom"`、`effect="light"`、`width=240`、`offset=12`、`showDelay=0`、`hideDelay=200`、`showArrow=true`、`disabled=false`。`open` 未传时组件内部管理状态,传入时通过 `v-model:open` 由父级回传决定状态;`update:open` 是状态意图,`open-change` / `open` / `close` 只在实际显隐转换时发出。唯一暴露的方法是 `close()`,不公开 Element Plus 实例、定位更新、`teleported`、`appendTo` 或 `popperOptions`。
207
+
208
+ ### `QyUpload`
209
209
 
210
210
  上传组件,支持:
211
211
 
@@ -336,55 +336,55 @@ type QyImageProps = {
336
336
 
337
337
  该能力是 `@qynpm/table-schema` 完整迁移 image 列的前置能力。table-schema 不应该长期维护一份独立图片预览逻辑。
338
338
 
339
- ### `QyCheckbox`
340
-
341
- 受控复选框基础组件,基于 `ElCheckbox` 做隔离适配,`modelValue`、`trueValue`、`falseValue` 和事件 payload 均保持 `boolean | string | number` 原始类型,不做隐式布尔转换。
342
-
343
- 支持 `value`(为后续 `QyCheckboxGroup` 保留的选项值)、只读展示状态 `indeterminate`、`disabled`、`size` 和默认 slot。事件只有 `update:modelValue`、`change`、`focus`、`blur`;禁用状态不产生值变更意图,也不公开 Element Plus 实例或命令式方法。
344
-
345
- ```vue
346
- <QyCheckbox
347
- v-model="ticketValue"
348
- true-value="Y"
349
- false-value="N"
350
- aria-label="开票"
351
- @change="handleChange"
352
- >
353
- 开票
354
- </QyCheckbox>
355
- ```
356
-
357
- `class`、`style`、`id`、`name`、`role`、`title`、`data-*` 和 `aria-*` 会安全透传;桌面交互区域保持紧凑,窄屏下提升到至少 40px。`QyCheckboxGroup`、全选/级联和 `CheckboxButton` 不属于 V1。
358
-
359
- ### `QyRadio`
360
-
361
- 受控单选框基础组件,基于 `ElRadio` 做隔离适配。`value` 表示选中值,`label` 只负责展示;默认 slot 优先。`modelValue` 与事件 payload 保持 `boolean | string | number` 原始类型,父级不回写时组件不会自行改变状态,也不会通过再次点击取消选中。
362
-
363
- 支持 `disabled`、`size`、`name`、`border` 以及 `update:modelValue`、`change`、`focus`、`blur` 事件;安全透传 `class`、`style`、`role`、`title`、`data-*` 和 `aria-*`,不公开 Element Plus 实例或命令式方法。
364
-
365
- ```vue
366
- <QyRadio
367
- v-model="ticketType"
368
- value="invoice"
369
- label="开票"
370
- name="ticket-type"
371
- border
372
- @change="handleChange"
373
- />
374
- ```
375
-
376
- ### `QyCheckboxGroup`
377
-
378
- 受控复选框组,统一管理 `QyCheckboxValue[]`。支持默认 slot 或 `options`(两者同时存在时 slot 优先),并透传 `disabled`、`min`、`max`、`size`。事件只有 `update:modelValue` 和 `change`,每次更新都返回新数组。
379
-
380
- ```vue
381
- <QyCheckboxGroup v-model="selected" :options="[
382
- { label: '阅读', value: 'read' },
383
- { label: '写作', value: 'write', disabled: true }
384
- ]" />
385
- ```
386
-
387
- options 模式物理复用 `QyCheckbox`;不提供 CheckboxButton、全选、indeterminate 推导、树形/层级选择、布局 props 或 Element Plus 实例。
339
+ ### `QyCheckbox`
340
+
341
+ 受控复选框基础组件,基于 `ElCheckbox` 做隔离适配,`modelValue`、`trueValue`、`falseValue` 和事件 payload 均保持 `boolean | string | number` 原始类型,不做隐式布尔转换。
342
+
343
+ 支持 `value`(为后续 `QyCheckboxGroup` 保留的选项值)、只读展示状态 `indeterminate`、`disabled`、`size` 和默认 slot。事件只有 `update:modelValue`、`change`、`focus`、`blur`;禁用状态不产生值变更意图,也不公开 Element Plus 实例或命令式方法。
344
+
345
+ ```vue
346
+ <QyCheckbox
347
+ v-model="ticketValue"
348
+ true-value="Y"
349
+ false-value="N"
350
+ aria-label="开票"
351
+ @change="handleChange"
352
+ >
353
+ 开票
354
+ </QyCheckbox>
355
+ ```
356
+
357
+ `class`、`style`、`id`、`name`、`role`、`title`、`data-*` 和 `aria-*` 会安全透传;桌面交互区域保持紧凑,窄屏下提升到至少 40px。`QyCheckboxGroup`、全选/级联和 `CheckboxButton` 不属于 V1。
358
+
359
+ ### `QyRadio`
360
+
361
+ 受控单选框基础组件,基于 `ElRadio` 做隔离适配。`value` 表示选中值,`label` 只负责展示;默认 slot 优先。`modelValue` 与事件 payload 保持 `boolean | string | number` 原始类型,父级不回写时组件不会自行改变状态,也不会通过再次点击取消选中。
362
+
363
+ 支持 `disabled`、`size`、`name`、`border` 以及 `update:modelValue`、`change`、`focus`、`blur` 事件;安全透传 `class`、`style`、`role`、`title`、`data-*` 和 `aria-*`,不公开 Element Plus 实例或命令式方法。
364
+
365
+ ```vue
366
+ <QyRadio
367
+ v-model="ticketType"
368
+ value="invoice"
369
+ label="开票"
370
+ name="ticket-type"
371
+ border
372
+ @change="handleChange"
373
+ />
374
+ ```
375
+
376
+ ### `QyCheckboxGroup`
377
+
378
+ 受控复选框组,统一管理 `QyCheckboxValue[]`。支持默认 slot 或 `options`(两者同时存在时 slot 优先),并透传 `disabled`、`min`、`max`、`size`。事件只有 `update:modelValue` 和 `change`,每次更新都返回新数组。
379
+
380
+ ```vue
381
+ <QyCheckboxGroup v-model="selected" :options="[
382
+ { label: '阅读', value: 'read' },
383
+ { label: '写作', value: 'write', disabled: true }
384
+ ]" />
385
+ ```
386
+
387
+ options 模式物理复用 `QyCheckbox`;不提供 CheckboxButton、全选、indeterminate 推导、树形/层级选择、布局 props 或 Element Plus 实例。
388
388
 
389
389
  ### `QyAutocomplete`
390
390
 
@@ -576,14 +576,14 @@ options 模式物理复用 `QyCheckbox`;不提供 CheckboxButton、全选、in
576
576
 
577
577
  - 保持和 `ElInput` 接近的使用方式
578
578
  - `removeSpace`
579
- - `trimMode`
580
- - `enter`
581
- - `textarea`
582
- - `modelValue` 支持 `string | number | null | undefined`,用户编辑事件统一输出 `string`
583
- - 兼容 `text`、`textarea`、`password`、`search` 和 Element Plus 常用属性
584
- - 兼容 `prefix`、`suffix`、`prepend`、`append` slots
585
- - 类型出口包含 `QyInputValue`、`QyInputModelValue`、`QyInputProps`、`QyInputEmits` 和 `QyInputExposed`
586
- - 只公开 `focus`、`blur`、`select`、`clear`、`resizeTextarea` 方法
579
+ - `trimMode`
580
+ - `enter`
581
+ - `textarea`
582
+ - `modelValue` 支持 `string | number | null | undefined`,用户编辑事件统一输出 `string`
583
+ - 兼容 `text`、`textarea`、`password`、`search` 和 Element Plus 常用属性
584
+ - 兼容 `prefix`、`suffix`、`prepend`、`append` slots
585
+ - 类型出口包含 `QyInputValue`、`QyInputModelValue`、`QyInputProps`、`QyInputEmits` 和 `QyInputExposed`
586
+ - 只公开 `focus`、`blur`、`select`、`clear`、`resizeTextarea` 方法
587
587
 
588
588
  ### `QyMoneyInput`
589
589
 
@@ -604,13 +604,13 @@ options 模式物理复用 `QyCheckbox`;不提供 CheckboxButton、全选、in
604
604
  - `min / max`
605
605
  - `step`
606
606
  - `step-strictly`
607
- - `precision`
608
- - `controls / controls-position`
609
- - `valueOnClear`(默认 `null`,也支持 `min / max / number`)
610
- - `readonly / disabled / formatter / parser / inputmode / align`
611
- - `prefix / suffix / increase-icon / decrease-icon` slots
612
- - `update:modelValue / input / change / focus / blur` 显式事件
613
- - 兼容 `focus / blur` expose 方法
607
+ - `precision`
608
+ - `controls / controls-position`
609
+ - `valueOnClear`(默认 `null`,也支持 `min / max / number`)
610
+ - `readonly / disabled / formatter / parser / inputmode / align`
611
+ - `prefix / suffix / increase-icon / decrease-icon` slots
612
+ - `update:modelValue / input / change / focus / blur` 显式事件
613
+ - 兼容 `focus / blur` expose 方法
614
614
 
615
615
  金额、费用、税费等财务录入场景请优先使用 `QyMoneyInput`,不要用 `QyInputNumber` 做金额格式化。
616
616
 
@@ -621,16 +621,16 @@ options 模式物理复用 `QyCheckbox`;不提供 CheckboxButton、全选、in
621
621
  - 保持和 `ElDatePicker` 接近的使用方式
622
622
  - `date / datetime / daterange / datetimerange` 等常见类型
623
623
  - `format / value-format`
624
- - `default-time`
625
- - `shortcuts`
626
- - `disabled-date`
627
- - `year / month / date / dates / datetime / week / daterange / datetimerange / monthrange`
628
- - `clearable / disabled / readonly / teleported / append-to / popper-class`
629
- - `update:modelValue / change / clear / calendar-change / panel-change / visible-change / focus / blur`
630
- - `default / range-separator / prev-month / next-month / prev-year / next-year` slots
631
- - 仅公开 `focus() / blur() / open() / close()` expose 方法
632
-
633
- `normalize-range-end-time` 默认关闭。开启后只处理范围第二项:精确 `00:00:00.000` 的 `Date` 克隆为 `23:59:59.000`,带明确午夜时间的普通/ISO 字符串只替换时间并保留格式及 zone suffix;date-only 字符串、number、非午夜和非范围值保持原引用,不修改父数组或父 `Date`。
624
+ - `default-time`
625
+ - `shortcuts`
626
+ - `disabled-date`
627
+ - `year / month / date / dates / datetime / week / daterange / datetimerange / monthrange`
628
+ - `clearable / disabled / readonly / teleported / append-to / popper-class`
629
+ - `update:modelValue / change / clear / calendar-change / panel-change / visible-change / focus / blur`
630
+ - `default / range-separator / prev-month / next-month / prev-year / next-year` slots
631
+ - 仅公开 `focus() / blur() / open() / close()` expose 方法
632
+
633
+ `normalize-range-end-time` 默认关闭。开启后只处理范围第二项:精确 `00:00:00.000` 的 `Date` 克隆为 `23:59:59.000`,带明确午夜时间的普通/ISO 字符串只替换时间并保留格式及 zone suffix;date-only 字符串、number、非午夜和非范围值保持原引用,不修改父数组或父 `Date`。
634
634
 
635
635
  ### `QyRadioGroup`
636
636
 
@@ -643,37 +643,37 @@ options 模式物理复用 `QyCheckbox`;不提供 CheckboxButton、全选、in
643
643
  - `option` 插槽自定义选项文案
644
644
  - 事件保持 `update:modelValue`、`change`
645
645
 
646
- `option` 插槽由外部传入,组件会透出当前选项的:
646
+ `option` 插槽由外部传入,组件会透出当前选项的:
647
647
 
648
648
  - `option`:原始选项对象
649
649
  - `label`:映射后的展示文案
650
650
  - `value`:映射后的选项值
651
- - `disabled`:是否禁用
652
-
653
- 普通 `options` 模式物理复用 `QyRadio`;`type="button"` 继续使用内部 Element Plus button adapter。已发布的 `getRadioGroupInstance()` 仅为兼容保留并标记为 deprecated,不新增实例能力。
654
-
655
- ### `QySelect`
656
-
657
- 受控选择器组件。string、number、boolean、对象值和多选数组会原样通过 `update:modelValue` / `change` 返回;组件不会排序、克隆或隐式转换,父级 `modelValue` 始终是最终状态权威。
658
-
659
- - `options` 支持 `labelKey / valueKey / disabledKey` 字段映射;默认 slot 有实际内容时优先。
660
- - `valueKey` 只决定 option 的值字段;对象值需要稳定回显时,使用 `objectIdentityKey` 指定对象身份字段。
661
- - 支持单选、多选、disabled、clearable、filterable、loading、collapse tags、弹层挂载和 popper class。
662
- - `autoSelectSingle` 只在 options 模式、当前值为空且唯一 option 未禁用时触发一次 `update:modelValue` 后再触发一次 `change`;父值变为非空后再次清空可重新触发。
663
- - 保留 prefix、empty、loading、tag 和 default slots,以及 clear、visible-change、focus、blur 事件。
664
- - 只公开 `focus()` / `blur()`,不公开 Element Plus 实例或 DOM 引用。
665
-
666
- ```vue
667
- <QySelect
668
- v-model="selectedUser"
669
- :options="userOptions"
670
- label-key="name"
671
- value-key="user"
672
- object-identity-key="id"
673
- />
674
- ```
675
-
676
- 远程请求、防抖和已选项缓存仍由 `QyRemoteSelect` 负责;`QySelect` 不承接业务字典或请求状态编排。
651
+ - `disabled`:是否禁用
652
+
653
+ 普通 `options` 模式物理复用 `QyRadio`;`type="button"` 继续使用内部 Element Plus button adapter。已发布的 `getRadioGroupInstance()` 仅为兼容保留并标记为 deprecated,不新增实例能力。
654
+
655
+ ### `QySelect`
656
+
657
+ 受控选择器组件。string、number、boolean、对象值和多选数组会原样通过 `update:modelValue` / `change` 返回;组件不会排序、克隆或隐式转换,父级 `modelValue` 始终是最终状态权威。
658
+
659
+ - `options` 支持 `labelKey / valueKey / disabledKey` 字段映射;默认 slot 有实际内容时优先。
660
+ - `valueKey` 只决定 option 的值字段;对象值需要稳定回显时,使用 `objectIdentityKey` 指定对象身份字段。
661
+ - 支持单选、多选、disabled、clearable、filterable、loading、collapse tags、弹层挂载和 popper class。
662
+ - `autoSelectSingle` 只在 options 模式、当前值为空且唯一 option 未禁用时触发一次 `update:modelValue` 后再触发一次 `change`;父值变为非空后再次清空可重新触发。
663
+ - 保留 prefix、empty、loading、tag 和 default slots,以及 clear、visible-change、focus、blur 事件。
664
+ - 只公开 `focus()` / `blur()`,不公开 Element Plus 实例或 DOM 引用。
665
+
666
+ ```vue
667
+ <QySelect
668
+ v-model="selectedUser"
669
+ :options="userOptions"
670
+ label-key="name"
671
+ value-key="user"
672
+ object-identity-key="id"
673
+ />
674
+ ```
675
+
676
+ 远程请求、防抖和已选项缓存仍由 `QyRemoteSelect` 负责;`QySelect` 不承接业务字典或请求状态编排。
677
677
 
678
678
  ### `QyTreeSelect`
679
679
 
@@ -1104,23 +1104,23 @@ function handleSelect(item) {
1104
1104
  </template>
1105
1105
  ```
1106
1106
 
1107
- ### QyRadio
1108
-
1109
- ```vue
1110
- <template>
1111
- <QyRadio
1112
- v-model="ticketType"
1113
- value="invoice"
1114
- label="开票"
1115
- />
1116
- </template>
1117
- ```
1118
-
1119
- ### QyRadioGroup
1120
-
1121
- ```vue
1122
- <template>
1123
- <QyRadioGroup
1107
+ ### QyRadio
1108
+
1109
+ ```vue
1110
+ <template>
1111
+ <QyRadio
1112
+ v-model="ticketType"
1113
+ value="invoice"
1114
+ label="开票"
1115
+ />
1116
+ </template>
1117
+ ```
1118
+
1119
+ ### QyRadioGroup
1120
+
1121
+ ```vue
1122
+ <template>
1123
+ <QyRadioGroup
1124
1124
  v-model="openTicket"
1125
1125
  :options="ticketOptions"
1126
1126
  />