@opentiny/vue-docs 3.25.0 → 3.26.1
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/.stylelintrc.js +2 -2
- package/demos/apis/modal.js +1 -1
- package/demos/apis/numeric.js +3 -3
- package/demos/apis/search.js +28 -0
- package/demos/apis/slider-button.js +22 -0
- package/demos/apis/split.js +11 -0
- package/demos/apis/steps.js +3 -3
- package/demos/apis/tabs.js +12 -0
- package/demos/apis/time-line.js +20 -0
- package/demos/mobile-first/app/slider-button/basic-usage.vue +5 -5
- package/demos/mobile-first/app/slider-button/webdoc/slider-button.js +1 -1
- package/demos/mobile-first/app/steps/advanced-steps.vue +8 -1
- package/demos/mobile-first/menus.js +16 -9
- package/demos/pc/app/amount/custom-service.spec.js +4 -4
- package/demos/pc/app/base-select/slot-reference.spec.ts +1 -1
- package/demos/pc/app/color-picker/alpha-composition-api.vue +1 -1
- package/demos/pc/app/color-picker/alpha.spec.ts +2 -2
- package/demos/pc/app/color-picker/alpha.vue +1 -1
- package/demos/pc/app/color-picker/base.spec.ts +2 -2
- package/demos/pc/app/color-picker/default-visible.spec.ts +1 -1
- package/demos/pc/app/color-picker/event-composition-api.vue +2 -2
- package/demos/pc/app/color-picker/event.spec.ts +4 -4
- package/demos/pc/app/color-picker/event.vue +1 -1
- package/demos/pc/app/color-picker/format.spec.ts +6 -6
- package/demos/pc/app/color-picker/history.spec.ts +1 -7
- package/demos/pc/app/color-picker/predefine.spec.ts +3 -10
- package/demos/pc/app/color-picker/size.spec.ts +4 -4
- package/demos/pc/app/color-select-panel/format.spec.ts +2 -8
- package/demos/pc/app/color-select-panel/history.spec.ts +0 -2
- package/demos/pc/app/color-select-panel/predefine.spec.ts +0 -3
- package/demos/pc/app/container/basic-usage-composition-api.vue +10 -10
- package/demos/pc/app/container/basic-usage.vue +10 -10
- package/demos/pc/app/container/custom-with-height-composition-api.vue +8 -8
- package/demos/pc/app/container/custom-with-height.vue +10 -10
- package/demos/pc/app/dialog-select/nest-grid-single.spec.ts +40 -0
- package/demos/pc/app/dialog-select/nest-tree-multi.spec.ts +53 -0
- package/demos/pc/app/dialog-select/nest-tree-single.spec.ts +25 -0
- package/demos/pc/app/dialog-select/set-selection.spec.ts +20 -0
- package/demos/pc/app/file-upload/before-upload-limit-composition-api.vue +1 -1
- package/demos/pc/app/file-upload/before-upload-limit.spec.ts +1 -1
- package/demos/pc/app/file-upload/before-upload-limit.vue +1 -1
- package/demos/pc/app/file-upload/custom-trigger-composition-api.vue +1 -1
- package/demos/pc/app/file-upload/custom-trigger.spec.ts +1 -1
- package/demos/pc/app/file-upload/custom-trigger.vue +1 -1
- package/demos/pc/app/file-upload/custom-upload-tip-composition-api.vue +1 -1
- package/demos/pc/app/file-upload/custom-upload-tip.vue +1 -1
- package/demos/pc/app/file-upload/form-validation-composition-api.vue +1 -1
- package/demos/pc/app/file-upload/form-validation.vue +1 -1
- package/demos/pc/app/file-upload/image-size-composition-api.vue +1 -1
- package/demos/pc/app/file-upload/image-size.spec.ts +1 -1
- package/demos/pc/app/file-upload/image-size.vue +1 -1
- package/demos/pc/app/file-upload/multiple-file-composition-api.vue +1 -1
- package/demos/pc/app/file-upload/multiple-file.spec.ts +1 -1
- package/demos/pc/app/file-upload/multiple-file.vue +1 -1
- package/demos/pc/app/file-upload/prevent-delete-file-composition-api.vue +1 -1
- package/demos/pc/app/file-upload/prevent-delete-file.vue +1 -1
- package/demos/pc/app/file-upload/upload-request-composition-api.vue +1 -1
- package/demos/pc/app/file-upload/upload-request.spec.ts +2 -2
- package/demos/pc/app/file-upload/upload-request.vue +1 -1
- package/demos/pc/app/grid/data-source/auto-load.spec.js +0 -1
- package/demos/pc/app/grid/dynamically-columns/dynamically-columns.spec.js +2 -1
- package/demos/pc/app/grid/filter/custom-filter.spec.js +3 -3
- package/demos/pc/app/grid/filter/simple-filter.spec.ts +5 -4
- package/demos/pc/app/grid/slot/slot-conf-composition-api.vue +141 -0
- package/demos/pc/app/grid/slot/slot-conf.spec.js +12 -0
- package/demos/pc/app/grid/slot/slot-conf.vue +151 -0
- package/demos/pc/app/grid/webdoc/grid-slot.js +9 -0
- package/demos/pc/app/icon/iconGroups.js +7 -2
- package/demos/pc/app/input/basic-usage.spec.ts +1 -1
- package/demos/pc/app/loading/background.spec.ts +3 -1
- package/demos/pc/app/loading/custom-class.spec.ts +4 -2
- package/demos/pc/app/loading/fullscreen.spec.ts +6 -4
- package/demos/pc/app/loading/loading-tip-text.spec.ts +3 -1
- package/demos/pc/app/loading/size.spec.ts +5 -3
- package/demos/pc/app/locales/custom-service-composition-api.vue +3 -3
- package/demos/pc/app/locales/custom-service.spec.ts +1 -1
- package/demos/pc/app/locales/custom-service.vue +3 -3
- package/demos/pc/app/modal/basic-usage.spec.ts +2 -1
- package/demos/pc/app/modal/message-close.spec.ts +2 -2
- package/demos/pc/app/modal/message-id.spec.ts +2 -2
- package/demos/pc/app/modal/modal-fn-slots.spec.ts +5 -7
- package/demos/pc/app/modal/modal-header.spec.ts +2 -1
- package/demos/pc/app/numeric/input-event-composition-api.vue +26 -0
- package/demos/pc/app/numeric/input-event.spec.ts +15 -0
- package/demos/pc/app/numeric/input-event.vue +34 -0
- package/demos/pc/app/numeric/webdoc/numeric.js +12 -0
- package/demos/pc/app/pager/align-composition-api.vue +10 -13
- package/demos/pc/app/pager/align.spec.ts +8 -3
- package/demos/pc/app/pager/align.vue +11 -5
- package/demos/pc/app/pager/page-size-composition-api.vue +2 -2
- package/demos/pc/app/pager/page-size.spec.ts +1 -1
- package/demos/pc/app/pager/page-size.vue +2 -2
- package/demos/pc/app/pager/pager-in-grid-composition-api.vue +0 -1
- package/demos/pc/app/pager/pager-in-grid.vue +0 -1
- package/demos/pc/app/pager/popper-append-to-body-composition-api.vue +1 -7
- package/demos/pc/app/pager/popper-append-to-body.vue +1 -7
- package/demos/pc/app/pager/popper-class-composition-api.vue +1 -7
- package/demos/pc/app/pager/popper-class.vue +1 -7
- package/demos/pc/app/popeditor/suggest.spec.ts +1 -1
- package/demos/pc/app/qr-code/icon-composition-api.vue +17 -3
- package/demos/pc/app/qr-code/icon.spec.ts +19 -0
- package/demos/pc/app/qr-code/icon.vue +25 -4
- package/demos/pc/app/qr-code/style-composition-api.vue +2 -9
- package/demos/pc/app/qr-code/style.spec.ts +18 -1
- package/demos/pc/app/qr-code/style.vue +11 -8
- package/demos/pc/app/query-builder/webdoc/query-builder.js +5 -3
- package/demos/pc/app/search/events.spec.ts +1 -1
- package/demos/pc/app/search/events.vue +9 -0
- package/demos/pc/app/search/slot-prefix-suffix.spec.ts +1 -1
- package/demos/pc/app/search/webdoc/search.js +12 -4
- package/demos/pc/app/tabs/basic-usage.spec.ts +2 -2
- package/demos/pc/app/tabs/header-only.vue +56 -0
- package/demos/pc/app/tabs/size.spec.ts +2 -2
- package/demos/pc/app/tabs/webdoc/tabs.js +12 -0
- package/demos/pc/app/time-line/slot-default-composition-api.vue +81 -0
- package/demos/pc/app/time-line/slot-default.spec.ts +13 -0
- package/demos/pc/app/time-line/slot-default.vue +95 -0
- package/demos/pc/app/time-line/webdoc/time-line.js +12 -0
- package/demos/pc/menus.js +20 -10
- package/demos/pc/webdoc/changelog-en.md +86 -132
- package/demos/pc/webdoc/changelog.md +86 -132
- package/demos/pc/webdoc/faq.md +14 -0
- package/demos/saas/menus.js +2 -14
- package/env/.env +3 -0
- package/package.json +21 -20
- package/playground/App.vue +2 -2
- package/postcss.config.cjs +1 -0
- package/src/App.vue +26 -42
- package/src/components/anchor.vue +5 -1
- package/src/components/demo.vue +18 -7
- package/src/components/design-token.vue +90 -0
- package/src/components/float-settings.vue +4 -10
- package/src/components/mcp-docs.vue +4 -26
- package/src/components/version-tip.vue +1 -1
- package/src/composable/useTinyRemoter.ts +176 -0
- package/src/composable/utils.ts +2 -6
- package/src/const.ts +6 -1
- package/src/i18n/en.json +2 -0
- package/src/i18n/es.json +47 -0
- package/src/i18n/index.js +25 -5
- package/src/i18n/pt.json +47 -0
- package/src/i18n/zh.json +2 -0
- package/src/main.js +17 -4
- package/src/{menus.jsx → menus.js} +0 -1
- package/src/router.js +3 -6
- package/src/tools/appData.js +4 -5
- package/src/tools/storage.js +5 -3
- package/src/tools/useApiMode.js +11 -3
- package/src/tools/useBulletin.jsx +9 -8
- package/src/tools/useStyleSettings.js +8 -0
- package/src/tools/useTemplateMode.js +5 -1
- package/src/tools/utils.js +32 -1
- package/src/views/components-doc/cmp-config.js +13 -1
- package/src/views/components-doc/common.vue +34 -8
- package/src/views/layout/layout.vue +5 -8
- package/src/views/overview.vue +1 -1
- package/tsconfig.node.json +2 -4
- package/src/tools/useAllTaskFinish.ts +0 -0
|
@@ -68,27 +68,27 @@ export default {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
.demo-container .tiny-container :deep(.tiny-container__header) {
|
|
71
|
-
background-color: var(--tv-color-info-bg-light);
|
|
72
|
-
border: 3px solid var(--tv-color-border-container);
|
|
73
|
-
color: var(--tv-color-info-text);
|
|
71
|
+
background-color: var(--tv-color-info-bg-light, #0067d1);
|
|
72
|
+
border: 3px solid var(--tv-color-border-container, #fff);
|
|
73
|
+
color: var(--tv-color-info-text, #fff);
|
|
74
74
|
line-height: 48px;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
.demo-container .tiny-container :deep(.tiny-container__aside) {
|
|
78
|
-
background-color: var(--tv-color-error-bg-light);
|
|
79
|
-
border: 3px solid var(--tv-color-border-container);
|
|
80
|
-
color: var(--tv-color-error-text);
|
|
78
|
+
background-color: var(--tv-color-error-bg-light, #0067d180);
|
|
79
|
+
border: 3px solid var(--tv-color-border-container, #fff);
|
|
80
|
+
color: var(--tv-color-error-text, #fff);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
.demo-container .tiny-container :deep(.tiny-container__main) {
|
|
84
|
-
background-color: var(--tv-color-warn-bg-light);
|
|
85
|
-
border: 3px solid var(--tv-color-border-container);
|
|
84
|
+
background-color: var(--tv-color-warn-bg-light, #0067d133);
|
|
85
|
+
border: 3px solid var(--tv-color-border-container, #fff);
|
|
86
86
|
color: var(--tv-color-warn-text);
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
.demo-container .tiny-container :deep(.tiny-container__footer) {
|
|
90
|
-
background-color: var(--tv-color-success-bg-light);
|
|
91
|
-
border: 3px solid var(--tv-color-border-container);
|
|
90
|
+
background-color: var(--tv-color-success-bg-light, #f0f7ff);
|
|
91
|
+
border: 3px solid var(--tv-color-border-container, #fff);
|
|
92
92
|
color: var(--tv-color-success-text);
|
|
93
93
|
}
|
|
94
94
|
.demo-center {
|
|
@@ -40,26 +40,26 @@ const headerHeight = ref(80)
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
.demo-container .tiny-container :deep(.tiny-container__header) {
|
|
43
|
-
background-color: var(--tv-color-info-bg-light);
|
|
44
|
-
border: 3px solid var(--tv-color-border-container);
|
|
43
|
+
background-color: var(--tv-color-info-bg-light, #0067d1);
|
|
44
|
+
border: 3px solid var(--tv-color-border-container, #fff);
|
|
45
45
|
color: var(--tv-color-info-text);
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
.demo-container .tiny-container :deep(.tiny-container__aside) {
|
|
49
|
-
background-color: var(--tv-color-error-bg-light);
|
|
50
|
-
border: 3px solid var(--tv-color-border-container);
|
|
49
|
+
background-color: var(--tv-color-error-bg-light, #0067d180);
|
|
50
|
+
border: 3px solid var(--tv-color-border-container, #fff);
|
|
51
51
|
color: var(--tv-color-error-text);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
.demo-container .tiny-container :deep(.tiny-container__main) {
|
|
55
|
-
background-color: var(--tv-color-warn-bg-light);
|
|
56
|
-
border: 3px solid var(--tv-color-border-container);
|
|
55
|
+
background-color: var(--tv-color-warn-bg-light, #0067d133);
|
|
56
|
+
border: 3px solid var(--tv-color-border-container, #fff);
|
|
57
57
|
color: var(--tv-color-warn-text);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
.demo-container .tiny-container :deep(.tiny-container__footer) {
|
|
61
|
-
background-color: var(--tv-color-success-bg-light);
|
|
62
|
-
border: 3px solid var(--tv-color-border-container);
|
|
61
|
+
background-color: var(--tv-color-success-bg-light, #f0f7ff);
|
|
62
|
+
border: 3px solid var(--tv-color-border-container, #fff);
|
|
63
63
|
color: var(--tv-color-success-text);
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -49,26 +49,26 @@ export default {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
.demo-container .tiny-container :deep(.tiny-container__header) {
|
|
52
|
-
background-color: var(--tv-color-info-bg-light);
|
|
53
|
-
border: 3px solid var(--tv-color-border-container);
|
|
54
|
-
color: var(--tv-color-info-text);
|
|
52
|
+
background-color: var(--tv-color-info-bg-light, #0067d1);
|
|
53
|
+
border: 3px solid var(--tv-color-border-container, #fff);
|
|
54
|
+
color: var(--tv-color-info-text, #fff);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
.demo-container .tiny-container :deep(.tiny-container__aside) {
|
|
58
|
-
background-color: var(--tv-color-error-bg-light);
|
|
59
|
-
border: 3px solid var(--tv-color-border-container);
|
|
60
|
-
color: var(--tv-color-error-text);
|
|
58
|
+
background-color: var(--tv-color-error-bg-light, #0067d180);
|
|
59
|
+
border: 3px solid var(--tv-color-border-container, #fff);
|
|
60
|
+
color: var(--tv-color-error-text, #fff);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
.demo-container .tiny-container :deep(.tiny-container__main) {
|
|
64
|
-
background-color: var(--tv-color-warn-bg-light);
|
|
65
|
-
border: 3px solid var(--tv-color-border-container);
|
|
64
|
+
background-color: var(--tv-color-warn-bg-light, #0067d133);
|
|
65
|
+
border: 3px solid var(--tv-color-border-container, #fff);
|
|
66
66
|
color: var(--tv-color-warn-text);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
.demo-container .tiny-container :deep(.tiny-container__footer) {
|
|
70
|
-
background-color: var(--tv-color-success-bg-light);
|
|
71
|
-
border: 3px solid var(--tv-color-border-container);
|
|
70
|
+
background-color: var(--tv-color-success-bg-light, #f0f7ff);
|
|
71
|
+
border: 3px solid var(--tv-color-border-container, #fff);
|
|
72
72
|
color: var(--tv-color-success-text);
|
|
73
73
|
}
|
|
74
74
|
|
|
@@ -0,0 +1,40 @@
|
|
|
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-single')
|
|
6
|
+
|
|
7
|
+
await page.locator('#nest-grid-single').getByRole('button', { name: '打开窗口' }).click()
|
|
8
|
+
|
|
9
|
+
await page.locator('.tiny-grid-body__row').first().waitFor()
|
|
10
|
+
let rows
|
|
11
|
+
rows = await page.locator('.tiny-grid-body__row').all()
|
|
12
|
+
for (const row of rows) {
|
|
13
|
+
const checked = await row.locator('input[type="radio"]').isChecked()
|
|
14
|
+
expect(checked).toBe(false)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
await page.getByRole('row', { name: 'GFD 科技有限公司 福建 福州' }).locator('path').nth(1).click()
|
|
18
|
+
|
|
19
|
+
rows = await page.locator('.tiny-grid-body__row').all()
|
|
20
|
+
for (let i = 0; i < rows.length; i++) {
|
|
21
|
+
const checked = await rows[i].locator('input[type="radio"]').first().isChecked()
|
|
22
|
+
if (i === 0) {
|
|
23
|
+
expect(checked).toBe(true)
|
|
24
|
+
} else {
|
|
25
|
+
expect(checked).toBe(false)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
await page.getByRole('row', { name: 'WWW 科技有限公司 广东 深圳' }).locator('path').nth(1).click()
|
|
30
|
+
|
|
31
|
+
rows = await page.locator('.tiny-grid-body__row').all()
|
|
32
|
+
for (let i = 0; i < rows.length; i++) {
|
|
33
|
+
const checked = await rows[i].locator('input[type="radio"]').first().isChecked()
|
|
34
|
+
if (i === 1) {
|
|
35
|
+
expect(checked).toBe(true)
|
|
36
|
+
} else {
|
|
37
|
+
expect(checked).toBe(false)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
})
|
|
@@ -0,0 +1,53 @@
|
|
|
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-tree-multi')
|
|
6
|
+
await page.locator('#nest-tree-multi').getByRole('button', { name: '打开窗口', exact: true }).click()
|
|
7
|
+
|
|
8
|
+
const nodeContent = await page.locator('.tiny-tree-node__content-left label').nth(1)
|
|
9
|
+
|
|
10
|
+
const iconNode = await nodeContent.getAttribute('class')
|
|
11
|
+
|
|
12
|
+
expect(iconNode?.includes('tiny-radio')).toBe(false)
|
|
13
|
+
expect(iconNode?.includes('tiny-checkbox')).toBe(true)
|
|
14
|
+
|
|
15
|
+
let isChecked
|
|
16
|
+
|
|
17
|
+
isChecked = await page
|
|
18
|
+
.getByRole('treeitem', { name: '三级 9' })
|
|
19
|
+
.locator('.tiny-checkbox input[type="checkbox"]')
|
|
20
|
+
.isChecked()
|
|
21
|
+
expect(isChecked).toBeFalsy()
|
|
22
|
+
|
|
23
|
+
let current
|
|
24
|
+
current = await page.getByRole('treeitem', { name: '三级 9' }).locator('path').nth(1)
|
|
25
|
+
await current.click()
|
|
26
|
+
|
|
27
|
+
isChecked = await page
|
|
28
|
+
.getByRole('treeitem', { name: '三级 9' })
|
|
29
|
+
.locator('.tiny-checkbox input[type="checkbox"]')
|
|
30
|
+
.isChecked()
|
|
31
|
+
expect(isChecked).toBeTruthy()
|
|
32
|
+
|
|
33
|
+
await page
|
|
34
|
+
.locator('div')
|
|
35
|
+
.filter({ hasText: /^一级 1二级 4三级 8三级 9暂无数据$/ })
|
|
36
|
+
.getByRole('img')
|
|
37
|
+
.nth(3)
|
|
38
|
+
.click()
|
|
39
|
+
|
|
40
|
+
isChecked = await page
|
|
41
|
+
.getByRole('treeitem', { name: '三级 9' })
|
|
42
|
+
.locator('.tiny-checkbox input[type="checkbox"]')
|
|
43
|
+
.isChecked()
|
|
44
|
+
expect(isChecked).toBeFalsy()
|
|
45
|
+
|
|
46
|
+
await page.getByRole('treeitem', { name: '三级 9' }).locator('path').nth(1).click()
|
|
47
|
+
|
|
48
|
+
isChecked = await page
|
|
49
|
+
.getByRole('treeitem', { name: '三级 9' })
|
|
50
|
+
.locator('.tiny-checkbox input[type="checkbox"]')
|
|
51
|
+
.isChecked()
|
|
52
|
+
expect(isChecked).toBeTruthy()
|
|
53
|
+
})
|
|
@@ -0,0 +1,25 @@
|
|
|
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-tree-single')
|
|
6
|
+
await page.locator('#nest-tree-single').getByRole('button', { name: '打开窗口' }).click()
|
|
7
|
+
|
|
8
|
+
const nodeContent = await page.locator('.tiny-tree-node__content-left label').nth(1)
|
|
9
|
+
|
|
10
|
+
const iconNode = await nodeContent.getAttribute('class')
|
|
11
|
+
|
|
12
|
+
expect(iconNode?.includes('tiny-radio')).toBe(true)
|
|
13
|
+
expect(iconNode?.includes('tiny-checkbox')).toBe(false)
|
|
14
|
+
|
|
15
|
+
let current
|
|
16
|
+
current = await page.getByText('201一级')
|
|
17
|
+
await current.click()
|
|
18
|
+
expect(await current.locator('input[type="radio"]').isChecked()).toBe(true)
|
|
19
|
+
|
|
20
|
+
current = await page.getByRole('treeitem', { name: '二级 6' }).locator('label')
|
|
21
|
+
await current.click()
|
|
22
|
+
expect(await current.locator('input[type="radio"]').isChecked()).toBe(true)
|
|
23
|
+
current = await page.getByText('201一级')
|
|
24
|
+
expect(await current.locator('input[type="radio"]').isChecked()).toBe(false)
|
|
25
|
+
})
|
|
@@ -0,0 +1,20 @@
|
|
|
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#set-selection')
|
|
6
|
+
await page.locator('#set-selection').getByRole('button', { name: '打开窗口' }).click()
|
|
7
|
+
await page.getByRole('button', { name: 'Close' }).click()
|
|
8
|
+
await page.getByRole('button', { name: '切换第二行选中状态' }).click()
|
|
9
|
+
await page.locator('#set-selection').getByRole('button', { name: '打开窗口' }).click()
|
|
10
|
+
|
|
11
|
+
const trs = await page.locator('.tiny-grid table tbody tr').all()
|
|
12
|
+
for (let i = 0; i < trs.length; i++) {
|
|
13
|
+
const classes = await trs[i].getAttribute('class')
|
|
14
|
+
if (i === 1) {
|
|
15
|
+
expect(classes?.includes('row__selected')).toBeTruthy()
|
|
16
|
+
} else {
|
|
17
|
+
expect(classes?.includes('row__selected')).toBeFalsy()
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
})
|
|
@@ -9,7 +9,7 @@ test('定义上传前限制', async ({ page }) => {
|
|
|
9
9
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
10
10
|
await page.goto('file-upload#before-upload-limit')
|
|
11
11
|
|
|
12
|
-
const upload = page.getByRole('button', { name: '
|
|
12
|
+
const upload = page.getByRole('button', { name: '点击上传' })
|
|
13
13
|
const modal = page.locator('.tiny-modal').nth(1)
|
|
14
14
|
const modalCancel = page.getByRole('button', { name: '取消' })
|
|
15
15
|
const lists = page.locator('.tiny-upload-list__item')
|
|
@@ -9,7 +9,7 @@ test('获取图片的原始尺寸', async ({ page }) => {
|
|
|
9
9
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
10
10
|
await page.goto('file-upload#image-size')
|
|
11
11
|
|
|
12
|
-
const upload = page.getByRole('button', { name: '
|
|
12
|
+
const upload = page.getByRole('button', { name: '点击上传' })
|
|
13
13
|
const [fileChooser] = await Promise.all([page.waitForEvent('filechooser'), upload.click()])
|
|
14
14
|
const modal = page.locator('.tiny-modal')
|
|
15
15
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<tiny-file-upload accept="image/*" ref="upload" :action="action" :file-list="fileList" :before-upload="beforeUpload">
|
|
3
3
|
<template #trigger>
|
|
4
|
-
<tiny-button
|
|
4
|
+
<tiny-button>点击上传</tiny-button>
|
|
5
5
|
</template>
|
|
6
6
|
<template #tip>
|
|
7
7
|
<div class="tiny-upload__tip">只允许上传 image 类型文件</div>
|
|
@@ -9,7 +9,7 @@ test('文件多选', async ({ page }) => {
|
|
|
9
9
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
10
10
|
await page.goto('file-upload#multiple-file')
|
|
11
11
|
|
|
12
|
-
const upload = page.getByRole('button', { name: '
|
|
12
|
+
const upload = page.getByRole('button', { name: '点击上传' })
|
|
13
13
|
const lists = page.locator('.tiny-upload-list__item')
|
|
14
14
|
const [fileChooser] = await Promise.all([page.waitForEvent('filechooser'), upload.click()])
|
|
15
15
|
const input = page.locator('.tiny-upload__input')
|
|
@@ -12,7 +12,7 @@ test.describe('设置上传请求', () => {
|
|
|
12
12
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
13
13
|
await page.goto('file-upload#upload-request')
|
|
14
14
|
|
|
15
|
-
const upload = page.getByRole('button', { name: '
|
|
15
|
+
const upload = page.getByRole('button', { name: '点击上传' })
|
|
16
16
|
const [fileChooser] = await Promise.all([page.waitForEvent('filechooser'), upload.click()])
|
|
17
17
|
await fileChooser.setFiles(path1)
|
|
18
18
|
page.on('requestfailed', (request) => {
|
|
@@ -25,7 +25,7 @@ test.describe('设置上传请求', () => {
|
|
|
25
25
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
26
26
|
await page.goto('file-upload#upload-request')
|
|
27
27
|
|
|
28
|
-
const upload = page.getByRole('button', { name: '
|
|
28
|
+
const upload = page.getByRole('button', { name: '点击上传' })
|
|
29
29
|
const [fileChooser] = await Promise.all([page.waitForEvent('filechooser'), upload.click()])
|
|
30
30
|
await fileChooser.setFiles(path1)
|
|
31
31
|
page.on('requestfailed', (request) => {
|
|
@@ -4,7 +4,6 @@ test('自动加载数据', async ({ page }) => {
|
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
5
|
await page.goto('grid-data-source#data-source-auto-load')
|
|
6
6
|
// 判断 auto-load 为 false 时不加载数据
|
|
7
|
-
await page.getByRole('paragraph').nth(1).click()
|
|
8
7
|
const demo = page.locator('#data-source-auto-load')
|
|
9
8
|
await expect(demo.getByText('暂无数据')).toHaveText('暂无数据')
|
|
10
9
|
})
|
|
@@ -3,7 +3,8 @@ import { test, expect } from '@playwright/test'
|
|
|
3
3
|
test('根据日期动态生成列', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
5
|
await page.goto('grid-dynamically-columns#dynamically-columns-dynamically-columns')
|
|
6
|
-
|
|
6
|
+
const demo = page.locator('#dynamically-columns-dynamically-columns')
|
|
7
|
+
await demo.locator('.tiny-picker.tiny-date-container').click()
|
|
7
8
|
await page.getByText('12 月').first().click()
|
|
8
9
|
await page.getByText('2 月').nth(2).click()
|
|
9
10
|
await expect(page.getByRole('cell', { name: '12' }).first()).toBeVisible()
|
|
@@ -4,9 +4,9 @@ test('列筛选规则', async ({ page }) => {
|
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
5
|
await page.goto('grid-filter#filter-custom-filter')
|
|
6
6
|
await page.getByRole('cell', { name: '名称' }).getByRole('img').click()
|
|
7
|
-
await page.
|
|
8
|
-
await page.
|
|
9
|
-
await page.
|
|
7
|
+
await page.locator('.tiny-grid__filter-wrapper.filter__active input').click()
|
|
8
|
+
await page.locator('.tiny-grid__filter-wrapper.filter__active input').press('CapsLock')
|
|
9
|
+
await page.locator('.tiny-grid__filter-wrapper.filter__active input').fill('WWW')
|
|
10
10
|
await page.getByRole('button', { name: 'confirm' }).click()
|
|
11
11
|
await expect(page.getByRole('cell', { name: 'WWW 科技 YX 公司' })).toBeVisible()
|
|
12
12
|
})
|
|
@@ -6,11 +6,12 @@ test('简化版筛选面板 - 单选/多选菜单', async ({ page }) => {
|
|
|
6
6
|
await page.getByRole('cell', { name: '公司名称' }).getByRole('img').click()
|
|
7
7
|
|
|
8
8
|
// 筛选面板搜索功能
|
|
9
|
-
|
|
10
|
-
await
|
|
9
|
+
const filterInput = page.locator('.tiny-grid__filter-wrapper.filter__active input')
|
|
10
|
+
await filterInput.click()
|
|
11
|
+
await filterInput.fill('a')
|
|
11
12
|
await expect(page.getByRole('listitem').filter({ hasText: '暂无数据' })).toBeVisible()
|
|
12
|
-
await
|
|
13
|
-
await
|
|
13
|
+
await filterInput.click()
|
|
14
|
+
await filterInput.fill('')
|
|
14
15
|
await page.getByTitle('GFD 科技 YX 公司').click()
|
|
15
16
|
await page.getByTitle('WWW 科技 YX 公司').click()
|
|
16
17
|
|