├── .browserslistrc ├── .eslintignore ├── .eslintrc.js ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE.md ├── ISSUE_TEMPLATE │ └── config.yml └── workflows │ ├── deploy-docs.yml │ ├── sync-gitee.yml │ ├── test-coverage-upload.yml │ └── verify-files-modify.yml ├── .gitignore ├── .prettierignore ├── .prettierrc.js ├── CHANGE-LOG.md ├── LICENSE ├── README-CN.md ├── README.md ├── babel.config.js ├── build ├── build-entry.js ├── build-js.js ├── build-locale.js ├── build-style.js ├── build-versions.js ├── common │ ├── get-components.js │ ├── index.js │ └── themes-name.js ├── config.js ├── webpack.comps.config.js ├── webpack.main.config.js └── webpack.umd.config.js ├── components.json ├── examples ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── babel.config.js ├── build │ └── md-loader │ │ ├── config.js │ │ ├── containers.js │ │ ├── fence.js │ │ ├── index.js │ │ └── util.js ├── package.json ├── public │ ├── app.html │ ├── favicon.ico │ ├── index.html │ └── versions.json ├── src │ ├── comp │ │ ├── anchor.vue │ │ ├── api-tpl.vue │ │ ├── app.less │ │ ├── app.vue │ │ ├── catalog.vue │ │ ├── demo-block.vue │ │ ├── directives │ │ │ └── clickoutside.js │ │ ├── layout │ │ │ ├── doc-layout.vue │ │ │ ├── empty-layout.vue │ │ │ └── footer.vue │ │ ├── locale │ │ │ └── index.js │ │ ├── mixins │ │ │ ├── i18n-mixins.js │ │ │ └── theme-switch-mixins.js │ │ └── online-edit │ │ │ ├── code-pen │ │ │ └── index.jsx │ │ │ └── code-sand-box │ │ │ └── index.jsx │ ├── css │ │ ├── custom.less │ │ ├── index.less │ │ └── reset.less │ ├── demo │ │ ├── index.vue │ │ ├── normal-data-grid.vue │ │ └── spreadsheet.vue │ ├── docs │ │ ├── en │ │ │ ├── QA.md │ │ │ ├── intro.md │ │ │ ├── locale.md │ │ │ ├── start.md │ │ │ ├── theme.md │ │ │ ├── update-log.md │ │ │ ├── ve-checkbox │ │ │ │ ├── api.md │ │ │ │ ├── checkbox-multiple-advanced.md │ │ │ │ ├── checkbox-multiple-simple.md │ │ │ │ ├── checkbox-single.md │ │ │ │ └── main.vue │ │ │ ├── ve-contextmenu │ │ │ │ ├── api.md │ │ │ │ ├── base.md │ │ │ │ ├── main.vue │ │ │ │ └── usage.md │ │ │ ├── ve-dropdown │ │ │ │ ├── api.md │ │ │ │ ├── callback-methods.md │ │ │ │ ├── custom-content.md │ │ │ │ ├── main.vue │ │ │ │ ├── multiple-select.md │ │ │ │ ├── operation.md │ │ │ │ └── single-select.md │ │ │ ├── ve-icon │ │ │ │ ├── api.md │ │ │ │ ├── base.md │ │ │ │ ├── collection.vue │ │ │ │ ├── explain.md │ │ │ │ ├── main.vue │ │ │ │ └── usage.md │ │ │ ├── ve-loading │ │ │ │ ├── api.md │ │ │ │ ├── collection.vue │ │ │ │ ├── container.md │ │ │ │ ├── custom.md │ │ │ │ ├── fullscreen.md │ │ │ │ ├── main.vue │ │ │ │ └── usage.md │ │ │ ├── ve-locale │ │ │ │ ├── api.md │ │ │ │ ├── cover-lang.md │ │ │ │ ├── main.vue │ │ │ │ ├── switch-lang.md │ │ │ │ └── usage.md │ │ │ ├── ve-pagination │ │ │ │ ├── api.md │ │ │ │ ├── base-usage.md │ │ │ │ ├── callback-events.md │ │ │ │ ├── layout-settings.md │ │ │ │ ├── main.vue │ │ │ │ ├── page-index.md │ │ │ │ ├── page-size.md │ │ │ │ ├── paging-buttons.md │ │ │ │ ├── paging-configuration.md │ │ │ │ └── usage.md │ │ │ ├── ve-radio │ │ │ │ ├── api.md │ │ │ │ ├── base.md │ │ │ │ ├── controlled.md │ │ │ │ └── main.vue │ │ │ ├── ve-select │ │ │ │ ├── api.md │ │ │ │ ├── base.md │ │ │ │ └── main.vue │ │ │ └── ve-table │ │ │ │ ├── api │ │ │ │ ├── cell-autofill-option-props.vue │ │ │ │ ├── cell-selection-option-props.vue │ │ │ │ ├── cell-span-option-props.vue │ │ │ │ ├── cell-style-option-props.vue │ │ │ │ ├── checkbox-option-props.vue │ │ │ │ ├── clipboard-option-props.vue │ │ │ │ ├── column-hidden-option-props.vue │ │ │ │ ├── column-props │ │ │ │ │ ├── ellipsis-props.vue │ │ │ │ │ ├── filter-custom-props.vue │ │ │ │ │ ├── filter-props.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── column-width-resize-option-props.vue │ │ │ │ ├── contextmenu-body-option-props.vue │ │ │ │ ├── contextmenu-header-option-props.vue │ │ │ │ ├── db.js │ │ │ │ ├── edit-option-props.vue │ │ │ │ ├── event-custom-option-props.vue │ │ │ │ ├── expand-option-props.vue │ │ │ │ ├── instance-methods.vue │ │ │ │ ├── main.vue │ │ │ │ ├── radio-option-props.vue │ │ │ │ ├── row-style-option-props.vue │ │ │ │ ├── sort-option-props.vue │ │ │ │ ├── table-props.vue │ │ │ │ └── virtual-scroll-option-props.vue │ │ │ │ ├── cell-align │ │ │ │ ├── basic-align.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── cell-autofill │ │ │ │ ├── autofill-direction.md │ │ │ │ ├── base.md │ │ │ │ ├── explain.md │ │ │ │ ├── features.md │ │ │ │ ├── main.vue │ │ │ │ └── shortcuts.md │ │ │ │ ├── cell-custom │ │ │ │ ├── body-cell.md │ │ │ │ ├── header-cell.md │ │ │ │ ├── main.vue │ │ │ │ └── more.md │ │ │ │ ├── cell-edit │ │ │ │ ├── base.md │ │ │ │ ├── combine-column-fixed.md │ │ │ │ ├── combine-element-ui.md │ │ │ │ ├── explain.md │ │ │ │ ├── instance-method.md │ │ │ │ ├── main.vue │ │ │ │ └── shortcuts.md │ │ │ │ ├── cell-ellipsis │ │ │ │ ├── base.md │ │ │ │ ├── ellipsis-line.md │ │ │ │ ├── ellipsis.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── cell-selection │ │ │ │ ├── base.md │ │ │ │ ├── disable-selection.md │ │ │ │ ├── explain.md │ │ │ │ ├── main.vue │ │ │ │ ├── range-selection-instance-methods.md │ │ │ │ ├── shortcuts.md │ │ │ │ └── single-selection-instance-methods.md │ │ │ │ ├── cell-span │ │ │ │ ├── body-colspan.md │ │ │ │ ├── body-rowspan.md │ │ │ │ ├── custom-content.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── cell-style │ │ │ │ ├── body-cell-style.md │ │ │ │ ├── body-row-style.md │ │ │ │ ├── explain.md │ │ │ │ ├── header-cell-style.md │ │ │ │ ├── header-row-style.md │ │ │ │ └── main.vue │ │ │ │ ├── clipboard │ │ │ │ ├── base.md │ │ │ │ ├── explain.md │ │ │ │ ├── features-bak.md │ │ │ │ ├── main.vue │ │ │ │ └── shortcuts.md │ │ │ │ ├── column-fixed │ │ │ │ ├── column-fixed-auto-width.md │ │ │ │ ├── column-fixed-left-right.md │ │ │ │ ├── column-fixed-left.md │ │ │ │ ├── column-fixed-right.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── column-hidden │ │ │ │ ├── default-hidden-column.md │ │ │ │ ├── explain.md │ │ │ │ ├── instance-methods.md │ │ │ │ └── main.vue │ │ │ │ ├── column-resize │ │ │ │ ├── basic.md │ │ │ │ ├── disable-resizing.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── column-width │ │ │ │ ├── explain.md │ │ │ │ ├── long-word.md │ │ │ │ ├── main.vue │ │ │ │ ├── no-width.md │ │ │ │ ├── percent-width.md │ │ │ │ └── px-width.md │ │ │ │ ├── contextmenu │ │ │ │ ├── base.md │ │ │ │ ├── contextmenu-types.md │ │ │ │ ├── custom.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── data-empty │ │ │ │ ├── basic.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── event-custom │ │ │ │ ├── explain.md │ │ │ │ ├── main.vue │ │ │ │ ├── on-body-cell.md │ │ │ │ ├── on-body-row.md │ │ │ │ ├── on-header-cell.md │ │ │ │ └── on-header-row.md │ │ │ │ ├── footer-summary │ │ │ │ ├── base.md │ │ │ │ ├── cell-span.md │ │ │ │ ├── cell-style.md │ │ │ │ ├── custom-cell.md │ │ │ │ ├── explain.md │ │ │ │ ├── footer-column-fixed.md │ │ │ │ ├── footer-fixed.md │ │ │ │ ├── main.vue │ │ │ │ ├── on-footer-cell.md │ │ │ │ ├── on-footer-row.md │ │ │ │ └── virtual-scroll.md │ │ │ │ ├── header-filter-custom │ │ │ │ ├── custom-icon.md │ │ │ │ ├── explain.md │ │ │ │ ├── main.vue │ │ │ │ └── single-filter.md │ │ │ │ ├── header-filter │ │ │ │ ├── custom-icon.md │ │ │ │ ├── explain.md │ │ │ │ ├── main.vue │ │ │ │ ├── mixture-filter.md │ │ │ │ ├── mutil-filter.md │ │ │ │ └── single-filter.md │ │ │ │ ├── header-fixed │ │ │ │ ├── base.md │ │ │ │ ├── explain.md │ │ │ │ ├── header-fixed-disabled.md │ │ │ │ ├── header-fixed-mutil.md │ │ │ │ └── main.vue │ │ │ │ ├── header-grouping │ │ │ │ ├── explain.md │ │ │ │ ├── grouping-header-fixed-column.md │ │ │ │ ├── grouping-header.md │ │ │ │ └── main.vue │ │ │ │ ├── header-hidden │ │ │ │ ├── base.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── header-sort │ │ │ │ ├── explain.md │ │ │ │ ├── main.vue │ │ │ │ ├── multi-sort.md │ │ │ │ ├── single-sort.md │ │ │ │ └── sort-always.md │ │ │ │ ├── instance-methods │ │ │ │ ├── explain.md │ │ │ │ ├── main.vue │ │ │ │ ├── scroll-to-col-key.md │ │ │ │ ├── scroll-to-row-key.md │ │ │ │ └── scroll-to.md │ │ │ │ ├── loading │ │ │ │ ├── basic.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── operation-column │ │ │ │ ├── base.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── pagination │ │ │ │ ├── basic.md │ │ │ │ ├── checkbox.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── row-checkbox │ │ │ │ ├── base.md │ │ │ │ ├── explain.md │ │ │ │ ├── main.vue │ │ │ │ ├── selected-all-hide.md │ │ │ │ ├── selected-column.md │ │ │ │ ├── selected-control.md │ │ │ │ ├── selected-default.md │ │ │ │ ├── selected-disable.md │ │ │ │ └── selected-row-click.md │ │ │ │ ├── row-expand │ │ │ │ ├── base.md │ │ │ │ ├── default-expand.md │ │ │ │ ├── expand-chart.md │ │ │ │ ├── expand-column.md │ │ │ │ ├── expand-control.md │ │ │ │ ├── expand-event.md │ │ │ │ ├── expand-table.md │ │ │ │ ├── expand-trigger.md │ │ │ │ ├── expandable.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── row-index │ │ │ │ ├── base.md │ │ │ │ ├── explain.md │ │ │ │ ├── main.vue │ │ │ │ └── ranking.md │ │ │ │ ├── row-radio │ │ │ │ ├── base.md │ │ │ │ ├── explain.md │ │ │ │ ├── main.vue │ │ │ │ ├── radio-column.md │ │ │ │ ├── selected-control.md │ │ │ │ ├── selected-default.md │ │ │ │ ├── selected-disable.md │ │ │ │ └── selected-row-click.md │ │ │ │ ├── row-style │ │ │ │ ├── click-highlight.md │ │ │ │ ├── explain.md │ │ │ │ ├── hover-highlight.md │ │ │ │ ├── main.vue │ │ │ │ └── row-stripe.md │ │ │ │ ├── table-border │ │ │ │ ├── around-x.md │ │ │ │ ├── around-y.md │ │ │ │ ├── border-all.md │ │ │ │ ├── border-around.md │ │ │ │ ├── border-radius.md │ │ │ │ ├── border-x.md │ │ │ │ ├── border-y.md │ │ │ │ ├── default.md │ │ │ │ ├── explain.md │ │ │ │ └── main.vue │ │ │ │ ├── table-height │ │ │ │ ├── auto-height.md │ │ │ │ ├── calc-height.md │ │ │ │ ├── explain.md │ │ │ │ ├── fixed-height.md │ │ │ │ └── main.vue │ │ │ │ ├── table-width │ │ │ │ ├── auto-width.md │ │ │ │ ├── calc-width.md │ │ │ │ ├── explain.md │ │ │ │ ├── fixed-width.md │ │ │ │ ├── main.vue │ │ │ │ └── percent-width.md │ │ │ │ ├── test │ │ │ │ ├── main.vue │ │ │ │ └── performance.md │ │ │ │ ├── usage │ │ │ │ └── main.md │ │ │ │ └── virtual-scroll │ │ │ │ ├── auto-height.md │ │ │ │ ├── base.md │ │ │ │ ├── column-fixed.md │ │ │ │ ├── combine-lazy-load.md │ │ │ │ ├── dynamic-enable.md │ │ │ │ ├── explain.md │ │ │ │ ├── main.vue │ │ │ │ ├── row-checkbox.md │ │ │ │ ├── row-expand-table.md │ │ │ │ ├── row-expand.md │ │ │ │ ├── row-index.md │ │ │ │ └── row-radio.md │ │ └── zh │ │ │ ├── QA.md │ │ │ ├── intro.md │ │ │ ├── locale.md │ │ │ ├── start.md │ │ │ ├── theme.md │ │ │ ├── update-log.md │ │ │ ├── ve-checkbox │ │ │ ├── api.md │ │ │ ├── checkbox-multiple-advanced.md │ │ │ ├── checkbox-multiple-simple.md │ │ │ ├── checkbox-single.md │ │ │ └── main.vue │ │ │ ├── ve-contextmenu │ │ │ ├── api.md │ │ │ ├── base.md │ │ │ ├── main.vue │ │ │ └── usage.md │ │ │ ├── ve-dropdown │ │ │ ├── api.md │ │ │ ├── callback-methods.md │ │ │ ├── custom-content.md │ │ │ ├── main.vue │ │ │ ├── multiple-select.md │ │ │ ├── operation.md │ │ │ └── single-select.md │ │ │ ├── ve-icon │ │ │ ├── api.md │ │ │ ├── base.md │ │ │ ├── collection.vue │ │ │ ├── explain.md │ │ │ ├── main.vue │ │ │ └── usage.md │ │ │ ├── ve-loading │ │ │ ├── api.md │ │ │ ├── collection.vue │ │ │ ├── container.md │ │ │ ├── custom.md │ │ │ ├── fullscreen.md │ │ │ ├── main.vue │ │ │ └── usage.md │ │ │ ├── ve-locale │ │ │ ├── api.md │ │ │ ├── cover-lang.md │ │ │ ├── main.vue │ │ │ ├── switch-lang.md │ │ │ └── usage.md │ │ │ ├── ve-pagination │ │ │ ├── api.md │ │ │ ├── base-usage.md │ │ │ ├── callback-events.md │ │ │ ├── layout-settings.md │ │ │ ├── main.vue │ │ │ ├── page-index.md │ │ │ ├── page-size.md │ │ │ ├── paging-buttons.md │ │ │ ├── paging-configuration.md │ │ │ └── usage.md │ │ │ ├── ve-radio │ │ │ ├── api.md │ │ │ ├── base.md │ │ │ ├── controlled.md │ │ │ └── main.vue │ │ │ ├── ve-select │ │ │ ├── api.md │ │ │ ├── base.md │ │ │ └── main.vue │ │ │ └── ve-table │ │ │ ├── api │ │ │ ├── cell-autofill-option-props.vue │ │ │ ├── cell-selection-option-props.vue │ │ │ ├── cell-span-option-props.vue │ │ │ ├── cell-style-option-props.vue │ │ │ ├── checkbox-option-props.vue │ │ │ ├── clipboard-option-props.vue │ │ │ ├── column-hidden-option-props.vue │ │ │ ├── column-props │ │ │ │ ├── ellipsis-props.vue │ │ │ │ ├── filter-custom-props.vue │ │ │ │ ├── filter-props.vue │ │ │ │ └── index.vue │ │ │ ├── column-width-resize-option-props.vue │ │ │ ├── contextmenu-body-option-props.vue │ │ │ ├── contextmenu-header-option-props.vue │ │ │ ├── db.js │ │ │ ├── edit-option-props.vue │ │ │ ├── event-custom-option-props.vue │ │ │ ├── expand-option-props.vue │ │ │ ├── instance-methods.vue │ │ │ ├── main.vue │ │ │ ├── radio-option-props.vue │ │ │ ├── row-style-option-props.vue │ │ │ ├── sort-option-props.vue │ │ │ ├── table-props.vue │ │ │ └── virtual-scroll-option-props.vue │ │ │ ├── cell-align │ │ │ ├── basic-align.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── cell-autofill │ │ │ ├── autofill-direction.md │ │ │ ├── base.md │ │ │ ├── explain.md │ │ │ ├── features.md │ │ │ ├── main.vue │ │ │ └── shortcuts.md │ │ │ ├── cell-custom │ │ │ ├── body-cell.md │ │ │ ├── header-cell.md │ │ │ ├── main.vue │ │ │ └── more.md │ │ │ ├── cell-edit │ │ │ ├── base.md │ │ │ ├── combine-column-fixed.md │ │ │ ├── combine-element-ui.md │ │ │ ├── explain.md │ │ │ ├── instance-method.md │ │ │ ├── main.vue │ │ │ └── shortcuts.md │ │ │ ├── cell-ellipsis │ │ │ ├── base.md │ │ │ ├── ellipsis-line.md │ │ │ ├── ellipsis.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── cell-selection │ │ │ ├── base.md │ │ │ ├── disable-selection.md │ │ │ ├── explain.md │ │ │ ├── main.vue │ │ │ ├── range-selection-instance-methods.md │ │ │ ├── shortcuts.md │ │ │ └── single-selection-instance-methods.md │ │ │ ├── cell-span │ │ │ ├── body-colspan.md │ │ │ ├── body-rowspan.md │ │ │ ├── custom-content.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── cell-style │ │ │ ├── body-cell-style.md │ │ │ ├── body-row-style.md │ │ │ ├── explain.md │ │ │ ├── header-cell-style.md │ │ │ ├── header-row-style.md │ │ │ └── main.vue │ │ │ ├── clipboard │ │ │ ├── base.md │ │ │ ├── explain.md │ │ │ ├── features-bak.md │ │ │ ├── main.vue │ │ │ └── shortcuts.md │ │ │ ├── column-fixed │ │ │ ├── column-fixed-auto-width.md │ │ │ ├── column-fixed-left-right.md │ │ │ ├── column-fixed-left.md │ │ │ ├── column-fixed-right.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── column-hidden │ │ │ ├── default-hidden-column.md │ │ │ ├── explain.md │ │ │ ├── instance-methods.md │ │ │ └── main.vue │ │ │ ├── column-resize │ │ │ ├── basic.md │ │ │ ├── disable-resizing.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── column-width │ │ │ ├── explain.md │ │ │ ├── long-word.md │ │ │ ├── main.vue │ │ │ ├── no-width.md │ │ │ ├── percent-width.md │ │ │ └── px-width.md │ │ │ ├── contextmenu │ │ │ ├── base.md │ │ │ ├── contextmenu-types.md │ │ │ ├── custom.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── data-empty │ │ │ ├── basic.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── event-custom │ │ │ ├── explain.md │ │ │ ├── main.vue │ │ │ ├── on-body-cell.md │ │ │ ├── on-body-row.md │ │ │ ├── on-header-cell.md │ │ │ └── on-header-row.md │ │ │ ├── footer-summary │ │ │ ├── base.md │ │ │ ├── cell-span.md │ │ │ ├── cell-style.md │ │ │ ├── custom-cell.md │ │ │ ├── explain.md │ │ │ ├── footer-column-fixed.md │ │ │ ├── footer-fixed.md │ │ │ ├── main.vue │ │ │ ├── on-footer-cell.md │ │ │ ├── on-footer-row.md │ │ │ └── virtual-scroll.md │ │ │ ├── header-filter-custom │ │ │ ├── custom-icon.md │ │ │ ├── explain.md │ │ │ ├── main.vue │ │ │ └── single-filter.md │ │ │ ├── header-filter │ │ │ ├── custom-icon.md │ │ │ ├── explain.md │ │ │ ├── main.vue │ │ │ ├── mixture-filter.md │ │ │ ├── mutil-filter.md │ │ │ └── single-filter.md │ │ │ ├── header-fixed │ │ │ ├── base.md │ │ │ ├── explain.md │ │ │ ├── header-fixed-disabled.md │ │ │ ├── header-fixed-mutil.md │ │ │ └── main.vue │ │ │ ├── header-grouping │ │ │ ├── explain.md │ │ │ ├── grouping-header-fixed-column.md │ │ │ ├── grouping-header.md │ │ │ └── main.vue │ │ │ ├── header-hidden │ │ │ ├── base.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── header-sort │ │ │ ├── explain.md │ │ │ ├── main.vue │ │ │ ├── multi-sort.md │ │ │ ├── single-sort.md │ │ │ └── sort-always.md │ │ │ ├── instance-methods │ │ │ ├── explain.md │ │ │ ├── main.vue │ │ │ ├── scroll-to-col-key.md │ │ │ ├── scroll-to-row-key.md │ │ │ └── scroll-to.md │ │ │ ├── loading │ │ │ ├── basic.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── operation-column │ │ │ ├── base.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── pagination │ │ │ ├── basic.md │ │ │ ├── checkbox.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── row-checkbox │ │ │ ├── base.md │ │ │ ├── explain.md │ │ │ ├── main.vue │ │ │ ├── selected-all-hide.md │ │ │ ├── selected-column.md │ │ │ ├── selected-control.md │ │ │ ├── selected-default.md │ │ │ ├── selected-disable.md │ │ │ └── selected-row-click.md │ │ │ ├── row-expand │ │ │ ├── base.md │ │ │ ├── default-expand.md │ │ │ ├── expand-chart.md │ │ │ ├── expand-column.md │ │ │ ├── expand-control.md │ │ │ ├── expand-event.md │ │ │ ├── expand-table.md │ │ │ ├── expand-trigger.md │ │ │ ├── expandable.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── row-index │ │ │ ├── base.md │ │ │ ├── explain.md │ │ │ ├── main.vue │ │ │ └── ranking.md │ │ │ ├── row-radio │ │ │ ├── base.md │ │ │ ├── explain.md │ │ │ ├── main.vue │ │ │ ├── radio-column.md │ │ │ ├── selected-control.md │ │ │ ├── selected-default.md │ │ │ ├── selected-disable.md │ │ │ └── selected-row-click.md │ │ │ ├── row-style │ │ │ ├── click-highlight.md │ │ │ ├── explain.md │ │ │ ├── hover-highlight.md │ │ │ ├── main.vue │ │ │ └── row-stripe.md │ │ │ ├── table-border │ │ │ ├── around-x.md │ │ │ ├── around-y.md │ │ │ ├── border-all.md │ │ │ ├── border-around.md │ │ │ ├── border-radius.md │ │ │ ├── border-x.md │ │ │ ├── border-y.md │ │ │ ├── default.md │ │ │ ├── explain.md │ │ │ └── main.vue │ │ │ ├── table-height │ │ │ ├── auto-height.md │ │ │ ├── calc-height.md │ │ │ ├── explain.md │ │ │ ├── fixed-height.md │ │ │ └── main.vue │ │ │ ├── table-width │ │ │ ├── auto-width.md │ │ │ ├── calc-width.md │ │ │ ├── explain.md │ │ │ ├── fixed-width.md │ │ │ ├── main.vue │ │ │ └── percent-width.md │ │ │ ├── test │ │ │ ├── main.vue │ │ │ └── performance.md │ │ │ ├── usage │ │ │ └── main.md │ │ │ └── virtual-scroll │ │ │ ├── auto-height.md │ │ │ ├── base.md │ │ │ ├── column-fixed.md │ │ │ ├── combine-lazy-load.md │ │ │ ├── dynamic-enable.md │ │ │ ├── explain.md │ │ │ ├── main.vue │ │ │ ├── row-checkbox.md │ │ │ ├── row-expand-table.md │ │ │ ├── row-expand.md │ │ │ ├── row-index.md │ │ │ └── row-radio.md │ ├── images │ │ └── browsers │ │ │ ├── chrome_48x48.png │ │ │ ├── edge_48x48.png │ │ │ ├── firefox_48x48.png │ │ │ ├── opera_48x48.png │ │ │ └── safari_48x48.png │ ├── main.js │ ├── plugins │ │ └── http-request.js │ ├── router │ │ ├── index.js │ │ ├── locale │ │ │ ├── en.router.config.js │ │ │ ├── index.js │ │ │ └── zh.router.config.js │ │ └── router.config.js │ ├── service │ │ └── index.js │ ├── umd-test │ │ ├── locale │ │ │ └── index.html │ │ ├── ve-pagination │ │ │ └── index.html │ │ └── ve-table │ │ │ └── index.html │ └── utils │ │ ├── constant.js │ │ ├── cookies.js │ │ ├── i18n.js │ │ └── index.js ├── vue.config.js └── yarn.lock ├── jest.config.js ├── package.json ├── packages ├── font │ ├── demo.css │ ├── demo_index.html │ ├── iconfont.css │ ├── iconfont.eot │ ├── iconfont.js │ ├── iconfont.json │ ├── iconfont.svg │ ├── iconfont.ttf │ ├── iconfont.woff │ └── iconfont.woff2 ├── index.js ├── src │ ├── comps │ │ └── resize-observer │ │ │ ├── index.js │ │ │ └── src │ │ │ └── index.jsx │ ├── directives │ │ ├── clickoutside.js │ │ ├── events-outside.js │ │ └── focus.js │ ├── locale │ │ ├── index.js │ │ └── lang │ │ │ ├── af-ZA.js │ │ │ ├── en-US.js │ │ │ ├── fr-FR.js │ │ │ ├── ko-KR.js │ │ │ ├── pt-BR.js │ │ │ ├── ru-RU.js │ │ │ ├── zh-CN.js │ │ │ ├── zh-TW.js │ │ │ └── zu-ZA.js │ ├── mixins │ │ └── emitter.js │ └── utils │ │ ├── animation-frame.js │ │ ├── auto-resize.js │ │ ├── constant.js │ │ ├── dom.js │ │ ├── event-key-codes.js │ │ ├── hooks-manager.js │ │ ├── index.js │ │ ├── mouse-event.js │ │ ├── random.js │ │ ├── request-animation-timeout.js │ │ ├── resize-event.js │ │ └── scroll-bar.js ├── style │ ├── ve-checkbox.less │ ├── ve-contextmenu.less │ ├── ve-dropdown.less │ ├── ve-icon.less │ ├── ve-loading.less │ ├── ve-pagination.less │ ├── ve-radio.less │ ├── ve-select.less │ └── ve-table.less ├── theme-dark │ ├── base.less │ ├── index.less │ ├── var.less │ ├── ve-checkbox.less │ ├── ve-contextmenu.less │ ├── ve-dropdown.less │ ├── ve-icon.less │ ├── ve-loading.less │ ├── ve-pagination.less │ ├── ve-radio.less │ ├── ve-select.less │ └── ve-table.less ├── theme-default │ ├── base.less │ ├── index.less │ ├── var.less │ ├── ve-checkbox.less │ ├── ve-contextmenu.less │ ├── ve-dropdown.less │ ├── ve-icon.less │ ├── ve-loading.less │ ├── ve-pagination.less │ ├── ve-radio.less │ ├── ve-select.less │ └── ve-table.less ├── ve-checkbox-group │ ├── index.js │ └── src │ │ ├── index.jsx │ │ └── util │ │ ├── constant.js │ │ └── index.js ├── ve-checkbox │ ├── index.js │ └── src │ │ ├── index.jsx │ │ └── util │ │ ├── constant.js │ │ └── index.js ├── ve-contextmenu │ ├── index.js │ └── src │ │ ├── index.jsx │ │ └── util │ │ ├── constant.js │ │ └── index.js ├── ve-dropdown │ ├── index.js │ └── src │ │ ├── index.jsx │ │ └── util │ │ ├── constant.js │ │ └── index.js ├── ve-icon │ ├── index.js │ └── src │ │ ├── index.jsx │ │ └── util │ │ ├── constant.js │ │ └── index.js ├── ve-loading │ ├── index.js │ └── src │ │ ├── bounce.jsx │ │ ├── flow.jsx │ │ ├── grid.jsx │ │ ├── index.js │ │ ├── loading.jsx │ │ ├── plane.jsx │ │ ├── pulse.jsx │ │ ├── util │ │ ├── constant.js │ │ └── index.js │ │ └── wave.jsx ├── ve-locale │ └── index.js ├── ve-pagination │ ├── index.js │ └── src │ │ ├── index.jsx │ │ ├── pager.jsx │ │ └── util │ │ ├── constant.js │ │ └── index.js ├── ve-radio │ ├── index.js │ └── src │ │ ├── index.jsx │ │ └── util │ │ ├── constant.js │ │ └── index.js ├── ve-select │ ├── index.js │ └── src │ │ ├── index.jsx │ │ └── util │ │ ├── constant.js │ │ └── index.js └── ve-table │ ├── index.js │ └── src │ ├── body │ ├── body-checkbox-content.jsx │ ├── body-radio-content.jsx │ ├── body-td.jsx │ ├── body-tr-scrolling.jsx │ ├── body-tr.jsx │ ├── expand-tr-icon.jsx │ ├── expand-tr.jsx │ └── index.jsx │ ├── colgroup │ └── index.jsx │ ├── column-resizer │ └── index.jsx │ ├── editor │ ├── constant.js │ └── index.jsx │ ├── footer │ ├── footer-td.jsx │ ├── footer-tr.jsx │ └── index.jsx │ ├── header │ ├── header-checkbox-content.jsx │ ├── header-filter-content.jsx │ ├── header-filter-custom-content.jsx │ ├── header-th.jsx │ ├── header-tr.jsx │ └── index.jsx │ ├── index.jsx │ ├── selection │ ├── constant.js │ └── index.jsx │ └── util │ ├── clipboard.js │ ├── constant.js │ ├── index.js │ └── store.js ├── tests └── unit │ ├── constant.js │ ├── setup.js │ ├── specs │ ├── __snapshots__ │ │ ├── ve-checkbox.spec.js.snap │ │ ├── ve-contextmenu.spec.js.snap │ │ ├── ve-dropdown.spec.js.snap │ │ ├── ve-icon.spec.js.snap │ │ ├── ve-loading.spec.js.snap │ │ ├── ve-locale.spec.js.snap │ │ ├── ve-pagination.spec.js.snap │ │ ├── ve-radio.spec.js.snap │ │ ├── ve-select.spec.js.snap │ │ ├── ve-table-border.spec.js.snap │ │ ├── ve-table-cell-align.spec.js.snap │ │ ├── ve-table-cell-custom.spec.js.snap │ │ ├── ve-table-cell-edit.spec.js.snap │ │ ├── ve-table-cell-ellipsis.spec.js.snap │ │ ├── ve-table-cell-selection.spec.js.snap │ │ ├── ve-table-cell-span.spec.js.snap │ │ ├── ve-table-cell-style.spec.js.snap │ │ ├── ve-table-column-fixed.spec.js.snap │ │ ├── ve-table-column-hidden.spec.js.snap │ │ ├── ve-table-column-width.spec.js.snap │ │ ├── ve-table-contextmenu.spec.js.snap │ │ ├── ve-table-footer.spec.js.snap │ │ ├── ve-table-header-filter-custom.spec.js.snap │ │ ├── ve-table-header-filter.spec.js.snap │ │ ├── ve-table-header-fixed.spec.js.snap │ │ ├── ve-table-header-group.spec.js.snap │ │ ├── ve-table-header-sort.spec.js.snap │ │ ├── ve-table-operation-column.spec.js.snap │ │ ├── ve-table-row-checkbox.spec.js.snap │ │ ├── ve-table-row-expand.spec.js.snap │ │ ├── ve-table-row-radio.spec.js.snap │ │ ├── ve-table-row-style.spec.js.snap │ │ └── ve-table-virtual-scroll.spec.js.snap │ ├── ve-checkbox.spec.js │ ├── ve-contextmenu.spec.js │ ├── ve-dropdown.spec.js │ ├── ve-icon.spec.js │ ├── ve-loading.spec.js │ ├── ve-locale.spec.js │ ├── ve-pagination.spec.js │ ├── ve-radio.spec.js │ ├── ve-select.spec.js │ ├── ve-table-border.spec.js │ ├── ve-table-cell-align.spec.js │ ├── ve-table-cell-custom.spec.js │ ├── ve-table-cell-edit.spec.js │ ├── ve-table-cell-ellipsis.spec.js │ ├── ve-table-cell-selection-indicator.spec.js │ ├── ve-table-cell-selection.spec.js │ ├── ve-table-cell-span.spec.js │ ├── ve-table-cell-style.spec.js │ ├── ve-table-column-fixed.spec.js │ ├── ve-table-column-hidden.spec.js │ ├── ve-table-column-width.spec.js │ ├── ve-table-common.spec.js │ ├── ve-table-contextmenu.spec.js │ ├── ve-table-custom-events.spec.js │ ├── ve-table-footer.spec.js │ ├── ve-table-header-filter-custom.spec.js │ ├── ve-table-header-filter.spec.js │ ├── ve-table-header-fixed.spec.js │ ├── ve-table-header-group.spec.js │ ├── ve-table-header-sort.spec.js │ ├── ve-table-instance-methods.spec.js │ ├── ve-table-operation-column.spec.js │ ├── ve-table-row-checkbox.spec.js │ ├── ve-table-row-expand.spec.js │ ├── ve-table-row-radio.spec.js │ ├── ve-table-row-style.spec.js │ └── ve-table-virtual-scroll.spec.js │ └── util.js └── yarn.lock /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | tests/* 2 | 3 | examples/* 4 | 5 | libs/* 6 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [Happy-Coding-Clans] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: huangshuwei # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # ['https://www.patreon.com/huangshuwei'] 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: Create new issue 4 | url: http://happy-coding-clans.github.io/issue-template-generater/ 5 | about: The issue which is not created via http://happy-coding-clans.github.io/issue-template-generater/ will be closed immediately. 6 | -------------------------------------------------------------------------------- /.github/workflows/sync-gitee.yml: -------------------------------------------------------------------------------- 1 | name: 🔀 Sync mirror to Gitee 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | - dev 8 | - 1.x 9 | - 2.x 10 | create: 11 | 12 | jobs: 13 | mirror: 14 | runs-on: ubuntu-latest 15 | if: github.repository == 'Happy-Coding-Clans/vue-easytable' 16 | steps: 17 | - name: mirror 18 | continue-on-error: true 19 | if: github.event_name == 'push' || (github.event_name == 'create' && github.event.ref_type == 'tag') 20 | uses: wearerequired/git-mirror-action@v1 21 | env: 22 | SSH_PRIVATE_KEY: ${{ secrets.GITEE_SSH_PRIVATE_KEY }} 23 | with: 24 | source-repo: 'git@github.com:Happy-Coding-Clans/vue-easytable.git' 25 | destination-repo: 'git@gitee.com:huangshuwei/vue-easytable.git' 26 | -------------------------------------------------------------------------------- /.github/workflows/test-coverage-upload.yml: -------------------------------------------------------------------------------- 1 | name: test-coverage-upload 2 | # This workflow is triggered on pushes to the repository. 3 | on: 4 | push: 5 | branches: 6 | - master 7 | paths: 8 | - "tests/**" 9 | 10 | jobs: 11 | test: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@master 15 | - uses: actions/setup-node@v1 16 | with: 17 | node-version: '14.x' 18 | 19 | - name: Install dependencies 20 | uses: bahmutov/npm-install@v1 21 | 22 | - name: Run test cases 23 | run: npm run test:cover 24 | 25 | - name: Upload coverage to Codecov 26 | uses: codecov/codecov-action@v2 27 | with: 28 | token: ${{ secrets.CODECOV_TOKEN }} -------------------------------------------------------------------------------- /.github/workflows/verify-files-modify.yml: -------------------------------------------------------------------------------- 1 | name: Verify Files modify 2 | 3 | on: 4 | pull_request_target: 5 | types: [opened, edited, reopened, synchronize, ready_for_review] 6 | 7 | jobs: 8 | verify: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: verify-version 12 | uses: actions-cool/verify-files-modify@v1.1.0 13 | with: 14 | forbid-paths: '.github/, build/' 15 | skip-verify-authority: 'write' 16 | assignees: 'huangshuwei' 17 | comment: | 18 | Hi @${{ github.event.pull_request.user.login }}. Thanks for your contribution. The path `.github/` or `scripts/` is only maintained by team members. This current PR will be closed and team members will help on this. 19 | close: true -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | dist 4 | libs/* 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | debug.log 12 | npm-debug.log* 13 | yarn-debug.log* 14 | yarn-error.log* 15 | pnpm-debug.log* 16 | 17 | # Editor directories and files 18 | .idea 19 | .vscode 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | 26 | # test coverage 27 | coverage 28 | tests/unit/coverage 29 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | tests/unit/coverage 2 | 3 | .github/* 4 | 5 | packages/font/* 6 | 7 | libs/* 8 | 9 | examples/dist 10 | 11 | # auto gererated by build/build-entry.js 12 | components.json 13 | packages/theme-dark/index.less 14 | packages/theme-default/index.less 15 | packages/index.js -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | comments: false, 3 | presets: [ 4 | [ 5 | "@babel/env", 6 | { 7 | targets: { 8 | ie: "11", 9 | edge: "17", 10 | firefox: "60", 11 | chrome: "67", 12 | safari: "11.1", 13 | }, 14 | useBuiltIns: "usage", 15 | corejs: "3.6.5", 16 | }, 17 | ], 18 | ], 19 | plugins: ["transform-vue-jsx"], 20 | env: { 21 | test: { 22 | // presets: [["env", { targets: { node: "current" } }]], 23 | // plugins: ["istanbul"] 24 | }, 25 | }, 26 | }; 27 | -------------------------------------------------------------------------------- /build/build-js.js: -------------------------------------------------------------------------------- 1 | /* 2 | build locale lang 3 | 暂未使用!! 4 | */ 5 | 6 | /* const { exec } = require("child_process"); */ 7 | 8 | /* 9 | compile locale lang 10 | need pkgs: @babel/cli @babel/preset-env 11 | */ 12 | /* function compileLocaleLang() { 13 | exec( 14 | "babel packages/src/locale --out-dir libs/locale --presets=@babel/env --ignore packages/src/locale/index.js", 15 | (error, stdout, stderr) => { 16 | if (error) { 17 | console.error(`exec error: ${error}`); 18 | return; 19 | } 20 | console.log(`compile locale lang: \r\n${stdout}`); 21 | } 22 | ); 23 | } 24 | 25 | compileLocaleLang(); */ 26 | -------------------------------------------------------------------------------- /build/build-versions.js: -------------------------------------------------------------------------------- 1 | const fse = require("fs-extra"); 2 | const path = require("path"); 3 | 4 | const docVersions = require("../package.json").docVersions; 5 | 6 | // build versions 7 | function buildVersions() { 8 | fse.writeFileSync( 9 | path.join(__dirname, "../examples/public/versions.json"), 10 | JSON.stringify(docVersions), 11 | ); 12 | } 13 | 14 | buildVersions(); 15 | -------------------------------------------------------------------------------- /build/common/get-components.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const path = require("path"); 3 | const themeNames = require("./themes-name"); 4 | 5 | module.exports = function () { 6 | const dirs = fs.readdirSync(path.resolve(__dirname, "../../packages")); 7 | let excludes = ["font", "src", "style", "index.js"]; 8 | excludes = excludes.concat(themeNames); 9 | return dirs.filter((dirName) => excludes.indexOf(dirName) === -1); 10 | }; 11 | -------------------------------------------------------------------------------- /build/common/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | libraryName: "VETable", 3 | }; 4 | -------------------------------------------------------------------------------- /build/common/themes-name.js: -------------------------------------------------------------------------------- 1 | module.exports = ["theme-default", "theme-dark"]; 2 | -------------------------------------------------------------------------------- /build/config.js: -------------------------------------------------------------------------------- 1 | /* webpack config */ 2 | var path = require("path"); 3 | var Components = require("../components.json"); 4 | 5 | let externals = { 6 | vue: { 7 | root: "Vue", 8 | commonjs: "vue", 9 | commonjs2: "vue", 10 | amd: "vue", 11 | }, 12 | lodash: { 13 | root: "_", 14 | commonjs: "lodash", 15 | commonjs2: "lodash", 16 | amd: "lodash", 17 | }, 18 | }; 19 | 20 | externals["vue-easytable/packages/src/locale/lang/en-US"] = 21 | "vue-easytable/libs/locale/lang/en-US"; 22 | 23 | Object.keys(Components).forEach(function (key) { 24 | externals[`vue-easytable/packages/${key}`] = `vue-easytable/libs/${key}`; 25 | }); 26 | 27 | let alias = { 28 | "vue-easytable": path.resolve(__dirname, "../"), 29 | }; 30 | 31 | exports.externals = externals; 32 | exports.alias = alias; 33 | -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "ve-checkbox":"./packages/ve-checkbox/index.js", 4 | "ve-checkbox-group":"./packages/ve-checkbox-group/index.js", 5 | "ve-contextmenu":"./packages/ve-contextmenu/index.js", 6 | "ve-dropdown":"./packages/ve-dropdown/index.js", 7 | "ve-icon":"./packages/ve-icon/index.js", 8 | "ve-loading":"./packages/ve-loading/index.js", 9 | "ve-locale":"./packages/ve-locale/index.js", 10 | "ve-pagination":"./packages/ve-pagination/index.js", 11 | "ve-radio":"./packages/ve-radio/index.js", 12 | "ve-select":"./packages/ve-select/index.js", 13 | "ve-table":"./packages/ve-table/index.js" 14 | } 15 | -------------------------------------------------------------------------------- /examples/.eslintignore: -------------------------------------------------------------------------------- 1 | src/docs/**/*.md 2 | 3 | ../packages/v-* 4 | 5 | ../libs/* -------------------------------------------------------------------------------- /examples/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | dist 4 | libs 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /examples/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | // vue-cli 配合 @vue/babel-preset-jsx 使用。否则使用 babel-plugin-transform-vue-jsx 4 | ["@vue/babel-preset-jsx"], 5 | // 应用兼容性 6 | [ 7 | "@vue/app", 8 | { 9 | useBuiltIns: "entry", 10 | corejs: 3, 11 | targets: { 12 | ie: "11", 13 | edge: "17", 14 | firefox: "60", 15 | chrome: "67", 16 | safari: "11.1", 17 | }, 18 | jsx: { 19 | injectH: false, 20 | }, 21 | }, 22 | ], 23 | ], 24 | comments: false, 25 | plugins: [ 26 | [ 27 | "component", 28 | { 29 | libraryName: "element-ui", 30 | styleLibraryName: "theme-chalk", 31 | }, 32 | ], 33 | ], 34 | }; 35 | -------------------------------------------------------------------------------- /examples/build/md-loader/config.js: -------------------------------------------------------------------------------- 1 | const Config = require("markdown-it-chain"); 2 | const anchorPlugin = require("markdown-it-anchor"); 3 | const slugify = require("transliteration").slugify; 4 | const containers = require("./containers"); 5 | const overWriteFenceRule = require("./fence"); 6 | 7 | const config = new Config(); 8 | 9 | function renderContent(source, resourceFileName) { 10 | config.options 11 | .html(true) 12 | .end() 13 | 14 | /* .plugin("anchor") 15 | .use(anchorPlugin, [ 16 | { 17 | slugify: slugify, 18 | permalink: true, 19 | permalinkBefore: true, 20 | permalinkClass: "header-anchor", 21 | permalinkSymbol: "#" 22 | } 23 | ]) 24 | .end() */ 25 | 26 | .plugin("containers") 27 | .use(containers, [{ resourceFileName }]) 28 | .end(); 29 | 30 | const md = config.toMd(); 31 | overWriteFenceRule(md); 32 | return md.render(source); 33 | } 34 | 35 | module.exports = { renderContent }; 36 | -------------------------------------------------------------------------------- /examples/build/md-loader/fence.js: -------------------------------------------------------------------------------- 1 | // 覆盖默认的 fence 渲染策略 2 | module.exports = (md) => { 3 | const defaultRender = md.renderer.rules.fence; 4 | 5 | md.renderer.rules.fence = (tokens, idx, options, env, self) => { 6 | const token = tokens[idx]; 7 | // 判断该 fence 是否在 :::demo 内 8 | const prevToken = tokens[idx - 1]; 9 | const isInDemoContainer = 10 | prevToken && 11 | prevToken.nesting === 1 && 12 | prevToken.info.trim().match(/^demo\s*(.*)$/); 13 | if (token.info === "html" && isInDemoContainer) { 14 | return ``; 17 | } 18 | return defaultRender(tokens, idx, options, env, self); 19 | }; 20 | 21 | // 重写解析 table 逻辑 22 | md.renderer.rules.table_open = () => { 23 | return ''; 24 | }; 25 | }; 26 | -------------------------------------------------------------------------------- /examples/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Happy-Coding-Clans/vue-easytable/f6f78615156ae28e8133d51407d826a3a1b9b935/examples/public/favicon.ico -------------------------------------------------------------------------------- /examples/public/versions.json: -------------------------------------------------------------------------------- 1 | [{"value":"/vue-easytable","label":"2.27.1"},{"value":"/vue-easytable/2.26.0","label":"2.26.0"},{"value":"/vue-easytable/2.25.0","label":"2.25.0"},{"value":"/vue-easytable/2.24.0","label":"2.24.0"},{"value":"/vue-easytable/2.23.0","label":"2.23.0"},{"value":"/vue-easytable/2.22.0","label":"2.22.0"},{"value":"/vue-easytable/2.21.11","label":"2.21.11"},{"value":"/vue-easytable/2.20.2","label":"2.20.2"},{"value":"/vue-easytable/2.19.1","label":"2.19.1"},{"value":"/vue-easytable/2.18.3","label":"2.18.3"},{"value":"/vue-easytable/2.17.3","label":"2.17.3"},{"value":"/vue-easytable/2.16.3/","label":"2.16.3"},{"value":"/vue-easytable/2.15.0/","label":"2.15.0"},{"value":"/vue-easytable/2.14.4/","label":"2.14.4"},{"value":"/vue-easytable/2.13.1/","label":"2.13.1"},{"value":"/vue-easytable/2.12.3/","label":"2.12.3"},{"value":"/vue-easytable/2.11.0/","label":"2.11.0"},{"value":"/vue-easytable/1.7.2/app.html","label":"1.x","isVersion1":true}] -------------------------------------------------------------------------------- /examples/src/comp/directives/clickoutside.js: -------------------------------------------------------------------------------- 1 | export default { 2 | bind: function (el, binding, vNode) { 3 | if (typeof binding.value !== "function") { 4 | let msg = `in [clickoutside] directives, provided expression '${binding.expression}' is not a function `; 5 | 6 | const compName = vNode.context.name; 7 | 8 | if (compName) { 9 | msg += `in ${compName}`; 10 | } 11 | console.error(msg); 12 | } 13 | 14 | var handler = (e) => { 15 | if (!el.contains(e.target) && el !== e.target) { 16 | binding.value(e); 17 | } else { 18 | return false; 19 | } 20 | }; 21 | 22 | el.__clickOutSide__ = handler; 23 | 24 | document.addEventListener("click", handler, true); 25 | }, 26 | 27 | unbind: function (el) { 28 | document.removeEventListener("click", el.__clickOutSide__, true); 29 | el.__clickOutSide__ = null; 30 | }, 31 | }; 32 | -------------------------------------------------------------------------------- /examples/src/comp/layout/empty-layout.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /examples/src/comp/layout/footer.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 30 | -------------------------------------------------------------------------------- /examples/src/comp/mixins/i18n-mixins.js: -------------------------------------------------------------------------------- 1 | import { DOC_LANG } from "@/utils/constant.js"; 2 | 3 | export default { 4 | computed: { 5 | // current doc lang 6 | currentDocLang() { 7 | return this.$route.path.split("/")[1] || DOC_LANG.EN; 8 | }, 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /examples/src/css/custom.less: -------------------------------------------------------------------------------- 1 | /* 代码块 */ 2 | .hljs { 3 | line-height: 1.8; 4 | font-family: Menlo, Monaco, Consolas, Courier, monospace !important; 5 | font-size: 13px !important; 6 | padding: 18px 24px !important; 7 | background-color: #fafafa !important; 8 | border: solid 1px #eaeefb; 9 | margin-bottom: 25px; 10 | border-radius: 4px; 11 | -webkit-font-smoothing: auto; 12 | } 13 | -------------------------------------------------------------------------------- /examples/src/css/reset.less: -------------------------------------------------------------------------------- 1 | body, 2 | html { 3 | //font-family: "Source Sans Pro", "Helvetica Neue", Arial, sans-serif; 4 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, 5 | Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, 6 | Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji; 7 | font-size: 15px; 8 | -webkit-font-smoothing: antialiased; 9 | -moz-osx-font-smoothing: grayscale; 10 | color: #34495e; 11 | background-color: #ffffff; 12 | margin: 0; 13 | } 14 | 15 | button, 16 | input, 17 | select, 18 | textarea { 19 | font-family: inherit; 20 | font-size: inherit; 21 | line-height: inherit; 22 | color: inherit; 23 | } 24 | 25 | a { 26 | color: rgb(64, 120, 192); 27 | text-decoration-line: none; 28 | text-decoration-style: initial; 29 | text-decoration-color: initial; 30 | } 31 | 32 | * { 33 | box-sizing: border-box; 34 | } 35 | -------------------------------------------------------------------------------- /examples/src/docs/en/update-log.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Happy-Coding-Clans/vue-easytable/f6f78615156ae28e8133d51407d826a3a1b9b935/examples/src/docs/en/update-log.md -------------------------------------------------------------------------------- /examples/src/docs/en/ve-checkbox/api.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ### props 4 | 5 | | 参数 | 说明 | 类型 | 可选值 | 默认值 | 6 | | ------------- | ---------------------------------------- | --------- | ------ | -------- | --- | --- | 7 | | value | `v-model`绑定的值 | `String | Number | Boolean` | - | - | 8 | | label | checkbox label | `String` | - | - | 9 | | disabled | 是否禁止选择 | `Boolean` | - | false | 10 | | indeterminate | 是否是半选 | `Boolean` | - | false | 11 | | isControlled | 是否为可控组件,配合 `isSelected` 使用 | `Boolean` | - | false | 12 | | isSelected | 是否选中。当 isControlled 为 true 时生效 | `Boolean` | - | false | 13 | 14 | ### Event 15 | 16 | | 事件名称 | 说明 | 回调参数 | 17 | | ----------------- | -------------- | --------- | 18 | | on-checked-change | 选中改变时回调 | isChecked | 19 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-checkbox/main.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-contextmenu/main.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 24 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-dropdown/callback-methods.md: -------------------------------------------------------------------------------- 1 | 回调函数 2 | 3 | :::demo 4 | 5 | ```html 6 | 11 | 29 | ``` 30 | 31 | ::: 32 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-dropdown/custom-content.md: -------------------------------------------------------------------------------- 1 | 自定义内容 2 | 3 | :::demo 4 | 5 | ```html 6 | 14 | 27 | ``` 28 | 29 | ::: 30 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-dropdown/multiple-select.md: -------------------------------------------------------------------------------- 1 | 多选 2 | 3 | :::demo 4 | 5 | ```html 6 | 11 | 24 | ``` 25 | 26 | ::: 27 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-icon/api.md: -------------------------------------------------------------------------------- 1 | :::anchor API 2 | 3 | ### props 4 | 5 | | Property | Description | Type | Optional value | Default | 6 | | -------- | ----------- | -------- | ---------------- | ------- | 7 | | name | Icon name | `String` | refer to example | - | 8 | | size | Icon size | `Number` | - | - | 9 | | color | Icon color | `String` | - | - | 10 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-icon/base.md: -------------------------------------------------------------------------------- 1 | :::anchor Base Usage 2 | 3 | :::demo 1、The `name` property sets the name of the icon
2、The `size` property sets the size of the icon
3、The `color` property sets the color of the icon 4 | 5 | ```html 6 | 13 | ``` 14 | 15 | ::: 16 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-icon/explain.md: -------------------------------------------------------------------------------- 1 | :::tip 2 | Built-in some icons for you to choose 3 | 4 | ::: 5 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-icon/main.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 29 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-icon/usage.md: -------------------------------------------------------------------------------- 1 | :::anchor Usage 2 | 3 | import `VeIcon` 4 | 5 | ```javascript 6 | import Vue from "vue"; 7 | import { VeIcon } from "vue-easytable"; 8 | 9 | Vue.use(VeIcon); 10 | ``` 11 | 12 | use 13 | 14 | ```javascript 15 | 18 | ``` 19 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-loading/main.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 31 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-loading/usage.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | Import `veLoading` where you need 4 | 5 | ```javascript 6 | import Vue from "vue"; 7 | import { veLoading } from "vue-easytable"; 8 | ``` 9 | 10 | ```javascript 11 | veLoading({ 12 | target: "#loading-1", 13 | name: "grid", 14 | tip: "loading...", 15 | }); 16 | ``` 17 | 18 | 19 | 20 | Mount the `veLoading` component to the prototype of Vue for easy global call 21 | 22 | ```javascript 23 | import Vue from "vue"; 24 | import { veLoading } from "vue-easytable"; 25 | 26 | Vue.prototype.$veLoading = veLoading; 27 | ``` 28 | 29 | ```javascript 30 | this.$veLoading({ 31 | target: "#loading-1", 32 | name: "grid", 33 | tip: "loading...", 34 | }); 35 | ``` 36 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-locale/api.md: -------------------------------------------------------------------------------- 1 | :::anchor API 2 | 3 | ### methods 4 | 5 | | Methods | Description | Parameters | 6 | | ------- | -------------------------- | --------------- | 7 | | use | Using language configs | language config | 8 | | update | modify the default configs | language config | 9 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-locale/cover-lang.md: -------------------------------------------------------------------------------- 1 | :::anchor Override Default Configs 2 | 3 | Use Locale.update method to modify the default configs. 4 | :::demo 5 | 6 | ```html 7 | 19 | 33 | ``` 34 | 35 | ::: 36 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-locale/main.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 26 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-locale/usage.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ```javascript 4 | import Vue from "vue"; 5 | import { VeLocale } from "vue-easytable"; 6 | // import language config 7 | import enUS from "vue-easytable/libs/locale/lang/en-US.js"; 8 | 9 | VeLocale.use(enUS); 10 | ``` 11 | 12 | 13 | Mount the `velocale` component on the prototype of Vue for global call 14 | 15 | ```javascript 16 | import Vue from "vue"; 17 | import { VeLocale } from "vue-easytable"; 18 | 19 | Vue.prototype.$veLocale = VeLocale; 20 | ``` 21 | 22 | use 23 | 24 | ```javascript 25 | import enUS from "vue-easytable/libs/locale/lang/en-US.js"; 26 | this.$veLocale.use(enUS); 27 | ``` 28 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-pagination/base-usage.md: -------------------------------------------------------------------------------- 1 | :::anchor Base Usage 2 | 3 | :::demo 4 | 5 | ```html 6 | 9 | ``` 10 | 11 | ::: 12 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-pagination/callback-events.md: -------------------------------------------------------------------------------- 1 | :::anchor Callback Events 2 | :::demo 1、`on-page-number-change`Page number change callback event
2、`on-page-size-change`Change callback events under each page 3 | 4 | ```html 5 | 12 | 25 | ``` 26 | 27 | ::: 28 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-pagination/page-index.md: -------------------------------------------------------------------------------- 1 | :::anchor Page Index 2 | :::demo `page-index` sets the current page number 3 | 4 | ```html 5 | 8 | ``` 9 | 10 | ::: 11 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-pagination/page-size.md: -------------------------------------------------------------------------------- 1 | :::anchor Page Size 2 | :::demo `page-size` set the size of each page 3 | 4 | ```html 5 | 8 | ``` 9 | 10 | ::: 11 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-pagination/paging-buttons.md: -------------------------------------------------------------------------------- 1 | :::anchor Paging Buttons 2 | :::demo `pagingCount` set the number of middle buttons and paging buttons for the forward 5 pages and backward 5 pages 3 | 4 | ```html 5 | 8 | ``` 9 | 10 | ::: 11 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-pagination/paging-configuration.md: -------------------------------------------------------------------------------- 1 | :::anchor Paging Configuration 2 | :::demo `pageSizeOption` set paging size drop-down option 3 | 4 | ```html 5 | 8 | ``` 9 | 10 | ::: 11 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-pagination/usage.md: -------------------------------------------------------------------------------- 1 | :::anchor Usage 2 | 3 | import `VePagination` 4 | 5 | ```javascript 6 | import Vue from "vue"; 7 | import { VePagination } from "vue-easytable"; 8 | 9 | Vue.use(VePagination); 10 | ``` 11 | 12 | use 13 | 14 | ```javascript 15 | 18 | ``` 19 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-radio/api.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ### props 4 | 5 | | 参数 | 说明 | 类型 | 可选值 | 默认值 | 6 | | ------------ | ---------------------------------------- | --------- | ------ | ------ | 7 | | value | `v-model` 绑定的值 | `Boolean` | - | false | 8 | | disabled | 禁用选择 | `Boolean` | - | false | 9 | | label | label | `String` | - | - | 10 | | isControlled | 是否为可控组件,配合 `isSelected` 使用 | `Boolean` | - | false | 11 | | isSelected | 是否选中。当 isControlled 为 true 时生效 | `Boolean` | - | false | 12 | 13 | ### Event 14 | 15 | | 事件名称 | 说明 | 回调参数 | 16 | | --------------- | ------------ | --------- | 17 | | on-radio-change | 选择切换事件 | isChecked | 18 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-radio/controlled.md: -------------------------------------------------------------------------------- 1 | :::demo 单选功能 2 | 3 | ```html 4 | 17 | 18 | 36 | ``` 37 | 38 | ::: 39 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-radio/main.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 27 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-select/api.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ### props 4 | 5 | | 参数 | 说明 | 类型 | 可选值 | 默认值 | 6 | | ----------- | ------------------ | --------- | ------ | -------- | 7 | | width | 宽度 | `Number` | - | 90 | 8 | | maxWidth | 最大宽度 | `Number` | - | - | 9 | | isMultiple | 是否是多选下拉 | `Boolean` | - | false | 10 | | value | `v-model`绑定的值 | `Array` | - | - | 11 | | placeholder | placeholder 文本 | `String` | - | "请选择" | 12 | | textAlign | 文本居中方式 | `String` | - | "left" | 13 | | isInput | 是否支持输入 input | `Boolean` | - | false | 14 | 15 | ### Event 16 | 17 | | 事件名称 | 说明 | 回调参数 | 18 | | ---------------- | -------------- | -------- | 19 | | on-select-change | 选择项改变事件 | options | 20 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-select/main.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 36 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/cell-autofill-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/cell-selection-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/cell-span-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/cell-style-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/checkbox-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/clipboard-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/column-hidden-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/column-props/ellipsis-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/column-props/filter-custom-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/column-props/filter-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/column-width-resize-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/contextmenu-body-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/contextmenu-header-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/edit-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/event-custom-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/expand-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/instance-methods.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/radio-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/row-style-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/sort-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/table-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/api/virtual-scroll-option-props.vue: -------------------------------------------------------------------------------- 1 | 11 | 33 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-align/explain.md: -------------------------------------------------------------------------------- 1 | :::tip 2 | 1、Align cells left by `align=left`
3 | 2、Center the cell by `align=center`
4 | 3、Set right alignment by `align=right` 5 | ::: 6 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-align/main.vue: -------------------------------------------------------------------------------- 1 | 8 | 20 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-autofill/explain.md: -------------------------------------------------------------------------------- 1 | :::tip 2 | When there is data that needs to be copied repeatedly, you can automatically fill in the cell content like excel 3 | 4 | ::: 5 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-autofill/main.vue: -------------------------------------------------------------------------------- 1 | 10 | 26 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-autofill/shortcuts.md: -------------------------------------------------------------------------------- 1 | :::anchor 快捷键 2 | 3 | 暂无 4 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-custom/main.vue: -------------------------------------------------------------------------------- 1 | 10 | 26 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-edit/explain.md: -------------------------------------------------------------------------------- 1 | :::tip 2 | 1、Configure the cell editing function through the `editoption` attribute
3 | 2、Set 'edit=true' allowed columns edit through the 'columns' object
4 | 3、You can use shortcut keys and edit like excel
5 | ::: 6 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-edit/main.vue: -------------------------------------------------------------------------------- 1 | 13 | 35 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-ellipsis/explain.md: -------------------------------------------------------------------------------- 1 | :::tip 2 | 1、The `ellipsis` attribute of `column` is used to set cell ellipsis
3 | 2、How many lines beyond the content of `lineClamp` are omitted 4 | ::: 5 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-ellipsis/main.vue: -------------------------------------------------------------------------------- 1 | 12 | 30 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-selection/explain.md: -------------------------------------------------------------------------------- 1 | :::tip 2 | 1、You can select multiple rows, multiple columns, select all and other features like Excel
3 | 2、It is very convenient to cooperate with the cell editing
4 | 3、The `rowKeyFieldName` property needs to be specified
5 | 4、When cell selection enable, text selection is disabled:`user-select:none` 6 | 7 | ::: 8 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-selection/shortcuts.md: -------------------------------------------------------------------------------- 1 | :::anchor Shortcuts 2 | 3 | Cell selection support the following shortcut keys (refer to excel shortcut keys): 4 | 5 | | Feature | Shortcuts | 6 | | :-------------------------------- | :---------------- | 7 | | Move the active cell up | `↑` | 8 | | Move the active cell to the right | `→` | 9 | | Move the active cell down | `↓` | 10 | | Move the active cell to the left | `←` | 11 | | Move the active cell down | `Enter` | 12 | | Move the active cell up | `Shift` + `Enter` | 13 | | Move the active cell to the right | `Tab` | 14 | | Move the active cell to the left | `Shift` + `Tab` | 15 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-span/explain.md: -------------------------------------------------------------------------------- 1 | :::tip 2 | 1、Set the span cells through the `cellSpanOption` method
3 | 2、Set the body cell span through the `bodyCellSpan({row,column,rowIndx})` method
4 | 3、Set the footer cell span through the `footerCellSpan({row,column,rowIndx})` method
5 | 4、Property `colSpan` specifies the number of columns to span
6 | 5、This function needs to specify columns that do not need to be rendered. Set the values of `colSpan` and `rowspan` to 0
7 | 6、By default, the span content is the content of the rendered cell.To customize the cell content, you can combine it with `renderBodyCell({row,column,rowIndex},h)`
8 | 9 | ::: 10 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-span/main.vue: -------------------------------------------------------------------------------- 1 | 11 | 29 | -------------------------------------------------------------------------------- /examples/src/docs/en/ve-table/cell-style/explain.md: -------------------------------------------------------------------------------- 1 | :::tip 2 | 1、Set the style of cells by configuring the object `cellStyleOption`
3 | 2、Callback function property `bodyCellClass({ row, column, rowIndex })`sets the qualified table body cell class
4 | 3、Callback function property `headerCellClass({column, rowIndex})`sets the qualified table header cell class
5 | 4、Callback function property `footerCellClass({row,column, rowIndex})`sets the qualified table footer cell class
6 | 5、The`