@jnrs/vue-core 1.2.42 → 1.2.43

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.
package/AGENTS.md CHANGED
@@ -6,19 +6,19 @@
6
6
 
7
7
  ## 📦 模块总览
8
8
 
9
- | 模块路径 | 说明 |
10
- | ---------------------------- | --------------- |
11
- | `@jnrs/vue-core` | 主模块,包含基础类型定义 |
12
- | `@jnrs/vue-core/pinia` | Pinia 状态管理模块 |
13
- | `@jnrs/vue-core/router` | Vue Router 路由模块 |
14
- | `@jnrs/vue-core/components` | Vue 组件库 |
15
- | `@jnrs/vue-core/composables` | Vue 组合式 API |
16
- | `@jnrs/vue-core/constants` | 常量定义 |
17
- | `@jnrs/vue-core/lib` | 工具库 |
18
- | `@jnrs/vue-core/locales` | 国际化配置 |
19
- | `@jnrs/vue-core/utils` | 工具函数 |
20
-
21
- ***
9
+ | 模块路径 | 说明 |
10
+ | ---------------------------- | ------------------------ |
11
+ | `@jnrs/vue-core` | 主模块,包含基础类型定义 |
12
+ | `@jnrs/vue-core/pinia` | Pinia 状态管理模块 |
13
+ | `@jnrs/vue-core/router` | Vue Router 路由模块 |
14
+ | `@jnrs/vue-core/components` | Vue 组件库 |
15
+ | `@jnrs/vue-core/composables` | Vue 组合式 API |
16
+ | `@jnrs/vue-core/constants` | 常量定义 |
17
+ | `@jnrs/vue-core/lib` | 工具库 |
18
+ | `@jnrs/vue-core/locales` | 国际化配置 |
19
+ | `@jnrs/vue-core/utils` | 工具函数 |
20
+
21
+ ---
22
22
 
23
23
  ## 📋 API 详情
24
24
 
@@ -30,14 +30,14 @@
30
30
 
31
31
  菜单项接口定义
32
32
 
33
- | 属性名 | 类型 | 必填 | 说明 |
34
- | --------- | ------------- | -- | ----- |
35
- | meta | `RouteMeta` | ✓ | 路由元信息 |
36
- | path | `string` | ✓ | 路径 |
37
- | name | `string` | - | 名称 |
38
- | component | `string` | - | 组件路径 |
39
- | redirect | `string` | - | 重定向路径 |
40
- | children | `IMenuItem[]` | - | 子菜单项 |
33
+ | 属性名 | 类型 | 必填 | 说明 |
34
+ | --------- | ------------- | ---- | ---------- |
35
+ | meta | `RouteMeta` | ✓ | 路由元信息 |
36
+ | path | `string` | ✓ | 路径 |
37
+ | name | `string` | - | 名称 |
38
+ | component | `string` | - | 组件路径 |
39
+ | redirect | `string` | - | 重定向路径 |
40
+ | children | `IMenuItem[]` | - | 子菜单项 |
41
41
 
42
42
  ##### ElSize
43
43
 
@@ -59,23 +59,23 @@ type ElButtonType = 'default' | 'primary' | 'success' | 'info' | 'warning' | 'te
59
59
 
60
60
  文件信息类型
61
61
 
62
- | 属性名 | 类型 | 必填 | 说明 |
63
- | -------------- | -------- | -- | ------------------- |
64
- | id | `number` | ✓ | 数据 id |
65
- | documentId | `number` | ✓ | 文件 id |
66
- | fileName | `string` | ✓ | 文件名 |
67
- | uniqueFileName | `string` | ✓ | 文件名唯一标识(用于文件获取 API) |
68
- | fileType | `string` | ✓ | MIME 类型 |
69
- | fileSize | `number` | ✓ | 文件大小(单位:字节) |
62
+ | 属性名 | 类型 | 必填 | 说明 |
63
+ | -------------- | -------- | ---- | ---------------------------------- |
64
+ | id | `number` | ✓ | 数据 id |
65
+ | documentId | `number` | ✓ | 文件 id |
66
+ | fileName | `string` | ✓ | 文件名 |
67
+ | uniqueFileName | `string` | ✓ | 文件名唯一标识(用于文件获取 API) |
68
+ | fileType | `string` | ✓ | MIME 类型 |
69
+ | fileSize | `number` | ✓ | 文件大小(单位:字节) |
70
70
 
71
71
  ##### IPagination
72
72
 
73
73
  分页类型
74
74
 
75
- | 属性名 | 类型 | 必填 | 说明 |
76
- | -------- | -------- | -- | ---- |
77
- | pageNo | `number` | ✓ | 当前页码 |
78
- | pageSize | `number` | ✓ | 每页大小 |
75
+ | 属性名 | 类型 | 必填 | 说明 |
76
+ | -------- | -------- | ---- | -------- |
77
+ | pageNo | `number` | ✓ | 当前页码 |
78
+ | pageSize | `number` | ✓ | 每页大小 |
79
79
 
80
80
  ##### IPageData<T>
81
81
 
@@ -83,10 +83,10 @@ type ElButtonType = 'default' | 'primary' | 'success' | 'info' | 'warning' | 'te
83
83
 
84
84
  继承自 `IPagination`
85
85
 
86
- | 属性名 | 类型 | 必填 | 说明 |
87
- | ----- | -------- | -- | ---- |
88
- | list | `T[]` | ✓ | 数据列表 |
89
- | count | `number` | ✓ | 数据总数 |
86
+ | 属性名 | 类型 | 必填 | 说明 |
87
+ | ------ | -------- | ---- | -------- |
88
+ | list | `T[]` | ✓ | 数据列表 |
89
+ | count | `number` | ✓ | 数据总数 |
90
90
 
91
91
  **使用示例:**
92
92
 
@@ -106,7 +106,7 @@ const userData: IPageData<UserData> = {
106
106
  }
107
107
  ```
108
108
 
109
- ***
109
+ ---
110
110
 
111
111
  ### @jnrs/vue-core/pinia 模块
112
112
 
@@ -116,17 +116,17 @@ const userData: IPageData<UserData> = {
116
116
 
117
117
  **返回值:**
118
118
 
119
- | 属性/方法 | 类型 | 说明 |
120
- | ------------------ | -------------------------------- | --------------------- |
119
+ | 属性/方法 | 类型 | 说明 |
120
+ | ------------------ | -------------------------------- | ------------------------------------------ |
121
121
  | theme | `Ref<Theme>` | 主题配置(国际化、主题模式、自定义强调色) |
122
- | computedThemeMode | `ComputedRef<'light' \| 'dark'>` | 计算后的主题模式(考虑 auto 模式) |
123
- | menuCollapse | `Ref<boolean>` | 菜单是否折叠 |
124
- | documentFullscreen | `Ref<boolean>` | 文档是否全屏 |
125
- | toggleCollapse | `() => void` | 折叠菜单切换 |
126
- | toggleFullScreen | `() => Promise<void>` | 全屏切换 |
127
- | setLocale | `(value: unknown) => void` | 设置语言 |
128
- | setMode | `(value: unknown) => void` | 设置主题模式 |
129
- | setPrimaryColor | `(value: unknown) => void` | 设置主题色 |
122
+ | computedThemeMode | `ComputedRef<'light' \| 'dark'>` | 计算后的主题模式(考虑 auto 模式) |
123
+ | menuCollapse | `Ref<boolean>` | 菜单是否折叠 |
124
+ | documentFullscreen | `Ref<boolean>` | 文档是否全屏 |
125
+ | toggleCollapse | `() => void` | 折叠菜单切换 |
126
+ | toggleFullScreen | `() => Promise<void>` | 全屏切换 |
127
+ | setLocale | `(value: unknown) => void` | 设置语言 |
128
+ | setMode | `(value: unknown) => void` | 设置主题模式 |
129
+ | setPrimaryColor | `(value: unknown) => void` | 设置主题色 |
130
130
 
131
131
  **Theme 类型:**
132
132
 
@@ -167,7 +167,7 @@ console.log(systemStore.computedThemeMode.value)
167
167
  - 支持自动主题模式(根据系统偏好切换)
168
168
  - 动态设置 CSS 变量 `--jnrs-color-primary`
169
169
 
170
- ***
170
+ ---
171
171
 
172
172
  #### Store: useMenuStore
173
173
 
@@ -175,12 +175,12 @@ console.log(systemStore.computedThemeMode.value)
175
175
 
176
176
  **返回值:**
177
177
 
178
- | 属性/方法 | 类型 | 说明 |
179
- | -------------------- | -------------------------------------------- | ----------- |
180
- | hasFetchedAsyncMenus | `Ref<boolean>` | 菜单是否已获取 |
181
- | menus | `Ref<IMenuItem[]>` | 菜单项列表 |
178
+ | 属性/方法 | 类型 | 说明 |
179
+ | -------------------- | -------------------------------------------- | ---------------------- |
180
+ | hasFetchedAsyncMenus | `Ref<boolean>` | 菜单是否已获取 |
181
+ | menus | `Ref<IMenuItem[]>` | 菜单项列表 |
182
182
  | asyncSetMenus | `(res: IMenuItem[]) => Promise<IMenuItem[]>` | 设置菜单信息并生成路由 |
183
- | clearMenu | `() => void` | 清除菜单信息 |
183
+ | clearMenu | `() => void` | 清除菜单信息 |
184
184
 
185
185
  **使用示例:**
186
186
 
@@ -212,7 +212,7 @@ console.log(menuStore.menus.value)
212
212
  - 自动调用 `asyncGenerateRoute` 生成动态路由
213
213
  - `hasFetchedAsyncMenus` 不持久化,每次刷新页面需重新获取菜单
214
214
 
215
- ***
215
+ ---
216
216
 
217
217
  ### @jnrs/vue-core/router 模块
218
218
 
@@ -245,13 +245,13 @@ type FileModules = Record<string, () => Promise<unknown>>
245
245
 
246
246
  **参数:**
247
247
 
248
- | 参数名 | 类型 | 必填 | 说明 |
249
- | ---------------- | -------------------------------------------------- | -- | ----------------------------------- |
250
- | options | `RouterOptions` | ✓ | 路由配置项 |
251
- | fileModules | `FileModules` | ✓ | 文件模块(通过 import.meta.glob 导入) |
252
- | layoutName | `string` | - | 布局组件名称 |
253
- | globalComponent | `Promise<unknown>` | - | 全局 Layout 组件(meta.global=true 时需传入) |
254
- | handleBeforeEach | `(to, from) => Promise<void \| boolean \| string>` | - | 路由前置守卫处理函数 |
248
+ | 参数名 | 类型 | 必填 | 说明 |
249
+ | ---------------- | -------------------------------------------------- | ---- | --------------------------------------------- |
250
+ | options | `RouterOptions` | ✓ | 路由配置项 |
251
+ | fileModules | `FileModules` | ✓ | 文件模块(通过 import.meta.glob 导入) |
252
+ | layoutName | `string` | - | 布局组件名称 |
253
+ | globalComponent | `Promise<unknown>` | - | 全局 Layout 组件(meta.global=true 时需传入) |
254
+ | handleBeforeEach | `(to, from) => Promise<void \| boolean \| string>` | - | 路由前置守卫处理函数 |
255
255
 
256
256
  **返回值:** `Router` - router 实例
257
257
 
@@ -286,10 +286,10 @@ const router = createVueRouter({
286
286
 
287
287
  **参数:**
288
288
 
289
- | 参数名 | 类型 | 必填 | 说明 |
290
- | ------ | ------------- | -- | ------------- |
291
- | menus | `IMenuItem[]` | ✓ | 菜单项数组 |
292
- | parent | `IMenuItem` | - | 父级菜单项(内部递归使用) |
289
+ | 参数名 | 类型 | 必填 | 说明 |
290
+ | ------ | ------------- | ---- | -------------------------- |
291
+ | menus | `IMenuItem[]` | ✓ | 菜单项数组 |
292
+ | parent | `IMenuItem` | - | 父级菜单项(内部递归使用) |
293
293
 
294
294
  **返回值:** `Promise<void>`
295
295
 
@@ -307,10 +307,10 @@ const router = createVueRouter({
307
307
 
308
308
  **参数:**
309
309
 
310
- | 参数名 | 类型 | 必填 | 说明 |
311
- | ---- | --------------------- | -- | -------------- |
312
- | to | `RouteLocationRaw` | ✓ | 路由跳转参数 |
313
- | type | `'push' \| 'replace'` | - | 跳转方式,默认 'push' |
310
+ | 参数名 | 类型 | 必填 | 说明 |
311
+ | ------ | --------------------- | ---- | --------------------- |
312
+ | to | `RouteLocationRaw` | ✓ | 路由跳转参数 |
313
+ | type | `'push' \| 'replace'` | - | 跳转方式,默认 'push' |
314
314
 
315
315
  **返回值:** `Promise<boolean \| void>`
316
316
 
@@ -347,7 +347,7 @@ const routes = getRoutes()
347
347
  console.log(routes)
348
348
  ```
349
349
 
350
- ***
350
+ ---
351
351
 
352
352
  ### @jnrs/vue-core/components 模块
353
353
 
@@ -357,25 +357,25 @@ console.log(routes)
357
357
 
358
358
  **Props:**
359
359
 
360
- | 属性名 | 类型 | 默认值 | 说明 |
361
- | ------------------- | -------------------------------- | ---------------------------- | --------------------------------------------------------------- |
362
- | data | `Record<string, any>[]` | — | 表数据 |
360
+ | 属性名 | 类型 | 默认值 | 说明 |
361
+ | ------------------- | -------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------- |
362
+ | data | `Record<string, any>[]` | — | 表数据 |
363
363
  | rowKey | `string` | `'id'` | 行数据的 Key,在使用 reserve-selection 功能与显示树形数据时必填。支持多层访问:user.info.id |
364
- | showScrollbar | `boolean` | `false` | 总是显示横向滚动条 |
365
- | height | `string \| number` | `'100%'` | 表格高度 |
366
- | autoHeight | `boolean` | `false` | 表格高度是否自动计算 |
367
- | autoHeightOptions | `UseReactivityTableHeighOptions` | `{}` | 表格高度自动计算配置项 |
368
- | showIndexColumn | `boolean` | `false` | 是否显示序号列 |
369
- | showSelectionColumn | `boolean` | `false` | 是否显示选择列 |
370
- | showMouseSelection | `boolean` | `false` | 是否开启鼠标框选 |
364
+ | showScrollbar | `boolean` | `false` | 总是显示横向滚动条 |
365
+ | height | `string \| number` | `'100%'` | 表格高度 |
366
+ | autoHeight | `boolean` | `false` | 表格高度是否自动计算 |
367
+ | autoHeightOptions | `UseReactivityTableHeighOptions` | `{}` | 表格高度自动计算配置项 |
368
+ | showIndexColumn | `boolean` | `false` | 是否显示序号列 |
369
+ | showSelectionColumn | `boolean` | `false` | 是否显示选择列 |
370
+ | showMouseSelection | `boolean` | `false` | 是否开启鼠标框选 |
371
371
  | containerClass | `string` | `'jn_table'` | 表格容器类名,用于鼠标框选功能,多个表格时需传入不同类名 |
372
- | pagination | `IPagination` | `{ pageNo: 0, pageSize: 0 }` | 当前页码和每页大小(用于序号计算) |
373
- | isMainTable | `boolean` | `false` | 是否为主表,启用行选中高亮样式(多栏布局中主表使用) |
372
+ | pagination | `IPagination` | `{ pageNo: 0, pageSize: 0 }` | 当前页码和每页大小(用于序号计算) |
373
+ | isMainTable | `boolean` | `false` | 是否为主表,启用行选中高亮样式(多栏布局中主表使用) |
374
374
 
375
375
  **暴露方法 (Exposed):**
376
376
 
377
- | 方法名 | 类型 | 说明 |
378
- | -------------- | ------------ | ------- |
377
+ | 方法名 | 类型 | 说明 |
378
+ | -------------- | ------------ | -------------- |
379
379
  | clearSelection | `() => void` | 清空所有选中项 |
380
380
 
381
381
  **使用示例:**
@@ -447,7 +447,7 @@ const tableRowClassName = ({ row }) => {
447
447
 
448
448
  > `isMainTable` 启用后,会自动添加行 hover 高亮(`--jnrs-background-hover`)和选中行高亮(`--jnrs-color-primary`)样式,配合 `rowClassName` 实现主表行选中效果。
449
449
 
450
- ***
450
+ ---
451
451
 
452
452
  #### JnSelectTemplate
453
453
 
@@ -455,37 +455,37 @@ const tableRowClassName = ({ row }) => {
455
455
 
456
456
  **Props:**
457
457
 
458
- | 属性名 | 类型 | 默认值 | 说明 |
459
- | --------------------- | -------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------- |
460
- | listApi | `Function` | — | 列表接口(必填) |
461
- | tableName | `string` | `''` | 列表名称 |
462
- | tableWidth | `string` | `'60%'` | 列表宽度 |
463
- | listParams | `Record<string, unknown>` | `{}` | 列表查询参数 |
464
- | listParamsHandle | `(params) => params` | `(params) => params` | 列表查询参数前置处理函数 |
465
- | listParamsHandleAfter | `(params) => params` | `(params) => params` | 列表查询参数后置处理函数 |
466
- | keyValue | `{ name: string; id: string; [key: string]: string }` | `{ name: 'name', id: 'id' }` | 真实数据匹配的键值对名 |
467
- | optionSecondaryField | `string` | — | keyValue 的拓展字段,用于 el-option 中显示 |
468
- | modelValue | `Record<string, unknown> \| Record<string, unknown>[] \| number \| string` | — | 双向绑定值(支持多种类型) |
469
- | width | `string` | `'100%'` | 宽度 |
470
- | simpleValue | `boolean` | `true` | 简单数据类型,仅返回 keyValue.id |
471
- | showAllTips | `boolean` | `false` | option 组件是否显示 \[全部] |
472
- | onlyOption | `boolean` | `false` | 仅显示选择器 |
473
- | onlyButton | `boolean` | `false` | 仅显示选择按钮 |
474
- | filterable | `boolean` | `true` | 是否可筛选 |
475
- | clearable | `boolean` | `true` | 是否可清空 |
476
- | buttonDialogText | `string` | `'更多'` | 按钮文字 |
477
- | size | `ElSize` | `'default'` | 按钮大小 |
478
- | plain | `boolean` | `true` | 按钮 plain |
479
- | formRef | `FormInstance` | `null` | 父级组件的表单对象 |
480
- | validateFieldName | `string` | `''` | 父级表单验证的字段名 |
481
- | limit | `number` | `1` | 可选择的数量 |
482
- | queryForm | `Record<string, unknown>` | — | 表单查询参数 |
483
- | initialParams | `Record<string, unknown>` | — | 初始查询参数 |
484
- | remoteFilterKey | `string` | `'name'` | 下拉框查询参数远程过滤参数的 key 值 |
485
- | collapseTags | `boolean` | `true` | 是否折叠标签 |
486
- | maxCollapseTags | `number` | `1` | 折叠时显示的最大标签数 |
458
+ | 属性名 | 类型 | 默认值 | 说明 |
459
+ | --------------------- | -------------------------------------------------------------------------- | ---------------------------- | -------------------------------------------------------------------------- |
460
+ | listApi | `Function` | — | 列表接口(必填) |
461
+ | tableName | `string` | `''` | 列表名称 |
462
+ | tableWidth | `string` | `'60%'` | 列表宽度 |
463
+ | listParams | `Record<string, unknown>` | `{}` | 列表查询参数 |
464
+ | listParamsHandle | `(params) => params` | `(params) => params` | 列表查询参数前置处理函数 |
465
+ | listParamsHandleAfter | `(params) => params` | `(params) => params` | 列表查询参数后置处理函数 |
466
+ | keyValue | `{ name: string; id: string; [key: string]: string }` | `{ name: 'name', id: 'id' }` | 真实数据匹配的键值对名 |
467
+ | optionSecondaryField | `string` | — | keyValue 的拓展字段,用于 el-option 中显示 |
468
+ | modelValue | `Record<string, unknown> \| Record<string, unknown>[] \| number \| string` | — | 双向绑定值(支持多种类型) |
469
+ | width | `string` | `'100%'` | 宽度 |
470
+ | simpleValue | `boolean` | `true` | 简单数据类型,仅返回 keyValue.id |
471
+ | showAllTips | `boolean` | `false` | option 组件是否显示 \[全部] |
472
+ | onlyOption | `boolean` | `false` | 仅显示选择器 |
473
+ | onlyButton | `boolean` | `false` | 仅显示选择按钮 |
474
+ | filterable | `boolean` | `true` | 是否可筛选 |
475
+ | clearable | `boolean` | `true` | 是否可清空 |
476
+ | buttonDialogText | `string` | `'更多'` | 按钮文字 |
477
+ | size | `ElSize` | `'default'` | 按钮大小 |
478
+ | plain | `boolean` | `true` | 按钮 plain |
479
+ | formRef | `FormInstance` | `null` | 父级组件的表单对象 |
480
+ | validateFieldName | `string` | `''` | 父级表单验证的字段名 |
481
+ | limit | `number` | `1` | 可选择的数量 |
482
+ | queryForm | `Record<string, unknown>` | — | 表单查询参数 |
483
+ | initialParams | `Record<string, unknown>` | — | 初始查询参数 |
484
+ | remoteFilterKey | `string` | `'name'` | 下拉框查询参数远程过滤参数的 key 值 |
485
+ | collapseTags | `boolean` | `true` | 是否折叠标签 |
486
+ | maxCollapseTags | `number` | `1` | 折叠时显示的最大标签数 |
487
487
  | immediate | `boolean` | `false` | 是否在 onMounted 期间立即请求列表(默认懒加载:下拉展开/弹窗显示时才请求) |
488
- | pageSize | `number` | `100` | 每页条数 |
488
+ | pageSize | `number` | `100` | 每页条数 |
489
489
 
490
490
  **使用示例:**
491
491
 
@@ -508,7 +508,7 @@ const selectedUser = ref(null)
508
508
  </script>
509
509
  ```
510
510
 
511
- ***
511
+ ---
512
512
 
513
513
  #### JnPdfView
514
514
 
@@ -516,13 +516,13 @@ PDF 文件预览组件
516
516
 
517
517
  **Props:**
518
518
 
519
- | 属性名 | 类型 | 默认值 | 说明 |
520
- | ------------ | ------------- | ------- | ----------------------------- |
521
- | fileList | `IFileItem[]` | `[]` | 文件列表 |
522
- | showFileName | `boolean` | `true` | 是否显示文件名 |
519
+ | 属性名 | 类型 | 默认值 | 说明 |
520
+ | ------------ | ------------- | ------- | ------------------------------------------------- |
521
+ | fileList | `IFileItem[]` | `[]` | 文件列表 |
522
+ | showFileName | `boolean` | `true` | 是否显示文件名 |
523
523
  | isPdf | `boolean` | `false` | 是否是 pdf 文件(pdf 文件直接预览,其他文件下载) |
524
- | windowWidth | `number` | `800` | 预览窗口宽度 |
525
- | windowHeight | `number` | `600` | 预览窗口高度 |
524
+ | windowWidth | `number` | `800` | 预览窗口宽度 |
525
+ | windowHeight | `number` | `600` | 预览窗口高度 |
526
526
 
527
527
  **使用示例:**
528
528
 
@@ -532,7 +532,7 @@ PDF 文件预览组件
532
532
  </template>
533
533
  ```
534
534
 
535
- ***
535
+ ---
536
536
 
537
537
  #### JnPagination
538
538
 
@@ -540,13 +540,13 @@ PDF 文件预览组件
540
540
 
541
541
  **Props:**
542
542
 
543
- | 属性名 | 类型 | 默认值 | 说明 |
544
- | ---------- | --------------- | ----------------------------- | ------ |
545
- | modelValue | `IPagination` | `{ pageNo: 1, pageSize: 20 }` | 分页模型值 |
546
- | total | `number` | `0` | 总条数 |
547
- | size | `ComponentSize` | `'small'` | 按钮尺寸 |
543
+ | 属性名 | 类型 | 默认值 | 说明 |
544
+ | ---------- | --------------- | ----------------------------- | ------------ |
545
+ | modelValue | `IPagination` | `{ pageNo: 1, pageSize: 20 }` | 分页模型值 |
546
+ | total | `number` | `0` | 总条数 |
547
+ | size | `ComponentSize` | `'small'` | 按钮尺寸 |
548
548
  | background | `boolean` | `true` | 是否带背景色 |
549
- | marginTop | `string` | `'10px'` | 上边距 |
549
+ | marginTop | `string` | `'10px'` | 上边距 |
550
550
 
551
551
  **Events:**
552
552
 
@@ -570,7 +570,7 @@ const handlePageChange = (newPagination) => {
570
570
  </script>
571
571
  ```
572
572
 
573
- ***
573
+ ---
574
574
 
575
575
  #### JnImportAndExport
576
576
 
@@ -578,27 +578,27 @@ const handlePageChange = (newPagination) => {
578
578
 
579
579
  **Props:**
580
580
 
581
- | 属性名 | 类型 | 默认值 | 说明 |
582
- | --------------------------- | ------------------------------------------------------- | ------------------------------------ | ---------------------- |
581
+ | 属性名 | 类型 | 默认值 | 说明 |
582
+ | --------------------------- | ------------------------------------------------------- | ------------------------------------ | --------------------------------- |
583
583
  | importTemplateApi | `() => Promise<IBlobItem>` | — | 下载导入模板文件的 api 函数 |
584
- | importApi | `(data: FormData) => Promise<IFullResponse>` | — | 数据导入 api 函数 |
585
- | importFieldName | `string` | `'file'` | 数据导入的字段名 |
586
- | importParams | `Record<string, unknown>` | — | 导入的参数 |
587
- | fileUploadConfig | `{ accept: string; limit: number }` | `{ accept: '.xls,.xlsx', limit: 1 }` | 导入的文件上传配置 |
588
- | importBtnName | `string` | `'导入'` | 导入的按钮名称 |
589
- | importDisabled | `boolean` | `false` | 是否禁用导入按钮 |
590
- | exportApi | `(data: Record<string, unknown>) => Promise<IBlobItem>` | — | 数据导出的 api 函数 |
591
- | exportParams | `Record<string, unknown>` | — | 导出的参数 |
584
+ | importApi | `(data: FormData) => Promise<IFullResponse>` | — | 数据导入 api 函数 |
585
+ | importFieldName | `string` | `'file'` | 数据导入的字段名 |
586
+ | importParams | `Record<string, unknown>` | — | 导入的参数 |
587
+ | fileUploadConfig | `{ accept: string; limit: number }` | `{ accept: '.xls,.xlsx', limit: 1 }` | 导入的文件上传配置 |
588
+ | importBtnName | `string` | `'导入'` | 导入的按钮名称 |
589
+ | importDisabled | `boolean` | `false` | 是否禁用导入按钮 |
590
+ | exportApi | `(data: Record<string, unknown>) => Promise<IBlobItem>` | — | 数据导出的 api 函数 |
591
+ | exportParams | `Record<string, unknown>` | — | 导出的参数 |
592
592
  | exportDynamicParamsConfig | `{ label: string; prop: string }` | — | 导出操作时,MessageBox 的参数配置 |
593
- | messageBoxInputPattern | `RegExp` | `/^\S+(?:\s+\S+)*$/` | MessageBox 中输入框的校验表达式 |
594
- | messageBoxInputErrorMessage | `string` | `'请输入参数'` | 校验未通过时的提示文本 |
595
- | exportBtnName | `string` | `'导出'` | 导出的按钮名称 |
596
- | exportDisabled | `boolean` | `false` | 是否禁用导出按钮 |
597
- | size | `ElSize` | `'default'` | 按钮尺寸 |
598
- | buttonType | `ElButtonType` | `'primary'` | 按钮类型 |
599
- | plain | `boolean` | `true` | 是否为朴素按钮 |
600
- | text | `boolean` | `false` | 是否为文字按钮 |
601
- | icon | `boolean` | `true` | 是否显示图标 |
593
+ | messageBoxInputPattern | `RegExp` | `/^\S+(?:\s+\S+)*$/` | MessageBox 中输入框的校验表达式 |
594
+ | messageBoxInputErrorMessage | `string` | `'请输入参数'` | 校验未通过时的提示文本 |
595
+ | exportBtnName | `string` | `'导出'` | 导出的按钮名称 |
596
+ | exportDisabled | `boolean` | `false` | 是否禁用导出按钮 |
597
+ | size | `ElSize` | `'default'` | 按钮尺寸 |
598
+ | buttonType | `ElButtonType` | `'primary'` | 按钮类型 |
599
+ | plain | `boolean` | `true` | 是否为朴素按钮 |
600
+ | text | `boolean` | `false` | 是否为文字按钮 |
601
+ | icon | `boolean` | `true` | 是否显示图标 |
602
602
 
603
603
  **使用示例:**
604
604
 
@@ -617,7 +617,7 @@ import { downloadTemplate, importData, exportData } from '@/api/data'
617
617
  </script>
618
618
  ```
619
619
 
620
- ***
620
+ ---
621
621
 
622
622
  #### JnImageView
623
623
 
@@ -625,15 +625,15 @@ import { downloadTemplate, importData, exportData } from '@/api/data'
625
625
 
626
626
  **Props:**
627
627
 
628
- | 属性名 | 类型 | 默认值 | 说明 |
629
- | -------------- | ------------- | ------- | ----------------------------------------------------- |
630
- | src | `string` | `''` | 图片源地址 |
631
- | previewSrcList | `IFileItem[]` | `[]` | 开启图片预览功能 |
632
- | preview | `boolean` | `false` | 是否开启预览功能 |
633
- | height | `string` | — | 图片高度 |
634
- | maxHeight | `string` | — | 图片最大高度 |
635
- | width | `string` | — | 图片宽度 |
636
- | maxWidth | `string` | — | 图片最大宽度 |
628
+ | 属性名 | 类型 | 默认值 | 说明 |
629
+ | -------------- | ------------- | ------- | ------------------------------------------------------------------------------- |
630
+ | src | `string` | `''` | 图片源地址 |
631
+ | previewSrcList | `IFileItem[]` | `[]` | 开启图片预览功能 |
632
+ | preview | `boolean` | `false` | 是否开启预览功能 |
633
+ | height | `string` | — | 图片高度 |
634
+ | maxHeight | `string` | — | 图片最大高度 |
635
+ | width | `string` | — | 图片宽度 |
636
+ | maxWidth | `string` | — | 图片最大宽度 |
637
637
  | showAll | `boolean` | `false` | 是否展示所有图片(flex 排列,gap 4px,可换行,点击时 initial-index 为该图索引) |
638
638
 
639
639
  **使用示例:**
@@ -644,7 +644,7 @@ import { downloadTemplate, importData, exportData } from '@/api/data'
644
644
  </template>
645
645
  ```
646
646
 
647
- ***
647
+ ---
648
648
 
649
649
  #### JnFileUpload
650
650
 
@@ -652,22 +652,22 @@ import { downloadTemplate, importData, exportData } from '@/api/data'
652
652
 
653
653
  **Props:**
654
654
 
655
- | 属性名 | 类型 | 默认值 | 说明 |
656
- | ----------------- | --------------------------------------- | --------- | -------------------------------- |
657
- | modelValue | `MixedUploadFile[]` | — | 绑定的模型值(文件列表) |
658
- | uploadName | `string` | `'file'` | 上传的文件字段名 |
659
- | drag | `boolean` | `false` | 是否启用拖拽上传 |
660
- | disabled | `boolean` | `false` | 是否禁用 |
661
- | showFileList | `boolean` | `true` | 是否显示已上传文件列表 |
662
- | accept | `string` | `''` | 接受的文件类型(如 .xls,.xlsx) |
663
- | fileSizeMb | `number` | `100` | 单个文件大小限制(单位:MB) |
664
- | limit | `number` | `0` | 最大上传文件数量,0 表示不限制 |
665
- | size | `'' \| 'small' \| 'default' \| 'large'` | `'small'` | Element Plus 组件的尺寸 |
666
- | formRef | `FormInstance` | — | 父级组件的表单引用 |
667
- | validateFieldName | `string` | `''` | 父级表单中用于校验的字段名 |
668
- | downloadFileFn | `(data: IAttachment) => void` | — | 文件下载的函数 |
669
- | autoUploadApi | `(data: File) => void` | — | 自动上传文件的 api 函数 |
670
- | previewFileFn | `(data: IAttachment) => void` | — | 文件预览函数(仅对 pdf 文件显示预览按钮) |
655
+ | 属性名 | 类型 | 默认值 | 说明 |
656
+ | ----------------- | --------------------------------------- | --------- | ---------------------------------------------------------------- |
657
+ | modelValue | `MixedUploadFile[]` | — | 绑定的模型值(文件列表) |
658
+ | uploadName | `string` | `'file'` | 上传的文件字段名 |
659
+ | drag | `boolean` | `false` | 是否启用拖拽上传 |
660
+ | disabled | `boolean` | `false` | 是否禁用 |
661
+ | showFileList | `boolean` | `true` | 是否显示已上传文件列表 |
662
+ | accept | `string` | `''` | 接受的文件类型(如 .xls,.xlsx) |
663
+ | fileSizeMb | `number` | `100` | 单个文件大小限制(单位:MB) |
664
+ | limit | `number` | `0` | 最大上传文件数量,0 表示不限制 |
665
+ | size | `'' \| 'small' \| 'default' \| 'large'` | `'small'` | Element Plus 组件的尺寸 |
666
+ | formRef | `FormInstance` | — | 父级组件的表单引用 |
667
+ | validateFieldName | `string` | `''` | 父级表单中用于校验的字段名 |
668
+ | downloadFileFn | `(data: IAttachment) => void` | — | 文件下载的函数 |
669
+ | autoUploadApi | `(data: File) => void` | — | 自动上传文件的 api 函数 |
670
+ | previewFileFn | `(data: IAttachment) => void` | — | 文件预览函数(仅对 pdf 文件显示预览按钮) |
671
671
  | readonly | `boolean` | `false` | 是否只读模式(仅展示文件列表,隐藏上传按钮、上传提示与删除按钮) |
672
672
 
673
673
  **使用示例:**
@@ -691,7 +691,7 @@ const fileList = ref([])
691
691
  </script>
692
692
  ```
693
693
 
694
- ***
694
+ ---
695
695
 
696
696
  #### JnDialog
697
697
 
@@ -699,10 +699,10 @@ const fileList = ref([])
699
699
 
700
700
  **Props:**
701
701
 
702
- | 属性名 | 类型 | 默认值 | 说明 |
703
- | ----- | ------------------ | ------- | ------ |
704
- | title | `string` | `''` | 对话框的标题 |
705
- | width | `string \| number` | `'50%'` | 对话框的宽度 |
702
+ | 属性名 | 类型 | 默认值 | 说明 |
703
+ | ------ | ------------------ | ------- | ------------ |
704
+ | title | `string` | `''` | 对话框的标题 |
705
+ | width | `string \| number` | `'50%'` | 对话框的宽度 |
706
706
 
707
707
  **Slots:**
708
708
 
@@ -726,7 +726,7 @@ const dialogVisible = ref(false)
726
726
  </script>
727
727
  ```
728
728
 
729
- ***
729
+ ---
730
730
 
731
731
  #### JnDatetime
732
732
 
@@ -734,10 +734,10 @@ const dialogVisible = ref(false)
734
734
 
735
735
  **Props:**
736
736
 
737
- | 属性名 | 类型 | 默认值 | 说明 |
738
- | ----- | -------- | ---- | ------------------- |
739
- | value | `string` | `''` | 时间字符串(支持 ISO 或空格分隔) |
740
- | color | `string` | `''` | 文字颜色 |
737
+ | 属性名 | 类型 | 默认值 | 说明 |
738
+ | ------ | -------- | ------ | --------------------------------- |
739
+ | value | `string` | `''` | 时间字符串(支持 ISO 或空格分隔) |
740
+ | color | `string` | `''` | 文字颜色 |
741
741
 
742
742
  **使用示例:**
743
743
 
@@ -747,29 +747,25 @@ const dialogVisible = ref(false)
747
747
  </template>
748
748
  ```
749
749
 
750
- ***
750
+ ---
751
751
 
752
752
  #### JnDateQuery
753
753
 
754
- 通用时间查询组件,通过 `isRange` prop 控制范围模式或单值模式,类型选项由组件内部根据 `isRange` 自动配置(不可由用户自定义)。通过 `switcherStyle` 是否有值控制是否显示类型切换器,配合左右箭头快捷按钮实现前后时间段快速导航。`showDefault=true` 时组件初始化自动设置当天为默认值。
755
-
756
- - `isRange=true`(默认):typeOptions 为 `['daterange','week','month','year']`,modelValue 始终为 `[string, string]`。默认类型为 `daterange`。month/year 选择器为单选,组件自动展开为 `[月初,月末]`/`[年初,年末]`。
757
- - `isRange=false`:typeOptions 为 `['date','month','year']`,modelValue 为 `string`。默认类型为 `date`。
758
- - `valueFormat` 仅对 `isRange=true` 的所有类型最终 modelValue,或 `isRange=false` 的 `date` 类型有效。`isRange=false` 的 month/year 使用各自默认格式(`YYYY-MM`/`YYYY`)。
754
+ 通用时间查询组件,通过 `isRange` 控制范围模式或单值模式,类型选项由组件内部根据 `isRange` 自动配置。
759
755
 
760
756
  **Props:**
761
757
 
762
- | 属性名 | 类型 | 默认值 | 说明 |
763
- | ---------------- | ----------------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
764
- | modelValue | `string \| [string, string]` | | v-model 绑定值(`isRange=true` 为 [string, string];`isRange=false` 为 string) |
765
- | switcherStyle | `'select' \| 'button-group' \| ''` | `'button-group'` | 切换器风格,有值时显示切换器,为空时不显示 |
766
- | quickButtons | `boolean` | `true` | 是否显示左右箭头快捷按钮(不支持 daterange) |
767
- | valueFormat | `string` | `'YYYY-MM-DD'` | 日期格式(仅对 `isRange=true` 所有类型最终 modelValue,或 `isRange=false` 的 date 有效) |
768
- | clearable | `boolean` | `false` | 是否可清除 |
769
- | size | `'' \| 'small' \| 'default' \| 'large'` | `'default'` | 尺寸 |
770
- | rangeSeparator | `string` | `''`(i18n 提供) | 范围分隔符 |
771
- | isRange | `boolean` | `true` | 是否启用范围模式。`true`:typeOptions 为 `['daterange','week','month','year']`;`false`:typeOptions 为 `['date','month','year']` |
772
- | showDefault | `boolean` | `true` | 是否在 modelValue 为空时自动设置默认值为当天 |
758
+ | 属性名 | 类型 | 默认值 | 说明 |
759
+ | -------------- | --------------------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------- |
760
+ | modelValue | `string \| [string, string] \| null` | null | v-model 绑定值(`isRange=true` 为 [string, string];`isRange=false` 为 string) |
761
+ | switcherStyle | `'select' \| 'button-group' \| ''` | `'button-group'` | 切换器风格,有值时显示切换器,为空时不显示 |
762
+ | quickButtons | `boolean` | `true` | 是否显示左右箭头快捷按钮 |
763
+ | valueFormat | `string` | `'YYYY-MM-DD'` | 日期格式(仅对 `isRange=true` 所有类型最终 modelValue,或 `isRange=false` 的 date 有效) |
764
+ | clearable | `boolean` | `false` | 是否可清除 |
765
+ | size | `'' \| 'small' \| 'default' \| 'large'` | `'default'` | 尺寸 |
766
+ | rangeSeparator | `string` | `''`(i18n 提供) | 范围分隔符 |
767
+ | isRange | `boolean` | `true` | 是否启用范围模式。`true`:typeOptions 为 `['daterange','week','month','year']`;`false`:typeOptions 为 `['date','month','year']` |
768
+ | showDefault | `boolean` | `false` | 是否在 modelValue 为空时自动设置默认值为当天 |
773
769
 
774
770
  **Events:**
775
771
 
@@ -781,19 +777,15 @@ const dialogVisible = ref(false)
781
777
 
782
778
  ```vue
783
779
  <template>
784
- <JnDateQuery
785
- v-model="dateValue"
786
- value-format="YYYY-MM-DD"
787
- @change="handleDateQueryChange"
788
- />
780
+ <JnDateQuery v-model="dateValue" value-format="YYYY-MM-DD" @change="handleDateQueryChange" />
789
781
  </template>
790
782
 
791
783
  <script setup>
792
784
  import { ref } from 'vue'
793
785
  import { JnDateQuery } from '@jnrs/vue-core/components'
794
786
 
795
- const dateValue = ref<string | [string, string]>('')
796
- const handleDateQueryChange = (val: string | [string, string]) => {
787
+ const dateValue = ref()
788
+ const handleDateQueryChange = (val?: string) => {
797
789
  console.log(val)
798
790
  }
799
791
  </script>
@@ -801,7 +793,7 @@ const handleDateQueryChange = (val: string | [string, string]) => {
801
793
 
802
794
  > 完整案例参见模板工程 `src/views/examples/playground/index.vue` 中的「JnDateQuery 时间查询」章节。
803
795
 
804
- ***
796
+ ---
805
797
 
806
798
  #### GlobalSetting
807
799
 
@@ -809,7 +801,7 @@ const handleDateQueryChange = (val: string | [string, string]) => {
809
801
 
810
802
  **说明:** 该组件通常用于系统设置页面,提供语言、主题、主题色等配置的 UI 界面。
811
803
 
812
- ***
804
+ ---
813
805
 
814
806
  ### @jnrs/vue-core/composables 模块
815
807
 
@@ -819,16 +811,16 @@ const handleDateQueryChange = (val: string | [string, string]) => {
819
811
 
820
812
  **参数:**
821
813
 
822
- | 参数名 | 类型 | 默认值 | 说明 |
823
- | -------------- | ---------------------------- | ----------------- | -------------------------------------- |
824
- | containerClass | `string` | `'jn_table'` | 表格或容器类名,多个表格时需传入不同类名 |
825
- | rowClass | `string` | `'el-table__row'` | 表格行类名 |
814
+ | 参数名 | 类型 | 默认值 | 说明 |
815
+ | -------------- | ---------------------------- | ----------------- | --------------------------------------------------- |
816
+ | containerClass | `string` | `'jn_table'` | 表格或容器类名,多个表格时需传入不同类名 |
817
+ | rowClass | `string` | `'el-table__row'` | 表格行类名 |
826
818
  | callback | `(row: HTMLElement) => void` | `handleSelection` | 框选后的回调,默认处理 input\[type='checkbox'] 元素 |
827
819
 
828
820
  **返回值:**
829
821
 
830
- | 返回值 | 类型 | 说明 |
831
- | --------------- | ----------------------------- | ---------- |
822
+ | 返回值 | 类型 | 说明 |
823
+ | --------------- | ----------------------------- | -------------------- |
832
824
  | handleMouseDown | `(event: MouseEvent) => void` | 鼠标按下事件处理函数 |
833
825
 
834
826
  **使用示例:**
@@ -856,7 +848,7 @@ const handleSelectionChange = (selection) => {
856
848
  </script>
857
849
  ```
858
850
 
859
- ***
851
+ ---
860
852
 
861
853
  #### useReactivityTableHeight
862
854
 
@@ -864,15 +856,15 @@ const handleSelectionChange = (selection) => {
864
856
 
865
857
  **参数:**
866
858
 
867
- | 参数名 | 类型 | 默认值 | 说明 |
868
- | --------- | -------- | ------------ | ---- |
859
+ | 参数名 | 类型 | 默认值 | 说明 |
860
+ | --------- | -------- | ------------ | -------- |
869
861
  | className | `string` | `'el-table'` | 表格类名 |
870
862
  | bottomGap | `number` | `77` | 底部间隔 |
871
863
 
872
864
  **返回值:**
873
865
 
874
- | 返回值 | 类型 | 说明 |
875
- | --------- | ------------- | ------ |
866
+ | 返回值 | 类型 | 说明 |
867
+ | --------- | ------------- | ------------ |
876
868
  | maxHeight | `Ref<number>` | 表格最大高度 |
877
869
 
878
870
  **UseReactivityTableHeightOptions 类型:**
@@ -909,7 +901,7 @@ const { maxHeight } = useReactivityTableHeight({
909
901
  - 防抖处理(300ms)
910
902
  - 支持 keep-alive 缓存组件
911
903
 
912
- ***
904
+ ---
913
905
 
914
906
  #### useWebSocket
915
907
 
@@ -917,16 +909,16 @@ WebSocket 封装(支持心跳机制)
917
909
 
918
910
  **参数:**
919
911
 
920
- | 参数名 | 类型 | 默认值 | 说明 |
921
- | ------------------------- | ------------------------ | ------- | ------------ |
922
- | url | `string` | — | WebSocket 地址 |
923
- | connectionTimeoutDuration | `number` | `60000` | 网络超时时间(ms) |
924
- | token | `string` | — | 认证信息 |
912
+ | 参数名 | 类型 | 默认值 | 说明 |
913
+ | ------------------------- | ------------------------ | ------- | ------------------ |
914
+ | url | `string` | — | WebSocket 地址 |
915
+ | connectionTimeoutDuration | `number` | `60000` | 网络超时时间(ms) |
916
+ | token | `string` | — | 认证信息 |
925
917
  | heartbeat | `boolean` | `false` | 是否启用心跳 |
926
918
  | heartbeatInterval | `number` | `30000` | 心跳间隔(ms) |
927
- | heartbeatTimeout | `number` | `10000` | 心跳超时时间(ms) |
928
- | showLog | `boolean` | `false` | 是否打印控制台信息 |
929
- | showMessage | `boolean` | `true` | 是否显示消息弹框 |
919
+ | heartbeatTimeout | `number` | `10000` | 心跳超时时间(ms) |
920
+ | showLog | `boolean` | `false` | 是否打印控制台信息 |
921
+ | showMessage | `boolean` | `true` | 是否显示消息弹框 |
930
922
  | onOpen | `() => void` | — | 连接成功回调 |
931
923
  | onMessage | `(data) => void` | — | 收到消息回调 |
932
924
  | onClose | `() => void` | — | 连接关闭回调 |
@@ -934,14 +926,14 @@ WebSocket 封装(支持心跳机制)
934
926
 
935
927
  **返回值:**
936
928
 
937
- | 返回值 | 类型 | 说明 |
938
- | -------------- | ------------------------- | ------------ |
929
+ | 返回值 | 类型 | 说明 |
930
+ | -------------- | ------------------------- | -------------- |
939
931
  | ws | `Ref<WebSocket \| null>` | WebSocket 实例 |
940
- | isLoading | `Ref<boolean>` | 是否正在加载中 |
941
- | isConnected | `Ref<boolean>` | 是否已连接 |
942
- | wsStateInfo | `Ref<string>` | 连接状态信息 |
943
- | sendMessage | `(data: unknown) => void` | 发送消息函数 |
944
- | closeWebSocket | `() => void` | 关闭连接函数 |
932
+ | isLoading | `Ref<boolean>` | 是否正在加载中 |
933
+ | isConnected | `Ref<boolean>` | 是否已连接 |
934
+ | wsStateInfo | `Ref<string>` | 连接状态信息 |
935
+ | sendMessage | `(data: unknown) => void` | 发送消息函数 |
936
+ | closeWebSocket | `() => void` | 关闭连接函数 |
945
937
 
946
938
  **使用示例:**
947
939
 
@@ -984,7 +976,7 @@ closeWebSocket()
984
976
  - 支持组件激活/停用时自动管理连接
985
977
  - 自动清理资源
986
978
 
987
- ***
979
+ ---
988
980
 
989
981
  ## 🔍 完整使用示例
990
982
 
@@ -1028,7 +1020,7 @@ const { maxHeight } = useReactivityTableHeight()
1028
1020
  const { sendMessage } = useWebSocket({ url: 'ws://localhost:8080' })
1029
1021
  ```
1030
1022
 
1031
- ***
1023
+ ---
1032
1024
 
1033
1025
  ## 📝 注意事项
1034
1026
 
@@ -1040,7 +1032,7 @@ const { sendMessage } = useWebSocket({ url: 'ws://localhost:8080' })
1040
1032
  6. **鼠标框选**:`useMouseSelection` 需要在表格上绑定 `@mousedown` 事件
1041
1033
  7. **类型安全**:所有导出均提供完整的 TypeScript 类型定义
1042
1034
 
1043
- ***
1035
+ ---
1044
1036
 
1045
1037
  ## 📄 License
1046
1038
 
package/CHANGELOG.md CHANGED
@@ -1,6 +1,17 @@
1
1
  # 发版日志
2
2
 
3
- ## [1.2.42] - 2026-07-30 【latest】
3
+ ## [1.2.43] - 2026-07-30 【latest】
4
+
5
+ ### ⚠️ Breaking Changes
6
+
7
+ - `JnDateQuery`:`showDefault` 默认值从 `true` 改为 `false`
8
+ - `JnDateQuery`:`modelValue` 类型增加 `null` 支持
9
+
10
+ ### Docs
11
+
12
+ - `AGENTS.md`:表格格式统一对齐
13
+
14
+ ## [1.2.42] - 2026-07-30
4
15
 
5
16
  ### ⚠️ Breaking Changes
6
17
 
@@ -2,7 +2,7 @@ type DateType = 'date' | 'week' | 'month' | 'year' | 'daterange';
2
2
  type SwitcherStyle = 'select' | 'button-group';
3
3
  interface Props {
4
4
  /** v-model 绑定值(单值为 string,范围为 [string, string]) */
5
- modelValue: string | [string, string];
5
+ modelValue: string | [string, string] | null;
6
6
  /** 切换器风格,有值时显示切换器,为空时不显示 */
7
7
  switcherStyle?: SwitcherStyle | '';
8
8
  /** 是否显示左右箭头快捷按钮 */
@@ -24,7 +24,7 @@ interface Props {
24
24
  isRange?: boolean;
25
25
  /**
26
26
  * 是否在 modelValue 为空时自动设置默认值为当天
27
- * @default true
27
+ * @default false
28
28
  */
29
29
  showDefault?: boolean;
30
30
  }
@@ -1,4 +1,4 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(".jn_globalSetting_header{margin-bottom:0;padding-bottom:20px}.jn_globalSetting_item[data-v-1c160a11]{margin-bottom:20px}.jn_imageView[data-v-7657a408]{display:block;position:relative;width:100%;height:100%;border:1px solid var(--jnrs-font-primary-03)}.jn_imageView[data-v-7657a408] img{transition:all .25s ease}.jn_imageView[data-v-7657a408] img:hover{transform:scale(1.2)}.jn_imageView .jn_imageView_error[data-v-7657a408]{display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-size:.8em;line-height:1.1em;text-align:center;filter:opacity(.7)}.jn_imageView_badge[data-v-7657a408]:after{content:attr(data-count);position:absolute;top:0;right:0;padding:2px 2px 2px 4px;background-color:#000000b3;color:#fff;font-size:.7em;line-height:1;pointer-events:none;z-index:1}.jn_imageView_wrapper[data-v-7657a408]{display:flex;flex-wrap:wrap;gap:4px;justify-content:center}.jn_imageView_wrapper_all[data-v-7657a408]{justify-content:flex-start}.jn_image_view_icon[data-v-7657a408]:hover{color:var(--jnrs-color-primary);transform:scale(1.2);transition:all .3s ease}.jn_fileView[data-v-66598075]{display:block;width:100%;height:100%;line-height:1em;cursor:pointer}.jn_fileView:hover .jn_fileView_button[data-v-66598075]{color:var(--jnrs-color-primary)}.jn_fileView .jn_fileView_fileName[data-v-66598075]{font-size:.8em;color:var(--jnrs-font-primary-05);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.jn_fileView .jn_fileView_button[data-v-66598075]{height:auto;padding:0;text-decoration:underline;font-size:.9em;transition:all .3s ease}.jn_fileUpload[data-v-c97c1306]{position:relative;width:100%;color:var(--jnrs-font-primary-05)}.jn_fileUpload[data-v-c97c1306] .el-upload-dragger{padding:30px 0 10px}.jn_fileUpload .jn_uploadTips[data-v-c97c1306]{display:block;width:100%;margin-top:5px;line-height:1.2em}.jn_fileUpload .jn_uploadTips span[data-v-c97c1306]{display:inline-block;margin-right:10px}.jn_fileUpload .jn_uploadTips b[data-v-c97c1306]{color:var(--el-color-danger, #ff3300)}.jn_fileUpload .jn_uploadTips_isDrag[data-v-c97c1306]{position:absolute;top:4px;left:0;text-align:center}.jn_fileUpload .jn_fileList[data-v-c97c1306]{width:100%}.jn_fileUpload .jn_fileList .jn_fileLis_item[data-v-c97c1306]{display:flex;align-items:center;justify-content:space-between;width:100%;margin-top:8px;padding:5px 0;border:1px solid var(--jnrs-font-primary-03);background:var(--jnrs-background-primary)}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_left[data-v-c97c1306]{flex:1;position:relative;display:flex;align-items:center;justify-content:flex-start;padding-right:60px;line-height:1.1em}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_right[data-v-c97c1306]{flex-shrink:0;width:85px;display:flex;align-items:center;justify-content:flex-end;padding-right:4px}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_index[data-v-c97c1306]{flex-shrink:0;width:20px;height:20px;line-height:20px;text-align:center}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_icon[data-v-c97c1306]{flex-shrink:0;width:20px;height:20px}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_name[data-v-c97c1306]{padding:0 4px;word-break:break-all}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_size[data-v-c97c1306]{position:absolute;right:0;width:50px;color:#999;white-space:nowrap;text-align:right}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_btn[data-v-c97c1306]{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:20px;height:20px;margin:0 2px;border-radius:3px;font-size:16px;color:var(--el-color-primary, #5887f7);transition:all .3s ease;cursor:pointer}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_btn[data-v-c97c1306]:hover{background-color:var(--jnrs-card-primary)}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_btn_danger[data-v-c97c1306]{color:var(--el-color-danger, #ff3300)}.jnImportAndExport_button.is-text[data-v-2b07c696]{padding:0}.jnImportAndExport_underlineBtn[data-v-2b07c696]{display:inline-block;margin-right:36px;color:#3697fc;text-decoration:underline;cursor:pointer}.jnImportAndExport_underlineBtn[data-v-2b07c696]:hover{opacity:.8}.jn-datetime-date[data-v-6d9d4c9b]{display:block}.jn-datetime-time[data-v-6d9d4c9b]{opacity:.7;font-size:.9em}.jn-datetime-time-inline[data-v-6d9d4c9b]{display:inline-block;margin-left:.5em;font-size:1em}.jn_table[data-v-14a38a55]{width:100%}.jn_table[data-v-14a38a55] .jn_table_header{color:var(--jnrs-font-primary)!important;background:var(--jnrs-background-head)!important}.jn_table[data-v-14a38a55] .jn_table_header .cell{padding:0 8px;line-height:1.2em}.jn-main-table[data-v-14a38a55] .el-table__row{cursor:pointer}.jn-main-table[data-v-14a38a55] .jn-row-selected td{background-color:var(--jnrs-color-primary-fade03)!important}.jn_selectTemplate[data-v-d4b003b4]{display:flex;align-items:center;font-size:0}.jn_selectTemplate .jn_select[data-v-d4b003b4]{flex:1;right:-1px;z-index:1}.jn_selectTemplate .jn_select[data-v-d4b003b4] .el-select__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.jn_selectTemplate .jn_select_button[data-v-d4b003b4]{border-radius:0 3px 3px 0}.jn_selectTemplate .jn_select_button[data-v-d4b003b4]:hover{z-index:1}.t_select_button_only[data-v-d4b003b4]{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.jn_dialog_header[data-v-d4b003b4]{display:flex;align-items:center}[data-v-d4b003b4] .el-input__validateIcon{display:none}[data-v-d4b003b4] th .el-checkbox--small{display:none!important}[data-v-d4b003b4] .el-table__row{cursor:pointer}.tableIsSingle[data-v-d4b003b4] .el-checkbox__inner{border-radius:50%}.jn-date-query[data-v-b9b4c5e8]{display:flex;align-items:center;gap:10px}.jn-date-query__main[data-v-b9b4c5e8]{display:flex;align-items:center;gap:0}.jn-date-query__switcher[data-v-b9b4c5e8]{display:flex;align-items:center}")),document.head.appendChild(e)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}})();
1
+ (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(".jn_globalSetting_header{margin-bottom:0;padding-bottom:20px}.jn_globalSetting_item[data-v-1c160a11]{margin-bottom:20px}.jn_imageView[data-v-7657a408]{display:block;position:relative;width:100%;height:100%;border:1px solid var(--jnrs-font-primary-03)}.jn_imageView[data-v-7657a408] img{transition:all .25s ease}.jn_imageView[data-v-7657a408] img:hover{transform:scale(1.2)}.jn_imageView .jn_imageView_error[data-v-7657a408]{display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-size:.8em;line-height:1.1em;text-align:center;filter:opacity(.7)}.jn_imageView_badge[data-v-7657a408]:after{content:attr(data-count);position:absolute;top:0;right:0;padding:2px 2px 2px 4px;background-color:#000000b3;color:#fff;font-size:.7em;line-height:1;pointer-events:none;z-index:1}.jn_imageView_wrapper[data-v-7657a408]{display:flex;flex-wrap:wrap;gap:4px;justify-content:center}.jn_imageView_wrapper_all[data-v-7657a408]{justify-content:flex-start}.jn_image_view_icon[data-v-7657a408]:hover{color:var(--jnrs-color-primary);transform:scale(1.2);transition:all .3s ease}.jn_fileView[data-v-66598075]{display:block;width:100%;height:100%;line-height:1em;cursor:pointer}.jn_fileView:hover .jn_fileView_button[data-v-66598075]{color:var(--jnrs-color-primary)}.jn_fileView .jn_fileView_fileName[data-v-66598075]{font-size:.8em;color:var(--jnrs-font-primary-05);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.jn_fileView .jn_fileView_button[data-v-66598075]{height:auto;padding:0;text-decoration:underline;font-size:.9em;transition:all .3s ease}.jn_fileUpload[data-v-c97c1306]{position:relative;width:100%;color:var(--jnrs-font-primary-05)}.jn_fileUpload[data-v-c97c1306] .el-upload-dragger{padding:30px 0 10px}.jn_fileUpload .jn_uploadTips[data-v-c97c1306]{display:block;width:100%;margin-top:5px;line-height:1.2em}.jn_fileUpload .jn_uploadTips span[data-v-c97c1306]{display:inline-block;margin-right:10px}.jn_fileUpload .jn_uploadTips b[data-v-c97c1306]{color:var(--el-color-danger, #ff3300)}.jn_fileUpload .jn_uploadTips_isDrag[data-v-c97c1306]{position:absolute;top:4px;left:0;text-align:center}.jn_fileUpload .jn_fileList[data-v-c97c1306]{width:100%}.jn_fileUpload .jn_fileList .jn_fileLis_item[data-v-c97c1306]{display:flex;align-items:center;justify-content:space-between;width:100%;margin-top:8px;padding:5px 0;border:1px solid var(--jnrs-font-primary-03);background:var(--jnrs-background-primary)}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_left[data-v-c97c1306]{flex:1;position:relative;display:flex;align-items:center;justify-content:flex-start;padding-right:60px;line-height:1.1em}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_right[data-v-c97c1306]{flex-shrink:0;width:85px;display:flex;align-items:center;justify-content:flex-end;padding-right:4px}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_index[data-v-c97c1306]{flex-shrink:0;width:20px;height:20px;line-height:20px;text-align:center}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_icon[data-v-c97c1306]{flex-shrink:0;width:20px;height:20px}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_name[data-v-c97c1306]{padding:0 4px;word-break:break-all}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_size[data-v-c97c1306]{position:absolute;right:0;width:50px;color:#999;white-space:nowrap;text-align:right}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_btn[data-v-c97c1306]{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:20px;height:20px;margin:0 2px;border-radius:3px;font-size:16px;color:var(--el-color-primary, #5887f7);transition:all .3s ease;cursor:pointer}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_btn[data-v-c97c1306]:hover{background-color:var(--jnrs-card-primary)}.jn_fileUpload .jn_fileList .jn_fileLis_item .fileLis_item_btn_danger[data-v-c97c1306]{color:var(--el-color-danger, #ff3300)}.jnImportAndExport_button.is-text[data-v-2b07c696]{padding:0}.jnImportAndExport_underlineBtn[data-v-2b07c696]{display:inline-block;margin-right:36px;color:#3697fc;text-decoration:underline;cursor:pointer}.jnImportAndExport_underlineBtn[data-v-2b07c696]:hover{opacity:.8}.jn-datetime-date[data-v-6d9d4c9b]{display:block}.jn-datetime-time[data-v-6d9d4c9b]{opacity:.7;font-size:.9em}.jn-datetime-time-inline[data-v-6d9d4c9b]{display:inline-block;margin-left:.5em;font-size:1em}.jn_table[data-v-14a38a55]{width:100%}.jn_table[data-v-14a38a55] .jn_table_header{color:var(--jnrs-font-primary)!important;background:var(--jnrs-background-head)!important}.jn_table[data-v-14a38a55] .jn_table_header .cell{padding:0 8px;line-height:1.2em}.jn-main-table[data-v-14a38a55] .el-table__row{cursor:pointer}.jn-main-table[data-v-14a38a55] .jn-row-selected td{background-color:var(--jnrs-color-primary-fade03)!important}.jn_selectTemplate[data-v-d4b003b4]{display:flex;align-items:center;font-size:0}.jn_selectTemplate .jn_select[data-v-d4b003b4]{flex:1;right:-1px;z-index:1}.jn_selectTemplate .jn_select[data-v-d4b003b4] .el-select__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.jn_selectTemplate .jn_select_button[data-v-d4b003b4]{border-radius:0 3px 3px 0}.jn_selectTemplate .jn_select_button[data-v-d4b003b4]:hover{z-index:1}.t_select_button_only[data-v-d4b003b4]{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.jn_dialog_header[data-v-d4b003b4]{display:flex;align-items:center}[data-v-d4b003b4] .el-input__validateIcon{display:none}[data-v-d4b003b4] th .el-checkbox--small{display:none!important}[data-v-d4b003b4] .el-table__row{cursor:pointer}.tableIsSingle[data-v-d4b003b4] .el-checkbox__inner{border-radius:50%}.jn-date-query[data-v-f9c1ea28]{display:flex;align-items:center;gap:10px}.jn-date-query__main[data-v-f9c1ea28]{display:flex;align-items:center;gap:0}.jn-date-query__switcher[data-v-f9c1ea28]{display:flex;align-items:center}")),document.head.appendChild(e)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}})();
2
2
  import { defineComponent as q, ref as V, createBlock as F, openBlock as d, unref as l, withCtx as p, createElementVNode as j, createVNode as E, toDisplayString as C, isRef as ta, createElementBlock as k, Fragment as J, renderList as Z, createTextVNode as H, computed as X, normalizeClass as te, normalizeStyle as ke, createCommentVNode as T, renderSlot as fe, withDirectives as Xe, vShow as aa, nextTick as se, withModifiers as He, watch as de, onMounted as jt, mergeProps as na } from "vue";
3
3
  import { storeToRefs as la } from "pinia";
4
4
  import { ElDrawer as ia, ElSwitch as oa, ElRadioGroup as Ue, ElRadio as ze, ElImage as ra, ElIcon as G, ElButton as R, ElDialog as Tt, ElUpload as sa, vLoading as Oe, ElMessage as Y, ElForm as Ut, ElFormItem as ua, ElMessageBox as lt, ElLoading as Fe, ElPagination as zt, ElTable as Ft, ElTableColumn as Ie, ElSelect as Lt, ElOption as Vt, ElCheckbox as ca, ElButtonGroup as da, ElDatePicker as Aa } from "element-plus";
@@ -1924,7 +1924,7 @@ const Pr = /* @__PURE__ */ q({
1924
1924
  size: { default: "default" },
1925
1925
  rangeSeparator: { default: "" },
1926
1926
  isRange: { type: Boolean, default: !0 },
1927
- showDefault: { type: Boolean, default: !0 }
1927
+ showDefault: { type: Boolean, default: !1 }
1928
1928
  },
1929
1929
  emits: ["update:modelValue", "change", "type-change"],
1930
1930
  setup(e, { emit: t }) {
@@ -2164,7 +2164,7 @@ const Pr = /* @__PURE__ */ q({
2164
2164
  ])
2165
2165
  ]));
2166
2166
  }
2167
- }), os = /* @__PURE__ */ _(Kr, [["__scopeId", "data-v-b9b4c5e8"]]);
2167
+ }), os = /* @__PURE__ */ _(Kr, [["__scopeId", "data-v-f9c1ea28"]]);
2168
2168
  export {
2169
2169
  $r as GlobalSetting,
2170
2170
  os as JnDateQuery,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jnrs/vue-core",
3
- "version": "1.2.42",
3
+ "version": "1.2.43",
4
4
  "description": "巨能(JNRS)前端工程化开发,Vue 专用核心功能包。",
5
5
  "keywords": [
6
6
  "jnrs",