naf-grid.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <template>
  2. <div class="container">
  3. <naf-search @handlefilter="handleFilter" :filterList="filterList" v-if="search">
  4. </naf-search>
  5. <naf-table :meta="meta" :selection="selection" @selection="$emit('selection', $event)" :operation="operation" :data="data" :readonly="readonly" @oper="handleOper"></naf-table>
  6. <naf-pagination ref="pagination" @handlechange="handleChange" :total="total" v-if="pagination"></naf-pagination>
  7. </div>
  8. </template>
  9. <script>
  10. import nafSearch from '@naf/data/tables/search'
  11. import nafTable from '@naf/data/tables/table'
  12. import nafPagination from '@naf/data/tables/pagination '
  13. export default {
  14. components: {
  15. nafSearch,
  16. nafTable,
  17. nafPagination
  18. },
  19. props: {
  20. // 是否启用搜索
  21. search: { type: Boolean, default: true },
  22. // 是否启用分页
  23. pagination: { type: Boolean, default: true },
  24. // 是否显示操作列
  25. readonly: { type: Boolean, default: true },
  26. // 是否显示多选
  27. selection: { type: Boolean, default: true },
  28. // 操作栏数组
  29. operation: {
  30. default: () => [
  31. { name: 'edit', title: '编辑', icons: 'el-icon-edit' },
  32. { name: 'delete', title: '删除', icons: 'el-icon-delete' }
  33. ]
  34. },
  35. // 表格字段参数
  36. meta: { type: Array, required: true },
  37. // 数据源
  38. data: Array,
  39. // 总条数
  40. total: { type: Number, default: 0 }
  41. },
  42. data () {
  43. return {
  44. paging: {},
  45. filter: {}
  46. }
  47. },
  48. computed: {
  49. filterList () {
  50. return this.meta.filter(p => (p.filter && p.filter === true))
  51. }
  52. },
  53. methods: {
  54. resetpage (val) {
  55. this.$refs.pagination.resetpage()
  56. },
  57. handleChange ({ page, size }) {
  58. this.paging = { page, size }
  59. this.query()
  60. },
  61. handleFilter (filter) {
  62. this.filter = filter
  63. this.paging.page = 0
  64. this.query()
  65. },
  66. query () {
  67. this.$emit('query', { filter: this.filter, paging: this.paging })
  68. },
  69. handleOper ({ event, data }) {
  70. this.$emit(event, data)
  71. }
  72. },
  73. mounted () {}
  74. }
  75. </script>
  76. <style lang="less" scoped></style>