opentiny / tiny-vue

TinyVue is an enterprise-class UI component library of OpenTiny community, support both Vue.js 2 and Vue.js 3, as well as PC and mobile.
https://opentiny.design/tiny-vue
MIT License
1.44k stars 238 forks source link

✨ [Feature]: [Grid] Can you tell me how to write this attribute? #189

Closed sugers closed 1 year ago

sugers commented 1 year ago

What problem does this feature

可以告诉我下应该怎么写这个属性

What does the proposed API look like

<tiny-grid-column field="boole" title="Vue 渲染器" align="center" :renderer="{ component: Switch ,attrs:{show-text:true}}"></tiny-grid-column> 上面是官网的例子,表格组件里面的vue渲染器,我想给switch组件修改显示内容里面的文字,应该怎样加?目前只能添加attrs字段把内容显示出来,但无法修改,比如我想把 ONOFF 换成 开启关闭,应该怎么加呢

sugers commented 1 year ago

@kagol

kagol commented 1 year ago

@sugers 你可以通过 GridColumn 的默认插槽来实现,核心代码如下:

    <tiny-grid-column field="switch" title="开关">
      <template #default="rowData">
        <tiny-switch v-model="rowData.row.switch"></tiny-switch>
      </template>
    </tiny-grid-column>

完整的示例代码如下:

<template>
  <tiny-grid :data="tableData" border :edit-config="{ trigger: 'click', mode: 'cell', showStatus: true }">
    <tiny-grid-column type="index" width="60"></tiny-grid-column>
    <tiny-grid-column type="selection" width="60"></tiny-grid-column>
    <tiny-grid-column field="employees" title="员工数"></tiny-grid-column>
    <tiny-grid-column field="createdDate" title="创建日期"></tiny-grid-column>
    <tiny-grid-column field="city" title="城市"></tiny-grid-column>
    <tiny-grid-column field="boole" title="布尔值" align="center" format-text="boole" :editor="checkboxEdit"></tiny-grid-column>
    <tiny-grid-column field="switch" title="开关">
      <template #default="rowData">
        <tiny-switch v-model="rowData.row.switch"></tiny-switch>
      </template>
    </tiny-grid-column>
  </tiny-grid>
</template>

<script lang="jsx">
import { Grid, GridColumn,Switch } from '@opentiny/vue'

export default {
  components: {
    TinyGrid: Grid,
    TinyGridColumn: GridColumn,
    TinySwitch: Switch
  },
  data() {
    const tableData = [
      {
        id: '1',
        name: 'GFD科技YX公司',
        city: '福州',
        employees: 800,
        createdDate: '2014-04-30 00:56:00',
        boole: false,
        switch: true,
      },
      {
        id: '2',
        name: 'WWW科技YX公司',
        city: '深圳',
        employees: 300,
        createdDate: '2016-07-08 12:36:22',
        boole: true
      },
      {
        id: '3',
        name: 'RFV有限责任公司',
        city: '中山',
        employees: 1300,
        createdDate: '2014-02-14 14:14:14',
        boole: false
      },
      {
        id: '4',
        name: 'TGB科技YX公司',
        city: '龙岩',
        employees: 360,
        createdDate: '2013-01-13 13:13:13',
        boole: true
      },
      {
        id: '5',
        name: 'YHN科技YX公司',
        city: '韶关',
        employees: 810,
        createdDate: '2012-12-12 12:12:12',
        boole: true
      },
      {
        id: '6',
        name: 'WSX科技YX公司',
        city: '黄冈',
        employees: 800,
        createdDate: '2011-11-11 11:11:11',
        boole: true
      },
      {
        id: '7',
        name: 'KBG物业YX公司',
        city: '赤壁',
        employees: 400,
        createdDate: '2016-04-30 23:56:00',
        boole: false
      },
      {
        id: '8',
        name: '深圳市福德宝网络技术YX公司',
        boole: true,
        city: '厦门',
        createdDate: '2016-06-03 13:53:25',
        employees: 540
      }
    ]
    return {
      op: {
        editConfig: {
          trigger: 'click',
          mode: 'cell',
          showStatus: true
        },
        columns: [
          {
            type: 'index',
            width: 60
          },
          {
            type: 'selection',
            width: 60
          },
          {
            field: 'employees',
            title: '员工数'
          },
          {
            field: 'createdDate',
            title: '创建日期'
          },
          {
            field: 'city',
            title: '城市'
          },
          {
            field: 'boole',
            title: '布尔值',
            align: 'center',
            formatText: 'boole',
            editor: this.checkboxEdit
          }
        ],
        data: tableData
      },
      tableData
    }
  },
  methods: {
    checkboxEdit(h, { row }) {
      return (
        <input
          type="checkbox"
          checked={row.boole}
          onChange={(event) => {
            row.boole = event.target.checked
          }}
        />
      )
    }
  }
}
</script>