index.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. <template>
  2. <!-- 菜单弹窗 -->
  3. <div>
  4. <div
  5. class="x-window synopkg-window sds-window-v5 x-resizable-pinned"
  6. style="
  7. position: absolute;
  8. visibility: visible;
  9. left: 50%;
  10. top: 50%;
  11. transform: translate(-50%, -50%);
  12. background: #fff;
  13. "
  14. :style="{
  15. width: detailMessage.width,
  16. height: detailMessage.height,
  17. minHeight: detailMessage.minHeight,
  18. display: detailMessage.display,
  19. zIndex: detailMessage.zIndex,
  20. }"
  21. :class="detailMessage.cls"
  22. v-for="(
  23. detailMessage, detailMessageIndex
  24. ) in resizablePinnedDetail.detailMessageList"
  25. :key="detailMessage.id"
  26. @click="
  27. changeDialogWindow(detailMessage.titleImgUrl, detailMessageIndex)
  28. "
  29. >
  30. <div class="x-dlg-focus tjCenter" tabindex="0" role="application"></div>
  31. <div class="x-window-tl" @click="moveWindowPosition">
  32. <div class="x-window-tr">
  33. <div class="x-window-tc">
  34. <div
  35. class="x-window-header x-panel-icon x-window-draggable"
  36. :style="{ backgroundImage: `url(${detailMessage.titleImgUrl})` }"
  37. >
  38. <div class="x-window-toolCt" role="listbox">
  39. <div
  40. class="x-tool x-tool-close"
  41. role="option"
  42. @click.stop="closeWindow(detailMessageIndex)"
  43. >
  44. &nbsp;
  45. </div>
  46. <div
  47. class="x-tool x-tool-restore"
  48. role="option"
  49. :style="{ display: `${detailMessage.iconRestore}` }"
  50. @click.stop="restoreMizeWindow(detailMessageIndex)"
  51. >
  52. &nbsp;
  53. </div>
  54. <div
  55. class="x-tool x-tool-maximize"
  56. role="option"
  57. @click.stop="maxMizeWindow(detailMessageIndex)"
  58. :style="{ display: `${detailMessage.iconMaximize}` }"
  59. >
  60. &nbsp;
  61. </div>
  62. <div
  63. class="x-tool x-tool-minimize"
  64. role="option"
  65. @click.stop="minMizeWindow(detailMessageIndex)"
  66. >
  67. &nbsp;
  68. </div>
  69. <div
  70. class="x-tool x-tool-help"
  71. role="option"
  72. @click.stop="openDSMWindow()"
  73. >
  74. &nbsp;
  75. </div>
  76. </div>
  77. <span class="x-window-header-text">{{
  78. detailMessage.title
  79. }}</span>
  80. </div>
  81. </div>
  82. </div>
  83. </div>
  84. <div class="x-window-bwrap">
  85. <div class="x-window-ml">
  86. <div class="x-window-mr">
  87. <div class="x-window-mc">
  88. <div class="x-window-tbar" style="width: 100%">
  89. <div
  90. class="
  91. x-toolbar x-small-editor
  92. synopkg-toolbar
  93. syno-ux-toolbar
  94. x-toolbar-layout-ct
  95. "
  96. style="height: 40px; width: 1230px"
  97. >
  98. <table cellspacing="0" class="x-toolbar-ct">
  99. <tbody>
  100. <tr>
  101. <td class="x-toolbar-left" align="left">
  102. <!--
  103. <table cellspacing="0">
  104. <tbody>
  105. <tr class="x-toolbar-left-row">
  106. <td class="x-toolbar-cell"><span cellspacing="0"
  107. class="x-btn synopkg-toolbar-back-btn synopkg-icon-btn syno-ux-button syno-ux-button-default x-btn-icon x-item-disabled"
  108. style="margin-left: 0px; height: 28px;"><em
  109. class=" x-unselectable"><button
  110. type="button"
  111. class=" x-btn-text synopkg-toolbar-back-icon synopkg-btn-icon"
  112. ></button></em></span>
  113. </td>
  114. <td class="x-toolbar-cell"><span cellspacing="0"
  115. class="x-btn synopkg-toolbar-next-btn synopkg-icon-btn syno-ux-button syno-ux-button-default x-btn-icon x-item-disabled"
  116. style="margin-left: 0px; height: 28px;"><em
  117. class=" x-unselectable"><button
  118. type="button"
  119. class=" x-btn-text synopkg-toolbar-next-icon synopkg-btn-icon"
  120. ></button></em></span>
  121. </td>
  122. <td class="x-toolbar-cell"><span cellspacing="0"
  123. class="x-btn syno-ux-button syno-ux-button-default x-btn-icon"
  124. style="margin-left: 0px; height: 26px;"><em
  125. class=" x-unselectable"><button
  126. type="button"
  127. class=" x-btn-text synopkg-toolbar-refresh-icon synopkg-btn-icon"
  128. ></button></em></span>
  129. </td>
  130. <td class="x-toolbar-cell syno-ux-textfilter">
  131. <div class="x-form-field-wrap x-form-field-trigger-wrap"
  132. style="width: 100%;">
  133. <input type="text" size="16"
  134. autocomplete="off"
  135. class="x-form-text x-form-field syno-ux-textfilter-text x-form-empty-field"
  136. placeholder="搜索"
  137. style="width: calc((100% - 30px) - 3px);"><button
  138. type="button"
  139. class="x-form-trigger syno-ux-textfilter-trigger"
  140. style="visibility: hidden;"></button>
  141. </div>
  142. <div role="presentation"
  143. class="x-form-hidden-error-msg"></div>
  144. </td>
  145. <td class="x-toolbar-cell">
  146. <div class="x-form-display-field"
  147. style="width: 16px;">
  148. </div>
  149. <div role="presentation"
  150. class="x-form-hidden-error-msg"></div>
  151. </td>
  152. <td class="x-toolbar-cell"><span cellspacing="0"
  153. class="x-btn syno-ux-button syno-ux-button-default x-btn-noicon"
  154. style="width: auto; margin-left: 0px; height: 26px;"><em
  155. class=" x-unselectable"><button
  156. type="button"
  157. class=" x-btn-text">手动安装</button></em></span>
  158. </td>
  159. <td class="x-toolbar-cell"><span cellspacing="0"
  160. class="x-btn syno-ux-button syno-ux-button-default x-btn-noicon"
  161. style="width: auto; margin-left: 0px; height: 26px;"><em
  162. class=" x-unselectable"><button
  163. type="button"
  164. class=" x-btn-text">设置</button></em></span>
  165. </td>
  166. </tr>
  167. </tbody>
  168. </table>
  169. -->
  170. </td>
  171. <td class="x-toolbar-right" align="right">
  172. <!--
  173. <table cellspacing="0" class="x-toolbar-right-ct">
  174. <tbody>
  175. <tr>
  176. <td>
  177. <table cellspacing="0">
  178. <tbody>
  179. <tr class="x-toolbar-right-row">
  180. </tr>
  181. </tbody>
  182. </table>
  183. </td>
  184. <td>
  185. <table cellspacing="0">
  186. <tbody>
  187. <tr class="x-toolbar-extras-row">
  188. </tr>
  189. </tbody>
  190. </table>
  191. </td>
  192. </tr>
  193. </tbody>
  194. </table>
  195. -->
  196. </td>
  197. </tr>
  198. </tbody>
  199. </table>
  200. </div>
  201. </div>
  202. <div
  203. class="x-window-body x-border-layout-ct"
  204. style="width: 100%; height: 484px"
  205. ></div>
  206. </div>
  207. </div>
  208. </div>
  209. <div class="x-window-bl x-panel-nofooter">
  210. <div class="x-window-br">
  211. <div class="x-window-bc"></div>
  212. </div>
  213. </div>
  214. </div>
  215. </div>
  216. </div>
  217. </template>
  218. <script>
  219. export default {
  220. props: ["defaultZIndex"],
  221. data() {
  222. return {
  223. resizablePinnedDetail: {
  224. detailMessageList: [
  225. {
  226. id: "0",
  227. width: "1254px",
  228. height: "calc(100vh - 80px)",
  229. minHeight: "560px",
  230. title: "套件中心",
  231. spacialCls: "tjCenter",
  232. cls: "deactive-win",
  233. titleImgUrl: "../../../../public/image/index/tjCenter.png",
  234. display: "none",
  235. zIndex: 9053,
  236. iconRestore: "none",
  237. iconMaximize: "block",
  238. },
  239. {
  240. id: "1",
  241. width: "1150px",
  242. height: "calc(100vh - 120px)",
  243. minHeight: "520px",
  244. title: "控制中心",
  245. spacialCls: "controlCenter",
  246. cls: "deactive-win",
  247. titleImgUrl: "../../../../public/image/index/controlCenter.png",
  248. display: "none",
  249. zIndex: 9053,
  250. iconRestore: "none",
  251. iconMaximize: "block",
  252. },
  253. {
  254. id: "2",
  255. width: "1010px",
  256. height: "calc(100vh - 200px)",
  257. minHeight: "440px",
  258. title: "File Station",
  259. spacialCls: "file",
  260. cls: "deactive-win",
  261. titleImgUrl: "../../../../public/image/index/file.png",
  262. display: "none",
  263. zIndex: 9053,
  264. iconRestore: "none",
  265. iconMaximize: "block",
  266. },
  267. {
  268. id: "3",
  269. width: "1010px",
  270. height: "calc(100vh - 220px)",
  271. minHeight: "420px",
  272. title: "DSM 说明",
  273. spacialCls: "question",
  274. cls: "deactive-win",
  275. titleImgUrl: "../../../../public/image/index/question.png",
  276. display: "none",
  277. zIndex: 9053,
  278. iconRestore: "none",
  279. iconMaximize: "block",
  280. },
  281. ],
  282. },
  283. lastCheckIndex: -1,
  284. openWindowNum: 0,
  285. detailMessageWidthList: [
  286. {
  287. width: "1254px",
  288. },
  289. {
  290. width: "1150px",
  291. },
  292. {
  293. width: "1010px",
  294. },
  295. {
  296. width: "1010px",
  297. },
  298. ],
  299. fixWindowZIndedxIsMax: false,
  300. };
  301. },
  302. mounted() {
  303. this.$bus.on("clickShortcutItem", this.clickShortcutItem);
  304. this.$bus.on("clickMenuItem", this.clickMenuItem);
  305. // this.$bus.on("fixWindowZIndexMax", this.fixWindowZIndexMax);
  306. // this.$bus.on(
  307. // "changeMinDefaultZindexWindowCls",
  308. // this.changeMinDefaultZindexWindowCls
  309. // );
  310. },
  311. methods: {
  312. // 点击大菜单图标
  313. clickShortcutItem(obj) {
  314. let { detailMessageIndex } = obj;
  315. this.openDialogWindow(detailMessageIndex);
  316. },
  317. // 点击小菜单图标
  318. clickMenuItem(imgUrl) {
  319. let detailMessageIndex =
  320. this.resizablePinnedDetail.detailMessageList.findIndex((item) => {
  321. return item.titleImgUrl == imgUrl;
  322. });
  323. this.openDialogWindow(detailMessageIndex);
  324. },
  325. // 打开弹出窗口
  326. openDialogWindow(detailMessageIndex) {
  327. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].display =
  328. "block";
  329. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].cls =
  330. "active-win";
  331. this.$bus.emit("changeFixWindowZIndex");
  332. if (
  333. this.lastCheckIndex == detailMessageIndex &&
  334. this.zIndex >= this.defaultZIndex
  335. ) {
  336. return;
  337. }
  338. this.resizablePinnedDetail.detailMessageList.forEach((item) => {
  339. item.cls = "deactive-win";
  340. });
  341. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].cls =
  342. "active-win";
  343. let defaultZIndex = this.defaultZIndex + 10;
  344. this.$bus.emit("changeDefaultZIndex", this.defaultZIndex + 10);
  345. // this.defaultZIndex = this.defaultZIndex + 10
  346. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].zIndex =
  347. defaultZIndex;
  348. this.lastCheckIndex = detailMessageIndex;
  349. this.$bus.emit(
  350. "changeDialogWindow",
  351. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].titleImgUrl
  352. );
  353. // this.changeZIndexMaxMenuItemCls()
  354. // this.$bus.emit('dialogWindowZIndexIsMax',true)
  355. // this.$bus.emit("fixWindowZIndexMax", false);
  356. },
  357. // 切换弹出窗口
  358. changeDialogWindow(imgUrl, menuIndex) {
  359. // let detailMessageList = this.resizablePinnedDetail.detailMessageList.filter(item=>{
  360. // return item.display == 'block'
  361. // })
  362. // detailMessageList = JSON.parse(JSON.stringify(this.arraySort (detailMessageList,'zIndex')))
  363. // if(this.resizablePinnedDetail.detailMessageList[menuIndex].title == detailMessageList[detailMessageList.length-1].title){
  364. // return
  365. // }
  366. this.$bus.emit("changeDialogWindow", imgUrl);
  367. this.openDialogWindow(menuIndex);
  368. // this.$bus.emit("fixWindowZIndexMax", false);
  369. // this.changeZIndexMaxMenuItemCls()
  370. },
  371. // 打开DSM 说明
  372. openDSMWindow() {
  373. let detailMessageIndex =
  374. this.resizablePinnedDetail.detailMessageList.findIndex((item) => {
  375. return item.title === "DSM 说明";
  376. });
  377. this.openDialogWindow(detailMessageIndex);
  378. let imgUrl =
  379. this.resizablePinnedDetail.detailMessageList[detailMessageIndex]
  380. .titleImgUrl;
  381. let spacialCls =
  382. this.resizablePinnedDetail.detailMessageList[detailMessageIndex]
  383. .spacialCls;
  384. let obj = { imgUrl, spacialCls };
  385. // this.$bus.emit("changeDialogWindow", obj);
  386. },
  387. // 最小化弹出框口
  388. minMizeWindow(detailMessageIndex) {
  389. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].display =
  390. "none";
  391. this.countOpenWindowNum();
  392. let detailMessageList =
  393. this.resizablePinnedDetail.detailMessageList.filter((item) => {
  394. return item.display == "block";
  395. });
  396. if (detailMessageList.length) {
  397. detailMessageList = JSON.parse(
  398. JSON.stringify(this.arraySort(detailMessageList, "zIndex"))
  399. );
  400. this.resizablePinnedDetail.detailMessageList[
  401. detailMessageIndex
  402. ].zIndex = this.defaultZIndex - 10;
  403. this.$bus.emit("changeDefaultZIndex", this.defaultZIndex - 10);
  404. let index = this.resizablePinnedDetail.detailMessageList.findIndex(item=>{
  405. return item.title === detailMessageList[detailMessageList.length - 1].title
  406. })
  407. if(index != -1){
  408. this.openDialogWindow(index);
  409. }
  410. }
  411. },
  412. //最大化弹出窗口
  413. maxMizeWindow(detailMessageIndex) {
  414. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].width =
  415. "100%";
  416. this.resizablePinnedDetail.detailMessageList[
  417. detailMessageIndex
  418. ].iconRestore = "block";
  419. this.resizablePinnedDetail.detailMessageList[
  420. detailMessageIndex
  421. ].iconMaximize = "none";
  422. this.openDialogWindow(detailMessageIndex);
  423. // let detailMessageList =
  424. // this.resizablePinnedDetail.detailMessageList.filter((item) => {
  425. // return item.display == "block";
  426. // });
  427. // if (detailMessageList.length) {
  428. // detailMessageList = JSON.parse(
  429. // JSON.stringify(this.arraySort(detailMessageList, "zIndex"))
  430. // );
  431. // // let index = this.resizablePinnedDetail.detailMessageList.findIndex(item=>{
  432. // // return item.title === detailMessageList[detailMessageList.length - 1].title
  433. // // })
  434. // // if(index != -1){
  435. // // }
  436. // }
  437. },
  438. //恢复弹出窗口宽度
  439. restoreMizeWindow(detailMessageIndex) {
  440. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].width =
  441. this.detailMessageWidthList[detailMessageIndex].width;
  442. this.resizablePinnedDetail.detailMessageList[
  443. detailMessageIndex
  444. ].iconRestore = "none";
  445. this.resizablePinnedDetail.detailMessageList[
  446. detailMessageIndex
  447. ].iconMaximize = "block";
  448. this.countOpenWindowNum();
  449. this.openDialogWindow(detailMessageIndex);
  450. },
  451. //关闭弹出窗口
  452. closeWindow(detailMessageIndex) {
  453. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].display =
  454. "none";
  455. let imgUrl =
  456. this.resizablePinnedDetail.detailMessageList[detailMessageIndex]
  457. .titleImgUrl;
  458. this.$bus.emit("closeDialogWindow", imgUrl);
  459. let detailMessageList =
  460. this.resizablePinnedDetail.detailMessageList.filter((item) => {
  461. return item.display === "block";
  462. });
  463. if (detailMessageList.length) {
  464. detailMessageList = JSON.parse(
  465. JSON.stringify(this.arraySort(detailMessageList, "zIndex"))
  466. );
  467. this.resizablePinnedDetail.detailMessageList[
  468. detailMessageIndex
  469. ].zIndex = this.defaultZIndex - 10;
  470. this.$bus.emit("changeDefaultZIndex", this.defaultZIndex - 10);
  471. // this.$bus.emit(
  472. // "changeDialogWindow",
  473. // detailMessageList[detailMessageList.length - 1].titleImgUrl
  474. // );
  475. let index = this.resizablePinnedDetail.detailMessageList.findIndex(item=>{
  476. return item.title === detailMessageList[detailMessageList.length - 1].title
  477. })
  478. if(index != -1){
  479. this.openDialogWindow(index);
  480. }
  481. }
  482. this.countOpenWindowNum();
  483. },
  484. //统计打开的弹出窗口
  485. countOpenWindowNum() {
  486. this.openWindowNum = 0;
  487. this.resizablePinnedDetail.detailMessageList.forEach((item) => {
  488. if (item.display === "block") {
  489. this.openWindowNum++;
  490. }
  491. });
  492. if (this.openWindowNum == 0) {
  493. // this.$bus.emit('dialogWindowZIndexIsMax',false)
  494. // this.$bus.emit("fixWindowZIndexMax", true);
  495. this.resizablePinnedDetail.detailMessageList.forEach((item) => {
  496. item.zIndex = 9053;
  497. });
  498. this.$bus.emit("changeDefaultZIndex", 9053);
  499. // this.defaultZIndex = 9053
  500. }
  501. },
  502. // 按z-index 给menuItem排序
  503. arraySort(array, key) {
  504. return array.sort(function (a, b) {
  505. var x = a[key]; //如果要从大到小,把x,y互换就好
  506. var y = b[key];
  507. return x < y ? -1 : x > y ? 1 : 0;
  508. });
  509. },
  510. // 移动弹出框窗口位置
  511. moveWindowPosition(e) {
  512. // var x = e.pageX;
  513. // var y = e.pageY;
  514. },
  515. //如果固定窗口的zindex是最大的
  516. // fixWindowZIndexMax(bol) {
  517. // this.fixWindowZIndedxIsMax = bol;
  518. // },
  519. //修改zIndex小于defaultZindex(公共z-index)窗口的类名使其变淡
  520. changeMinDefaultZindexWindowCls() {
  521. // this.changeZIndexMaxMenuItemCls()
  522. // this.resizablePinnedDetail.detailMessageList.forEach((item) => {
  523. // if (item.zIndex < this.defaultZIndex) {
  524. // item.cls = "deactive-win";
  525. // }
  526. // });
  527. // if (!this.fixWindowZIndedxIsMax) {
  528. // // 找有menuItem 等于 defaultZIndex的下标
  529. // let maxZIndexMenuItemIndex =
  530. // this.resizablePinnedDetail.detailMessageList.findIndex((item) => {
  531. // return item.zIndex >= this.defaultZIndex;
  532. // });
  533. // if (maxZIndexMenuItemIndex != -1) {
  534. // let detailMessageList =
  535. // this.resizablePinnedDetail.detailMessageList.filter((item) => {
  536. // return item.display == "block";
  537. // });
  538. // if (detailMessageList.length) {
  539. // detailMessageList = JSON.parse(
  540. // JSON.stringify(this.arraySort(detailMessageList, "zIndex"))
  541. // );
  542. // this.changeFoundMenuItemCls(
  543. // detailMessageList[detailMessageList.length - 1].title
  544. // );
  545. // }
  546. // }
  547. // }
  548. },
  549. // 修改对应标题的menuItem的类名
  550. changeFoundMenuItemCls(title) {
  551. this.resizablePinnedDetail.detailMessageList.forEach((item) => {
  552. if (item.title === title) {
  553. item.cls = "active-win";
  554. } else {
  555. item.cls = "deactive-win";
  556. }
  557. });
  558. },
  559. //修改zIndex最大及其他的menuItem的类名
  560. changeZIndexMenuItemCls() {
  561. // if (this.dialogZIndexMaxIndex == -1) {
  562. // this.resizablePinnedDetail.detailMessageList.forEach((item) => {
  563. // item.cls = "deactive-win";
  564. // });
  565. // } else {
  566. // let maxZIndexMenuItemIndex =
  567. // this.resizablePinnedDetail.detailMessageList.findIndex((item) => {
  568. // return item.zIndex >= this.defaultZIndex;
  569. // });
  570. // if (maxZIndexMenuItemIndex != -1) {
  571. // let detailMessageList =
  572. // this.resizablePinnedDetail.detailMessageList.filter((item) => {
  573. // return item.display == "block";
  574. // });
  575. // if (detailMessageList.length) {
  576. // detailMessageList = JSON.parse(
  577. // JSON.stringify(this.arraySort(detailMessageList, "zIndex"))
  578. // );
  579. // this.changeFoundMenuItemCls(
  580. // detailMessageList[detailMessageList.length - 1].title
  581. // );
  582. // }
  583. // }
  584. // }
  585. },
  586. //
  587. },
  588. watch: {
  589. defaultZIndex() {
  590. this.dialogZIndexMaxIndex =
  591. this.resizablePinnedDetail.detailMessageList.findIndex((item) => {
  592. return item.zIndex >= this.defaultZIndex && item.display === "block";
  593. });
  594. if (
  595. this.dialogZIndexMaxIndex != -1 &&
  596. this.dialogZIndexMaxIndex != undefined
  597. ) {
  598. this.resizablePinnedDetail.detailMessageList.forEach((item) => {
  599. if (item.cls === "active-win") {
  600. item.cls = "deactive-win";
  601. }
  602. });
  603. this.resizablePinnedDetail.detailMessageList[
  604. this.dialogZIndexMaxIndex
  605. ].cls = "active-win";
  606. } else {
  607. this.resizablePinnedDetail.detailMessageList.forEach((item) => {
  608. if (item.cls === "active-win") {
  609. item.cls = "deactive-win";
  610. }
  611. });
  612. }
  613. },
  614. },
  615. beforeDestroy() {
  616. this.$bus.off("clickShortcutItem", this.clickShortcutItem);
  617. this.$bus.off("clickMenuItem", this.clickMenuItem);
  618. },
  619. components: {},
  620. name: "ResizablePinned",
  621. };
  622. </script>
  623. <style scope>
  624. </style>