index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. <template>
  2. <!-- 菜单弹窗 -->
  3. <div>
  4. <div class="x-window synopkg-window sds-window-v5 x-resizable-pinned"
  5. style="height:100%;position: absolute; visibility: visible; left: 50%; top: 0px;transform: translateX(-50%)"
  6. :style="{width:`${detailMessage.width}`,display:detailMessage.display,zIndex:detailMessage.zIndex}"
  7. :class="detailMessage.cls"
  8. v-for="(detailMessage, detailMessageIndex) in resizablePinnedDetail.detailMessageList" :key="detailMessage.id"
  9. @click.stop="changeDialogWindow(detailMessage.titleImgUrl,detailMessageIndex)">
  10. <div class="x-dlg-focus tjCenter" tabindex="0" role="application"></div>
  11. <div class="x-window-tl">
  12. <div class="x-window-tr">
  13. <div class="x-window-tc">
  14. <div class="x-window-header x-panel-icon x-window-draggable"
  15. :style="{backgroundImage: `url(${detailMessage.titleImgUrl})`}">
  16. <div class="x-window-toolCt" role="listbox">
  17. <div class="x-tool x-tool-close" role="option" @click.stop="closeWindow(detailMessageIndex)">
  18. &nbsp;</div>
  19. <div class="x-tool x-tool-restore" role="option"
  20. :style="{display: `${detailMessage.iconRestore}`}"
  21. @click.stop= "restoreMizeWindow(detailMessageIndex)">&nbsp;
  22. </div>
  23. <div class="x-tool x-tool-maximize" role="option" @click.stop = "maxMizeWindow(detailMessageIndex)"
  24. :style="{display: `${detailMessage.iconMaximize}`}">&nbsp;</div>
  25. <div class="x-tool x-tool-minimize" role="option" @click.stop="minMizeWindow(detailMessageIndex)">&nbsp;</div>
  26. <div class="x-tool x-tool-help" role="option" @click.stop="openDSMWindow()">
  27. &nbsp;</div>
  28. </div><span class="x-window-header-text">{{detailMessage.title}}</span>
  29. </div>
  30. </div>
  31. </div>
  32. </div>
  33. <div class="x-window-bwrap">
  34. <div class="x-window-ml">
  35. <div class="x-window-mr">
  36. <div class="x-window-mc">
  37. <div class="x-window-tbar" style="width: 100%">
  38. <div class="x-toolbar x-small-editor synopkg-toolbar syno-ux-toolbar x-toolbar-layout-ct" style="height: 40px; width: 1230px;">
  39. <table cellspacing="0" class="x-toolbar-ct">
  40. <tbody>
  41. <tr>
  42. <td class="x-toolbar-left" align="left">
  43. <!--
  44. <table cellspacing="0">
  45. <tbody>
  46. <tr class="x-toolbar-left-row">
  47. <td class="x-toolbar-cell"><span cellspacing="0"
  48. class="x-btn synopkg-toolbar-back-btn synopkg-icon-btn syno-ux-button syno-ux-button-default x-btn-icon x-item-disabled"
  49. style="margin-left: 0px; height: 28px;"><em
  50. class=" x-unselectable"><button
  51. type="button"
  52. class=" x-btn-text synopkg-toolbar-back-icon synopkg-btn-icon"
  53. ></button></em></span>
  54. </td>
  55. <td class="x-toolbar-cell"><span cellspacing="0"
  56. class="x-btn synopkg-toolbar-next-btn synopkg-icon-btn syno-ux-button syno-ux-button-default x-btn-icon x-item-disabled"
  57. style="margin-left: 0px; height: 28px;"><em
  58. class=" x-unselectable"><button
  59. type="button"
  60. class=" x-btn-text synopkg-toolbar-next-icon synopkg-btn-icon"
  61. ></button></em></span>
  62. </td>
  63. <td class="x-toolbar-cell"><span cellspacing="0"
  64. class="x-btn syno-ux-button syno-ux-button-default x-btn-icon"
  65. style="margin-left: 0px; height: 26px;"><em
  66. class=" x-unselectable"><button
  67. type="button"
  68. class=" x-btn-text synopkg-toolbar-refresh-icon synopkg-btn-icon"
  69. ></button></em></span>
  70. </td>
  71. <td class="x-toolbar-cell syno-ux-textfilter">
  72. <div class="x-form-field-wrap x-form-field-trigger-wrap"
  73. style="width: 100%;">
  74. <input type="text" size="16"
  75. autocomplete="off"
  76. class="x-form-text x-form-field syno-ux-textfilter-text x-form-empty-field"
  77. placeholder="搜索"
  78. style="width: calc((100% - 30px) - 3px);"><button
  79. type="button"
  80. class="x-form-trigger syno-ux-textfilter-trigger"
  81. style="visibility: hidden;"></button>
  82. </div>
  83. <div role="presentation"
  84. class="x-form-hidden-error-msg"></div>
  85. </td>
  86. <td class="x-toolbar-cell">
  87. <div class="x-form-display-field"
  88. style="width: 16px;">
  89. </div>
  90. <div role="presentation"
  91. class="x-form-hidden-error-msg"></div>
  92. </td>
  93. <td class="x-toolbar-cell"><span cellspacing="0"
  94. class="x-btn syno-ux-button syno-ux-button-default x-btn-noicon"
  95. style="width: auto; margin-left: 0px; height: 26px;"><em
  96. class=" x-unselectable"><button
  97. type="button"
  98. class=" x-btn-text">手动安装</button></em></span>
  99. </td>
  100. <td class="x-toolbar-cell"><span cellspacing="0"
  101. class="x-btn syno-ux-button syno-ux-button-default x-btn-noicon"
  102. style="width: auto; margin-left: 0px; height: 26px;"><em
  103. class=" x-unselectable"><button
  104. type="button"
  105. class=" x-btn-text">设置</button></em></span>
  106. </td>
  107. </tr>
  108. </tbody>
  109. </table>
  110. -->
  111. </td>
  112. <td class="x-toolbar-right" align="right">
  113. <!--
  114. <table cellspacing="0" class="x-toolbar-right-ct">
  115. <tbody>
  116. <tr>
  117. <td>
  118. <table cellspacing="0">
  119. <tbody>
  120. <tr class="x-toolbar-right-row">
  121. </tr>
  122. </tbody>
  123. </table>
  124. </td>
  125. <td>
  126. <table cellspacing="0">
  127. <tbody>
  128. <tr class="x-toolbar-extras-row">
  129. </tr>
  130. </tbody>
  131. </table>
  132. </td>
  133. </tr>
  134. </tbody>
  135. </table>
  136. -->
  137. </td>
  138. </tr>
  139. </tbody>
  140. </table>
  141. </div>
  142. </div>
  143. <div class="x-window-body x-border-layout-ct" style="width: 100%; height: 484px;">
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. <div class="x-window-bl x-panel-nofooter">
  149. <div class="x-window-br">
  150. <div class="x-window-bc"></div>
  151. </div>
  152. </div>
  153. </div>
  154. </div>
  155. </div>
  156. </template>
  157. <script>
  158. export default {
  159. data() {
  160. return {
  161. resizablePinnedDetail:{
  162. detailMessageList: [
  163. {
  164. id:'0',
  165. width:'1254px',
  166. title:'套件中心',
  167. spacialCls:'tjCenter',
  168. cls:'',
  169. titleImgUrl:'../../../../public/image/index/tjCenter.png',
  170. display:'none',
  171. zIndex:9053,
  172. iconRestore: 'none',
  173. iconMaximize: 'block'
  174. },
  175. {
  176. id:'1',
  177. width:'1150px',
  178. title:'控制中心',
  179. spacialCls:'controlCenter',
  180. cls:'11111111',
  181. titleImgUrl:'../../../../public/image/index/controlCenter.png',
  182. display:'none',
  183. zIndex:9053,
  184. iconRestore: 'none',
  185. iconMaximize: 'block'
  186. },
  187. {
  188. id:'2',
  189. width:'1010px',
  190. title:'File Station',
  191. spacialCls:'file',
  192. cls:'',
  193. titleImgUrl:'../../../../public/image/index/file.png',
  194. display:'none',
  195. zIndex:9053,
  196. iconRestore: 'none',
  197. iconMaximize: 'block'
  198. },
  199. {
  200. id:'3',
  201. width:'1010px',
  202. title:'DSM 说明',
  203. spacialCls:'question',
  204. cls:'',
  205. titleImgUrl:'../../../../public/image/index/question.png',
  206. display:'none',
  207. zIndex:9053,
  208. iconRestore: 'none',
  209. iconMaximize: 'block'
  210. }
  211. ]
  212. },
  213. defaultZIndex:9053,
  214. lastCheckIndex: -1,
  215. openWindowNum:0,
  216. detailMessageWidthList:[
  217. {
  218. width:'1254px',
  219. },
  220. {
  221. width:'1150px',
  222. },
  223. {
  224. width:'1010px',
  225. },
  226. {
  227. width:'1010px',
  228. }
  229. ]
  230. }
  231. },
  232. mounted(){
  233. this.$bus.on('clickShortcutItem',this.clickShortcutItem)
  234. this.$bus.on('clickMenuItem',this.clickMenuItem)
  235. },
  236. methods: {
  237. // 点击大菜单图标
  238. clickShortcutItem(obj){
  239. let {detailMessageIndex} = obj
  240. this.openDialogWindow(detailMessageIndex)
  241. },
  242. // 点击小菜单图标
  243. clickMenuItem(imgUrl){
  244. let detailMessageIndex = this.resizablePinnedDetail.detailMessageList.findIndex(item =>{
  245. return item.titleImgUrl == imgUrl
  246. })
  247. this.openDialogWindow(detailMessageIndex)
  248. },
  249. // 打开弹出窗口
  250. openDialogWindow(detailMessageIndex){
  251. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].display = 'block'
  252. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].cls = 'active-win'
  253. this.$bus.emit("changeFixWindowZIndex")
  254. if(this.lastCheckIndex == detailMessageIndex){
  255. return
  256. }
  257. this.resizablePinnedDetail.detailMessageList.forEach(item=>{
  258. item.cls = ''
  259. })
  260. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].cls= 'active-win'
  261. this.defaultZIndex = this.defaultZIndex + 10
  262. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].zIndex = this.defaultZIndex
  263. this.lastCheckIndex = detailMessageIndex
  264. },
  265. // 切换弹出窗口
  266. changeDialogWindow(imgUrl,menuIndex){
  267. // let detailMessageList = this.resizablePinnedDetail.detailMessageList.filter(item=>{
  268. // return item.display == 'block'
  269. // })
  270. // detailMessageList = JSON.parse(JSON.stringify(this.arraySort (detailMessageList,'zIndex')))
  271. // if(this.resizablePinnedDetail.detailMessageList[menuIndex].title == detailMessageList[detailMessageList.length-1].title){
  272. // return
  273. // }
  274. this.$bus.emit("changeDialogWindow",imgUrl)
  275. this.openDialogWindow(menuIndex)
  276. },
  277. // 打开DSM 说明
  278. openDSMWindow(){
  279. let detailMessageIndex = this.resizablePinnedDetail.detailMessageList.findIndex(item =>{
  280. return item.title === 'DSM 说明'
  281. })
  282. this.openDialogWindow(detailMessageIndex)
  283. let imgUrl = this.resizablePinnedDetail.detailMessageList[detailMessageIndex].titleImgUrl
  284. let spacialCls = this.resizablePinnedDetail.detailMessageList[detailMessageIndex].spacialCls
  285. let obj ={imgUrl,spacialCls}
  286. this.$bus.emit("changeDialogWindow",obj)
  287. },
  288. // 最小化弹出框口
  289. minMizeWindow(detailMessageIndex){
  290. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].display = 'none'
  291. this.countOpenWindowNum()
  292. // if(this.openWindowNum == 1){
  293. // this.defaultZIndex = this.resizablePinnedDetail.detailMessageList[detailMessageIndex].zIndex
  294. // this.$bus.emit("changeDialogWindow",this.resizablePinnedDetail.detailMessageList[detailMessageIndex].titleImgUrl)
  295. // }else{
  296. // }
  297. // let imgUrl = this.resizablePinnedDetail.detailMessageList[detailMessageIndex].titleImgUrl
  298. // let index = this.resizablePinnedDetail.detailMessageList.findIndex(item=>{
  299. // return item.zIndex == (this.defaultZIndex - 10)
  300. // })
  301. // if(index != -1){
  302. // this.defaultZIndex = this.resizablePinnedDetail.detailMessageList[index].zIndex
  303. // this.$bus.emit("changeDialogWindow",this.resizablePinnedDetail.detailMessageList[index].titleImgUrl)
  304. // }
  305. let detailMessageList = this.resizablePinnedDetail.detailMessageList.filter(item=>{
  306. return item.display == 'block'
  307. })
  308. detailMessageList = JSON.parse(JSON.stringify(this.arraySort (detailMessageList,'zIndex')))
  309. if(detailMessageList.length){
  310. this.defaultZIndex = this.defaultZIndex -10
  311. this.$bus.emit("changeDialogWindow",detailMessageList[detailMessageList.length-1].titleImgUrl)
  312. }
  313. },
  314. //最大化弹出窗口
  315. maxMizeWindow(detailMessageIndex){
  316. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].width = '100%'
  317. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].iconRestore = 'block'
  318. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].iconMaximize = 'none'
  319. },
  320. //恢复弹出窗口宽度
  321. restoreMizeWindow(detailMessageIndex){
  322. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].width = this.detailMessageWidthList[detailMessageIndex].width
  323. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].iconRestore = 'none'
  324. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].iconMaximize = 'block'
  325. },
  326. //关闭弹出窗口
  327. closeWindow(detailMessageIndex){
  328. this.resizablePinnedDetail.detailMessageList[detailMessageIndex].display = 'none'
  329. let imgUrl = this.resizablePinnedDetail.detailMessageList[detailMessageIndex].titleImgUrl
  330. this.$bus.emit('closeDialogWindow',imgUrl)
  331. let detailMessageList = this.resizablePinnedDetail.detailMessageList.filter(item=>{
  332. return item.display == 'block'
  333. })
  334. detailMessageList = JSON.parse(JSON.stringify(this.arraySort (detailMessageList,'zIndex')))
  335. if(detailMessageList.length){
  336. this.defaultZIndex = this.defaultZIndex -10
  337. this.$bus.emit("changeDialogWindow",detailMessageList[detailMessageList.length-1].titleImgUrl)
  338. }
  339. } ,
  340. //统计打开的弹出窗口
  341. countOpenWindowNum(){
  342. this.openWindowNum = 0
  343. this.resizablePinnedDetail.detailMessageList.forEach(item=>{
  344. if(item.display === 'block'){
  345. this.openWindowNum ++
  346. }
  347. })
  348. if(this.openWindowNum == 0){
  349. this.resizablePinnedDetail.detailMessageList.forEach(item=>{
  350. item.zIndex = 9053
  351. })
  352. this.defaultZIndex = 9053
  353. }
  354. },
  355. // 按z-index 给menuItem排序
  356. arraySort (array,key){
  357. return array.sort(function(a,b){
  358. var x=a[key];//如果要从大到小,把x,y互换就好
  359. var y=b[key];
  360. return ((x<y)?-1:((x>y)?1:0));
  361. });
  362. },
  363. // 移动弹出框窗口位置
  364. moveWindowPosition(e){
  365. console.log(e.target,e)
  366. var x = e.pageX;
  367. var y = e.pageY;
  368. console.log(x,y)
  369. }
  370. },
  371. components:{
  372. },
  373. name:'ResizablePinned',
  374. }
  375. </script>