@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.
- package/demos/apis/dialog-select.js +42 -0
- package/demos/apis/popeditor.js +14 -0
- package/demos/apis/steps.js +15 -0
- package/demos/apis/text-popup.js +2 -2
- package/demos/apis/user-head.js +7 -18
- package/demos/mobile-first/app/pager/webdoc/pager.js +0 -48
- package/demos/mobile-first/app/steps/vertical.vue +14 -1
- package/demos/pc/app/calendar-view/calendar-event.spec.ts +2 -2
- package/demos/pc/app/date-panel/basic-usage.spec.ts +6 -6
- package/demos/pc/app/date-panel/custom-week.spec.ts +1 -1
- package/demos/pc/app/date-panel/disabled-date.spec.ts +8 -9
- package/demos/pc/app/date-panel/event.spec.ts +4 -4
- package/demos/pc/app/date-panel/format.spec.ts +2 -2
- package/demos/pc/app/date-panel/readonly.spec.ts +3 -3
- package/demos/pc/app/date-panel/unlink-panels.spec.ts +4 -4
- package/demos/pc/app/date-picker/basic-usage.spec.ts +2 -2
- package/demos/pc/app/date-picker/date-range.spec.ts +3 -3
- package/demos/pc/app/dialog-select/nest-grid-multi-composition-api.vue +19 -1
- package/demos/pc/app/dialog-select/nest-grid-multi.spec.ts +19 -0
- package/demos/pc/app/dialog-select/nest-grid-multi.vue +17 -1
- package/demos/pc/app/dialog-select/webdoc/dialog-select.js +2 -2
- package/demos/pc/app/grid/base/basic-usage-composition-api.vue +48 -93
- package/demos/pc/app/grid/base/basic-usage.spec.js +1 -1
- package/demos/pc/app/grid/base/basic-usage.vue +29 -132
- package/demos/pc/app/grid/dynamically-columns/dynamically-columns.spec.js +3 -3
- package/demos/pc/app/grid/webdoc/grid-ai-agent.js +23 -0
- package/demos/pc/app/popeditor/condition-layout-composition-api.vue +1 -0
- package/demos/pc/app/popeditor/condition-layout.spec.ts +1 -0
- package/demos/pc/app/popeditor/condition-layout.vue +1 -0
- package/demos/pc/app/popeditor/webdoc/popeditor.js +2 -2
- package/demos/pc/app/qr-code/style-composition-api.vue +14 -3
- package/demos/pc/app/qr-code/style.vue +15 -3
- package/demos/pc/app/text-popup/{value.spec.ts → modelValue.spec.ts} +2 -2
- package/demos/pc/app/text-popup/webdoc/text-popup.js +8 -8
- package/demos/pc/webdoc/changelog.md +461 -451
- package/package.json +27 -19
- package/playground/App.vue +2 -2
- package/src/App.vue +18 -1
- package/src/{views/components-doc/components → components}/demo.vue +1 -1
- package/src/{views/components-doc/components → components}/float-settings.vue +24 -7
- package/src/components/mcp-docs.vue +55 -0
- package/src/components/tiny-robot-chat.vue +128 -0
- package/src/composable/DifyModelProvider.ts +65 -0
- package/src/composable/storage.ts +71 -0
- package/src/composable/useTinyRobot.ts +167 -0
- package/src/composable/utils.ts +172 -0
- package/src/i18n/index.js +5 -2
- package/src/main.js +10 -1
- package/src/router.js +9 -0
- package/src/tools/appData.js +12 -2
- package/src/views/components-doc/common.vue +22 -8
- package/src/views/comprehensive/Demo.vue +211 -0
- package/src/views/comprehensive/index.vue +391 -0
- package/src/views/comprehensive/products.json +99 -0
- package/src/views/comprehensive/types/index.ts +37 -0
- package/src/views/layout/layout.vue +2 -2
- package/demos/mobile-first/app/pager/current-change.vue +0 -34
- package/demos/mobile-first/app/pager/next-click.vue +0 -34
- package/demos/mobile-first/app/pager/prev-click.vue +0 -34
- /package/demos/pc/app/text-popup/{clear-value-composition-api.vue → clear-modelValue-composition-api.vue} +0 -0
- /package/demos/pc/app/text-popup/{clear-value.spec.ts → clear-modelValue.spec.ts} +0 -0
- /package/demos/pc/app/text-popup/{clear-value.vue → clear-modelValue.vue} +0 -0
- /package/demos/pc/app/text-popup/{value-composition-api.vue → modelValue-composition-api.vue} +0 -0
- /package/demos/pc/app/text-popup/{value.vue → modelValue.vue} +0 -0
- /package/src/{views/components-doc/components → components}/anchor.vue +0 -0
- /package/src/{views/components-doc/components → components}/api-docs.vue +0 -0
- /package/src/{views/components-doc/components → components}/async-highlight.vue +0 -0
- /package/src/{views/components-doc/components → components}/contributor.vue +0 -0
- /package/src/{views/components-doc/components → components}/header.vue +0 -0
- /package/src/{views/components-doc/components → components}/version-tip.vue +0 -0
- /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: [
|
package/demos/apis/popeditor.js
CHANGED
|
@@ -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'",
|
package/demos/apis/steps.js
CHANGED
|
@@ -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',
|
package/demos/apis/text-popup.js
CHANGED
|
@@ -39,7 +39,7 @@ export default {
|
|
|
39
39
|
pcDemo: 'separtor'
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
|
-
name: '
|
|
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: '
|
|
50
|
+
pcDemo: 'modelValue'
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
name: 'width',
|
package/demos/apis/user-head.js
CHANGED
|
@@ -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':
|
|
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
|
|
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
|
|
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 =
|
|
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: '
|
|
13
|
+
await expect(page.getByRole('cell', { name: '1 月', exact: true }).first()).toBeVisible()
|
|
14
14
|
|
|
15
15
|
// 选择月份展示日期面板
|
|
16
|
-
await page.getByRole('cell', { name: '
|
|
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('
|
|
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('
|
|
39
|
-
await page.getByText('
|
|
40
|
-
await expect(page.locator('.value2')).toHaveText('[ "2024-
|
|
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('
|
|
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('
|
|
23
|
-
await page.getByText('
|
|
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(
|
|
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(
|
|
42
|
-
await page.locator('
|
|
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('
|
|
47
|
-
await page.getByText('
|
|
48
|
-
await page.getByText('
|
|
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('
|
|
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.
|
|
30
|
-
await page.
|
|
31
|
-
await expect(page.getByText('触发 月份区间面板选中 事件,组件绑定值为:
|
|
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('
|
|
17
|
-
await page.locator('#format').getByText('
|
|
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('
|
|
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('
|
|
30
|
-
await page.getByText('
|
|
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('
|
|
31
|
-
await page.getByText('
|
|
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('
|
|
47
|
-
await page.getByText('
|
|
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: '
|
|
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: '
|
|
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('
|
|
76
|
+
await page.getByText('1 月').first().click()
|
|
77
77
|
await page.waitForTimeout(100)
|
|
78
|
-
await page.getByText('
|
|
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>
|
|
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
|
},
|