index.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <template>
  2. <div class="vue-portal-target" style="top: 30px; left: 10px;">
  3. <div class="v-btn-dropdown">
  4. <div tabindex="-1" role="listbox" class="v-menu v-menu-icon-menu" style="height: auto; width: auto; left: 0px; top: 0px; z-index: 15000;"
  5. :style="{display:portalDetail.display}">
  6. <div tabindex="0" class="v-trap-focus-indicator"></div>
  7. <div class="v-trap-focus-body">
  8. <div role="option" tabindex="0" class="v-menu-item v-menu-item-select"
  9. v-for="(detailMessage,detailMessageIndex) in portalDetail.detailMessageList" :key="detailMessage.id"
  10. :class="detailMessage.cls"
  11. @mouseenter.stop="mouseenterMenuItem(detailMessageIndex)"
  12. @mouseleave.stop="mouseleaveMenuItem(detailMessageIndex)"
  13. @click.stop="clickMenuItem(detailMessageIndex)">
  14. <i class="v-icon v-icon--select"></i>
  15. <span class="title">{{detailMessage.title}}</span> <!---->
  16. </div>
  17. <!--
  18. <div role="option" tabindex="0" class="v-menu-item v-menu-item-select">
  19. <i class="v-icon v-icon--select"></i>
  20. <span class="title">资源监控</span>
  21. </div>
  22. <div role="option" tabindex="0" class="v-menu-item v-menu-item-select">
  23. <i class="v-icon v-icon--select"></i>
  24. <span class="title">存储</span>
  25. </div>
  26. <div role="option" tabindex="0" class="v-menu-item v-menu-item-select">
  27. <i class="v-icon v-icon--select"></i>
  28. <span class="title">已连接用户</span>
  29. </div><div role="option" tabindex="0" class="v-menu-item v-menu-item-select">
  30. <i class="v-icon v-icon--select"></i>
  31. <span class="title">计划的任务</span>
  32. </div><div role="option" tabindex="0" class="v-menu-item v-menu-item-select">
  33. <i class="v-icon v-icon--select"></i>
  34. <span class="title">文件更改日志</span>
  35. </div><div role="option" tabindex="0" class="v-menu-item v-menu-item-select">
  36. <i class="v-icon v-icon--select"></i>
  37. <span class="title">最新日志</span>
  38. </div>
  39. <div role="option" tabindex="0" class="v-menu-item v-menu-item-select">
  40. <i class="v-icon v-icon--select"></i>
  41. <span class="title">备份</span>>
  42. </div>
  43. -->
  44. </div>
  45. <div tabindex="0" class="v-trap-focus-indicator"></div>
  46. </div>
  47. </div>
  48. </div>
  49. </template>
  50. <script>
  51. export default {
  52. data() {
  53. return {
  54. portalDetail:{
  55. display: 'none',
  56. selectedNum: 0,
  57. detailMessageList:[
  58. {
  59. id:0,
  60. title:'系统状况',
  61. cls:'v-menu-item-select-selected selected active',
  62. },
  63. {
  64. id:1,
  65. title:'资源监控',
  66. cls:'v-menu-item-select-selected selected',
  67. },
  68. {
  69. id:2,
  70. title:'存储',
  71. cls:'',
  72. },
  73. {
  74. id:3,
  75. title:'已连接用户',
  76. cls:'',
  77. },
  78. {
  79. id:4,
  80. title:'计划的任务',
  81. cls:'',
  82. },
  83. {
  84. id:5,
  85. title:'文件更改日志',
  86. cls:'',
  87. },
  88. {
  89. id:6,
  90. title:'最新日志',
  91. cls:'',
  92. },{
  93. id:7,
  94. title:'备份',
  95. cls:'',
  96. }
  97. ]
  98. }
  99. }
  100. },
  101. methods: {
  102. // 点击选择框的每一项
  103. clickMenuItem(detailMessageIndex){
  104. let cls = this.portalDetail.detailMessageList[detailMessageIndex].cls
  105. if (cls.includes("v-menu-item-select-selected selected")) {
  106. this.portalDetail.detailMessageList[detailMessageIndex].cls = 'active'
  107. let obj = {
  108. index: detailMessageIndex,
  109. cls: 'v-widget-item sds-window-v5 syno-sds-widget-item',
  110. cls1: this.portalDetail.detailMessageList[detailMessageIndex].cls,
  111. }
  112. this.$bus.emit("showOrHiddenWidgetItem",obj)
  113. }else{
  114. this.portalDetail.detailMessageList[detailMessageIndex].cls = 'v-menu-item-select-selected selected active'
  115. let obj = {
  116. index: detailMessageIndex,
  117. cls:'v-widget-item sds-window-v5 syno-sds-widget-item active',
  118. cls1: this.portalDetail.detailMessageList[detailMessageIndex].cls
  119. }
  120. this.$bus.emit("showOrHiddenWidgetItem",obj)
  121. }
  122. this.countSelectedMenuItem()
  123. this.$bus.emit("changeThumbHeight",this.portalDetail.selectedNum)
  124. },
  125. // 鼠标移入选择框的每一项
  126. mouseenterMenuItem(detailMessageIndex){
  127. let cls = this.portalDetail.detailMessageList[detailMessageIndex].cls;
  128. if (cls.includes("v-menu-item-select-selected selected")) {
  129. this.portalDetail.detailMessageList[detailMessageIndex].cls =
  130. "v-menu-item-select-selected selected active";
  131. } else if (cls === "") {
  132. this.portalDetail.detailMessageList[detailMessageIndex].cls = "active";
  133. }
  134. if(detailMessageIndex && this.portalDetail.detailMessageList[0].cls.includes('active')){
  135. this.portalDetail.detailMessageList[0].cls = this.portalDetail.detailMessageList[0].cls.replace('active','')
  136. }
  137. },
  138. // 鼠标移出选择框的每一项
  139. mouseleaveMenuItem(detailMessageIndex){
  140. let cls = this.portalDetail.detailMessageList[detailMessageIndex].cls;
  141. if (cls && cls.includes('active')){
  142. this.portalDetail.detailMessageList[detailMessageIndex].cls = cls.replace('active','')
  143. }
  144. },
  145. // 显示或隐藏选择框
  146. showOrHiddenSelectWidgetItem(obj){
  147. if(obj.detailMessageList){
  148. this.portalDetail.detailMessageList = JSON.parse(JSON.stringify(obj.detailMessageList))
  149. if(this.portalDetail.display === 'none'){
  150. this.portalDetail.display = 'block'
  151. this.$bus.emit(
  152. "showOrHiddenSelectWidgetPosition",'none'
  153. );
  154. let fn = (e)=>{
  155. let el = document.querySelector('.v-widget-header-tool-icon.add')
  156. if(e.srcElement !== el){
  157. this.portalDetail.display = 'none'
  158. }
  159. window.removeEventListener('click',fn,true)
  160. }
  161. window.addEventListener('click',fn,true)
  162. }else if(this.portalDetail.display === 'block'){
  163. this.portalDetail.display = 'none'
  164. }
  165. }
  166. },
  167. //统计已选择的个数
  168. countSelectedMenuItem(){
  169. this.portalDetail.selectedNum = 0
  170. this.portalDetail.detailMessageList.forEach(item=>{
  171. if(item.cls && item.cls.includes('v-menu-item-select-selected selected')){
  172. this.portalDetail.selectedNum ++
  173. }
  174. })
  175. }
  176. },
  177. mounted(){
  178. this.$bus.on('showOrHiddenSelectWidgetItem',this.showOrHiddenSelectWidgetItem)
  179. },
  180. components:{
  181. }
  182. }
  183. </script>