ed33dc503f4f81f5ab86b4ae3c849e6f19d754bc.svn-base 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <div :class="boxClass">
  3. <!-- 工具按钮 -->
  4. <div class="j-vxe-tool-button div" :size="btnSize">
  5. <slot v-if="showPrefix" name="toolbarPrefix" :size="btnSize"/>
  6. <a-button v-if="showAdd" icon="plus" @click="trigger('add')" :disabled="disabled" type="primary">新增</a-button>
  7. <a-button v-if="showSave" icon="save" @click="trigger('save')" :disabled="disabled">保存</a-button>
  8. <template v-if="selectedRowIds.length > 0">
  9. <a-popconfirm
  10. v-if="showRemove"
  11. :title="`确定要删除这 ${selectedRowIds.length} 项吗?`"
  12. @confirm="trigger('remove')"
  13. >
  14. <a-button icon="minus" :disabled="disabled">删除</a-button>
  15. </a-popconfirm>
  16. <template v-if="showClearSelection">
  17. <a-button icon="delete" @click="trigger('clearSelection')">清空选择</a-button>
  18. </template>
  19. </template>
  20. <slot v-if="showSuffix" name="toolbarSuffix" :size="btnSize"/>
  21. <a v-if="showCollapse" @click="toggleCollapse" style="margin-left: 4px">
  22. <span>{{ collapsed ? '展开' : '收起' }}</span>
  23. <a-icon :type="collapsed ? 'down' : 'up'"/>
  24. </a>
  25. </div>
  26. </div>
  27. </template>
  28. <script>
  29. export default {
  30. name: 'JVxeToolbar',
  31. props: {
  32. toolbarConfig: Object,
  33. excludeCode: Array,
  34. size: String,
  35. disabled: Boolean,
  36. disabledRows: Object,
  37. selectedRowIds: Array,
  38. },
  39. data() {
  40. return {
  41. // 是否收起
  42. collapsed: true,
  43. }
  44. },
  45. computed: {
  46. boxClass() {
  47. return {
  48. 'j-vxe-toolbar': true,
  49. 'j-vxe-toolbar-collapsed': this.collapsed,
  50. }
  51. },
  52. btns() {
  53. let arr = this.toolbarConfig.btn || ['add', 'remove', 'clearSelection']
  54. let exclude = [...this.excludeCode]
  55. // TODO 需要将remove替换batch_delete
  56. // 系统默认的批量删除编码配置为 batch_delete 此处需要转化一下
  57. if(exclude.indexOf('batch_delete')>=0){
  58. exclude.push('remove')
  59. }
  60. // 按钮权限 需要去掉不被授权的按钮
  61. return arr.filter(item=>{
  62. return exclude.indexOf(item)<0
  63. })
  64. },
  65. slots() {
  66. return this.toolbarConfig.slot || ['prefix', 'suffix']
  67. },
  68. showPrefix() {
  69. return this.slots.includes('prefix')
  70. },
  71. showSuffix() {
  72. return this.slots.includes('suffix')
  73. },
  74. showAdd() {
  75. return this.btns.includes('add')
  76. },
  77. showSave() {
  78. return this.btns.includes('save')
  79. },
  80. showRemove() {
  81. return this.btns.includes('remove')
  82. },
  83. showClearSelection() {
  84. if (this.btns.includes('clearSelection')) {
  85. // 有禁用行时才显示清空选择按钮
  86. // 因为禁用行会阻止选择行,导致无法取消全选
  87. let length = Object.keys(this.disabledRows).length
  88. return length > 0
  89. }
  90. return false
  91. },
  92. showCollapse() {
  93. return this.btns.includes('collapse')
  94. },
  95. btnSize() {
  96. return this.size === 'tiny' ? 'small' : null
  97. },
  98. },
  99. methods: {
  100. /** 触发事件 */
  101. trigger(name) {
  102. this.$emit(name)
  103. },
  104. // 切换展开收起
  105. toggleCollapse() {
  106. this.collapsed = !this.collapsed
  107. },
  108. },
  109. }
  110. </script>
  111. <style lang="less">
  112. .j-vxe-toolbar-collapsed {
  113. [data-collapse] {
  114. display: none;
  115. }
  116. }
  117. .j-vxe-tool-button.div .ant-btn {
  118. margin-right: 8px;
  119. }
  120. </style>