multipleSelectMixin.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /**
  2. * 选中多个组件进行组合
  3. */
  4. import { mapMutations, mapState } from 'vuex'
  5. let isMac = false
  6. if (window && window.navigator && window.navigator.userAgent) {
  7. isMac = window.navigator.userAgent.indexOf('Mac') > -1
  8. }
  9. export default {
  10. computed: {
  11. ...mapState({
  12. activeCodes: (state) => state.bigScreen.activeCodes,
  13. activeChart: (state) => state.bigScreen.activeItemConfig
  14. })
  15. },
  16. mounted () {
  17. // 监听shift键的按下和抬起
  18. document.addEventListener('keydown', this.keydown)
  19. document.addEventListener('keyup', this.keyup)
  20. },
  21. beforeDestroy () {
  22. document.removeEventListener('keydown', this.keydown)
  23. document.removeEventListener('keyup', this.keyup)
  24. },
  25. methods: {
  26. ...mapMutations('bigScreen', {
  27. changeCtrlOrCommandDown: 'changeCtrlOrCommandDown',
  28. changeActivePos: 'changeActivePos',
  29. deleteItem: 'delItem',
  30. undoTimeLine: 'undoTimeLine',
  31. copyCharts: 'copyCharts',
  32. pasteCharts: 'pasteCharts'
  33. }),
  34. keydown (event) {
  35. if (event.keyCode === 37) {
  36. // 关闭默认事件
  37. event.preventDefault()
  38. // 左箭头键被按下
  39. this.changeActivePos({ diffX: -1, diffY: 0 })
  40. } else if (event.keyCode === 38) {
  41. // 关闭默认事件
  42. event.preventDefault()
  43. // 上箭头键被按下
  44. this.changeActivePos({ diffX: 0, diffY: -1 })
  45. } else if (event.keyCode === 39) {
  46. // 关闭默认事件
  47. event.preventDefault()
  48. // 右箭头键被按下
  49. this.changeActivePos({ diffX: 1, diffY: 0 })
  50. } else if (event.keyCode === 40) {
  51. // 关闭默认事件
  52. event.preventDefault()
  53. // 下箭头键被按下
  54. this.changeActivePos({ diffX: 0, diffY: 1 })
  55. }
  56. // ctrl/command + s保存
  57. if ((event.ctrlKey || event.metaKey) && event.keyCode === 83) {
  58. // 关闭默认事件
  59. event.preventDefault()
  60. this.$refs.PageTopSetting.save('saveLoading')
  61. }
  62. // ctrl/command + z撤销
  63. if ((event.ctrlKey || event.metaKey) && !event.shiftKey && event.keyCode === 90) {
  64. event.preventDefault()
  65. this.undoTimeLine(true)
  66. }
  67. // ctrl/command + shift + z 反撤销
  68. if ((event.ctrlKey || event.metaKey) && event.shiftKey && event.keyCode === 90) {
  69. event.preventDefault()
  70. this.undoTimeLine(false)
  71. }
  72. if (isMac) {
  73. // 是否按下了command键
  74. if (event.metaKey) {
  75. this.changeCtrlOrCommandDown(true)
  76. }
  77. } else {
  78. // 是否按下了ctrl键
  79. if (event.ctrlKey) {
  80. this.changeCtrlOrCommandDown(true)
  81. }
  82. }
  83. },
  84. keyup (event) {
  85. // 判断mac系统还是windows系统
  86. if (isMac) {
  87. // 是否按下了command键
  88. if (!event.metaKey) {
  89. this.changeCtrlOrCommandDown(false)
  90. }
  91. } else {
  92. // 是否按下了ctrl键
  93. if (!event.ctrlKey) {
  94. this.changeCtrlOrCommandDown(false)
  95. }
  96. }
  97. },
  98. designKeydown (event) {
  99. // 删除键被按下且鼠标没有在输入框中
  100. if (
  101. (event.keyCode === 8 || event.keyCode === 46) &&
  102. !event.target.classList.contains('el-input__inner')
  103. ) {
  104. // 关闭默认事件
  105. event.preventDefault()
  106. this.$confirm('确定删除该组件吗?', '提示', {
  107. confirmButtonText: '确定',
  108. cancelButtonText: '取消',
  109. type: 'warning',
  110. customClass: 'bs-el-message-box'
  111. }).then(() => {
  112. // 批量删除
  113. if (Array.isArray(this.activeCodes) && this.activeCodes.length > 0) {
  114. this.deleteItem(this.activeCodes)
  115. } else {
  116. // 单个删除
  117. this.deleteItem(this.activeChart)
  118. }
  119. }).catch(() => {})
  120. }
  121. // ctrl/command + c复制
  122. if ((event.ctrlKey || event.metaKey) && event.keyCode === 67) {
  123. this.copyCharts()
  124. }
  125. if ((event.ctrlKey || event.metaKey) && event.keyCode === 86) {
  126. console.log('粘贴')
  127. // 粘贴
  128. this.pasteCharts()
  129. }
  130. }
  131. }
  132. }