@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.
Files changed (40) hide show
  1. package/demos/apis/dropdown.js +14 -0
  2. package/demos/pc/app/dropdown/visible-composition-api.vue +48 -0
  3. package/demos/pc/app/dropdown/visible.spec.ts +27 -0
  4. package/demos/pc/app/dropdown/visible.vue +61 -0
  5. package/demos/pc/app/dropdown/webdoc/dropdown.js +13 -0
  6. package/demos/pc/app/grid/custom/column-fixed.spec.js +3 -2
  7. package/demos/pc/app/grid/custom/column-sort.spec.js +2 -1
  8. package/demos/pc/app/grid/custom/column-visible-hidden.spec.js +3 -2
  9. package/demos/pc/app/grid/custom/multiple-column-sort.spec.js +7 -6
  10. package/demos/pc/app/grid/custom/ordercolumn-local.spec.js +5 -4
  11. package/demos/pc/app/grid/custom/reset-resizable.spec.js +4 -2
  12. package/demos/pc/app/grid/edit/custom-editing.spec.js +1 -7
  13. package/demos/pc/app/grid/edit/editing.spec.js +1 -12
  14. package/demos/pc/app/grid/edit/has-row-change.spec.js +5 -9
  15. package/demos/pc/app/grid/edit/revert-data.spec.js +2 -12
  16. package/demos/pc/app/grid/edit/status-of-editing.spec.js +1 -6
  17. package/demos/pc/app/grid/edit/trigger-mode-for-editing.spec.js +2 -14
  18. package/demos/pc/app/grid/edit/trigger-mode-hm-editing.spec.js +3 -9
  19. package/demos/pc/app/grid/editor/custom-edit.spec.js +2 -2
  20. package/demos/pc/app/grid/editor/inner-editor.spec.js +2 -5
  21. package/demos/pc/app/grid/event/valid-error-event.spec.js +1 -6
  22. package/demos/pc/app/grid/faq/grid-in-dialog-box.spec.js +1 -6
  23. package/demos/pc/app/grid/pager/show-save-msg.spec.js +1 -6
  24. package/demos/pc/app/grid/toolbar/save-data.spec.js +1 -6
  25. package/demos/pc/app/grid/tree-table/tree-grid-insert-delete-update.spec.js +1 -2
  26. package/demos/pc/app/grid/validation/before-submit-validation.spec.js +4 -7
  27. package/demos/pc/app/grid/validation/custcomp.spec.js +2 -6
  28. package/demos/pc/app/grid/validation/editing-isvalidalways-validation.spec.js +3 -12
  29. package/demos/pc/app/grid/validation/editing-validation.spec.js +2 -6
  30. package/demos/pc/app/grid/validation/row-data-valid.spec.js +2 -1
  31. package/demos/pc/app/grid/validation/select-validation.spec.js +4 -12
  32. package/demos/pc/app/grid/validation/tipconfig.spec.js +2 -12
  33. package/demos/pc/app/grid/validation/validation-scroll-to-col.spec.js +1 -6
  34. package/demos/pc/app/time-picker/format.spec.ts +6 -6
  35. package/package.json +12 -12
  36. package/src/i18n/en.json +2 -1
  37. package/src/i18n/zh.json +2 -1
  38. package/src/main.js +9 -7
  39. package/src/views/components/components.vue +78 -1
  40. package/src/views/overview.vue +6 -3
@@ -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 page.getByRole('row', { name: '员工数 显示 未冻结' }).getByTitle('未冻结').getByRole('img').click()
8
- await page.getByRole('row', { name: '员工数 显示 左冻结' }).getByTitle('左冻结').getByRole('img').click()
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 page.getByRole('row', { name: '员工数 显示 未排序 未冻结' }).getByTitle('未排序').getByRole('img').click()
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 page.getByRole('row', { name: '员工数 显示 未冻结' }).getByTitle('显示').getByRole('img').click()
8
- await page.getByRole('button', { name: '确定' }).click()
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 page.getByRole('row', { name: '员工数 显示 未排序 未冻结' }).getByTitle('未排序').locator('path').click()
8
- await page.getByTitle('未排序').locator('path').click()
9
- await page.getByRole('button', { name: '确定' }).click()
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 page.getByRole('row', { name: '员工数 显示 未排序 未冻结' }).getByTitle('未排序').getByRole('img').click()
14
- await page.getByTitle('未排序').getByRole('img').click()
15
- await page.getByRole('button', { name: '确定' }).click()
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 page.getByRole('cell', { name: '显示 未冻结' }).getByTitle('显示').getByRole('img').click()
8
- await page.getByRole('button', { name: '确定' }).click()
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 page.getByRole('button', { name: '重置' }).click()
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 page.getByRole('button', { name: '取消' }).click()
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 page.getByRole('row', { name: '员工数 显示 未冻结' }).getByTitle('显示').getByRole('img').click()
36
- await page.getByRole('button', { name: '确定' }).click()
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 page.getByText('GFD 科技 YX 公司').first().click()
7
- await page.getByRole('row', { name: '1 保存' }).locator('input[type="text"]').fill('sdf')
8
- await page.getByRole('row', { name: '1 保存' }).getByRole('button', { name: '保存' }).click()
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 page
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 page
9
- .getByRole('row', {
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('row', { name: '1 请选择 保存 取消' }).getByRole('textbox').first()).toBeVisible()
7
- await expect(page.getByRole('row', { name: '2 请选择 保存 取消' }).getByRole('textbox').first()).toBeVisible()
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 = page
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.getByRole('row', { name: '3 WWWW 科技股份有限子公司 720' }).getByRole('textbox').first().click()
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 page.getByText('GFD 科技 YX 公司').first().click()
7
- await page
8
- .getByRole('row', {
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 page
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 page
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 page
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 page.getByRole('row', { name: '1 100 0' }).getByRole('textbox').fill('700')
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 page
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 page
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 page
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 page
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.getByRole('listitem').filter({ hasText: '08 pm' }).first().locator('span').click()
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.getByRole('listitem').filter({ hasText: '09 PM' }).locator('span').click()
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.getByRole('listitem').filter({ hasText: '10 PM' }).locator('span').click()
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.getByRole('listitem').filter({ hasText: '19' }).first().click()
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.getByRole('listitem').filter({ hasText: '18' }).first()
44
- const timePickerMinute = page.getByRole('listitem').filter({ hasText: '40' }).first()
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.0",
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
- "@docsearch/js": "^3.8.0",
20
- "@docsearch/css": "^3.8.0",
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-theme-mobile": "~3.21.0",
35
- "@opentiny/vue-vite-import": "~1.2.0"
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.42.0",
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
- docsearch({
45
- appId: 'AGPA5UXHMH',
46
- apiKey: '5fa09fc20270efa61d68e2c2eb0f56df',
47
- indexName: 'opentiny',
48
- container: '.search-box',
49
- debug: false
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
- <tiny-tabs v-model="activeTab" ref="demoTabs" class="docs-content-tabs" @click="onTabsClick">
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">
@@ -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
  }