vxe-table表格自定義拖拽,列寬,行編輯,行/列顏色設定。
阿新 • • 發佈:2022-05-11
1. 父元件
<el-main v-loading="loading"> <my-table :data="tyData" //表格資料 @selectionchange="selectionchange" //複選框多選 @getTableData="getdata" //獲取列表資料 @showdialog="showdialog" //開啟彈框 @editpro="editpro" //啟動編輯 @selectAll="selectionAll" //全選 @handleRowClick="handleRowClick" //無複選框時單選 ref="districtTable" > //插槽 <template slot="operation" slot-scope="{row, $index}"> <p>編輯</p> </template> </my-table> </el-main>
2. 子元件
<vxe-table border resizable show-overflow keep-source ref="table_tree" show-header-overflow :max-height="tableMaxHeight" :data="data.tableData" :edit-config="data.isedit ? {trigger: 'click', mode: 'cell', showIcon: false} : {showIcon: false}" :checkbox-config="{checkStrictly: checkStrictly, showHeader: true}" @edit-actived="editDisabledEvent" @checkbox-all="checkboxAll" @checkbox-change="handleSelectionChange" @radio-change="handleRowClick" :tree-config="data.isTree ? {transform: true, rowField: 'Keyoid', parentField: 'parentId', expandAll: true} : {}" @toggle-tree-expand="toggleExpandChangeEvent" :custom-config="{storage: true}" :column-config="{isCurrent: true, isHover: true, resizable: true}" :row-config="{isCurrent: true, isHover: true}" :column-key="true" id="fk_table" @resizable-change="resizableChange" class="mytable-scrollbar" @custom="toolbarCustomEvent" :scroll-y="{mode: 'wheel'}" :scroll-x="{gt: 10}" @current-change="handleRowClick" :header-cell-style="headerCellStyle" :cell-style="cellStyle" :row-style="rowStyle"> <vxe-column type="checkbox" width="60" v-if="data.selection" fixed="left"></vxe-column> <vxe-column v-for="(col, index) in data.column" :key="index" :field="col.prop" :title="col.label" :align="col.align || 'center'" :width="col.width" :fixed="col.fixed ? 'left' : ''" :min-width="col.minWidth" :edit-render="{}" :show-header-overflow="col.showOverflowTooltip" :sortable="col.sortable ? col.sortable : false" :resizable="true" v-if="col.isShow" :tree-node="index === 0" > <template #default="{ row }"> <p class="p_word" v-html="showData(col.prop, row[col.prop], row)" @click="showdialog(row, col)" :class="{blue: col.type == 'dialog'}" ></p> </template> <template #edit="{ row }"> <slot v-if="col.slot" :name="col.prop" :row="row"></slot> <div v-else> <el-input v-if="col.type == 'input'" v-model="row[col.prop]" @input=" val => { integerValue(row, col.prop, val); } " type="text" :disabled="col.disabled" style="width:100%;padding:2px" ></el-input> </div> </template> </vxe-column> <vxe-column title="操作" min-width="100" v-if="data.operation" fixed="right"> <template #default="{ row }"> <slot name="operation" :row="row"></slot> </template> </vxe-column> </vxe-table>
子元件方法詳解
vxe-table文件 : https://xuliangzhan_admin.gitee.io/vxe-table/#/table/api1.列拖動
安裝sortablejs,並在子元件引入
import Sortable from 'sortablejs'
實現
mounted() { this.columnDrop1(); },
//列拖動 columnDrop1() { this.$nextTick(() => { let xTable = this.$refs.table_tree; this.sortable = Sortable.create( xTable.$el.querySelector('.body--wrapper>.vxe-table--header .vxe-header--row'), { handle: '.vxe-header--column', onEnd: ({newIndex, oldIndex}) => { console.log(newIndex, oldIndex); let tableColumn = xTable.getColumns(); let currRow = tableColumn.splice(oldIndex, 1)[0]; tableColumn.splice(newIndex, 0, currRow); xTable.loadColumn(tableColumn); //此處可根據實際需求寫 } } ); }); },
2.列寬改變
在vxe-table標籤設定
:custom-config="{storage: true}" :column-config="{isCurrent: true, isHover: true, resizable: true}" @resizable-change="resizableChange"
方法呼叫
//列寬改變 resizableChange({$rowIndex, column, columnIndex, $columnIndex, $event}) { console.log($rowIndex, column, columnIndex, $columnIndex, $event); },
3.樣式設定.
https://xuliangzhan_admin.gitee.io/vxe-table/#/table/base/style 文件詳細描述