@opentiny/vue-docs 3.23.0 → 3.24.0

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 (71) hide show
  1. package/demos/apis/dialog-select.js +42 -0
  2. package/demos/apis/popeditor.js +14 -0
  3. package/demos/apis/steps.js +15 -0
  4. package/demos/apis/text-popup.js +2 -2
  5. package/demos/apis/user-head.js +7 -18
  6. package/demos/mobile-first/app/pager/webdoc/pager.js +0 -48
  7. package/demos/mobile-first/app/steps/vertical.vue +14 -1
  8. package/demos/pc/app/calendar-view/calendar-event.spec.ts +2 -2
  9. package/demos/pc/app/date-panel/basic-usage.spec.ts +6 -6
  10. package/demos/pc/app/date-panel/custom-week.spec.ts +1 -1
  11. package/demos/pc/app/date-panel/disabled-date.spec.ts +8 -9
  12. package/demos/pc/app/date-panel/event.spec.ts +4 -4
  13. package/demos/pc/app/date-panel/format.spec.ts +2 -2
  14. package/demos/pc/app/date-panel/readonly.spec.ts +3 -3
  15. package/demos/pc/app/date-panel/unlink-panels.spec.ts +4 -4
  16. package/demos/pc/app/date-picker/basic-usage.spec.ts +2 -2
  17. package/demos/pc/app/date-picker/date-range.spec.ts +3 -3
  18. package/demos/pc/app/dialog-select/nest-grid-multi-composition-api.vue +19 -1
  19. package/demos/pc/app/dialog-select/nest-grid-multi.spec.ts +19 -0
  20. package/demos/pc/app/dialog-select/nest-grid-multi.vue +17 -1
  21. package/demos/pc/app/dialog-select/webdoc/dialog-select.js +2 -2
  22. package/demos/pc/app/grid/base/basic-usage-composition-api.vue +48 -93
  23. package/demos/pc/app/grid/base/basic-usage.spec.js +1 -1
  24. package/demos/pc/app/grid/base/basic-usage.vue +29 -132
  25. package/demos/pc/app/grid/dynamically-columns/dynamically-columns.spec.js +3 -3
  26. package/demos/pc/app/grid/webdoc/grid-ai-agent.js +23 -0
  27. package/demos/pc/app/popeditor/condition-layout-composition-api.vue +1 -0
  28. package/demos/pc/app/popeditor/condition-layout.spec.ts +1 -0
  29. package/demos/pc/app/popeditor/condition-layout.vue +1 -0
  30. package/demos/pc/app/popeditor/webdoc/popeditor.js +2 -2
  31. package/demos/pc/app/qr-code/style-composition-api.vue +14 -3
  32. package/demos/pc/app/qr-code/style.vue +15 -3
  33. package/demos/pc/app/text-popup/{value.spec.ts → modelValue.spec.ts} +2 -2
  34. package/demos/pc/app/text-popup/webdoc/text-popup.js +8 -8
  35. package/demos/pc/webdoc/changelog.md +461 -451
  36. package/package.json +27 -19
  37. package/playground/App.vue +2 -2
  38. package/src/App.vue +18 -1
  39. package/src/{views/components-doc/components → components}/demo.vue +1 -1
  40. package/src/{views/components-doc/components → components}/float-settings.vue +24 -7
  41. package/src/components/mcp-docs.vue +55 -0
  42. package/src/components/tiny-robot-chat.vue +128 -0
  43. package/src/composable/DifyModelProvider.ts +65 -0
  44. package/src/composable/storage.ts +71 -0
  45. package/src/composable/useTinyRobot.ts +167 -0
  46. package/src/composable/utils.ts +172 -0
  47. package/src/i18n/index.js +5 -2
  48. package/src/main.js +10 -1
  49. package/src/router.js +9 -0
  50. package/src/tools/appData.js +12 -2
  51. package/src/views/components-doc/common.vue +22 -8
  52. package/src/views/comprehensive/Demo.vue +211 -0
  53. package/src/views/comprehensive/index.vue +391 -0
  54. package/src/views/comprehensive/products.json +99 -0
  55. package/src/views/comprehensive/types/index.ts +37 -0
  56. package/src/views/layout/layout.vue +2 -2
  57. package/demos/mobile-first/app/pager/current-change.vue +0 -34
  58. package/demos/mobile-first/app/pager/next-click.vue +0 -34
  59. package/demos/mobile-first/app/pager/prev-click.vue +0 -34
  60. /package/demos/pc/app/text-popup/{clear-value-composition-api.vue → clear-modelValue-composition-api.vue} +0 -0
  61. /package/demos/pc/app/text-popup/{clear-value.spec.ts → clear-modelValue.spec.ts} +0 -0
  62. /package/demos/pc/app/text-popup/{clear-value.vue → clear-modelValue.vue} +0 -0
  63. /package/demos/pc/app/text-popup/{value-composition-api.vue → modelValue-composition-api.vue} +0 -0
  64. /package/demos/pc/app/text-popup/{value.vue → modelValue.vue} +0 -0
  65. /package/src/{views/components-doc/components → components}/anchor.vue +0 -0
  66. /package/src/{views/components-doc/components → components}/api-docs.vue +0 -0
  67. /package/src/{views/components-doc/components → components}/async-highlight.vue +0 -0
  68. /package/src/{views/components-doc/components → components}/contributor.vue +0 -0
  69. /package/src/{views/components-doc/components → components}/header.vue +0 -0
  70. /package/src/{views/components-doc/components → components}/version-tip.vue +0 -0
  71. /package/src/{views/components-doc/composition → composable}/useTasksFinish.ts +0 -0
@@ -31,6 +31,20 @@ export default {
31
31
  mode: ['pc'],
32
32
  pcDemo: 'nest-grid-multi'
33
33
  },
34
+ {
35
+ name: 'lock-scroll',
36
+ type: 'boolean',
37
+ defaultValue: 'true',
38
+ desc: {
39
+ 'zh-CN': '设置弹出面板的锁定滚动',
40
+ 'en-US': 'Set the lock scroll of the pop-up panel.'
41
+ },
42
+ meta: {
43
+ stable: '3.24.0'
44
+ },
45
+ mode: ['pc'],
46
+ pcDemo: 'nest-grid-multi'
47
+ },
34
48
  {
35
49
  name: 'grid-op',
36
50
  typeAnchorName: 'IGridOption',
@@ -374,6 +388,34 @@ export default {
374
388
  },
375
389
  mode: ['pc'],
376
390
  pcDemo: ''
391
+ },
392
+ {
393
+ name: 'delete',
394
+ type: '(row: IData) => void',
395
+ meta: {
396
+ stable: '3.24.0'
397
+ },
398
+ defaultValue: '',
399
+ desc: {
400
+ 'zh-CN': '已选栏的选项的删除事件',
401
+ 'en-US': 'The delete event of the selected column options when displaying data in a table'
402
+ },
403
+ mode: ['pc'],
404
+ pcDemo: 'nest-grid-multi'
405
+ },
406
+ {
407
+ name: 'clear',
408
+ type: '() => void',
409
+ meta: {
410
+ stable: '3.24.0'
411
+ },
412
+ defaultValue: '',
413
+ desc: {
414
+ 'zh-CN': '已选栏的清空事件',
415
+ 'en-US': 'The clear event of the selected column when displaying data in a table'
416
+ },
417
+ mode: ['pc'],
418
+ pcDemo: 'nest-grid-multi'
377
419
  }
378
420
  ],
379
421
  methods: [
@@ -344,6 +344,20 @@ export default {
344
344
  mode: ['pc'],
345
345
  pcDemo: 'title'
346
346
  },
347
+ {
348
+ name: 'lock-scroll',
349
+ type: 'boolean',
350
+ defaultValue: 'true',
351
+ desc: {
352
+ 'zh-CN': '设置弹出面板的锁定滚动',
353
+ 'en-US': 'Set the lock scroll of the pop-up panel.'
354
+ },
355
+ meta: {
356
+ stable: '3.24.0'
357
+ },
358
+ mode: ['pc'],
359
+ pcDemo: 'condition-layout'
360
+ },
347
361
  {
348
362
  name: 'trigger',
349
363
  type: "'default' | 'cell' | 'row'",
@@ -115,6 +115,21 @@ export default {
115
115
  mode: ['pc'],
116
116
  pcDemo: 'node-width'
117
117
  },
118
+ {
119
+ name: 'itemStyle',
120
+ type: 'Object',
121
+ defaultValue: '{}',
122
+ meta: {
123
+ stable: '3.24.0'
124
+ },
125
+ desc: {
126
+ 'zh-CN':
127
+ '自定义单链型步骤条块的内联样式,数据类型为{ [statusName: string]: styleObject },,不同状态可根据key值差异化配置, key值为status字段的值,value值为对应节点的样式对象',
128
+ 'en-US':
129
+ 'Customize the inline style of single chain step blocks, with data type {[statusName: string]: styleObject}. Different states can be configured differently based on key values, where the key value is the value of the status field and the value value is the style object of the corresponding node'
130
+ },
131
+ mode: ['mobile-first']
132
+ },
118
133
  {
119
134
  name: 'line',
120
135
  type: 'boolean',
@@ -39,7 +39,7 @@ export default {
39
39
  pcDemo: 'separtor'
40
40
  },
41
41
  {
42
- name: 'value',
42
+ name: 'modelValue',
43
43
  type: 'string',
44
44
  defaultValue: '',
45
45
  desc: {
@@ -47,7 +47,7 @@ export default {
47
47
  'en-US': 'Bound Value'
48
48
  },
49
49
  mode: ['pc'],
50
- pcDemo: 'value'
50
+ pcDemo: 'modelValue'
51
51
  },
52
52
  {
53
53
  name: 'width',
@@ -79,11 +79,12 @@ export default {
79
79
  },
80
80
  {
81
81
  name: 'modelValue',
82
- type: 'string',
82
+ type: 'Component | string',
83
83
  defaultValue: '',
84
84
  desc: {
85
- 'zh-CN': '设置头像值。',
86
- 'en-US': 'Set the profile picture.'
85
+ 'zh-CN': 'type=icon 时为图标组件,type=label时为字体串,type=image时为资源路径',
86
+ 'en-US':
87
+ 'If type is set to icon, it should be an icon component . If type is set to label, it indicates the font string. If type is set to image, it indicates the resource path'
87
88
  },
88
89
  mode: ['pc'],
89
90
  pcDemo: 'basic-usage'
@@ -124,26 +125,14 @@ export default {
124
125
  pcDemo: 'image-user-head',
125
126
  mfDemo: ''
126
127
  },
127
- {
128
- name: 'v-model',
129
- type: 'string',
130
- defaultValue: '',
131
- desc: {
132
- 'zh-CN': 'type=icon 时为图标类名,type=label 时为字体串,type=image 时为资源路径',
133
- 'en-US':
134
- 'If type is set to icon, it indicates the icon class name. If type is set to label, it indicates the font string. If type is set to image, it indicates the resource path'
135
- },
136
- mode: ['pc', 'mobile-first'],
137
- pcDemo: 'icon-user-head',
138
- mfDemo: ''
139
- },
140
128
  {
141
129
  name: 'value',
142
130
  type: 'string',
143
131
  defaultValue: '',
144
132
  desc: {
145
- 'zh-CN': 'type=icon 时为图标类名,type=label时为字体串,type=image时为资源路径',
146
- 'en-US': ''
133
+ 'zh-CN': 'type=icon 时为图标组件,type=label时为字体串,type=image时为资源路径',
134
+ 'en-US':
135
+ 'If type is set to icon, it should be an icon component . If type is set to label, it indicates the font string. If type is set to image, it indicates the resource path'
147
136
  },
148
137
  mode: ['mobile-first'],
149
138
  mfDemo: ''
@@ -62,54 +62,6 @@ export default {
62
62
  },
63
63
  codeFiles: ['custom-next-prev-text.vue']
64
64
  },
65
- {
66
- demoId: 'current-change',
67
- name: {
68
- 'zh-CN': '当前页改变事件',
69
- 'en-US': ''
70
- },
71
- desc: {
72
- 'zh-CN': '`current-change` 切换当前页码时触发',
73
- 'en-US': ''
74
- },
75
- codeFiles: ['current-change.vue']
76
- },
77
- {
78
- demoId: 'prev-click',
79
- name: {
80
- 'zh-CN': '上一页事件',
81
- 'en-US': ''
82
- },
83
- desc: {
84
- 'zh-CN': '`prev-click` 切换至前一页时触发',
85
- 'en-US': ''
86
- },
87
- codeFiles: ['prev-click.vue']
88
- },
89
- {
90
- demoId: 'next-click',
91
- name: {
92
- 'zh-CN': '下一页事件',
93
- 'en-US': ''
94
- },
95
- desc: {
96
- 'zh-CN': '`next-click` 切换至后一页时触发',
97
- 'en-US': ''
98
- },
99
- codeFiles: ['next-click.vue']
100
- },
101
- {
102
- demoId: 'before-page-change',
103
- name: {
104
- 'zh-CN': '切换分页前事件',
105
- 'en-US': ''
106
- },
107
- desc: {
108
- 'zh-CN': '`before-page-change` 切换分页前事件',
109
- 'en-US': ''
110
- },
111
- codeFiles: ['before-page-change.vue']
112
- },
113
65
  {
114
66
  demoId: 'pager-show-total-loading',
115
67
  name: {
@@ -1,5 +1,12 @@
1
1
  <template>
2
- <tiny-steps vertical :data="data" :visible-num="4" :active="advancedActive" @click="advancedClick"></tiny-steps>
2
+ <tiny-steps
3
+ :itemStyle="itemStyle"
4
+ vertical
5
+ :data="data"
6
+ :visible-num="4"
7
+ :active="advancedActive"
8
+ @click="advancedClick"
9
+ ></tiny-steps>
3
10
  </template>
4
11
 
5
12
  <script>
@@ -12,6 +19,12 @@ export default {
12
19
  data() {
13
20
  return {
14
21
  advancedActive: 1,
22
+ itemStyle: {
23
+ doing: { cursor: 'help' },
24
+ disabled: { cursor: 'not-allowed' },
25
+ done: { cursor: 'wait' },
26
+ none: { cursor: 'pointer' }
27
+ },
15
28
  data: [
16
29
  {
17
30
  name: 'Basic Info',
@@ -6,12 +6,12 @@ test('事件', async ({ page }) => {
6
6
  const timeInput = page.locator('.tiny-calendar-view').locator('.tiny-input__inner')
7
7
  const timeBtn = page.getByRole('textbox', { name: '年 05 月' })
8
8
  const leftYear = page.getByRole('button', { name: '前一年' })
9
- const month6 = page.getByText('六月')
9
+ const month6 = page.getByText('6 月')
10
10
  const leftSvg = page.locator('.header-left > .tiny-svg')
11
11
  const rightSvg = page.locator('.header-right > .tiny-svg')
12
12
  const mode = page.locator('label').nth(2)
13
13
  const modalVal = page.getByText('模式切换事件:schedule')
14
- const date = page.getByText('30周一')
14
+ const date = page.getByText('30周一')
15
15
  const dateVal = page.locator('div').filter({ hasText: '点击日期: 2022-5-30;日程事件:[]' }).nth(1)
16
16
 
17
17
  await timeBtn.click()
@@ -10,10 +10,10 @@ test('[DatePanel] 测试月份/年份/日期选择', async ({ page }) => {
10
10
 
11
11
  // 选择年份展示月份面板
12
12
  await page.getByRole('cell', { name: '2025' }).first().click()
13
- await expect(page.getByRole('cell', { name: '一月', exact: true }).first()).toBeVisible()
13
+ await expect(page.getByRole('cell', { name: '1 月', exact: true }).first()).toBeVisible()
14
14
 
15
15
  // 选择月份展示日期面板
16
- await page.getByRole('cell', { name: '一月', exact: true }).first().click()
16
+ await page.getByRole('cell', { name: '1 月', exact: true }).first().click()
17
17
  await expect(page.getByRole('cell', { name: '15' }).locator('div').first()).toBeVisible()
18
18
 
19
19
  // 选择日期
@@ -21,7 +21,7 @@ test('[DatePanel] 测试月份/年份/日期选择', async ({ page }) => {
21
21
  await expect(page.locator('.value')).toHaveText('2025-01-16')
22
22
 
23
23
  // 月份面板
24
- await page.getByText('七月').first().click()
24
+ await page.getByText('7 月').first().click()
25
25
  await expect(page.locator('.month')).toHaveText('2025-07')
26
26
 
27
27
  // 年份面板
@@ -35,9 +35,9 @@ test('[DatePanel] 测试月份/年份/日期选择', async ({ page }) => {
35
35
  await expect(page.locator('.value1')).toHaveText('[ "2024-12-19", "2024-12-28" ]')
36
36
 
37
37
  // monthRange
38
- await page.getByText('七月').nth(1).click()
39
- await page.getByText('六月').nth(2).click()
40
- await expect(page.locator('.value2')).toHaveText('[ "2024-07", "2025-06" ]')
38
+ await page.locator('#basic-usage').getByText('7 月').nth(1).click()
39
+ await page.locator('#basic-usage').getByText('6 月').nth(2).click()
40
+ await expect(page.locator('.value2')).toHaveText('[ "2024-03", "2025-02" ]')
41
41
 
42
42
  // yearRange
43
43
  await page.getByText('2037').click()
@@ -8,7 +8,7 @@ test('[DatePanel] 测试周次序号', async ({ page }) => {
8
8
  // 选择年份月份日期
9
9
  await page.getByRole('button', { name: '2025 年' }).click()
10
10
  await page.getByText('2026').click()
11
- await page.getByText('三月').click()
11
+ await page.getByText('3 月').click()
12
12
  await expect(page.getByText('12w')).toBeVisible()
13
13
 
14
14
  // 选择下个月
@@ -19,8 +19,8 @@ test('[DatePanel] 测试时间禁用', async ({ page }) => {
19
19
  .filter({ hasText: /^2025 年6 月$/ })
20
20
  .getByLabel('前一年')
21
21
  .click()
22
- await page.getByText('一月', { exact: true }).first().click()
23
- await page.getByText('六月').first().click()
22
+ await page.getByText('1 月', { exact: true }).first().click()
23
+ await page.getByText('6 月').nth(2).click()
24
24
  await expect(page.locator('.month')).toHaveText('2024-06')
25
25
 
26
26
  // 年份面板
@@ -31,21 +31,20 @@ test('[DatePanel] 测试时间禁用', async ({ page }) => {
31
31
  // dateRange
32
32
  await page.locator('.tiny-date-range-picker__header > button').first().click()
33
33
  await page.getByRole('cell', { name: '16' }).nth(1).click()
34
- await page.locator('div').filter({ hasText: /^18$/ }).nth(2).click()
34
+ await page.locator('div').filter({ hasText: /^18$/ }).nth(1).click()
35
35
  await expect(page.locator('.value1')).toHaveText('[ "2025-01-15", "2025-02-15" ]')
36
36
 
37
37
  await page.locator('div:nth-child(2) > .tiny-date-range-picker__header > button').first().click()
38
38
  await page.locator('#disabled-date').getByText('31', { exact: true }).nth(2).click()
39
39
  await expect(page.locator('.value1')).toHaveText('[ "2025-01-15", "2025-02-15" ]')
40
40
 
41
- await page.locator('#disabled-date').getByText('15').nth(3).click()
42
- await page.locator('#disabled-date').getByText('19').nth(2).click()
43
- await expect(page.locator('.value1')).toHaveText('[ "2025-02-15", "2025-02-19" ]')
41
+ await page.locator('#disabled-date').getByText('15').nth(2).click()
42
+ await expect(page.locator('.value1')).toHaveText('[ "2025-01-31", "2025-02-15" ]')
44
43
 
45
44
  // monthRange
46
- await page.getByText('一月', { exact: true }).nth(1).click()
47
- await page.getByText('二月', { exact: true }).nth(1).click()
48
- await page.getByText('五月').nth(2).click()
45
+ await page.getByText('1 月', { exact: true }).nth(1).click()
46
+ await page.getByText('2 月', { exact: true }).nth(1).click()
47
+ await page.getByText('5 月').nth(2).click()
49
48
  await expect(page.locator('.value2')).toHaveText('[ "2024-02", "2025-05" ]')
50
49
 
51
50
  // yearRange
@@ -10,7 +10,7 @@ test('[DatePanel] 测试事件', async ({ page }) => {
10
10
 
11
11
  // 月份面板
12
12
  await page.waitForTimeout(1000)
13
- await page.getByText('七月').first().click()
13
+ await page.getByText('7 月').first().click()
14
14
  await expect(page.getByText('触发 月份面板选中 事件,组件绑定值为:2025-')).toBeVisible()
15
15
 
16
16
  // 年份面板
@@ -26,9 +26,9 @@ test('[DatePanel] 测试事件', async ({ page }) => {
26
26
 
27
27
  // monthRange
28
28
  await page.waitForTimeout(1000)
29
- await page.locator('#event').getByText('七月').nth(2).click()
30
- await page.locator('#event').getByText('五月').nth(2).click()
31
- await expect(page.getByText('触发 月份区间面板选中 事件,组件绑定值为:2025-05,2025-')).toBeVisible()
29
+ await page.getByText('5 月').nth(2).click()
30
+ await page.getByText('7 月').nth(2).click()
31
+ await expect(page.getByText('触发 月份区间面板选中 事件,组件绑定值为:2024-07,2025-')).toBeVisible()
32
32
 
33
33
  // yearRange
34
34
  await page.waitForTimeout(1000)
@@ -13,7 +13,7 @@ test('[DatePanel] 测试格式化', async ({ page }) => {
13
13
  await expect(page.locator('.value1')).toHaveText('[ "2025/01/28", "2025/02/12" ]')
14
14
 
15
15
  // monthRange
16
- await page.locator('#format').getByText('三月').first().click()
17
- await page.locator('#format').getByText('五月').nth(1).click()
16
+ await page.locator('#format').getByText('3 月').first().click()
17
+ await page.locator('#format').getByText('5 月').nth(1).click()
18
18
  await expect(page.locator('.value2')).toHaveText('[ "2024/03", "2025/05" ]')
19
19
  })
@@ -13,7 +13,7 @@ test('[DatePanel] 测试只读', async ({ page }) => {
13
13
  await expect(page.locator('.value')).toHaveText('2025-01-15')
14
14
 
15
15
  // 月份面板
16
- await page.getByText('七月').first().click()
16
+ await page.getByText('7 月').first().click()
17
17
  await expect(page.locator('.month')).toHaveText('2025-01')
18
18
 
19
19
  // 年份面板
@@ -26,8 +26,8 @@ test('[DatePanel] 测试只读', async ({ page }) => {
26
26
  await expect(page.locator('.value1')).toHaveText('[ "2025-01-15", "2025-02-15" ]')
27
27
 
28
28
  // monthRange
29
- await page.getByText('二月').first().click()
30
- await page.getByText('九月').nth(1).click()
29
+ await page.getByText('2 月').first().click()
30
+ await page.getByText('9 月').nth(1).click()
31
31
  await expect(page.locator('.value2')).toHaveText('[ "2024-03", "2025-02" ]')
32
32
 
33
33
  // yearRange
@@ -27,8 +27,8 @@ test('[DatePanel] 测试范围选择取消面板联动', async ({ page }) => {
27
27
  await page.getByText('2023 年').click()
28
28
  await expect(page.getByText('2023 年')).toBeVisible()
29
29
  // 联动
30
- await page.getByText('一月', { exact: true }).first().click()
31
- await page.getByText('六月').nth(1).click()
30
+ await page.getByText('1 月', { exact: true }).first().click()
31
+ await page.getByText('6 月').nth(1).click()
32
32
  await expect(page.locator('.value-link1')).toHaveText('[ "2023-01", "2024-06" ]')
33
33
 
34
34
  // 不联动
@@ -43,8 +43,8 @@ test('[DatePanel] 测试范围选择取消面板联动', async ({ page }) => {
43
43
  '.tiny-month-range > .tiny-picker-panel__body-wrapper > .tiny-picker-panel__body > div:nth-child(2) > .tiny-date-range-picker__header > button:nth-child(2)'
44
44
  )
45
45
  .click()
46
- await page.getByText('六月').nth(2).click()
47
- await page.getByText('五月').nth(3).click()
46
+ await page.getByText('6 月').nth(2).click()
47
+ await page.getByText('5 月').nth(3).click()
48
48
  await expect(page.locator('.value-unlink1')).toHaveText('[ "2023-06", "2025-05" ]')
49
49
 
50
50
  // yaerRange
@@ -62,7 +62,7 @@ test('[DatePicker] 测试月份/年份选择', async ({ page }) => {
62
62
  // 选择月份
63
63
  await dateInput.click()
64
64
  await page.getByRole('button', { name: '4 月' }).click()
65
- await page.getByRole('cell', { name: '六月' }).locator('a').click()
65
+ await page.getByRole('cell', { name: '6 月' }).locator('a').click()
66
66
  await page.getByRole('rowgroup').getByText('4').first().click()
67
67
  await expect(dateInput).toHaveValue('2023-06-04')
68
68
 
@@ -70,7 +70,7 @@ test('[DatePicker] 测试月份/年份选择', async ({ page }) => {
70
70
  await dateInput.click()
71
71
  await page.getByRole('button', { name: '2023 年' }).click()
72
72
  await page.getByRole('cell', { name: '2024' }).getByText('2024').click()
73
- await page.getByRole('cell', { name: '二月', exact: true }).locator('a').click()
73
+ await page.getByRole('cell', { name: '2 月', exact: true }).locator('a').click()
74
74
  await page.getByRole('rowgroup').getByText('7').first().click()
75
75
  await expect(dateInput).toHaveValue('2024-02-07')
76
76
  })
@@ -65,7 +65,7 @@ test('测试日期范围选择', async ({ page }) => {
65
65
  // 月份范围
66
66
  const startMonth = page.getByPlaceholder('开始月份')
67
67
  const endMonth = page.getByPlaceholder('结束月份')
68
- await startMonth.click()
68
+ await startMonth.first().click()
69
69
  await page.waitForTimeout(100)
70
70
  await startMonth.fill('2023-05')
71
71
  await startMonth.press('Tab')
@@ -73,9 +73,9 @@ test('测试日期范围选择', async ({ page }) => {
73
73
  await endMonth.press('Enter')
74
74
  await startMonth.click()
75
75
  await page.waitForTimeout(100)
76
- await page.getByText('一月').first().click()
76
+ await page.getByText('1 月').first().click()
77
77
  await page.waitForTimeout(100)
78
- await page.getByText('十二月').first().click()
78
+ await page.getByText('12 月').first().click()
79
79
  await page.waitForTimeout(100)
80
80
  await expect(startMonth).toHaveValue('2023-01')
81
81
  await expect(endMonth).toHaveValue('2023-12')
@@ -19,9 +19,12 @@
19
19
  @size-change="onSizeChange"
20
20
  @current-change="onCurrentChange"
21
21
  @change="onDialogSelectChange"
22
+ @clear="onDialogSelectClear"
23
+ @delete="onDialogSelectDelete"
22
24
  value-field="id"
23
25
  text-field="name"
24
26
  :main-height="240"
27
+ :lock-scroll="false"
25
28
  >
26
29
  <template #search>
27
30
  <div class="tiny-demo-search">
@@ -45,7 +48,7 @@
45
48
 
46
49
  <script setup lang="ts">
47
50
  import { reactive, ref } from 'vue'
48
- import { TinyDialogSelect, TinyButton, TinySearch, TinySelect } from '@opentiny/vue'
51
+ import { TinyDialogSelect, TinyButton, TinySearch, TinySelect, TinyModal } from '@opentiny/vue'
49
52
  import Sortable from 'sortablejs'
50
53
 
51
54
  // 模拟服务侧数据
@@ -189,6 +192,21 @@ const onDialogSelectChange = (values, texts, selectedDatas) => {
189
192
  // 打印 change 回调数据,控制台查看
190
193
  console.log({ values, texts, selectedDatas })
191
194
  }
195
+
196
+ const onDialogSelectClear = () => {
197
+ TinyModal.message({
198
+ message: '清空成功',
199
+ type: 'success'
200
+ })
201
+ }
202
+
203
+ const onDialogSelectDelete = (row) => {
204
+ console.log('删除成功', row)
205
+ TinyModal.message({
206
+ message: '删除成功',
207
+ type: 'success'
208
+ })
209
+ }
192
210
  </script>
193
211
 
194
212
  <style scoped lang="less">
@@ -0,0 +1,19 @@
1
+ import { test, expect } from '@playwright/test'
2
+
3
+ test('dialogSelect 表格多选', async ({ page }) => {
4
+ page.on('pageerror', (exception) => expect(exception).toBeNull())
5
+ await page.goto('dialog-select#nest-grid-multi')
6
+ const demo = page.locator('#nest-grid-multi')
7
+
8
+ await demo.getByRole('button', { name: '打开窗口' }).click()
9
+ await expect(page.locator('body')).not.toHaveClass(/dialog-box__scroll-lock/)
10
+ await page
11
+ .locator('div')
12
+ .filter({ hasText: /^GFD 科技有限公司福州WSX 科技有限公司黄冈暂无数据$/ })
13
+ .getByRole('img')
14
+ .nth(1)
15
+ .click()
16
+ await expect(page.getByText('删除成功')).toBeVisible()
17
+ await page.getByText('清空').click()
18
+ await expect(page.getByText('清空成功')).toBeVisible()
19
+ })
@@ -19,9 +19,12 @@
19
19
  @size-change="onSizeChange"
20
20
  @current-change="onCurrentChange"
21
21
  @change="onDialogSelectChange"
22
+ @clear="onDialogSelectClear"
23
+ @delete="onDialogSelectDelete"
22
24
  value-field="id"
23
25
  text-field="name"
24
26
  :main-height="240"
27
+ :lock-scroll="false"
25
28
  >
26
29
  <template #search>
27
30
  <div class="tiny-demo-search">
@@ -44,7 +47,7 @@
44
47
  </template>
45
48
 
46
49
  <script>
47
- import { TinyDialogSelect, TinyButton, TinySearch, TinySelect } from '@opentiny/vue'
50
+ import { TinyDialogSelect, TinyButton, TinySearch, TinySelect, TinyModal } from '@opentiny/vue'
48
51
  import Sortable from 'sortablejs'
49
52
 
50
53
  // 模拟服务侧数据
@@ -187,6 +190,19 @@ export default {
187
190
  onDialogSelectChange(values, texts, selectedDatas) {
188
191
  // 打印 change 回调数据,控制台查看
189
192
  console.log({ values, texts, selectedDatas })
193
+ },
194
+ onDialogSelectClear() {
195
+ TinyModal.message({
196
+ message: '清空成功',
197
+ type: 'success'
198
+ })
199
+ },
200
+ onDialogSelectDelete(row) {
201
+ console.log('删除成功', row)
202
+ TinyModal.message({
203
+ message: '删除成功',
204
+ type: 'success'
205
+ })
190
206
  }
191
207
  }
192
208
  }
@@ -12,9 +12,9 @@ export default {
12
12
  },
13
13
  desc: {
14
14
  'zh-CN':
15
- '<p>通过 <code>auto-lookup</code>、<code>lookup-method</code> 属性 和 <code>change</code> 事件设置初始化时数据的反查回显功能。</p> \n<p>表格多选场景需要设置 <code>popselector</code> 为 <code>grid</code>,<code>multi</code> 为 <code>true</code>,<code>checkRowKeys</code> 设置默认选中数据。</p >\n',
15
+ '<p>通过 <code>auto-lookup</code>、<code>lookup-method</code> 属性 和 <code>change</code> 事件设置初始化时数据的反查回显功能。</p> \n<p>表格多选场景需要设置 <code>popselector</code> 为 <code>grid</code>,<code>multi</code> 为 <code>true</code>,<code>checkRowKeys</code> 设置默认选中数据。<code>lock-scroll</code> 配置弹出窗口时是否禁用滚动条。</p >\n',
16
16
  'en-US':
17
- '<p>Use the <code>auto-lookup</code>,<code>lookup-method</code> attributes, and <code>change</code> event settings to perform data backtracking during initialization. <code>autoLookup</code>The default value is <code>true</code>. </p>\n<p> Multiple selection scenarios in the table require setting<code>popcollector</code>as grid,<code>multi</code>as true, and<code>checkRowKeys</code>as default selected data. </p >\n'
17
+ '<p>Use the <code>auto-lookup</code>,<code>lookup-method</code> attributes, and <code>change</code> event settings to perform data backtracking during initialization. <code>autoLookup</code>The default value is <code>true</code>. </p>\n<p> Multiple selection scenarios in the table require setting<code>popcollector</code>as grid,<code>multi</code>as true, and<code>checkRowKeys</code>as default selected data. <code>lock-scroll</code>Configure whether to disable the scrollbar when a pop-up window appears.</p >\n'
18
18
  },
19
19
  codeFiles: ['nest-grid-multi.vue']
20
20
  },