Skip to content

Commit 45992b5

Browse files
committed
feat: 表格的renderer配置支持events事件集合
1 parent edaf337 commit 45992b5

File tree

5 files changed

+18
-15
lines changed

5 files changed

+18
-15
lines changed

examples/sites/demos/apis/grid.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -4096,8 +4096,9 @@ interface IExportCsvOptions {
40964096
interface IEditorConfig {
40974097
// 内置组件名称或者自定义组件实例
40984098
component: 'input' | 'select' | Component
4099-
// 传递给组件的事件集合
4099+
// 传递给组件的事件集合(v3.23.0开始支持)
41004100
events?: {
4101+
// change、click等
41014102
[event]: () => void
41024103
}
41034104
// 传递给编辑器组件的属性集合

examples/sites/demos/pc/app/grid/renderer/custom-renderer-composition-api.vue

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
field="boole"
88
title="Vue 渲染器"
99
align="center"
10-
:renderer="{ component: TinySwitch }"
10+
:renderer="{ component: TinySwitch, events: { change } }"
1111
></tiny-grid-column>
1212
<tiny-grid-column field="area" title="区域"></tiny-grid-column>
1313
<tiny-grid-column field="createdDate" title="创建时间"></tiny-grid-column>
@@ -19,7 +19,7 @@
1919

2020
<script setup lang="jsx">
2121
import { ref } from 'vue'
22-
import { TinySwitch, TinyGrid, TinyGridColumn } from '@opentiny/vue'
22+
import { TinySwitch, TinyGrid, TinyGridColumn, TinyModal } from '@opentiny/vue'
2323
2424
const tableData = ref([
2525
{
@@ -117,4 +117,7 @@ const tableData = ref([
117117
function renderName(h, { row }) {
118118
return <span style="color:goldenrod">{row.name}</span>
119119
}
120+
const change = () => {
121+
TinyModal.message('触发了change事件')
122+
}
120123
</script>

examples/sites/demos/pc/app/grid/renderer/custom-renderer.spec.js

+4-9
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,8 @@ import { test, expect } from '@playwright/test'
33
test('自定义渲染器', async ({ page }) => {
44
page.on('pageerror', (exception) => expect(exception).toBeNull())
55
await page.goto('grid-renderer#renderer-custom-renderer')
6-
await expect(page.getByText('GFD 科技 YX 公司').first()).toHaveCSS('color', 'rgb(218, 165, 32)')
7-
await expect(
8-
page
9-
.getByRole('row', {
10-
name: '2 WWW 科技 YX 公司 华南区 2016-07-08 12:36:22 300 公司技术和研发实力雄厚,是国家 863 项目的参与者,并被政府认定为“高新技术企业”。'
11-
})
12-
.locator('span')
13-
.nth(1)
14-
).toBeVisible()
6+
const demo = page.locator('#renderer-custom-renderer')
7+
await expect(demo.getByText('GFD 科技 YX 公司').first()).toHaveCSS('color', 'rgb(218, 165, 32)')
8+
await demo.locator('.tiny-switch').first().click()
9+
await expect(page.getByText('触发了change事件')).toBeVisible()
1510
})

examples/sites/demos/pc/app/grid/renderer/custom-renderer.vue

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
field="boole"
88
title="Vue 渲染器"
99
align="center"
10-
:renderer="{ component: TinySwitch }"
10+
:renderer="{ component: TinySwitch, events: { change } }"
1111
></tiny-grid-column>
1212
<tiny-grid-column field="area" title="区域"></tiny-grid-column>
1313
<tiny-grid-column field="createdDate" title="创建时间"></tiny-grid-column>
@@ -18,7 +18,7 @@
1818
</template>
1919

2020
<script lang="jsx">
21-
import { TinySwitch, TinyGrid, TinyGridColumn } from '@opentiny/vue'
21+
import { TinySwitch, TinyGrid, TinyGridColumn, TinyModal } from '@opentiny/vue'
2222
2323
export default {
2424
components: {
@@ -125,6 +125,9 @@ export default {
125125
methods: {
126126
renderName(h, { row }) {
127127
return <span style="color:goldenrod">{row.name}</span>
128+
},
129+
change() {
130+
TinyModal.message('触发了change事件')
128131
}
129132
}
130133
}

packages/vue/src/grid/src/cell/src/cell.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,13 @@ function processRenderer({ h, params, renderer, value }) {
6060
}
6161

6262
if (renderer.component) {
63-
const { component, attrs } = renderer
63+
const { component, attrs, events } = renderer
6464

6565
result.flag = true
6666
result.vnodes = [
6767
h(hooks.toRaw(component), {
6868
class: 'grid-cell',
69+
on: events,
6970
attrs: {
7071
value,
7172
modelValue: value,

0 commit comments

Comments
 (0)