hackCode.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. (() =>
  2. {
  3. let dirname = "?pos/targetPath"
  4. const fs_extra_1 = require("fs-extra")
  5. const path_1 = require("path")
  6. const vue_1 = require(path_1.join(dirname,'node_modules' ,"vue"))
  7. const exec = require('child_process').exec;
  8. let d = document.getElementById('prefab-tab');
  9. if(d){
  10. d.parentNode.removeChild(d);
  11. }
  12. let div = document.createElement('div');
  13. let ht = fs_extra_1.readFileSync(path_1.join(dirname, "./static/template/default/index.html"), "utf-8");
  14. div.innerHTML = ht;
  15. div.style.cssText = 'height: 21px; border: 1px solid #040404; z-index: 1;'
  16. div.id = 'prefab-tab'
  17. document.body.insertBefore(div, document.getElementById('dock'))
  18. window.vue_1 = vue_1;
  19. console.log("显示")
  20. const e = vue_1.createApp({
  21. el: div,
  22. data() {
  23. return {
  24. tabs: [],//[{ name:'test', uuid:'2' },{ name:'test3', uuid:'3' }],
  25. uiCfg: {},
  26. menuItems: [
  27. { label: '关闭', id: 'close' },
  28. { label: '关闭右侧', id: 'close-rights' },
  29. { label: '关闭其他', id: 'close-others' },
  30. { label: '全部关闭', id: 'close-all' },
  31. { label: '在文件夹中显示', id: 'reveal-in-finder' },
  32. { label: '跳到资源管理器', id: 'reveal-in-side-bar' },
  33. ],
  34. openUuid:'',
  35. menuShow: false,
  36. selectMenuItem: null,
  37. menuPos: { x: 0, y: 0, isLeft: true },
  38. }
  39. },
  40. watch:{
  41. menuShow(val){
  42. div.style.zIndex = val ? '99' : '1';
  43. },
  44. },
  45. mounted(){
  46. vueObj = this;
  47. var style = document.createElement("style");
  48. style.innerHTML = fs_extra_1.readFileSync(path_1.join(dirname, "./static/style/default/index.css"), "utf-8");
  49. div.appendChild(style)
  50. this._openScene1 = this.openScene.bind(this);
  51. Editor.Message.addBroadcastListener('scene:ready',this._openScene1)
  52. this.tabs = JSON.parse(localStorage.getItem('prefabTab') || '[]');
  53. this.openUuid = localStorage.getItem('prefabOpenUuid');
  54. },
  55. unmounted(){
  56. Editor.Message.removeBroadcastListener('scene:ready',this._openScene1)
  57. },
  58. methods:{
  59. openBtn(item){
  60. // this.openUuid = item.uuid
  61. Editor.Message.request("scene",'open-scene',item.uuid)
  62. },
  63. closeBtn(item){
  64. let idx = this.tabs.indexOf(item);
  65. idx != -1 && this.tabs.splice(idx,1)
  66. localStorage.setItem('prefabTab',JSON.stringify(this.tabs))
  67. },
  68. async openScene(uuid){
  69. let filePath = await Editor.Message.request("asset-db",'query-path',uuid);
  70. if(!filePath) return;
  71. let name = path_1.basename(filePath).split('.')[0];
  72. let tab = this.tabs.find((v)=>v.uuid == uuid)
  73. if(!tab){
  74. this.tabs.push({
  75. uuid:uuid,
  76. name:name,
  77. extname: path_1.extname(filePath),
  78. })
  79. localStorage.setItem('prefabTab',JSON.stringify(this.tabs))
  80. }else{
  81. tab.name = name;
  82. }
  83. this.openUuid = uuid;
  84. localStorage.setItem('prefabOpenUuid',uuid)
  85. },
  86. enterTab(item){
  87. this.uiCfg[item.uuid] = true;
  88. },
  89. leaveTab(item){
  90. this.uiCfg[item.uuid] = false;
  91. },
  92. openMenu(item, event){
  93. this.selectMenuItem = item;
  94. this.menuShow = true;
  95. this.menuPos.isLeft = event.clientX < window.innerWidth * 0.85;
  96. this.menuPos.x = this.menuPos.isLeft ? event.clientX : window.innerWidth - event.clientX;
  97. this.menuPos.y = event.clientY;
  98. for(let v of this.menuItems){
  99. v.mouseenter = false;
  100. }
  101. },
  102. async clickMenu(menuItem){
  103. this.menuShow = false;
  104. if(!this.selectMenuItem) return console.warn('not selectMenuItem');
  105. if(menuItem.id == 'close'){
  106. this.closeBtn(this.selectMenuItem)
  107. }else if(menuItem.id == 'close-rights'){
  108. let idx = this.tabs.indexOf(this.selectMenuItem);
  109. if(idx != -1){
  110. this.tabs = this.tabs.slice(0,idx+1);
  111. localStorage.setItem('prefabTab',JSON.stringify(this.tabs))
  112. }
  113. }else if(menuItem.id == 'close-others'){
  114. this.tabs = [this.selectMenuItem];
  115. localStorage.setItem('prefabTab',JSON.stringify(this.tabs))
  116. }else if(menuItem.id == 'close-all'){
  117. this.tabs = [];
  118. localStorage.setItem('prefabTab',JSON.stringify(this.tabs))
  119. }else if(menuItem.id == 'reveal-in-finder'){
  120. let url = await Editor.Message.request('asset-db','query-path',this.selectMenuItem.uuid)
  121. let isWin32 = path_1.sep == '\\';
  122. url && exec(isWin32 ? 'Explorer /select,"'+url+'"' : "open -R " + url)
  123. }else if(menuItem.id == 'reveal-in-side-bar'){
  124. Editor.Message.broadcast('twinkle',this.selectMenuItem.uuid)
  125. }
  126. },
  127. }
  128. });
  129. // e.config.compilerOptions.isCustomElement = (e) => e.startsWith("ui-") || e.startsWith("nobr");
  130. e.mount(div);
  131. })();