@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.
Files changed (158) hide show
  1. package/.stylelintrc.js +2 -2
  2. package/demos/apis/modal.js +1 -1
  3. package/demos/apis/numeric.js +3 -3
  4. package/demos/apis/search.js +28 -0
  5. package/demos/apis/slider-button.js +22 -0
  6. package/demos/apis/split.js +11 -0
  7. package/demos/apis/steps.js +3 -3
  8. package/demos/apis/tabs.js +12 -0
  9. package/demos/apis/time-line.js +20 -0
  10. package/demos/mobile-first/app/slider-button/basic-usage.vue +5 -5
  11. package/demos/mobile-first/app/slider-button/webdoc/slider-button.js +1 -1
  12. package/demos/mobile-first/app/steps/advanced-steps.vue +8 -1
  13. package/demos/mobile-first/menus.js +16 -9
  14. package/demos/pc/app/amount/custom-service.spec.js +4 -4
  15. package/demos/pc/app/base-select/slot-reference.spec.ts +1 -1
  16. package/demos/pc/app/color-picker/alpha-composition-api.vue +1 -1
  17. package/demos/pc/app/color-picker/alpha.spec.ts +2 -2
  18. package/demos/pc/app/color-picker/alpha.vue +1 -1
  19. package/demos/pc/app/color-picker/base.spec.ts +2 -2
  20. package/demos/pc/app/color-picker/default-visible.spec.ts +1 -1
  21. package/demos/pc/app/color-picker/event-composition-api.vue +2 -2
  22. package/demos/pc/app/color-picker/event.spec.ts +4 -4
  23. package/demos/pc/app/color-picker/event.vue +1 -1
  24. package/demos/pc/app/color-picker/format.spec.ts +6 -6
  25. package/demos/pc/app/color-picker/history.spec.ts +1 -7
  26. package/demos/pc/app/color-picker/predefine.spec.ts +3 -10
  27. package/demos/pc/app/color-picker/size.spec.ts +4 -4
  28. package/demos/pc/app/color-select-panel/format.spec.ts +2 -8
  29. package/demos/pc/app/color-select-panel/history.spec.ts +0 -2
  30. package/demos/pc/app/color-select-panel/predefine.spec.ts +0 -3
  31. package/demos/pc/app/container/basic-usage-composition-api.vue +10 -10
  32. package/demos/pc/app/container/basic-usage.vue +10 -10
  33. package/demos/pc/app/container/custom-with-height-composition-api.vue +8 -8
  34. package/demos/pc/app/container/custom-with-height.vue +10 -10
  35. package/demos/pc/app/dialog-select/nest-grid-single.spec.ts +40 -0
  36. package/demos/pc/app/dialog-select/nest-tree-multi.spec.ts +53 -0
  37. package/demos/pc/app/dialog-select/nest-tree-single.spec.ts +25 -0
  38. package/demos/pc/app/dialog-select/set-selection.spec.ts +20 -0
  39. package/demos/pc/app/file-upload/before-upload-limit-composition-api.vue +1 -1
  40. package/demos/pc/app/file-upload/before-upload-limit.spec.ts +1 -1
  41. package/demos/pc/app/file-upload/before-upload-limit.vue +1 -1
  42. package/demos/pc/app/file-upload/custom-trigger-composition-api.vue +1 -1
  43. package/demos/pc/app/file-upload/custom-trigger.spec.ts +1 -1
  44. package/demos/pc/app/file-upload/custom-trigger.vue +1 -1
  45. package/demos/pc/app/file-upload/custom-upload-tip-composition-api.vue +1 -1
  46. package/demos/pc/app/file-upload/custom-upload-tip.vue +1 -1
  47. package/demos/pc/app/file-upload/form-validation-composition-api.vue +1 -1
  48. package/demos/pc/app/file-upload/form-validation.vue +1 -1
  49. package/demos/pc/app/file-upload/image-size-composition-api.vue +1 -1
  50. package/demos/pc/app/file-upload/image-size.spec.ts +1 -1
  51. package/demos/pc/app/file-upload/image-size.vue +1 -1
  52. package/demos/pc/app/file-upload/multiple-file-composition-api.vue +1 -1
  53. package/demos/pc/app/file-upload/multiple-file.spec.ts +1 -1
  54. package/demos/pc/app/file-upload/multiple-file.vue +1 -1
  55. package/demos/pc/app/file-upload/prevent-delete-file-composition-api.vue +1 -1
  56. package/demos/pc/app/file-upload/prevent-delete-file.vue +1 -1
  57. package/demos/pc/app/file-upload/upload-request-composition-api.vue +1 -1
  58. package/demos/pc/app/file-upload/upload-request.spec.ts +2 -2
  59. package/demos/pc/app/file-upload/upload-request.vue +1 -1
  60. package/demos/pc/app/grid/data-source/auto-load.spec.js +0 -1
  61. package/demos/pc/app/grid/dynamically-columns/dynamically-columns.spec.js +2 -1
  62. package/demos/pc/app/grid/filter/custom-filter.spec.js +3 -3
  63. package/demos/pc/app/grid/filter/simple-filter.spec.ts +5 -4
  64. package/demos/pc/app/grid/slot/slot-conf-composition-api.vue +141 -0
  65. package/demos/pc/app/grid/slot/slot-conf.spec.js +12 -0
  66. package/demos/pc/app/grid/slot/slot-conf.vue +151 -0
  67. package/demos/pc/app/grid/webdoc/grid-slot.js +9 -0
  68. package/demos/pc/app/icon/iconGroups.js +7 -2
  69. package/demos/pc/app/input/basic-usage.spec.ts +1 -1
  70. package/demos/pc/app/loading/background.spec.ts +3 -1
  71. package/demos/pc/app/loading/custom-class.spec.ts +4 -2
  72. package/demos/pc/app/loading/fullscreen.spec.ts +6 -4
  73. package/demos/pc/app/loading/loading-tip-text.spec.ts +3 -1
  74. package/demos/pc/app/loading/size.spec.ts +5 -3
  75. package/demos/pc/app/locales/custom-service-composition-api.vue +3 -3
  76. package/demos/pc/app/locales/custom-service.spec.ts +1 -1
  77. package/demos/pc/app/locales/custom-service.vue +3 -3
  78. package/demos/pc/app/modal/basic-usage.spec.ts +2 -1
  79. package/demos/pc/app/modal/message-close.spec.ts +2 -2
  80. package/demos/pc/app/modal/message-id.spec.ts +2 -2
  81. package/demos/pc/app/modal/modal-fn-slots.spec.ts +5 -7
  82. package/demos/pc/app/modal/modal-header.spec.ts +2 -1
  83. package/demos/pc/app/numeric/input-event-composition-api.vue +26 -0
  84. package/demos/pc/app/numeric/input-event.spec.ts +15 -0
  85. package/demos/pc/app/numeric/input-event.vue +34 -0
  86. package/demos/pc/app/numeric/webdoc/numeric.js +12 -0
  87. package/demos/pc/app/pager/align-composition-api.vue +10 -13
  88. package/demos/pc/app/pager/align.spec.ts +8 -3
  89. package/demos/pc/app/pager/align.vue +11 -5
  90. package/demos/pc/app/pager/page-size-composition-api.vue +2 -2
  91. package/demos/pc/app/pager/page-size.spec.ts +1 -1
  92. package/demos/pc/app/pager/page-size.vue +2 -2
  93. package/demos/pc/app/pager/pager-in-grid-composition-api.vue +0 -1
  94. package/demos/pc/app/pager/pager-in-grid.vue +0 -1
  95. package/demos/pc/app/pager/popper-append-to-body-composition-api.vue +1 -7
  96. package/demos/pc/app/pager/popper-append-to-body.vue +1 -7
  97. package/demos/pc/app/pager/popper-class-composition-api.vue +1 -7
  98. package/demos/pc/app/pager/popper-class.vue +1 -7
  99. package/demos/pc/app/popeditor/suggest.spec.ts +1 -1
  100. package/demos/pc/app/qr-code/icon-composition-api.vue +17 -3
  101. package/demos/pc/app/qr-code/icon.spec.ts +19 -0
  102. package/demos/pc/app/qr-code/icon.vue +25 -4
  103. package/demos/pc/app/qr-code/style-composition-api.vue +2 -9
  104. package/demos/pc/app/qr-code/style.spec.ts +18 -1
  105. package/demos/pc/app/qr-code/style.vue +11 -8
  106. package/demos/pc/app/query-builder/webdoc/query-builder.js +5 -3
  107. package/demos/pc/app/search/events.spec.ts +1 -1
  108. package/demos/pc/app/search/events.vue +9 -0
  109. package/demos/pc/app/search/slot-prefix-suffix.spec.ts +1 -1
  110. package/demos/pc/app/search/webdoc/search.js +12 -4
  111. package/demos/pc/app/tabs/basic-usage.spec.ts +2 -2
  112. package/demos/pc/app/tabs/header-only.vue +56 -0
  113. package/demos/pc/app/tabs/size.spec.ts +2 -2
  114. package/demos/pc/app/tabs/webdoc/tabs.js +12 -0
  115. package/demos/pc/app/time-line/slot-default-composition-api.vue +81 -0
  116. package/demos/pc/app/time-line/slot-default.spec.ts +13 -0
  117. package/demos/pc/app/time-line/slot-default.vue +95 -0
  118. package/demos/pc/app/time-line/webdoc/time-line.js +12 -0
  119. package/demos/pc/menus.js +20 -10
  120. package/demos/pc/webdoc/changelog-en.md +86 -132
  121. package/demos/pc/webdoc/changelog.md +86 -132
  122. package/demos/pc/webdoc/faq.md +14 -0
  123. package/demos/saas/menus.js +2 -14
  124. package/env/.env +3 -0
  125. package/package.json +21 -20
  126. package/playground/App.vue +2 -2
  127. package/postcss.config.cjs +1 -0
  128. package/src/App.vue +26 -42
  129. package/src/components/anchor.vue +5 -1
  130. package/src/components/demo.vue +18 -7
  131. package/src/components/design-token.vue +90 -0
  132. package/src/components/float-settings.vue +4 -10
  133. package/src/components/mcp-docs.vue +4 -26
  134. package/src/components/version-tip.vue +1 -1
  135. package/src/composable/useTinyRemoter.ts +176 -0
  136. package/src/composable/utils.ts +2 -6
  137. package/src/const.ts +6 -1
  138. package/src/i18n/en.json +2 -0
  139. package/src/i18n/es.json +47 -0
  140. package/src/i18n/index.js +25 -5
  141. package/src/i18n/pt.json +47 -0
  142. package/src/i18n/zh.json +2 -0
  143. package/src/main.js +17 -4
  144. package/src/{menus.jsx → menus.js} +0 -1
  145. package/src/router.js +3 -6
  146. package/src/tools/appData.js +4 -5
  147. package/src/tools/storage.js +5 -3
  148. package/src/tools/useApiMode.js +11 -3
  149. package/src/tools/useBulletin.jsx +9 -8
  150. package/src/tools/useStyleSettings.js +8 -0
  151. package/src/tools/useTemplateMode.js +5 -1
  152. package/src/tools/utils.js +32 -1
  153. package/src/views/components-doc/cmp-config.js +13 -1
  154. package/src/views/components-doc/common.vue +34 -8
  155. package/src/views/layout/layout.vue +5 -8
  156. package/src/views/overview.vue +1 -1
  157. package/tsconfig.node.json +2 -4
  158. 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
+ })
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload ref="uploadRef" :action="action" :file-list="fileList" :before-upload="beforeAvatarUpload">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -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')
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload ref="upload" :action="action" :file-list="fileList" :before-upload="beforeAvatarUpload">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload ref="uploadRef" :action="action">
3
3
  <template #trigger>
4
- <tiny-button>我是触发源</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -6,5 +6,5 @@ test('触发源插槽', async ({ page }) => {
6
6
 
7
7
  const upload = page.locator('.tiny-upload')
8
8
 
9
- await expect(upload).toHaveText('我是触发源')
9
+ await expect(upload).toHaveText('点击上传')
10
10
  })
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload ref="upload" :action="action">
3
3
  <template #trigger>
4
- <tiny-button>我是触发源</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -8,7 +8,7 @@
8
8
  :re-upload-tip="reUploadTip"
9
9
  >
10
10
  <template #trigger>
11
- <tiny-button>选取文件</tiny-button>
11
+ <tiny-button>点击上传</tiny-button>
12
12
  </template>
13
13
  <template #tip>
14
14
  <div class="tiny-upload__tip">只能上传 jpg/png 文件,且不超过 500 kb</div>
@@ -8,7 +8,7 @@
8
8
  :re-upload-tip="reUploadTip"
9
9
  >
10
10
  <template #trigger>
11
- <tiny-button>选取文件</tiny-button>
11
+ <tiny-button>点击上传</tiny-button>
12
12
  </template>
13
13
  <template #tip>
14
14
  <div class="tiny-upload__tip">只能上传 jpg/png 文件,且不超过 500 kb</div>
@@ -17,7 +17,7 @@
17
17
  @remove="handleRemove"
18
18
  >
19
19
  <template #trigger>
20
- <tiny-button>选取文件</tiny-button>
20
+ <tiny-button>点击上传</tiny-button>
21
21
  </template>
22
22
  <template #tip>
23
23
  <div class="tiny-upload__tip">只能上传 jpg/png 文件</div>
@@ -18,7 +18,7 @@
18
18
  @remove="handleRemove"
19
19
  >
20
20
  <template #trigger>
21
- <tiny-button>选取文件</tiny-button>
21
+ <tiny-button>点击上传</tiny-button>
22
22
  </template>
23
23
  <template #tip>
24
24
  <div class="tiny-upload__tip">只能上传 jpg/png 文件</div>
@@ -7,7 +7,7 @@
7
7
  :before-upload="beforeUpload"
8
8
  >
9
9
  <template #trigger>
10
- <tiny-button>选取文件</tiny-button>
10
+ <tiny-button>点击上传</tiny-button>
11
11
  </template>
12
12
  <template #tip>
13
13
  <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#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>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  <template #tip>
7
7
  <div class="tiny-upload__tip">只允许上传 image 类型文件</div>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload :action="action" :multiple="true">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -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')
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload :action="action" :multiple="true">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload ref="uploadRef" :action="action" :file-list="fileList" :before-remove="beforeRemove">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <tiny-file-upload ref="upload" :action="action" :file-list="fileList" :before-remove="beforeRemove">
3
3
  <template #trigger>
4
- <tiny-button>选取文件</tiny-button>
4
+ <tiny-button>点击上传</tiny-button>
5
5
  </template>
6
6
  </tiny-file-upload>
7
7
  </template>
@@ -8,7 +8,7 @@
8
8
  :before-upload="beforeUpload"
9
9
  >
10
10
  <template #trigger>
11
- <tiny-button>选取文件</tiny-button>
11
+ <tiny-button>点击上传</tiny-button>
12
12
  </template>
13
13
  </tiny-file-upload>
14
14
  </template>
@@ -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) => {
@@ -8,7 +8,7 @@
8
8
  :before-upload="beforeUpload"
9
9
  >
10
10
  <template #trigger>
11
- <tiny-button>选取文件</tiny-button>
11
+ <tiny-button>点击上传</tiny-button>
12
12
  </template>
13
13
  </tiny-file-upload>
14
14
  </template>
@@ -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
- await page.getByRole('textbox').nth(1).click()
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.getByRole('textbox').nth(1).click()
8
- await page.getByRole('textbox').nth(1).press('CapsLock')
9
- await page.getByRole('textbox').nth(1).fill('WWW')
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
- await page.getByRole('textbox').nth(1).click()
10
- await page.getByRole('textbox').nth(1).fill('a')
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 page.getByRole('textbox').nth(1).click()
13
- await page.getByRole('textbox').nth(1).fill('')
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