@opentiny/vue-docs 3.21.0 → 3.21.2
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/dropdown.js +14 -0
- package/demos/pc/app/dropdown/visible-composition-api.vue +48 -0
- package/demos/pc/app/dropdown/visible.spec.ts +27 -0
- package/demos/pc/app/dropdown/visible.vue +61 -0
- package/demos/pc/app/dropdown/webdoc/dropdown.js +13 -0
- package/demos/pc/app/grid/custom/column-fixed.spec.js +3 -2
- package/demos/pc/app/grid/custom/column-sort.spec.js +2 -1
- package/demos/pc/app/grid/custom/column-visible-hidden.spec.js +3 -2
- package/demos/pc/app/grid/custom/multiple-column-sort.spec.js +7 -6
- package/demos/pc/app/grid/custom/ordercolumn-local.spec.js +5 -4
- package/demos/pc/app/grid/custom/reset-resizable.spec.js +4 -2
- package/demos/pc/app/grid/edit/custom-editing.spec.js +1 -7
- package/demos/pc/app/grid/edit/editing.spec.js +1 -12
- package/demos/pc/app/grid/edit/has-row-change.spec.js +5 -9
- package/demos/pc/app/grid/edit/revert-data.spec.js +2 -12
- package/demos/pc/app/grid/edit/status-of-editing.spec.js +1 -6
- package/demos/pc/app/grid/edit/trigger-mode-for-editing.spec.js +2 -14
- package/demos/pc/app/grid/edit/trigger-mode-hm-editing.spec.js +3 -9
- package/demos/pc/app/grid/editor/custom-edit.spec.js +2 -2
- package/demos/pc/app/grid/editor/inner-editor.spec.js +2 -5
- package/demos/pc/app/grid/event/valid-error-event.spec.js +1 -6
- package/demos/pc/app/grid/faq/grid-in-dialog-box.spec.js +1 -6
- package/demos/pc/app/grid/pager/show-save-msg.spec.js +1 -6
- package/demos/pc/app/grid/toolbar/save-data.spec.js +1 -6
- package/demos/pc/app/grid/tree-table/tree-grid-insert-delete-update.spec.js +1 -2
- package/demos/pc/app/grid/validation/before-submit-validation.spec.js +4 -7
- package/demos/pc/app/grid/validation/custcomp.spec.js +2 -6
- package/demos/pc/app/grid/validation/editing-isvalidalways-validation.spec.js +3 -12
- package/demos/pc/app/grid/validation/editing-validation.spec.js +2 -6
- package/demos/pc/app/grid/validation/row-data-valid.spec.js +2 -1
- package/demos/pc/app/grid/validation/select-validation.spec.js +4 -12
- package/demos/pc/app/grid/validation/tipconfig.spec.js +2 -12
- package/demos/pc/app/grid/validation/validation-scroll-to-col.spec.js +1 -6
- package/demos/pc/app/time-picker/format.spec.ts +6 -6
- package/package.json +12 -12
- package/src/i18n/en.json +2 -1
- package/src/i18n/zh.json +2 -1
- package/src/main.js +9 -7
- package/src/views/components/components.vue +78 -1
- package/src/views/overview.vue +6 -3
package/demos/apis/dropdown.js
CHANGED
|
@@ -218,6 +218,20 @@ export default {
|
|
|
218
218
|
pcDemo: 'split-button',
|
|
219
219
|
mfDemo: ''
|
|
220
220
|
},
|
|
221
|
+
{
|
|
222
|
+
name: 'v-model:visible',
|
|
223
|
+
type: 'boolean',
|
|
224
|
+
defaultValue: 'false',
|
|
225
|
+
meta: {
|
|
226
|
+
stable: '3.21.1'
|
|
227
|
+
},
|
|
228
|
+
desc: {
|
|
229
|
+
'zh-CN': '手动控制下拉弹框显隐,优先级高于trigger',
|
|
230
|
+
'en-US': 'Manually control the display and hide of the dropdown menu, with priority higher than the trigger'
|
|
231
|
+
},
|
|
232
|
+
mode: ['pc'],
|
|
233
|
+
pcDemo: 'visible'
|
|
234
|
+
},
|
|
221
235
|
{
|
|
222
236
|
name: 'visible-arrow',
|
|
223
237
|
type: 'boolean',
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<tiny-dropdown v-model:visible="visible" :show-icon="false" @item-click="itemClick" :hideOnClick="false">
|
|
3
|
+
<tiny-button @click="handleClick">点击{{ visible ? '隐藏' : '显示' }}</tiny-button>
|
|
4
|
+
<template #dropdown>
|
|
5
|
+
<tiny-dropdown-menu>
|
|
6
|
+
<tiny-dropdown-item
|
|
7
|
+
v-for="(item, index) in options"
|
|
8
|
+
:key="index"
|
|
9
|
+
:label="item.label"
|
|
10
|
+
:disabled="item.disabled"
|
|
11
|
+
:item-data="item"
|
|
12
|
+
></tiny-dropdown-item>
|
|
13
|
+
</tiny-dropdown-menu>
|
|
14
|
+
</template>
|
|
15
|
+
</tiny-dropdown>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<script setup>
|
|
19
|
+
import { ref } from 'vue'
|
|
20
|
+
import { TinyDropdown, TinyDropdownMenu, TinyDropdownItem, TinyButton } from '@opentiny/vue'
|
|
21
|
+
|
|
22
|
+
const visible = ref(false)
|
|
23
|
+
const options = [
|
|
24
|
+
{
|
|
25
|
+
label: '黄金糕'
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
label: '点击我隐藏'
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
label: '螺蛳粉'
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
label: '双皮奶'
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
label: '蚵仔煎'
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
const itemClick = (e) => {
|
|
41
|
+
if (e.itemData.label === '点击我隐藏') {
|
|
42
|
+
visible.value = false
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const handleClick = () => {
|
|
46
|
+
visible.value = !visible.value
|
|
47
|
+
}
|
|
48
|
+
</script>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test'
|
|
2
|
+
|
|
3
|
+
test('手动控制显隐', async ({ page }) => {
|
|
4
|
+
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
await page.goto('dropdown#visible')
|
|
6
|
+
|
|
7
|
+
const wrap = page.locator('#visible')
|
|
8
|
+
const dropDownMenu = page.locator('body > .tiny-dropdown-menu').locator('visible=true')
|
|
9
|
+
|
|
10
|
+
await wrap.getByText('点击显示').click()
|
|
11
|
+
await expect(dropDownMenu).toHaveCount(1)
|
|
12
|
+
|
|
13
|
+
await page.locator('#all-demos-container').click()
|
|
14
|
+
await expect(dropDownMenu).toHaveCount(1)
|
|
15
|
+
|
|
16
|
+
await dropDownMenu.locator('div').filter({ hasText: '黄金糕' }).nth(1).click()
|
|
17
|
+
await expect(dropDownMenu).toHaveCount(1)
|
|
18
|
+
|
|
19
|
+
await wrap.getByText('点击隐藏').click()
|
|
20
|
+
await expect(dropDownMenu).toHaveCount(0)
|
|
21
|
+
|
|
22
|
+
await wrap.getByText('点击显示').click()
|
|
23
|
+
await expect(dropDownMenu).toHaveCount(1)
|
|
24
|
+
|
|
25
|
+
await dropDownMenu.locator('div').filter({ hasText: '点击我隐藏' }).nth(1).click()
|
|
26
|
+
await expect(dropDownMenu).toHaveCount(0)
|
|
27
|
+
})
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<tiny-dropdown v-model:visible="visible" :show-icon="false" @item-click="itemClick" :hideOnClick="false">
|
|
3
|
+
<tiny-button @click="handleClick">点击{{ visible ? '隐藏' : '显示' }}</tiny-button>
|
|
4
|
+
<template #dropdown>
|
|
5
|
+
<tiny-dropdown-menu>
|
|
6
|
+
<tiny-dropdown-item
|
|
7
|
+
v-for="(item, index) in options"
|
|
8
|
+
:key="index"
|
|
9
|
+
:label="item.label"
|
|
10
|
+
:disabled="item.disabled"
|
|
11
|
+
:item-data="item"
|
|
12
|
+
></tiny-dropdown-item>
|
|
13
|
+
</tiny-dropdown-menu>
|
|
14
|
+
</template>
|
|
15
|
+
</tiny-dropdown>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<script>
|
|
19
|
+
import { TinyDropdown, TinyDropdownMenu, TinyDropdownItem, TinyButton } from '@opentiny/vue'
|
|
20
|
+
|
|
21
|
+
export default {
|
|
22
|
+
components: {
|
|
23
|
+
TinyDropdown,
|
|
24
|
+
TinyDropdownMenu,
|
|
25
|
+
TinyDropdownItem,
|
|
26
|
+
TinyButton
|
|
27
|
+
},
|
|
28
|
+
data() {
|
|
29
|
+
return {
|
|
30
|
+
visible: false,
|
|
31
|
+
options: [
|
|
32
|
+
{
|
|
33
|
+
label: '黄金糕'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
label: '点击我隐藏'
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
label: '螺蛳粉'
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
label: '双皮奶'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
label: '蚵仔煎'
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
methods: {
|
|
51
|
+
itemClick(e) {
|
|
52
|
+
if (e.itemData.label === '点击我隐藏') {
|
|
53
|
+
this.visible = false
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
handleClick() {
|
|
57
|
+
this.visible = !this.visible
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
</script>
|
|
@@ -111,6 +111,19 @@ export default {
|
|
|
111
111
|
},
|
|
112
112
|
codeFiles: ['trigger.vue']
|
|
113
113
|
},
|
|
114
|
+
{
|
|
115
|
+
demoId: 'visible',
|
|
116
|
+
name: {
|
|
117
|
+
'zh-CN': '手动控制显隐',
|
|
118
|
+
'en-US': 'Manual control of display and concealment'
|
|
119
|
+
},
|
|
120
|
+
desc: {
|
|
121
|
+
'zh-CN': '<p>通过 <code>visible</code> 属性手动控制下拉菜单显隐,优先级高于trigger。</p>\n',
|
|
122
|
+
'en-US':
|
|
123
|
+
'<p>Manually control the visibility of the dropdown menu through the<code>visible</code>attribute, with priority over trigger.</p>\n'
|
|
124
|
+
},
|
|
125
|
+
codeFiles: ['visible.vue']
|
|
126
|
+
},
|
|
114
127
|
{
|
|
115
128
|
demoId: 'tip',
|
|
116
129
|
name: {
|
|
@@ -2,10 +2,11 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('列冻结', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const custom = page.locator('.tiny-grid-custom')
|
|
5
6
|
await page.goto('grid-custom#custom-column-fixed')
|
|
6
7
|
await page.locator('.tiny-grid-custom__setting-btn').click()
|
|
7
|
-
await
|
|
8
|
-
await
|
|
8
|
+
await custom.getByRole('row', { name: '员工数 ' }).getByTitle('未冻结').getByRole('img').click()
|
|
9
|
+
await custom.getByRole('row', { name: '员工数' }).getByTitle('左冻结').getByRole('img').click()
|
|
9
10
|
await page.getByRole('button', { name: '确定' }).click()
|
|
10
11
|
await expect(page.getByRole('cell', { name: '员工数' })).toHaveCSS('right', '0px')
|
|
11
12
|
})
|
|
@@ -2,9 +2,10 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('个性化排序测试', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const custom = page.locator('.tiny-grid-custom')
|
|
5
6
|
await page.goto('grid-custom#custom-column-sort')
|
|
6
7
|
await page.locator('.tiny-grid-custom__setting-btn').click()
|
|
7
|
-
await
|
|
8
|
+
await custom.getByRole('row', { name: '员工数' }).getByTitle('未排序').getByRole('img').click()
|
|
8
9
|
await page.getByRole('button', { name: '确定' }).click()
|
|
9
10
|
await page.waitForTimeout(200)
|
|
10
11
|
const sortBtn = await page.getByRole('cell', { name: '员工数' }).getByRole('img')
|
|
@@ -2,9 +2,10 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('列显示隐藏', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const custom = page.locator('.tiny-grid-custom')
|
|
5
6
|
await page.goto('grid-custom#custom-column-visible-hidden')
|
|
6
7
|
await page.locator('.tiny-grid-custom__setting-btn').click()
|
|
7
|
-
await
|
|
8
|
-
await
|
|
8
|
+
await custom.getByRole('row', { name: '员工数' }).getByTitle('显示').getByRole('img').click()
|
|
9
|
+
await custom.getByRole('button', { name: '确定' }).click()
|
|
9
10
|
await expect(page.getByRole('cell', { name: '员工数' })).not.toBeVisible()
|
|
10
11
|
})
|
|
@@ -2,16 +2,17 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('多列排序', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const custom = page.locator('.tiny-grid-custom')
|
|
5
6
|
await page.goto('grid-custom#custom-multiple-column-sort')
|
|
6
7
|
await page.locator('.tiny-grid-custom__setting-btn').first().click()
|
|
7
|
-
await
|
|
8
|
-
await
|
|
9
|
-
await
|
|
8
|
+
await custom.getByRole('row', { name: '员工数' }).getByTitle('未排序').locator('path').click()
|
|
9
|
+
await custom.getByTitle('未排序').locator('path').click()
|
|
10
|
+
await custom.getByRole('button', { name: '确定' }).click()
|
|
10
11
|
await expect(page.locator('.tiny-grid-body__row').nth(3)).toContainText('GFD 科技有限公司')
|
|
11
12
|
|
|
12
13
|
await page.locator('.tiny-grid-custom__setting-btn').nth(1).click()
|
|
13
|
-
await
|
|
14
|
-
await
|
|
15
|
-
await
|
|
14
|
+
await custom.getByRole('row', { name: '员工数' }).getByTitle('未排序').getByRole('img').click()
|
|
15
|
+
await custom.getByTitle('未排序').getByRole('img').click()
|
|
16
|
+
await custom.getByRole('button', { name: '确定' }).click()
|
|
16
17
|
await expect(page.locator('.tiny-grid-body__row').nth(10)).toContainText('YHN 科技有限公司')
|
|
17
18
|
})
|
|
@@ -2,18 +2,19 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('个性化按钮点击事件', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const custom = page.locator('.tiny-grid-custom')
|
|
5
6
|
await page.goto('grid-custom#custom-ordercolumn-local')
|
|
6
7
|
await page.locator('.tiny-grid-custom__setting-btn').click()
|
|
7
|
-
await
|
|
8
|
-
await
|
|
8
|
+
await custom.locator('.tiny-grid-body__row').first().getByTitle('显示').getByRole('img').click()
|
|
9
|
+
await custom.getByRole('button', { name: '确定' }).click()
|
|
9
10
|
await expect(
|
|
10
11
|
page.getByText('点击了确认按钮{"sortType":"page","pageSize":10,"columns":[{"property":"name","order":nu')
|
|
11
12
|
).toBeVisible()
|
|
12
13
|
await page.getByRole('button', { name: '确定' }).click()
|
|
13
14
|
await page.locator('.tiny-grid-custom__setting-btn').click()
|
|
14
|
-
await
|
|
15
|
+
await custom.getByRole('button', { name: '重置' }).click()
|
|
15
16
|
await expect(page.getByText('点击了重置按钮')).toBeVisible()
|
|
16
17
|
await page.getByRole('button', { name: '确定' }).nth(1).click()
|
|
17
|
-
await
|
|
18
|
+
await custom.getByRole('button', { name: '取消' }).click()
|
|
18
19
|
await expect(page.getByText('点击了取消按钮 undefined')).toBeVisible
|
|
19
20
|
})
|
|
@@ -30,10 +30,12 @@ test.describe('手动重置列操作', () => {
|
|
|
30
30
|
|
|
31
31
|
test('重置列隐藏', async ({ page }) => {
|
|
32
32
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
33
|
+
const custom = page.locator('.tiny-grid-custom')
|
|
34
|
+
|
|
33
35
|
await page.goto('grid-custom#custom-reset-resizable')
|
|
34
36
|
await page.locator('.tiny-grid-custom__setting-btn').click()
|
|
35
|
-
await
|
|
36
|
-
await
|
|
37
|
+
await custom.getByRole('row', { name: '员工数' }).getByTitle('显示').getByRole('img').click()
|
|
38
|
+
await custom.getByRole('button', { name: '确定' }).click()
|
|
37
39
|
const thHeader = page.locator('th.tiny-grid-header__column').nth(1)
|
|
38
40
|
await expect(thHeader).toContainText('地址')
|
|
39
41
|
await page.getByRole('button', { name: '重置列的隐藏操作' }).click()
|
|
@@ -6,11 +6,5 @@ test('自定义编辑规则', async ({ page }) => {
|
|
|
6
6
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
7
7
|
await expect(page.getByText('GFD 科技 YX 公司').first()).toBeVisible()
|
|
8
8
|
await page.getByText('WWWW 科技 YX 公司').first().click()
|
|
9
|
-
await expect(
|
|
10
|
-
page
|
|
11
|
-
.getByRole('row', {
|
|
12
|
-
name: '2 华南区 2014-02-14 14:14:14 1300 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
13
|
-
})
|
|
14
|
-
.getByRole('textbox')
|
|
15
|
-
).toBeVisible()
|
|
9
|
+
await expect(page.locator('.tiny-grid-default-input')).toBeVisible()
|
|
16
10
|
})
|
|
@@ -5,18 +5,7 @@ test('编辑方式', async ({ page }) => {
|
|
|
5
5
|
await page.goto('grid-edit#edit-editing')
|
|
6
6
|
// 单元格编辑
|
|
7
7
|
await page.getByRole('cell', { name: 'GFD 科技 YX 公司' }).first().click()
|
|
8
|
-
await page
|
|
9
|
-
.getByRole('row', {
|
|
10
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
11
|
-
})
|
|
12
|
-
.getByRole('textbox')
|
|
13
|
-
.click()
|
|
14
|
-
await page
|
|
15
|
-
.getByRole('row', {
|
|
16
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
17
|
-
})
|
|
18
|
-
.getByRole('textbox')
|
|
19
|
-
.fill('GFD 科技 Y 水电费第三方 X 公司')
|
|
8
|
+
await page.locator('.tiny-grid-default-input').fill('GFD 科技 Y 水电费第三方 X 公司')
|
|
20
9
|
await page.getByRole('heading', { name: '单元格编辑:' }).click()
|
|
21
10
|
await expect(await page.getByText('GFD 科技 Y 水电费第三方 X 公司')).toHaveCount(2)
|
|
22
11
|
|
|
@@ -2,18 +2,14 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('检查数据是否改变', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const demo = page.locator('#edit-has-row-change')
|
|
5
6
|
await page.goto('grid-edit#edit-has-row-change')
|
|
6
|
-
await
|
|
7
|
-
await
|
|
8
|
-
await
|
|
7
|
+
await demo.getByText('GFD 科技 YX 公司').first().click()
|
|
8
|
+
await demo.locator('.tiny-grid-body__row').first().locator('input[type="text"]').fill('sdf')
|
|
9
|
+
await demo.locator('.tiny-grid-body__row').first().getByRole('button', { name: '保存' }).click()
|
|
9
10
|
await expect(page.getByText('保存成功!')).toBeVisible()
|
|
10
11
|
await page.getByRole('button', { name: '确定' }).click()
|
|
11
|
-
await
|
|
12
|
-
.getByRole('row', {
|
|
13
|
-
name: '2 WWWW 科技 YX 公司 华南区 深圳福田区 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。 保存'
|
|
14
|
-
})
|
|
15
|
-
.getByRole('button', { name: '保存' })
|
|
16
|
-
.click()
|
|
12
|
+
await demo.locator('.tiny-grid-body__row').nth(1).getByRole('button', { name: '保存' }).click()
|
|
17
13
|
await expect(page.getByText('当前数据未改变!')).toBeVisible()
|
|
18
14
|
await page.getByRole('button', { name: '确定' }).click()
|
|
19
15
|
})
|
|
@@ -4,19 +4,9 @@ test('表格编辑还原更改', async ({ page }) => {
|
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
5
|
await page.goto('grid-edit#edit-revert-data')
|
|
6
6
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
7
|
-
await page
|
|
8
|
-
.getByRole('row', {
|
|
9
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。 恢复'
|
|
10
|
-
})
|
|
11
|
-
.getByRole('textbox')
|
|
12
|
-
.fill('sss')
|
|
7
|
+
await page.locator('.tiny-grid-default-input').fill('sss')
|
|
13
8
|
await page.getByText('RFV 有限责任公司').first().click()
|
|
14
|
-
await page
|
|
15
|
-
.getByRole('row', {
|
|
16
|
-
name: '3 华南区 中山市 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。 恢复'
|
|
17
|
-
})
|
|
18
|
-
.getByRole('textbox')
|
|
19
|
-
.fill('eee')
|
|
9
|
+
await page.locator('.tiny-grid-default-input').fill('eee')
|
|
20
10
|
await page.locator('#edit-revert-data').getByRole('cell', { name: '名称' }).click()
|
|
21
11
|
await page.getByRole('button', { name: '恢复全部' }).click()
|
|
22
12
|
await expect(page.getByText('GFD 科技 YX 公司').first()).toBeVisible()
|
|
@@ -4,12 +4,7 @@ test('开启编辑状态', async ({ page }) => {
|
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
5
|
await page.goto('grid-edit#edit-status-of-editing')
|
|
6
6
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
7
|
-
await page
|
|
8
|
-
.getByRole('row', {
|
|
9
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
10
|
-
})
|
|
11
|
-
.getByRole('textbox')
|
|
12
|
-
.fill('sdfdf')
|
|
7
|
+
await page.locator('.tiny-grid-default-input').fill('sdfdf')
|
|
13
8
|
await page.getByRole('heading', { name: '开启编辑状态:' }).click()
|
|
14
9
|
await expect(page.getByRole('cell', { name: 'sdfdf' }).nth(0)).toHaveClass(/col__valid-success/)
|
|
15
10
|
await expect(page.getByRole('cell', { name: 'sdfdf' }).nth(1)).not.toHaveClass(/col__valid-success/)
|
|
@@ -4,21 +4,9 @@ test('触发编辑方式', async ({ page }) => {
|
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
5
|
await page.goto('grid-edit#edit-trigger-mode-for-editing')
|
|
6
6
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
7
|
-
await expect(
|
|
8
|
-
page
|
|
9
|
-
.getByRole('row', {
|
|
10
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
11
|
-
})
|
|
12
|
-
.getByRole('textbox')
|
|
13
|
-
).toBeVisible()
|
|
7
|
+
await expect(page.locator('.tiny-grid-default-input')).toBeVisible()
|
|
14
8
|
|
|
15
9
|
await page.getByText('WWWW 科技 YX 公司').nth(1).dblclick()
|
|
16
10
|
|
|
17
|
-
await expect(
|
|
18
|
-
page
|
|
19
|
-
.getByRole('row', {
|
|
20
|
-
name: '2 华南区 深圳福田区 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
21
|
-
})
|
|
22
|
-
.getByRole('textbox')
|
|
23
|
-
).toBeVisible()
|
|
11
|
+
await expect(page.locator('.tiny-grid-default-input')).toBeVisible()
|
|
24
12
|
})
|
|
@@ -2,18 +2,12 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('手动触发编辑', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const demo = page.locator('#edit-trigger-mode-hm-editing')
|
|
5
6
|
await page.goto('grid-edit#edit-trigger-mode-hm-editing')
|
|
6
7
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
7
8
|
await expect(page.getByText('GFD 科技 YX 公司').first()).toBeVisible()
|
|
8
|
-
await
|
|
9
|
-
|
|
10
|
-
name: '1 GFD 科技 YX 公司 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。 编辑'
|
|
11
|
-
})
|
|
12
|
-
.getByRole('button', { name: '编辑' })
|
|
13
|
-
.click()
|
|
14
|
-
await expect(
|
|
15
|
-
page.getByRole('row', { name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863' }).getByRole('textbox')
|
|
16
|
-
).toBeVisible()
|
|
9
|
+
await demo.locator('.tiny-grid-body__row').first().getByRole('button', { name: '编辑' }).click()
|
|
10
|
+
await expect(page.locator('.tiny-grid-default-input')).toBeVisible()
|
|
17
11
|
|
|
18
12
|
await page.getByRole('row', { name: '3 RFV' }).getByRole('button').click()
|
|
19
13
|
await expect(page.getByRole('combobox')).toBeVisible()
|
|
@@ -3,6 +3,6 @@ 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-editor#editor-custom-edit')
|
|
6
|
-
await expect(page.getByRole('
|
|
7
|
-
await expect(page.getByRole('
|
|
6
|
+
await expect(page.getByRole('cell', { name: 'GFD 科技有限公司' }).getByRole('textbox')).toBeVisible()
|
|
7
|
+
await expect(page.getByRole('cell', { name: 'WWWW 科技有限公司' }).getByRole('textbox')).toBeVisible()
|
|
8
8
|
})
|
|
@@ -2,13 +2,10 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('Grid-编辑器 - 内置编辑器', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const demo = page.locator('#editor-inner-editor')
|
|
5
6
|
await page.goto('grid-editor#grid_Example-gridEdit-inner-editor')
|
|
6
7
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
7
|
-
const input =
|
|
8
|
-
.getByRole('row', {
|
|
9
|
-
name: '1 800 华东区 2014-04-30 00:56:00 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
10
|
-
})
|
|
11
|
-
.getByRole('textbox')
|
|
8
|
+
const input = demo.locator('.tiny-grid-body__row input').first()
|
|
12
9
|
|
|
13
10
|
// 内置编辑器
|
|
14
11
|
await expect(input).toHaveClass(/tiny-grid-default-input/)
|
|
@@ -4,12 +4,7 @@ test('校验不通过事件', async ({ page }) => {
|
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
5
|
await page.goto('grid-event#event-valid-error-event')
|
|
6
6
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
7
|
-
await page
|
|
8
|
-
.getByRole('row', {
|
|
9
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
10
|
-
})
|
|
11
|
-
.getByRole('textbox')
|
|
12
|
-
.clear()
|
|
7
|
+
await page.locator('.tiny-grid-default-input').clear()
|
|
13
8
|
await page.waitForTimeout(400)
|
|
14
9
|
await expect(page.getByText('触发校验不通过事件').first()).toBeVisible()
|
|
15
10
|
})
|
|
@@ -5,12 +5,7 @@ test('弹窗框中表格编辑器失焦功能测试', async ({ page }) => {
|
|
|
5
5
|
await page.goto('grid-faq#faq-grid-in-dialog-box')
|
|
6
6
|
await page.getByRole('button', { name: '弹出 Dialog false' }).click()
|
|
7
7
|
await page.getByText('GFD 科技有限公司').first().click()
|
|
8
|
-
await page
|
|
9
|
-
.getByRole('row', {
|
|
10
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
11
|
-
})
|
|
12
|
-
.getByRole('textbox')
|
|
13
|
-
.fill('ss')
|
|
8
|
+
await page.locator('.tiny-grid-default-input').fill('ss')
|
|
14
9
|
await page.getByText('消息').click()
|
|
15
10
|
|
|
16
11
|
await expect(page.getByText('ss').first()).toBeVisible()
|
|
@@ -4,12 +4,7 @@ test('保存', async ({ page }) => {
|
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
5
|
await page.goto('grid-pager#pager-show-save-msg')
|
|
6
6
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
7
|
-
await page
|
|
8
|
-
.getByRole('row', {
|
|
9
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
10
|
-
})
|
|
11
|
-
.getByRole('textbox')
|
|
12
|
-
.fill('GFD 科技 YX 公司 ds')
|
|
7
|
+
await page.locator('.tiny-grid-default-input').fill('GFD 科技 YX 公司 ds')
|
|
13
8
|
await page.locator('#pager-show-save-msg').getByRole('cell', { name: '名称' }).click()
|
|
14
9
|
await page.getByRole('listitem').filter({ hasText: '2' }).click()
|
|
15
10
|
await expect(page.getByText('有修改的数据,是否要保存?')).toBeVisible()
|
|
@@ -4,12 +4,7 @@ test('服务端数据保存和删除方法', async ({ page }) => {
|
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
5
|
await page.goto('grid-toolbar#toolbar-save-data')
|
|
6
6
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
7
|
-
await page
|
|
8
|
-
.getByRole('row', {
|
|
9
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
10
|
-
})
|
|
11
|
-
.getByRole('textbox')
|
|
12
|
-
.fill('dsfds')
|
|
7
|
+
await page.locator('.tiny-grid-default-input').fill('dsfds')
|
|
13
8
|
await page.getByRole('row', { name: '名称 区域 地址 公司简介' }).getByText('名称').click()
|
|
14
9
|
await page.getByRole('button', { name: '保存' }).click()
|
|
15
10
|
await expect(page.getByText('dsfds').first()).toBeVisible()
|
|
@@ -24,8 +24,7 @@ test.describe('树表增删改功能', () => {
|
|
|
24
24
|
.first()
|
|
25
25
|
.click()
|
|
26
26
|
await page.getByRole('row', { name: '3 WWWW 科技股份有限子公司 华南区 720' }).getByText('华南区').first().click()
|
|
27
|
-
await page.
|
|
28
|
-
await page.getByRole('row', { name: '3 WWWW 科技股份有限子公司 720' }).getByRole('textbox').fill('华南区 ee')
|
|
27
|
+
await page.locator('.tiny-grid-default-input').fill('华南区 ee')
|
|
29
28
|
await page.getByText('WWWW 科技 YX 公司').first().click()
|
|
30
29
|
await page.getByRole('button', { name: '获取修改' }).click()
|
|
31
30
|
|
|
@@ -2,14 +2,11 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('提交前校验', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const demo = page.locator('#validation-before-submit-validation')
|
|
5
6
|
await page.goto('grid-validation#validation-before-submit-validation')
|
|
6
|
-
await
|
|
7
|
-
await
|
|
8
|
-
|
|
9
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
10
|
-
})
|
|
11
|
-
.getByRole('textbox')
|
|
12
|
-
.fill('')
|
|
7
|
+
await demo.getByText('GFD 科技 YX 公司').first().click()
|
|
8
|
+
await demo.locator('.tiny-grid-default-input').fill('')
|
|
9
|
+
|
|
13
10
|
await page.getByRole('button', { name: '提交数据' }).click()
|
|
14
11
|
await expect(page.getByText('校验不通过', { exact: true })).toBeVisible()
|
|
15
12
|
|
|
@@ -2,14 +2,10 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('自定义组件与插槽编辑器校验', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const demo = page.locator('#validation-custcomp')
|
|
5
6
|
await page.goto('grid-validation#validation-custcomp')
|
|
6
7
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
7
|
-
await
|
|
8
|
-
.getByRole('row', {
|
|
9
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。 1234567890'
|
|
10
|
-
})
|
|
11
|
-
.getByRole('textbox')
|
|
12
|
-
.fill('')
|
|
8
|
+
await demo.locator('.tiny-grid-default-input').fill('')
|
|
13
9
|
|
|
14
10
|
await expect(page.getByRole('tooltip', { name: '必填' })).toBeVisible()
|
|
15
11
|
})
|
|
@@ -2,19 +2,10 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('隐藏列编辑时校验', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
|
|
6
|
+
const demo = page.locator('#validation-editing-isvalidalways-validation')
|
|
5
7
|
await page.goto('grid-validation#validation-editing-isvalidalways-validation')
|
|
6
|
-
await
|
|
7
|
-
.getByRole('row', {
|
|
8
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
9
|
-
})
|
|
10
|
-
.getByRole('textbox')
|
|
11
|
-
.clear()
|
|
12
|
-
await page
|
|
13
|
-
.getByRole('row', {
|
|
14
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
15
|
-
})
|
|
16
|
-
.getByRole('textbox')
|
|
17
|
-
.fill('GF')
|
|
8
|
+
await demo.locator('.tiny-grid-default-input').first().fill('GF')
|
|
18
9
|
|
|
19
10
|
await expect(page.getByRole('tooltip', { name: '名称长度在 3 到 50 个字符' })).toBeVisible()
|
|
20
11
|
})
|
|
@@ -2,14 +2,10 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('表格校验', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const demo = page.locator('#validation-editing-validation')
|
|
5
6
|
await page.goto('grid-validation#validation-editing-validation')
|
|
6
7
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
7
|
-
await
|
|
8
|
-
.getByRole('row', {
|
|
9
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
10
|
-
})
|
|
11
|
-
.getByRole('textbox')
|
|
12
|
-
.fill('')
|
|
8
|
+
await demo.locator('.tiny-grid-default-input').fill('')
|
|
13
9
|
|
|
14
10
|
await expect(page.getByRole('tooltip', { name: '名称必填' })).toBeVisible()
|
|
15
11
|
})
|
|
@@ -2,9 +2,10 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('数据关联校验', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const demo = page.locator('#validation-row-data-valid')
|
|
5
6
|
await page.goto('grid-validation#validation-row-data-valid')
|
|
6
7
|
await page.getByText('70').first().click()
|
|
7
|
-
await
|
|
8
|
+
await demo.locator('.tiny-grid-default-input').fill('700')
|
|
8
9
|
|
|
9
10
|
await expect(page.getByRole('tooltip', { name: '数值不能大于 100' })).toBeVisible()
|
|
10
11
|
})
|
|
@@ -2,21 +2,13 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('选中时校验', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
|
|
6
|
+
const demo = page.locator('#validation-select-validation')
|
|
5
7
|
await page.goto('grid-validation#validation-select-validation')
|
|
6
8
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
7
|
-
await
|
|
8
|
-
.getByRole('row', {
|
|
9
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
10
|
-
})
|
|
11
|
-
.getByRole('textbox')
|
|
12
|
-
.clear()
|
|
9
|
+
await demo.locator('.tiny-grid-default-input').fill('')
|
|
13
10
|
await page.waitForTimeout(200)
|
|
14
|
-
await
|
|
15
|
-
.getByRole('row', {
|
|
16
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
17
|
-
})
|
|
18
|
-
.locator('span')
|
|
19
|
-
.click()
|
|
11
|
+
await demo.locator('.tiny-grid-body__row .tiny-grid-checkbox__icon').first().click()
|
|
20
12
|
await page.getByRole('button', { name: '校验选中数据' }).click()
|
|
21
13
|
|
|
22
14
|
await expect(page.getByText('校验不通过', { exact: true })).toBeVisible()
|
|
@@ -2,20 +2,10 @@ import { test, expect } from '@playwright/test'
|
|
|
2
2
|
|
|
3
3
|
test('错误提示配置项', async ({ page }) => {
|
|
4
4
|
page.on('pageerror', (exception) => expect(exception).toBeNull())
|
|
5
|
+
const demo = page.locator('#validation-tipconfig')
|
|
5
6
|
await page.goto('grid-validation#validation-tipconfig')
|
|
6
7
|
await page.getByText('GFD 科技 YX 公司').click()
|
|
7
|
-
await
|
|
8
|
-
.getByRole('row', {
|
|
9
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
10
|
-
})
|
|
11
|
-
.getByRole('textbox')
|
|
12
|
-
.click()
|
|
13
|
-
await page
|
|
14
|
-
.getByRole('row', {
|
|
15
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
16
|
-
})
|
|
17
|
-
.getByRole('textbox')
|
|
18
|
-
.fill('')
|
|
8
|
+
await demo.locator('.tiny-grid-default-input').fill('')
|
|
19
9
|
|
|
20
10
|
await expect(page.getByRole('tooltip', { name: '名称必填' })).toBeVisible()
|
|
21
11
|
})
|
|
@@ -6,12 +6,7 @@ test('触发校验时自动定位到当前校验的单元格', async ({ page })
|
|
|
6
6
|
|
|
7
7
|
const demo = page.locator('#validation-validation-scroll-to-col')
|
|
8
8
|
await page.getByText('GFD 科技 YX 公司').first().click()
|
|
9
|
-
await
|
|
10
|
-
.getByRole('row', {
|
|
11
|
-
name: '1 华东区 福州 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
|
|
12
|
-
})
|
|
13
|
-
.getByRole('textbox')
|
|
14
|
-
.fill('')
|
|
9
|
+
await demo.locator('.tiny-input__inner').fill('')
|
|
15
10
|
await demo.getByText('名称').click()
|
|
16
11
|
const lastColumn = demo.getByText('公司简介')
|
|
17
12
|
await lastColumn.scrollIntoViewIfNeeded()
|
|
@@ -12,21 +12,21 @@ test('时间格式化', async ({ page }) => {
|
|
|
12
12
|
|
|
13
13
|
await page.getByRole('textbox', { name: '19:40:00 pm' }).click()
|
|
14
14
|
await page.waitForTimeout(100)
|
|
15
|
-
await page.
|
|
15
|
+
await page.locator('.tiny-time-panel[visible=true]').getByText('08 pm').click()
|
|
16
16
|
await page.getByRole('button', { name: '确定' }).click()
|
|
17
17
|
await page.waitForTimeout(100)
|
|
18
18
|
await expect(page.getByRole('textbox', { name: '20:40:00 pm' })).toBeVisible()
|
|
19
19
|
|
|
20
20
|
await page.getByRole('textbox', { name: '8:40:0 PM' }).click()
|
|
21
21
|
await page.waitForTimeout(100)
|
|
22
|
-
await page.
|
|
22
|
+
await page.locator('.tiny-time-panel[visible=true]').getByText('09 PM').click()
|
|
23
23
|
await page.getByRole('button', { name: '确定' }).click()
|
|
24
24
|
await page.waitForTimeout(100)
|
|
25
25
|
await expect(page.getByRole('textbox', { name: '9:40:0 PM' })).toBeVisible()
|
|
26
26
|
|
|
27
27
|
await page.getByRole('textbox', { name: '21:40:0 PM' }).click()
|
|
28
28
|
await page.waitForTimeout(100)
|
|
29
|
-
await page.
|
|
29
|
+
await page.locator('.tiny-time-panel[visible=true]').getByText('10 PM').click()
|
|
30
30
|
await page.getByRole('button', { name: '确定' }).click()
|
|
31
31
|
await page.waitForTimeout(100)
|
|
32
32
|
await expect(page.getByRole('textbox', { name: '22:40:0 PM' })).toBeVisible()
|
|
@@ -34,14 +34,14 @@ test('时间格式化', async ({ page }) => {
|
|
|
34
34
|
// value-format: 选中值的格式
|
|
35
35
|
await page.getByRole('textbox', { name: '18:30:00' }).click()
|
|
36
36
|
await page.waitForTimeout(100)
|
|
37
|
-
await page.
|
|
37
|
+
await page.locator('.tiny-time-panel[visible=true]').getByText('19').first().click()
|
|
38
38
|
await page.getByRole('button', { name: '确定' }).click()
|
|
39
39
|
await page.waitForTimeout(100)
|
|
40
40
|
await expect(page.getByRole('textbox', { name: '19:30:00' })).toBeVisible()
|
|
41
41
|
|
|
42
42
|
// picker-options.format: 下拉框中显示的格式
|
|
43
|
-
const timePickerHour = page.
|
|
44
|
-
const timePickerMinute = page.
|
|
43
|
+
const timePickerHour = page.locator('.tiny-time-panel[visible=true]').getByText('18').first()
|
|
44
|
+
const timePickerMinute = page.locator('.tiny-time-panel[visible=true]').getByText('40').first()
|
|
45
45
|
const timePickerSecond = page.locator('.of-hidden > div:nth-child(12) .tiny-scrollbar').nth(2)
|
|
46
46
|
await page.getByRole('textbox', { name: '18:40:00' }).click()
|
|
47
47
|
await page.waitForTimeout(200)
|
package/package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentiny/vue-docs",
|
|
3
|
-
"version": "3.21.
|
|
3
|
+
"version": "3.21.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"dependencies": {
|
|
6
|
+
"@docsearch/css": "^3.8.0",
|
|
7
|
+
"@docsearch/js": "^3.8.0",
|
|
8
|
+
"@docsearch/react": "npm:@docsearch/css",
|
|
6
9
|
"@opentiny/vue-repl": "^1.1.2",
|
|
7
10
|
"@unocss/reset": "0.38.2",
|
|
8
11
|
"@vue/repl": "^2.5.5",
|
|
@@ -16,27 +19,23 @@
|
|
|
16
19
|
"vue": "^3.4.31",
|
|
17
20
|
"vue-i18n": "^9.1.10",
|
|
18
21
|
"vue-router": "4.1.5",
|
|
19
|
-
"@
|
|
20
|
-
"@
|
|
21
|
-
"@docsearch/react": "npm:@docsearch/css",
|
|
22
|
+
"@opentiny/vue": "~3.21.2",
|
|
23
|
+
"@opentiny/vue-design-aurora": "~3.21.0",
|
|
22
24
|
"@opentiny/vue-common": "~3.21.0",
|
|
23
|
-
"@opentiny/vue": "~3.21.1",
|
|
24
25
|
"@opentiny/vue-design-saas": "~3.21.0",
|
|
25
|
-
"@opentiny/vue-design-aurora": "~3.21.0",
|
|
26
|
-
"@opentiny/vue-design-smb": "~3.21.0",
|
|
27
|
-
"@opentiny/vue-hooks": "~3.21.0",
|
|
28
26
|
"@opentiny/vue-directive": "~3.21.0",
|
|
29
27
|
"@opentiny/vue-icon": "~3.21.0",
|
|
28
|
+
"@opentiny/vue-design-smb": "~3.21.0",
|
|
29
|
+
"@opentiny/vue-hooks": "~3.21.0",
|
|
30
30
|
"@opentiny/vue-icon-multicolor": "~3.21.0",
|
|
31
31
|
"@opentiny/vue-theme": "~3.21.0",
|
|
32
32
|
"@opentiny/vue-icon-saas": "~3.21.0",
|
|
33
33
|
"@opentiny/vue-theme-saas": "~3.21.0",
|
|
34
|
-
"@opentiny/vue-
|
|
35
|
-
"@opentiny/vue-
|
|
34
|
+
"@opentiny/vue-vite-import": "~1.2.0",
|
|
35
|
+
"@opentiny/vue-theme-mobile": "~3.21.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@playwright/test": "~1.
|
|
39
|
-
"rollup-plugin-visualizer": "^5.12.0",
|
|
38
|
+
"@playwright/test": "~1.49.0",
|
|
40
39
|
"@types/markdown-it": "^12.2.3",
|
|
41
40
|
"@types/node": "^17.0.45",
|
|
42
41
|
"@unocss/preset-icons": "^0.38.2",
|
|
@@ -57,6 +56,7 @@
|
|
|
57
56
|
"markdown-it-table-of-contents": "^0.6.0",
|
|
58
57
|
"markdown-it-toc-done-right": "^4.2.0",
|
|
59
58
|
"prettier": "^2.7.1",
|
|
59
|
+
"rollup-plugin-visualizer": "^5.12.0",
|
|
60
60
|
"stylelint": "^14.9.1",
|
|
61
61
|
"stylelint-config-standard": "^26.0.0",
|
|
62
62
|
"typescript": "~5.3.3",
|
package/src/i18n/en.json
CHANGED
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"backTop": "Back To Top",
|
|
33
33
|
"overview": "Components Overview",
|
|
34
34
|
"overviewDesc": "TinyVue provides a wealth of basic UI components for web applications, and we will continue to explore the best UI practices for enterprise-level applications. Welcome to try TinyVue.",
|
|
35
|
+
"overviewDescPlus": "TinyVuePlus is a component library for Cloud business scenarios based on TinyVue, following the new design specifications of Cloud CloudDesign and utilizing Vite+Vue3+TypeScript technology stack.",
|
|
35
36
|
"searchComponents": "search components",
|
|
36
37
|
"apiType": "Components demos code style",
|
|
37
38
|
"apiStyleOptions": "Options",
|
|
@@ -41,4 +42,4 @@
|
|
|
41
42
|
"demoModeMultiple": "Multiple",
|
|
42
43
|
"contributor": "Contributors",
|
|
43
44
|
"noData": "No Data"
|
|
44
|
-
}
|
|
45
|
+
}
|
package/src/i18n/zh.json
CHANGED
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"backTop": "返回顶部",
|
|
33
33
|
"overview": "组件总览",
|
|
34
34
|
"overviewDesc": "TinyVue 为 Web 应用提供了丰富的基础 UI 组件,我们还将持续探索企业级应用的最佳 UI 实践,欢迎尝试使用 TinyVue。",
|
|
35
|
+
"overviewDescPlus": "TinyVuePlus 是一款基于 TinyVue 的面向云业务场景的组件库,遵循 CloudDesign 新设计规范,基于 Vite + Vue3 + TypeScript 技术栈。",
|
|
35
36
|
"searchComponents": "搜索组件",
|
|
36
37
|
"apiType": "组件示例代码风格",
|
|
37
38
|
"apiStyleOptions": "选项式",
|
|
@@ -41,4 +42,4 @@
|
|
|
41
42
|
"demoModeMultiple": "多示例",
|
|
42
43
|
"contributor": "贡献者",
|
|
43
44
|
"noData": "暂无数据"
|
|
44
|
-
}
|
|
45
|
+
}
|
package/src/main.js
CHANGED
|
@@ -41,13 +41,15 @@ hljs.registerLanguage('javascript', javascript)
|
|
|
41
41
|
hljs.registerLanguage('css', css)
|
|
42
42
|
hljs.registerLanguage('html', html)
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
if (!location.href.includes('tiny-vue-plus')) {
|
|
45
|
+
docsearch({
|
|
46
|
+
appId: 'AGPA5UXHMH',
|
|
47
|
+
apiKey: '5fa09fc20270efa61d68e2c2eb0f56df',
|
|
48
|
+
indexName: 'opentiny',
|
|
49
|
+
container: '.search-box',
|
|
50
|
+
debug: false
|
|
51
|
+
})
|
|
52
|
+
}
|
|
51
53
|
|
|
52
54
|
if (envTarget !== 'open') {
|
|
53
55
|
// 支持本地开发和内网使用全局搜索
|
|
@@ -20,7 +20,84 @@
|
|
|
20
20
|
<div class="ti-rel cmp-container">
|
|
21
21
|
<div class="flex-horizontal docs-content-main">
|
|
22
22
|
<div class="docs-tabs-wrap">
|
|
23
|
-
<
|
|
23
|
+
<div v-if="['interfaces', 'types', 'classes'].includes(cmpId)" id="TS" class="all-api-container">
|
|
24
|
+
<div class="ti-f-c ti-f-wrap api-list">
|
|
25
|
+
<div class="mt20" v-for="oneGroup in currJson.apis" :key="oneGroup.name">
|
|
26
|
+
<div class="ti-f-r ti-f-pos-start ti-fw-bold">
|
|
27
|
+
<div :id="`cmp-${oneGroup.name}`" class="ti-f18">
|
|
28
|
+
{{ oneGroup.name }}
|
|
29
|
+
</div>
|
|
30
|
+
<div class="ti-ml12 ti-b-a-primary ti-c-primary ti-px8 ti-py4">
|
|
31
|
+
{{ oneGroup.type }}
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
<div v-for="(oneApiArr, key) in oneGroup" :key="key">
|
|
35
|
+
<template v-if="key !== 'name' && key !== 'type' && oneApiArr.length > 0">
|
|
36
|
+
<div class="ti-f18 ti-py28" :id="`${oneGroup.name}--${key}`">
|
|
37
|
+
{{ key }}
|
|
38
|
+
</div>
|
|
39
|
+
<div class="api-table-box">
|
|
40
|
+
<tiny-grid class="api-table" :data="tableData[oneGroup.name][key]" :expand-config="apiExpandConf">
|
|
41
|
+
<tiny-grid-column
|
|
42
|
+
v-if="tableData[oneGroup.name][key][0]?.type"
|
|
43
|
+
class-name="api-table-expand-col"
|
|
44
|
+
type="expand"
|
|
45
|
+
width="32"
|
|
46
|
+
>
|
|
47
|
+
<template #default="{ row }">
|
|
48
|
+
<async-highlight v-if="row.code" :code="row.code.trim()" types="ts"></async-highlight>
|
|
49
|
+
</template>
|
|
50
|
+
</tiny-grid-column>
|
|
51
|
+
<tiny-grid-column field="name" :title="i18nByKey('name')" :width="columnWidth[key][0]">
|
|
52
|
+
<template #default="{ row }">
|
|
53
|
+
<span class="api-table-name">
|
|
54
|
+
<a v-if="row.demoId" @click="jumpToDemo(row.demoId)">{{ row.name }}</a>
|
|
55
|
+
<span v-else>{{ row.name }}</span>
|
|
56
|
+
</span>
|
|
57
|
+
<version-tip
|
|
58
|
+
v-if="row.meta || row.versionTipOption"
|
|
59
|
+
:meta="row.meta"
|
|
60
|
+
v-bind="row.versionTipOption"
|
|
61
|
+
render-type="tag"
|
|
62
|
+
tip-subject="api"
|
|
63
|
+
>
|
|
64
|
+
</version-tip>
|
|
65
|
+
</template>
|
|
66
|
+
</tiny-grid-column>
|
|
67
|
+
<tiny-grid-column
|
|
68
|
+
v-if="tableData[oneGroup.name][key][0]?.type"
|
|
69
|
+
field="type"
|
|
70
|
+
:title="i18nByKey('propType')"
|
|
71
|
+
:width="columnWidth[key][1]"
|
|
72
|
+
>
|
|
73
|
+
<template #default="{ row }">
|
|
74
|
+
<a
|
|
75
|
+
v-if="row.typeAnchorName"
|
|
76
|
+
:href="`${row.typeAnchorName.indexOf('#') === -1 ? '#' : ''}${row.typeAnchorName}`"
|
|
77
|
+
v-html="row.type"
|
|
78
|
+
></a>
|
|
79
|
+
<span v-else v-html="row.type"></span>
|
|
80
|
+
</template>
|
|
81
|
+
</tiny-grid-column>
|
|
82
|
+
<tiny-grid-column
|
|
83
|
+
v-if="key === 'props'"
|
|
84
|
+
field="defaultValue"
|
|
85
|
+
:title="i18nByKey('defValue')"
|
|
86
|
+
:width="columnWidth[key][2]"
|
|
87
|
+
></tiny-grid-column>
|
|
88
|
+
<tiny-grid-column field="desc" :title="i18nByKey('desc')">
|
|
89
|
+
<template #default="data">
|
|
90
|
+
<span v-html="data.row.desc"></span>
|
|
91
|
+
</template>
|
|
92
|
+
</tiny-grid-column>
|
|
93
|
+
</tiny-grid>
|
|
94
|
+
</div>
|
|
95
|
+
</template>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
<tiny-tabs v-else v-model="activeTab" ref="demoTabs" class="docs-content-tabs" @click="onTabsClick">
|
|
24
101
|
<tiny-tab-item :title="i18nByKey('demos')" name="demos">
|
|
25
102
|
<!-- demos列表 -->
|
|
26
103
|
<template v-if="currJson?.demos?.length">
|
package/src/views/overview.vue
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
</h1>
|
|
8
8
|
|
|
9
9
|
<h1 class="ti-f14 ti-my20 ti-lh21">
|
|
10
|
-
{{ i18nByKey('overviewDesc') }}
|
|
10
|
+
{{ i18nByKey(isPlus ? 'overviewDescPlus' : 'overviewDesc') }}
|
|
11
11
|
</h1>
|
|
12
12
|
<!-- 搜索 -->
|
|
13
13
|
<tiny-input
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
</template>
|
|
65
65
|
|
|
66
66
|
<script lang="js">
|
|
67
|
-
import { defineComponent, reactive, toRefs, onMounted } from 'vue'
|
|
67
|
+
import { defineComponent, reactive, toRefs, computed, onMounted } from 'vue'
|
|
68
68
|
import { useRoute } from 'vue-router'
|
|
69
69
|
import { cmpMenus } from '@menu/menus.js'
|
|
70
70
|
import TinyInput from '@opentiny/vue-input'
|
|
@@ -85,6 +85,7 @@ export default defineComponent({
|
|
|
85
85
|
value: '',
|
|
86
86
|
palceMenus: new Array(14)
|
|
87
87
|
})
|
|
88
|
+
const isPlus = computed(() => location.href.includes('tiny-vue-plus'))
|
|
88
89
|
function debounce(fn, delay) {
|
|
89
90
|
let timeout = 0
|
|
90
91
|
return (value) => {
|
|
@@ -162,7 +163,7 @@ export default defineComponent({
|
|
|
162
163
|
const common = new window.TDCommon(['#footer'], {})
|
|
163
164
|
common.renderFooter()
|
|
164
165
|
})
|
|
165
|
-
return { ...toRefs(state), ...fn, TinyInput, noDataSvg, searchSvg, isZhCn, getWord, i18nByKey, pubUrl }
|
|
166
|
+
return { ...toRefs(state), ...fn, TinyInput, noDataSvg, searchSvg, isZhCn, getWord, i18nByKey, isPlus, pubUrl }
|
|
166
167
|
}
|
|
167
168
|
})
|
|
168
169
|
</script>
|
|
@@ -198,6 +199,7 @@ export default defineComponent({
|
|
|
198
199
|
font-size: 14px;
|
|
199
200
|
color: rgb(51, 54, 57);
|
|
200
201
|
line-height: 1.6;
|
|
202
|
+
|
|
201
203
|
&:hover {
|
|
202
204
|
box-shadow: 1px 1px 6px 6px rgba(31, 52, 121, 0.08);
|
|
203
205
|
}
|
|
@@ -227,6 +229,7 @@ export default defineComponent({
|
|
|
227
229
|
.overview-card {
|
|
228
230
|
gap: 2%;
|
|
229
231
|
}
|
|
232
|
+
|
|
230
233
|
.overview-card-container {
|
|
231
234
|
width: 49%;
|
|
232
235
|
}
|