@hg2/dataview-core 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/LICENSE +21 -0
  2. package/dist/{ColorList-f583b4da.js → ColorList-ea7fa843.js} +3 -3
  3. package/dist/{ColorList-f583b4da.js.map → ColorList-ea7fa843.js.map} +1 -1
  4. package/dist/{SizeSetting.vue_vue_type_script_setup_true_lang-d60457b9.js → SizeSetting.vue_vue_type_script_setup_true_lang-8eea1525.js} +4 -4
  5. package/dist/{SizeSetting.vue_vue_type_script_setup_true_lang-d60457b9.js.map → SizeSetting.vue_vue_type_script_setup_true_lang-8eea1525.js.map} +1 -1
  6. package/dist/{StylesSetting-3a2f09cb.js → StylesSetting-ee713728.js} +4 -4
  7. package/dist/{StylesSetting-3a2f09cb.js.map → StylesSetting-ee713728.js.map} +1 -1
  8. package/dist/{StylesSetting.vue_vue_type_style_index_0_scoped_2c848e43_lang-218ee765.js → StylesSetting.vue_vue_type_style_index_0_scoped_2c848e43_lang-83299b27.js} +2 -2
  9. package/dist/{StylesSetting.vue_vue_type_style_index_0_scoped_2c848e43_lang-218ee765.js.map → StylesSetting.vue_vue_type_style_index_0_scoped_2c848e43_lang-83299b27.js.map} +1 -1
  10. package/dist/{chart-23862487.js → chart-2793886d.js} +2 -2
  11. package/dist/{chart-23862487.js.map → chart-2793886d.js.map} +1 -1
  12. package/dist/{config-8a924b9b.js → config-3589149b.js} +8 -8
  13. package/dist/{config-8a924b9b.js.map → config-3589149b.js.map} +1 -1
  14. package/dist/{config-6f4a666a.js → config-3be34cf4.js} +8 -8
  15. package/dist/{config-6f4a666a.js.map → config-3be34cf4.js.map} +1 -1
  16. package/dist/{config-29c91c17.js → config-3e53b49a.js} +8 -8
  17. package/dist/{config-29c91c17.js.map → config-3e53b49a.js.map} +1 -1
  18. package/dist/{config-cd9efa95.js → config-485a64ba.js} +4 -4
  19. package/dist/{config-cd9efa95.js.map → config-485a64ba.js.map} +1 -1
  20. package/dist/{config-ab6a73ec.js → config-4af1f86f.js} +8 -8
  21. package/dist/{config-ab6a73ec.js.map → config-4af1f86f.js.map} +1 -1
  22. package/dist/{config-5611455a.js → config-7d66f2de.js} +8 -8
  23. package/dist/{config-5611455a.js.map → config-7d66f2de.js.map} +1 -1
  24. package/dist/{config-6301e301.js → config-81386edc.js} +4 -4
  25. package/dist/{config-6301e301.js.map → config-81386edc.js.map} +1 -1
  26. package/dist/{config-82195189.js → config-85135869.js} +4 -4
  27. package/dist/{config-82195189.js.map → config-85135869.js.map} +1 -1
  28. package/dist/{config-171978d5.js → config-909166e5.js} +8 -8
  29. package/dist/{config-171978d5.js.map → config-909166e5.js.map} +1 -1
  30. package/dist/{config-daec24c5.js → config-a0401d6a.js} +8 -8
  31. package/dist/{config-daec24c5.js.map → config-a0401d6a.js.map} +1 -1
  32. package/dist/{config-1b85b132.js → config-b4c92718.js} +8 -8
  33. package/dist/{config-1b85b132.js.map → config-b4c92718.js.map} +1 -1
  34. package/dist/{config-82178551.js → config-d06d3dba.js} +8 -8
  35. package/dist/{config-82178551.js.map → config-d06d3dba.js.map} +1 -1
  36. package/dist/{config-0cfd8541.js → config-da24a46f.js} +8 -8
  37. package/dist/{config-0cfd8541.js.map → config-da24a46f.js.map} +1 -1
  38. package/dist/{config-bdf34646.js → config-f2e421ca.js} +8 -8
  39. package/dist/{config-bdf34646.js.map → config-f2e421ca.js.map} +1 -1
  40. package/dist/{config-169340f0.js → config-fe93b035.js} +8 -8
  41. package/dist/{config-169340f0.js.map → config-fe93b035.js.map} +1 -1
  42. package/dist/{designSetting-d5ac854f.js → designSetting-420dbd75.js} +19 -19
  43. package/dist/designSetting-420dbd75.js.map +1 -0
  44. package/dist/enums/httpEnum.d.ts +1 -1
  45. package/dist/{index-b01a3eb8.js → index-00787591.js} +6 -6
  46. package/dist/{index-b01a3eb8.js.map → index-00787591.js.map} +1 -1
  47. package/dist/{index-65e18d49.js → index-07cf85cb.js} +9 -9
  48. package/dist/{index-65e18d49.js.map → index-07cf85cb.js.map} +1 -1
  49. package/dist/{index-104a2622.js → index-0c1cb75c.js} +2 -2
  50. package/dist/{index-104a2622.js.map → index-0c1cb75c.js.map} +1 -1
  51. package/dist/{index-fbc57d2a.js → index-12237fd2.js} +11 -11
  52. package/dist/{index-fbc57d2a.js.map → index-12237fd2.js.map} +1 -1
  53. package/dist/{index-798f8f8b.js → index-1a1d8e82.js} +12 -12
  54. package/dist/{index-798f8f8b.js.map → index-1a1d8e82.js.map} +1 -1
  55. package/dist/{index-be653c26.js → index-1e502de3.js} +12 -12
  56. package/dist/{index-be653c26.js.map → index-1e502de3.js.map} +1 -1
  57. package/dist/{index-4e7762ee.js → index-227ada16.js} +3 -3
  58. package/dist/{index-4e7762ee.js.map → index-227ada16.js.map} +1 -1
  59. package/dist/{index-80509d43.js → index-657b732c.js} +10 -10
  60. package/dist/{index-80509d43.js.map → index-657b732c.js.map} +1 -1
  61. package/dist/{index-2f57bca8.js → index-6657c41c.js} +10 -10
  62. package/dist/{index-2f57bca8.js.map → index-6657c41c.js.map} +1 -1
  63. package/dist/{index-9abc2fea.js → index-71001515.js} +12 -12
  64. package/dist/{index-9abc2fea.js.map → index-71001515.js.map} +1 -1
  65. package/dist/{index-1ae147a2.js → index-7279ca05.js} +12 -12
  66. package/dist/{index-1ae147a2.js.map → index-7279ca05.js.map} +1 -1
  67. package/dist/{index-34b4bbc5.js → index-746b469a.js} +12 -12
  68. package/dist/{index-34b4bbc5.js.map → index-746b469a.js.map} +1 -1
  69. package/dist/{index-c719ea31.js → index-74c46481.js} +9 -9
  70. package/dist/{index-c719ea31.js.map → index-74c46481.js.map} +1 -1
  71. package/dist/{index-a1ceba24.js → index-7aad8920.js} +2 -2
  72. package/dist/{index-a1ceba24.js.map → index-7aad8920.js.map} +1 -1
  73. package/dist/{index-f2c2f4d8.js → index-7e3f71d5.js} +9 -9
  74. package/dist/{index-f2c2f4d8.js.map → index-7e3f71d5.js.map} +1 -1
  75. package/dist/{index-ad575add.js → index-90d01963.js} +11 -11
  76. package/dist/{index-ad575add.js.map → index-90d01963.js.map} +1 -1
  77. package/dist/{index-f3ad1572.js → index-9481af80.js} +361 -359
  78. package/dist/index-9481af80.js.map +1 -0
  79. package/dist/{index-67c5f6a7.js → index-9710a4c3.js} +2 -2
  80. package/dist/{index-67c5f6a7.js.map → index-9710a4c3.js.map} +1 -1
  81. package/dist/{index-ce178901.js → index-9af13a71.js} +10 -10
  82. package/dist/{index-ce178901.js.map → index-9af13a71.js.map} +1 -1
  83. package/dist/{index-de02b823.js → index-b9d38391.js} +50 -50
  84. package/dist/index-b9d38391.js.map +1 -0
  85. package/dist/{index-57797674.js → index-bd6d1ea4.js} +8 -8
  86. package/dist/{index-57797674.js.map → index-bd6d1ea4.js.map} +1 -1
  87. package/dist/{index-bc30291e.js → index-c3dfa3d4.js} +9 -9
  88. package/dist/{index-bc30291e.js.map → index-c3dfa3d4.js.map} +1 -1
  89. package/dist/{index-68accd28.js → index-c3e27080.js} +11 -11
  90. package/dist/{index-68accd28.js.map → index-c3e27080.js.map} +1 -1
  91. package/dist/{index-85816403.js → index-cfdb6350.js} +5 -5
  92. package/dist/{index-85816403.js.map → index-cfdb6350.js.map} +1 -1
  93. package/dist/{index-83e0f570.js → index-e49c232d.js} +9 -9
  94. package/dist/{index-83e0f570.js.map → index-e49c232d.js.map} +1 -1
  95. package/dist/{index-8648ed77.js → index-ee2bbc1c.js} +10 -10
  96. package/dist/{index-8648ed77.js.map → index-ee2bbc1c.js.map} +1 -1
  97. package/dist/index.js +9 -9
  98. package/dist/pick-7307d7b0.js +431 -0
  99. package/dist/pick-7307d7b0.js.map +1 -0
  100. package/dist/{plugin-ec84fd96.js → plugin-a2249fc5.js} +3 -3
  101. package/dist/{plugin-ec84fd96.js.map → plugin-a2249fc5.js.map} +1 -1
  102. package/dist/{pondIndex.vue_vue_type_style_index_0_scoped_4bff5632_lang-d29a410a.js → pondIndex.vue_vue_type_style_index_0_scoped_4bff5632_lang-955a4733.js} +387 -351
  103. package/dist/pondIndex.vue_vue_type_style_index_0_scoped_4bff5632_lang-955a4733.js.map +1 -0
  104. package/dist/published/chartItemSetting.js +6 -6
  105. package/dist/published/designSetting.js +1 -1
  106. package/dist/published/hooks.js +4 -4
  107. package/dist/published/plugins.js +3 -3
  108. package/dist/published/public.js +4 -4
  109. package/dist/published/store.js +7 -7
  110. package/dist/published/utils.js +4 -4
  111. package/dist/store/modules/chartEditStore/chartEditStore.d.ts +10 -3
  112. package/dist/{store-06d0fc5f.js → store-7c31860c.js} +8 -8
  113. package/dist/{store-06d0fc5f.js.map → store-7c31860c.js.map} +1 -1
  114. package/dist/style.css +1 -1
  115. package/dist/{useChartDataFetch.hook-900fd72a.js → useChartDataFetch.hook-d7b1b438.js} +460 -462
  116. package/dist/useChartDataFetch.hook-d7b1b438.js.map +1 -0
  117. package/dist/{useSyncUpdate.hook-f4af3d43.js → useSyncUpdate.hook-d2ae52a3.js} +5 -5
  118. package/dist/{useSyncUpdate.hook-f4af3d43.js.map → useSyncUpdate.hook-d2ae52a3.js.map} +1 -1
  119. package/dist/{useTargetData.hook-7495fa0a.js → useTargetData.hook-f9fb6b8f.js} +2 -2
  120. package/dist/{useTargetData.hook-7495fa0a.js.map → useTargetData.hook-f9fb6b8f.js.map} +1 -1
  121. package/package.json +5 -5
  122. package/dist/designSetting-d5ac854f.js.map +0 -1
  123. package/dist/index-de02b823.js.map +0 -1
  124. package/dist/index-f3ad1572.js.map +0 -1
  125. package/dist/pick-3a770d78.js +0 -427
  126. package/dist/pick-3a770d78.js.map +0 -1
  127. package/dist/pondIndex.vue_vue_type_style_index_0_scoped_4bff5632_lang-d29a410a.js.map +0 -1
  128. package/dist/useChartDataFetch.hook-900fd72a.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-34b4bbc5.js","sources":["../src/views/chart/ContentEdit/hooks/useLayout.hook.ts","../../../node_modules/.pnpm/keymaster@1.6.2/node_modules/keymaster/keymaster.js","../src/views/chart/hooks/useKeyboard.hook.ts","../src/views/chart/ContentEdit/hooks/useDrag.hook.ts","../src/views/chart/ContentEdit/hooks/useStyle.hook.ts","../src/views/chart/ContentEdit/components/EditShapeBox/index.vue","../src/views/chart/ContentEdit/components/EditGroup/index.vue","../src/views/chart/ContentEdit/components/EditAlignLine/index.vue","../src/views/chart/ContentEdit/components/EditWatermark/index.vue","../src/views/chart/ContentEdit/components/EditSelect/index.vue","../src/views/chart/ContentEdit/components/EditRange/index.vue","../src/views/chart/ContentEdit/components/EditRule/index.vue","../src/store/modules/chartHistoryStore/chartHistoryDefine.ts","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/reverse.js","../src/views/chart/ContentEdit/components/EditHistory/index.vue","../src/views/chart/ContentEdit/components/EditShortcutKey/ShortcutKeyModal.vue","../src/views/chart/ContentEdit/components/EditShortcutKey/index.vue","../src/views/chart/ContentEdit/components/EditBottom/index.vue","../src/components/GoSystemSet/index.vue","../src/views/chart/ContentEdit/components/EditTools/utils/index.ts","../src/views/chart/ContentEdit/components/EditTools/hooks/useFile.hooks.ts","../src/views/chart/ContentEdit/components/EditTools/index.d.ts","../src/views/chart/ContentEdit/components/EditTools/index.vue","../src/views/chart/ContentEdit/index.vue"],"sourcesContent":["import { onUnmounted, onMounted } from 'vue'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditCanvasTypeEnum } from '@core/store/modules/chartEditStore/chartEditStore.d'\n\n// 布局处理\nexport const useLayout = (fn: () => Promise<void>) => {\n let removeScale: Function = () => { }\n \n onMounted(async () => {\n // 在需要时才获取 store 实例\n const chartEditStore = useChartEditStore()\n \n // 设置 Dom 值(ref 不生效先用 document)\n chartEditStore.setEditCanvas(\n EditCanvasTypeEnum.EDIT_LAYOUT_DOM,\n document.getElementById('go-chart-edit-layout')\n )\n chartEditStore.setEditCanvas(\n EditCanvasTypeEnum.EDIT_CONTENT_DOM,\n document.getElementById('go-chart-edit-content')\n )\n\n // 获取数据\n await fn()\n // 监听初始化\n removeScale = chartEditStore.listenerScale()\n\n })\n\n onUnmounted(() => {\n // 在需要时才获取 store 实例\n const chartEditStore = useChartEditStore()\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.EDIT_LAYOUT_DOM, null)\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.EDIT_CONTENT_DOM, null)\n removeScale()\n })\n}","// keymaster.js\n// (c) 2011-2013 Thomas Fuchs\n// keymaster.js may be freely distributed under the MIT license.\n\n;(function(global){\n var k,\n _handlers = {},\n _mods = { 16: false, 18: false, 17: false, 91: false },\n _scope = 'all',\n // modifier keys\n _MODIFIERS = {\n '⇧': 16, shift: 16,\n '⌥': 18, alt: 18, option: 18,\n '⌃': 17, ctrl: 17, control: 17,\n '⌘': 91, command: 91\n },\n // special keys\n _MAP = {\n backspace: 8, tab: 9, clear: 12,\n enter: 13, 'return': 13,\n esc: 27, escape: 27, space: 32,\n left: 37, up: 38,\n right: 39, down: 40,\n del: 46, 'delete': 46,\n home: 36, end: 35,\n pageup: 33, pagedown: 34,\n ',': 188, '.': 190, '/': 191,\n '`': 192, '-': 189, '=': 187,\n ';': 186, '\\'': 222,\n '[': 219, ']': 221, '\\\\': 220\n },\n code = function(x){\n return _MAP[x] || x.toUpperCase().charCodeAt(0);\n },\n _downKeys = [];\n\n for(k=1;k<20;k++) _MAP['f'+k] = 111+k;\n\n // IE doesn't support Array#indexOf, so have a simple replacement\n function index(array, item){\n var i = array.length;\n while(i--) if(array[i]===item) return i;\n return -1;\n }\n\n // for comparing mods before unassignment\n function compareArray(a1, a2) {\n if (a1.length != a2.length) return false;\n for (var i = 0; i < a1.length; i++) {\n if (a1[i] !== a2[i]) return false;\n }\n return true;\n }\n\n var modifierMap = {\n 16:'shiftKey',\n 18:'altKey',\n 17:'ctrlKey',\n 91:'metaKey'\n };\n function updateModifierKey(event) {\n for(k in _mods) _mods[k] = event[modifierMap[k]];\n };\n\n // handle keydown event\n function dispatch(event) {\n var key, handler, k, i, modifiersMatch, scope;\n key = event.keyCode;\n\n if (index(_downKeys, key) == -1) {\n _downKeys.push(key);\n }\n\n // if a modifier key, set the key.<modifierkeyname> property to true and return\n if(key == 93 || key == 224) key = 91; // right command on webkit, command on Gecko\n if(key in _mods) {\n _mods[key] = true;\n // 'assignKey' from inside this closure is exported to window.key\n for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = true;\n return;\n }\n updateModifierKey(event);\n\n // see if we need to ignore the keypress (filter() can can be overridden)\n // by default ignore key presses if a select, textarea, or input is focused\n if(!assignKey.filter.call(this, event)) return;\n\n // abort if no potentially matching shortcuts found\n if (!(key in _handlers)) return;\n\n scope = getScope();\n\n // for each potential shortcut\n for (i = 0; i < _handlers[key].length; i++) {\n handler = _handlers[key][i];\n\n // see if it's in the current scope\n if(handler.scope == scope || handler.scope == 'all'){\n // check if modifiers match if any\n modifiersMatch = handler.mods.length > 0;\n for(k in _mods)\n if((!_mods[k] && index(handler.mods, +k) > -1) ||\n (_mods[k] && index(handler.mods, +k) == -1)) modifiersMatch = false;\n // call the handler and stop the event if neccessary\n if((handler.mods.length == 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch){\n if(handler.method(event, handler)===false){\n if(event.preventDefault) event.preventDefault();\n else event.returnValue = false;\n if(event.stopPropagation) event.stopPropagation();\n if(event.cancelBubble) event.cancelBubble = true;\n }\n }\n }\n }\n };\n\n // unset modifier keys on keyup\n function clearModifier(event){\n var key = event.keyCode, k,\n i = index(_downKeys, key);\n\n // remove key from _downKeys\n if (i >= 0) {\n _downKeys.splice(i, 1);\n }\n\n if(key == 93 || key == 224) key = 91;\n if(key in _mods) {\n _mods[key] = false;\n for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = false;\n }\n };\n\n function resetModifiers() {\n for(k in _mods) _mods[k] = false;\n for(k in _MODIFIERS) assignKey[k] = false;\n };\n\n // parse and assign shortcut\n function assignKey(key, scope, method){\n var keys, mods;\n keys = getKeys(key);\n if (method === undefined) {\n method = scope;\n scope = 'all';\n }\n\n // for each shortcut\n for (var i = 0; i < keys.length; i++) {\n // set modifier keys if any\n mods = [];\n key = keys[i].split('+');\n if (key.length > 1){\n mods = getMods(key);\n key = [key[key.length-1]];\n }\n // convert to keycode and...\n key = key[0]\n key = code(key);\n // ...store handler\n if (!(key in _handlers)) _handlers[key] = [];\n _handlers[key].push({ shortcut: keys[i], scope: scope, method: method, key: keys[i], mods: mods });\n }\n };\n\n // unbind all handlers for given key in current scope\n function unbindKey(key, scope) {\n var multipleKeys, keys,\n mods = [],\n i, j, obj;\n\n multipleKeys = getKeys(key);\n\n for (j = 0; j < multipleKeys.length; j++) {\n keys = multipleKeys[j].split('+');\n\n if (keys.length > 1) {\n mods = getMods(keys);\n key = keys[keys.length - 1];\n }\n\n key = code(key);\n\n if (scope === undefined) {\n scope = getScope();\n }\n if (!_handlers[key]) {\n return;\n }\n for (i = 0; i < _handlers[key].length; i++) {\n obj = _handlers[key][i];\n // only clear handlers if correct scope and mods match\n if (obj.scope === scope && compareArray(obj.mods, mods)) {\n _handlers[key][i] = {};\n }\n }\n }\n };\n\n // Returns true if the key with code 'keyCode' is currently down\n // Converts strings into key codes.\n function isPressed(keyCode) {\n if (typeof(keyCode)=='string') {\n keyCode = code(keyCode);\n }\n return index(_downKeys, keyCode) != -1;\n }\n\n function getPressedKeyCodes() {\n return _downKeys.slice(0);\n }\n\n function filter(event){\n var tagName = (event.target || event.srcElement).tagName;\n // ignore keypressed in any elements that support keyboard data input\n return !(tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA');\n }\n\n // initialize key.<modifier> to false\n for(k in _MODIFIERS) assignKey[k] = false;\n\n // set current scope (default 'all')\n function setScope(scope){ _scope = scope || 'all' };\n function getScope(){ return _scope || 'all' };\n\n // delete all handlers for a given scope\n function deleteScope(scope){\n var key, handlers, i;\n\n for (key in _handlers) {\n handlers = _handlers[key];\n for (i = 0; i < handlers.length; ) {\n if (handlers[i].scope === scope) handlers.splice(i, 1);\n else i++;\n }\n }\n };\n\n // abstract key logic for assign and unassign\n function getKeys(key) {\n var keys;\n key = key.replace(/\\s/g, '');\n keys = key.split(',');\n if ((keys[keys.length - 1]) == '') {\n keys[keys.length - 2] += ',';\n }\n return keys;\n }\n\n // abstract mods logic for assign and unassign\n function getMods(key) {\n var mods = key.slice(0, key.length - 1);\n for (var mi = 0; mi < mods.length; mi++)\n mods[mi] = _MODIFIERS[mods[mi]];\n return mods;\n }\n\n // cross-browser events\n function addEvent(object, event, method) {\n if (object.addEventListener)\n object.addEventListener(event, method, false);\n else if(object.attachEvent)\n object.attachEvent('on'+event, function(){ method(window.event) });\n };\n\n // set the handlers globally on document\n addEvent(document, 'keydown', function(event) { dispatch(event) }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48\n addEvent(document, 'keyup', clearModifier);\n\n // reset modifiers to false whenever the window is (re)focused.\n addEvent(window, 'focus', resetModifiers);\n\n // store previously defined key\n var previousKey = global.key;\n\n // restore previously defined key and return reference to our key object\n function noConflict() {\n var k = global.key;\n global.key = previousKey;\n return k;\n }\n\n // set window.key and window.key.set/get/deleteScope, and the default filter\n global.key = assignKey;\n global.key.setScope = setScope;\n global.key.getScope = getScope;\n global.key.deleteScope = deleteScope;\n global.key.filter = filter;\n global.key.isPressed = isPressed;\n global.key.getPressedKeyCodes = getPressedKeyCodes;\n global.key.noConflict = noConflict;\n global.key.unbind = unbindKey;\n\n if(typeof module !== 'undefined') module.exports = assignKey;\n\n})(this);\n","import { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { WinKeyboard, MacKeyboard, MenuEnum } from '@core/enums/editPageEnum'\nimport throttle from 'lodash/throttle'\nimport debounce from 'lodash/debounce'\nimport keymaster from 'keymaster'\nimport { setKeyboardDressShow } from '@core/utils'\n\n// Keymaster可以支持识别以下组合键: ⇧,shift,option,⌥,alt,ctrl,control,command,和⌘\n\nconst winCtrlMerge = (e: string) => `${WinKeyboard.CTRL}+${e}`\nconst winShiftMerge = (e: string) => `${WinKeyboard.SHIFT}+${e}`\nconst winAltMerge = (e: string) => `${WinKeyboard.ALT}+${e}`\n\nexport const winKeyboardValue = {\n [MenuEnum.ARROW_UP]: winCtrlMerge('up'),\n [MenuEnum.ARROW_RIGHT]: winCtrlMerge('right'),\n [MenuEnum.ARROW_DOWN]: winCtrlMerge('down'),\n [MenuEnum.ARROW_LEFT]: winCtrlMerge('left'),\n [MenuEnum.COPY]: winCtrlMerge('c'),\n [MenuEnum.CUT]: winCtrlMerge('x'),\n [MenuEnum.PARSE]: winCtrlMerge('v'),\n [MenuEnum.DELETE]: 'delete',\n [MenuEnum.BACK]: winCtrlMerge('z'),\n [MenuEnum.FORWORD]: winCtrlMerge(winShiftMerge('z')),\n [MenuEnum.GROUP]: winCtrlMerge('g'),\n [MenuEnum.UN_GROUP]: winCtrlMerge(winShiftMerge('g')),\n [MenuEnum.LOCK]: winCtrlMerge('l'),\n [MenuEnum.UNLOCK]: winCtrlMerge(winShiftMerge('l')),\n [MenuEnum.HIDE]: winCtrlMerge('h'),\n [MenuEnum.SHOW]: winCtrlMerge(winShiftMerge('h'))\n}\n\n// 这个 Ctrl 后面还是换成了 ⌘\nconst macCtrlMerge = (e: string) => `${MacKeyboard.CTRL}+${e}`\nconst macShiftMerge = (e: string) => `${MacKeyboard.SHIFT}+${e}`\nconst macAltMerge = (e: string) => `${MacKeyboard.ALT}+${e}`\n\n// 没有测试 macOS 系统,因为我没有😤👻\nexport const macKeyboardValue = {\n [MenuEnum.ARROW_UP]: macCtrlMerge('arrowup'),\n [MenuEnum.ARROW_RIGHT]: macCtrlMerge('arrowright'),\n [MenuEnum.ARROW_DOWN]: macCtrlMerge('arrowdown'),\n [MenuEnum.ARROW_LEFT]: macCtrlMerge('arrowleft'),\n [MenuEnum.COPY]: macCtrlMerge('c'),\n [MenuEnum.CUT]: macCtrlMerge('x'),\n [MenuEnum.PARSE]: macCtrlMerge('v'),\n [MenuEnum.DELETE]: macCtrlMerge('backspace'),\n [MenuEnum.BACK]: macCtrlMerge('z'),\n [MenuEnum.FORWORD]: macCtrlMerge(macShiftMerge('z')),\n [MenuEnum.GROUP]: macCtrlMerge('g'),\n [MenuEnum.UN_GROUP]: macCtrlMerge(macShiftMerge('g')),\n [MenuEnum.LOCK]: macCtrlMerge('l'),\n [MenuEnum.UNLOCK]: macCtrlMerge(macShiftMerge('l')),\n [MenuEnum.HIDE]: macCtrlMerge('h'),\n [MenuEnum.SHOW]: macCtrlMerge(macShiftMerge('h'))\n}\n\n// Win 快捷键列表\nconst winKeyList: Array<string> = [\n winKeyboardValue.up,\n winKeyboardValue.right,\n winKeyboardValue.down,\n winKeyboardValue.left,\n\n winKeyboardValue.delete,\n winKeyboardValue.copy,\n winKeyboardValue.cut,\n winKeyboardValue.parse,\n\n winKeyboardValue.back,\n winKeyboardValue.forward,\n\n winKeyboardValue.group,\n winKeyboardValue.unGroup,\n\n winKeyboardValue.lock,\n winKeyboardValue.unLock,\n\n winKeyboardValue.hide,\n winKeyboardValue.show\n]\n\n// Mac 快捷键列表\nconst macKeyList: Array<string> = [\n macKeyboardValue.up,\n macKeyboardValue.right,\n macKeyboardValue.down,\n macKeyboardValue.left,\n\n macKeyboardValue.delete,\n macKeyboardValue.copy,\n macKeyboardValue.cut,\n macKeyboardValue.parse,\n\n macKeyboardValue.back,\n macKeyboardValue.forward,\n\n macKeyboardValue.group,\n macKeyboardValue.unGroup,\n\n macKeyboardValue.lock,\n macKeyboardValue.unLock,\n\n macKeyboardValue.hide,\n macKeyboardValue.show\n]\n\n// 处理键盘记录\nconst keyRecordHandle = () => {\n // 默认赋值\n window.$KeyboardActive = {\n ctrl: false,\n space: false\n }\n\n document.onkeydown = (e: KeyboardEvent) => {\n const { keyCode } = e\n if (keyCode == 32 && e.target == document.body) e.preventDefault()\n\n if ([17, 32].includes(keyCode) && window.$KeyboardActive) {\n setKeyboardDressShow(e.keyCode)\n switch (keyCode) {\n case 17: window.$KeyboardActive.ctrl = true; break\n case 32: window.$KeyboardActive.space = true; break\n }\n }\n }\n\n document.onkeyup = (e: KeyboardEvent) => {\n const { keyCode } = e\n if (keyCode == 32 && e.target == document.body) e.preventDefault()\n\n if ([17, 32].includes(keyCode) && window.$KeyboardActive) {\n setKeyboardDressShow()\n switch (keyCode) {\n case 17: window.$KeyboardActive.ctrl = false; break\n case 32: window.$KeyboardActive.space = false; break\n }\n }\n }\n}\n\n// 初始化监听事件\nexport const useAddKeyboard = () => {\n const throttleTime = 50\n // 在函数内部获取 store 实例\n const chartEditStore = useChartEditStore()\n \n const switchHandle = (keyboardValue: typeof winKeyboardValue, e: string) => {\n switch (e) {\n // ct+↑\n case keyboardValue.up:\n keymaster(e, throttle(() => { chartEditStore.setMove(MenuEnum.ARROW_UP); return false }, throttleTime))\n break;\n // ct+→\n case keyboardValue.right:\n keymaster(e, throttle(() => { chartEditStore.setMove(MenuEnum.ARROW_RIGHT); return false }, throttleTime))\n break;\n // ct+↓\n case keyboardValue.down:\n keymaster(e, throttle(() => { chartEditStore.setMove(MenuEnum.ARROW_DOWN); return false }, throttleTime))\n break;\n // ct+←\n case keyboardValue.left:\n keymaster(e, throttle(() => { chartEditStore.setMove(MenuEnum.ARROW_LEFT); return false }, throttleTime))\n break;\n\n // 删除 delete\n case keyboardValue.delete:\n keymaster(e, debounce(() => { chartEditStore.removeComponentList(); return false }, throttleTime))\n break;\n // 复制 ct+v\n case keyboardValue.copy:\n keymaster(e, debounce(() => { chartEditStore.setCopy(); return false }, throttleTime))\n break;\n // 剪切 ct+x\n case keyboardValue.cut:\n keymaster(e, debounce(() => { chartEditStore.setCut(); return false }, throttleTime))\n break;\n // 粘贴 ct+v\n case keyboardValue.parse:\n keymaster(e, throttle(() => { chartEditStore.setParse(); return false }, throttleTime))\n break;\n\n // 撤回 ct+z\n case keyboardValue.back:\n keymaster(e, throttle(() => { chartEditStore.setBack(); return false }, throttleTime))\n break;\n // 前进 ct+sh+z\n case keyboardValue.forward:\n keymaster(e, throttle(() => { chartEditStore.setForward(); return false }, throttleTime))\n break;\n \n // 创建分组 ct+g\n case keyboardValue.group:\n keymaster(e, throttle(() => { chartEditStore.setGroup(); return false }, throttleTime))\n break;\n // 解除分组 ct+sh+g\n case keyboardValue.unGroup:\n keymaster(e, throttle(() => { chartEditStore.setUnGroup(); return false }, throttleTime))\n break;\n\n // 锁定 ct+l\n case keyboardValue.lock:\n keymaster(e, throttle(() => { chartEditStore.setLock(); return false }, throttleTime))\n break;\n // 解除锁定 ct+sh+l\n case keyboardValue.unLock:\n keymaster(e, throttle(() => { chartEditStore.setUnLock(); return false }, throttleTime))\n break;\n\n // 隐藏 ct+h\n case keyboardValue.hide:\n keymaster(e, throttle(() => { chartEditStore.setHide(); return false }, throttleTime))\n break;\n // 解除隐藏 ct+sh+h\n case keyboardValue.show:\n keymaster(e, throttle(() => { chartEditStore.setShow(); return false }, throttleTime))\n break;\n }\n }\n winKeyList.forEach((key: string) => {\n switchHandle(winKeyboardValue, key)\n })\n macKeyList.forEach((key: string) => {\n switchHandle(macKeyboardValue, key)\n })\n\n keyRecordHandle()\n}\n\n// 卸载监听事件\nexport const useRemoveKeyboard = () => {\n document.onkeydown = () => {};\n document.onkeyup = () => {};\n\n winKeyList.forEach((key: string) => {\n keymaster.unbind(key)\n })\n macKeyList.forEach((key: string) => {\n keymaster.unbind(key)\n })\n}","import { toRaw } from 'vue'\nimport { DragKeyEnum, MouseEventButton } from '@core/enums/editPageEnum'\nimport { createComponent, ensureRegisteredComponent } from '@core/packages/registry'\nimport { ConfigType } from '@core/packages/index.d'\nimport { CreateComponentType, CreateComponentGroupType, PickCreateComponentType } from '@core/packages/index.d'\nimport { useContextMenu } from '@core/views/chart/hooks/useContextMenu.hook'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditCanvasTypeEnum } from '@core/store/modules/chartEditStore/chartEditStore.d'\nimport { loadingStart, loadingFinish, loadingError, setComponentPosition, JSONParse } from '@core/utils'\nimport { throttle, cloneDeep } from 'lodash'\n\n// * 拖拽到编辑区域里\nexport const dragHandle = async (e: DragEvent) => {\n e.preventDefault()\n\n try {\n loadingStart()\n // 在函数内部获取 store 实例\n const chartEditStore = useChartEditStore()\n\n // 获取拖拽数据\n const drayDataString = e!.dataTransfer!.getData(DragKeyEnum.DRAG_KEY)\n if (!drayDataString) {\n loadingFinish()\n return\n }\n\n // 修改状态\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_CREATE, false)\n const dropData: Exclude<ConfigType, ['image']> = JSONParse(drayDataString)\n if (dropData.disabled) return\n ensureRegisteredComponent(dropData as ConfigType)\n\n // 创建新图表组件\n let newComponent: CreateComponentType = await createComponent(dropData)\n if (dropData.redirectComponent) {\n dropData.dataset && (newComponent.option.dataset = dropData.dataset)\n newComponent.chartConfig.title = dropData.title\n newComponent.chartConfig.chartFrame = dropData.chartFrame\n }\n\n setComponentPosition(newComponent, e.offsetX - newComponent.attr.w / 2, e.offsetY - newComponent.attr.h / 2)\n chartEditStore.addComponentList(newComponent, false, true)\n chartEditStore.setTargetSelectChart(newComponent.id)\n loadingFinish()\n } catch (error) {\n console.error('[hgdataview] create component failed', error)\n loadingError()\n window['$message'].warning(`图表正在研发中, 敬请期待...`)\n }\n}\n\n// * 进入拖拽区域\nexport const dragoverHandle = (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n\n if (e.dataTransfer) e.dataTransfer.dropEffect = 'copy'\n}\n\n// * 不拦截默认行为点击\nexport const mousedownHandleUnStop = (e: MouseEvent, item?: CreateComponentType | CreateComponentGroupType) => {\n const chartEditStore = useChartEditStore()\n if (item) {\n chartEditStore.setTargetSelectChart(item.id)\n return\n }\n chartEditStore.setTargetSelectChart(undefined)\n}\n\n// * 框选\nexport const mousedownBoxSelect = (e: MouseEvent, item?: CreateComponentType | CreateComponentGroupType) => {\n e.stopPropagation()\n e.preventDefault()\n const chartEditStore = useChartEditStore()\n const { onClickOutSide } = useContextMenu()\n\n // 点击空白处\n if (!item) {\n onClickOutSide()\n }\n\n const startScreenX = e.screenX\n const startScreenY = e.screenY\n const startOffsetX = e.offsetX\n const startOffsetY = e.offsetY\n\n // 记录缩放\n const scale = chartEditStore.getEditCanvas.scale\n\n chartEditStore.setMousePosition(undefined, undefined, startOffsetX, startOffsetY)\n\n // 移动框选\n const mousemove = throttle((moveEvent: MouseEvent) => {\n // 取消当前选中\n chartEditStore.setTargetSelectChart()\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_SELECT, true)\n\n // 这里先把相对值算好,不然组件无法获取 startScreenX 和 startScreenY 的值\n const currX = startOffsetX + moveEvent.screenX - startScreenX\n const currY = startOffsetY + moveEvent.screenY - startScreenY\n chartEditStore.setMousePosition(currX, currY)\n\n // 计算框选的左上角和右下角\n const selectAttr = {\n // 左上角\n x1: 0,\n y1: 0,\n // 右下角\n x2: 0,\n y2: 0\n }\n if (currX > startOffsetX && currY > startOffsetY) {\n // 右下方向\n selectAttr.x1 = startOffsetX\n selectAttr.y1 = startOffsetY\n selectAttr.x2 = Math.round(startOffsetX + (moveEvent.screenX - startScreenX) / scale)\n selectAttr.y2 = Math.round(startOffsetY + (moveEvent.screenY - startScreenY) / scale)\n } else if (currX > startOffsetX && currY < startOffsetY) {\n // 右上方向\n selectAttr.x1 = startOffsetX\n selectAttr.y1 = Math.round(startOffsetY - (startScreenY - moveEvent.screenY) / scale)\n selectAttr.x2 = Math.round(startOffsetX + (moveEvent.screenX - startScreenX) / scale)\n selectAttr.y2 = startOffsetY\n } else if (currX < startOffsetX && currY > startOffsetY) {\n selectAttr.x1 = Math.round(startOffsetX - (startScreenX - moveEvent.screenX) / scale)\n selectAttr.y1 = startOffsetY\n selectAttr.x2 = startOffsetX\n selectAttr.y2 = Math.round(startOffsetY + (moveEvent.screenY - startScreenY) / scale)\n // 左下方向\n } else {\n // 左上方向\n selectAttr.x1 = Math.round(startOffsetX - (startScreenX - moveEvent.screenX) / scale)\n selectAttr.y1 = Math.round(startOffsetY - (startScreenY - moveEvent.screenY) / scale)\n selectAttr.x2 = startOffsetX\n selectAttr.y2 = startOffsetY\n }\n\n // 遍历组件\n chartEditStore.getComponentList.forEach(item => {\n if (!chartEditStore.getTargetChart.selectId.includes(item.id)) {\n // 处理左上角\n let isSelect = false\n const { x, y, w, h } = item.attr\n const targetAttr = {\n // 左上角\n x1: x,\n y1: y,\n // 右下角\n x2: x + w,\n y2: y + h\n }\n // 全包含则选中\n if (\n targetAttr.x1 - selectAttr.x1 >= 0 &&\n targetAttr.y1 - selectAttr.y1 >= 0 &&\n targetAttr.x2 - selectAttr.x2 <= 0 &&\n targetAttr.y2 - selectAttr.y2 <= 0 &&\n !item.status.lock &&\n !item.status.hide\n ) {\n isSelect = true\n chartEditStore.setTargetSelectChart(item.id, true)\n }\n }\n })\n }, 30)\n\n // 鼠标抬起\n const mouseup = () => {\n // 鼠标抬起时,结束mousemove的节流函数,避免选框不消失问题\n mousemove.cancel()\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_SELECT, false)\n chartEditStore.setMousePosition(0, 0, 0, 0)\n document.removeEventListener('mousemove', mousemove)\n document.removeEventListener('mouseup', mouseup)\n }\n document.addEventListener('mousemove', mousemove)\n document.addEventListener('mouseup', mouseup)\n}\n\n// * 鼠标事件\nexport const useMouseHandle = () => {\n // 在函数内部获取 store 实例和 context menu\n const chartEditStore = useChartEditStore()\n const { onClickOutSide } = useContextMenu()\n\n // * Click 事件, 松开鼠标触发\n const mouseClickHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {\n e.preventDefault()\n e.stopPropagation()\n if (item.status.lock) return\n // 若此时按下了 CTRL, 表示多选\n if (window.$KeyboardActive?.ctrl) {\n // 若已选中,则去除\n if (chartEditStore.targetChart.selectId.includes(item.id)) {\n const exList = chartEditStore.targetChart.selectId.filter(e => e !== item.id)\n chartEditStore.setTargetSelectChart(exList)\n } else {\n chartEditStore.setTargetSelectChart(item.id, true)\n }\n }\n }\n\n // * 按下事件(包含移动事件)\n const mousedownHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {\n e.preventDefault()\n e.stopPropagation()\n if (item.status.lock) return\n onClickOutSide()\n // 按下左键 + CTRL\n if (e.buttons === MouseEventButton.LEFT && window.$KeyboardActive?.ctrl) return\n\n // 按下右键 + 选中多个 + 目标元素是多选子元素\n const selectId = chartEditStore.getTargetChart.selectId\n if (e.buttons === MouseEventButton.RIGHT && selectId.length > 1 && selectId.includes(item.id)) return\n\n // 选中当前目标组件\n chartEditStore.setTargetSelectChart(item.id)\n\n // 按下右键\n if (e.buttons === MouseEventButton.RIGHT) return\n\n const scale = chartEditStore.getEditCanvas.scale\n const canvasWidth = chartEditStore.getEditCanvasConfig.width\n const canvasHeight = chartEditStore.getEditCanvasConfig.height\n\n // 记录图表初始位置和大小\n const targetMap = new Map()\n chartEditStore.getTargetChart.selectId.forEach(id => {\n const index = chartEditStore.fetchTargetIndex(id)\n if (index !== -1) {\n const { x, y, w, h } = toRaw(chartEditStore.getComponentList[index]).attr\n targetMap.set(id, { x, y, w, h })\n }\n })\n\n // 记录点击初始位置\n const startX = e.screenX\n const startY = e.screenY\n\n // 记录历史位置\n let prevComponentInstance: Array<CreateComponentType | CreateComponentGroupType> = []\n chartEditStore.getTargetChart.selectId.forEach(id => {\n if (!targetMap.has(id)) return\n\n const index = chartEditStore.fetchTargetIndex(id)\n // 拿到初始位置数据\n prevComponentInstance.push(cloneDeep(chartEditStore.getComponentList[index]))\n })\n\n // 记录初始位置\n chartEditStore.setMousePosition(undefined, undefined, startX, startY)\n\n // 移动-计算偏移量\n const mousemove = throttle((moveEvent: MouseEvent) => {\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_DRAG, true)\n chartEditStore.setMousePosition(moveEvent.screenX, moveEvent.screenY)\n\n // 当前偏移量,处理 scale 比例问题\n let offsetX = (moveEvent.screenX - startX) / scale\n let offsetY = (moveEvent.screenY - startY) / scale\n\n chartEditStore.getTargetChart.selectId.forEach(id => {\n if (!targetMap.has(id)) return\n\n const index = chartEditStore.fetchTargetIndex(id)\n // 拿到初始位置数据\n const { x, y, w, h } = targetMap.get(id)\n const componentInstance = chartEditStore.getComponentList[index]\n\n let currX = Math.round(x + offsetX)\n let currY = Math.round(y + offsetY)\n\n // 要预留的距离\n const distance = 50\n\n // 基于左上角位置检测\n currX = currX < -w + distance ? -w + distance : currX\n currY = currY < -h + distance ? -h + distance : currY\n\n // 基于右下角位置检测\n currX = currX > canvasWidth - distance ? canvasWidth - distance : currX\n currY = currY > canvasHeight - distance ? canvasHeight - distance : currY\n if (componentInstance) {\n componentInstance.attr = Object.assign(componentInstance.attr, {\n x: currX,\n y: currY\n })\n }\n })\n return\n }, 20)\n\n const mouseup = () => {\n try {\n chartEditStore.setMousePosition(0, 0, 0, 0)\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_DRAG, false)\n // 加入历史栈\n if (prevComponentInstance.length) {\n chartEditStore.getTargetChart.selectId.forEach(id => {\n if (!targetMap.has(id)) return\n const index = chartEditStore.fetchTargetIndex(id)\n const curComponentInstance = chartEditStore.getComponentList[index]\n // 找到记录的所选组件\n prevComponentInstance.forEach(preItem => {\n if (preItem.id === id) {\n preItem.attr = Object.assign(preItem.attr, {\n offsetX: curComponentInstance.attr.x - preItem.attr.x,\n offsetY: curComponentInstance.attr.y - preItem.attr.y\n })\n }\n })\n })\n\n const moveComponentInstance = prevComponentInstance.filter(\n item => item.attr.offsetX !== 0 && item.attr.offsetY !== 0\n )\n moveComponentInstance.length && chartEditStore.moveComponentList(moveComponentInstance)\n }\n document.removeEventListener('mousemove', mousemove)\n document.removeEventListener('mouseup', mouseup)\n } catch (err) {\n console.log(err)\n }\n }\n\n document.addEventListener('mousemove', mousemove)\n document.addEventListener('mouseup', mouseup)\n }\n\n // * 进入事件\n const mouseenterHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {\n e.preventDefault()\n e.stopPropagation()\n if (!chartEditStore.getEditCanvas.isSelect) {\n chartEditStore.setTargetHoverChart(item.id)\n }\n }\n\n // * 移出事件\n const mouseleaveHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {\n e.preventDefault()\n e.stopPropagation()\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_DRAG, false)\n chartEditStore.setTargetHoverChart(undefined)\n }\n\n return { mouseClickHandle, mousedownHandle, mouseenterHandle, mouseleaveHandle }\n}\n\n// * 移动锚点\nexport const useMousePointHandle = (\n e: MouseEvent,\n point: string,\n attr: PickCreateComponentType<'attr'>,\n componentId: string\n) => {\n e.stopPropagation()\n e.preventDefault()\n\n // 在函数内部获取 store 实例\n const chartEditStore = useChartEditStore()\n \n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_DRAG, true)\n chartEditStore.setTargetSelectChart(componentId)\n\n const scale = chartEditStore.getEditCanvas.scale\n\n const itemAttrX = attr.x\n const itemAttrY = attr.y\n const itemAttrW = attr.w\n const itemAttrH = attr.h\n\n // 记录点击初始位置\n const startX = e.screenX\n const startY = e.screenY\n\n // 记录初始位置\n chartEditStore.setMousePosition(startX, startY)\n\n const mousemove = throttle((moveEvent: MouseEvent) => {\n chartEditStore.setMousePosition(moveEvent.screenX, moveEvent.screenY)\n\n let currX = Math.round((moveEvent.screenX - startX) / scale)\n let currY = Math.round((moveEvent.screenY - startY) / scale)\n\n const isTop = /t/.test(point)\n const isBottom = /b/.test(point)\n const isLeft = /l/.test(point)\n const isRight = /r/.test(point)\n\n const newHeight = itemAttrH + (isTop ? -currY : isBottom ? currY : 0)\n const newWidth = itemAttrW + (isLeft ? -currX : isRight ? currX : 0)\n\n attr.h = newHeight > 0 ? newHeight : 0\n attr.w = newWidth > 0 ? newWidth : 0\n attr.x = itemAttrX + (isLeft ? currX : 0)\n attr.y = itemAttrY + (isTop ? currY : 0)\n }, 50)\n\n const mouseup = () => {\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_DRAG, false)\n chartEditStore.setMousePosition(0, 0, 0, 0)\n document.removeEventListener('mousemove', mousemove)\n document.removeEventListener('mouseup', mouseup)\n }\n\n document.addEventListener('mousemove', mousemove)\n document.addEventListener('mouseup', mouseup)\n}\n","import { PickCreateComponentType } from '@core/packages/index.d'\n\ntype AttrType = PickCreateComponentType<'attr'>\n\nexport const useComponentStyle = (attr: AttrType, index: number) => {\n if(!attr) return {}\n const componentStyle = {\n zIndex: index + 1,\n left: `${attr.x}px`,\n top: `${attr.y}px`\n }\n return componentStyle\n}\n\nexport const useSizeStyle = (attr: AttrType, scale?: number) => {\n if(!attr) return {}\n return {\n width: `${scale ? scale * attr.w : attr.w}px`,\n height: `${scale ? scale * attr.h : attr.h}px`\n }\n}\n\n// 锚点位置\nexport const usePointStyle = (\n point: string,\n index: number,\n attr: PickCreateComponentType<'attr'>,\n cursorResize: string[]\n) => {\n const { w: width, h: height } = attr\n\n const isTop = /t/.test(point)\n const isBottom = /b/.test(point)\n const isLeft = /l/.test(point)\n const isRight = /r/.test(point)\n\n let newLeft = 0\n let newTop = 0\n\n // 四个角的点\n if (point.length === 2) {\n newLeft = isLeft ? 0 : width\n newTop = isTop ? 0 : height\n } else {\n // 上下两点的点,宽度居中\n if (isTop || isBottom) {\n newLeft = width / 2\n newTop = isTop ? 0 : height\n }\n\n // 左右两边的点,高度居中\n if (isLeft || isRight) {\n newLeft = isLeft ? 0 : width\n newTop = Math.floor(height / 2)\n }\n }\n\n const style = {\n left: `${newLeft}px`,\n top: `${newTop}px`,\n cursor: cursorResize[index] + '-resize'\n }\n\n return style\n}\n","<template>\n <div class=\"go-shape-box\" :class=\"{ lock, hide }\">\n <slot></slot>\n <!-- 锚点 -->\n <template v-if=\"!hiddenPoint\">\n <div\n :class=\"`shape-point ${point}`\"\n v-for=\"(point, index) in select ? pointList : []\"\n :key=\"index\"\n :style=\"usePointStyle(point, index, item.attr, cursorResize)\"\n @mousedown=\"useMousePointHandle($event, point, item.attr, item.id)\"\n ></div>\n </template>\n\n <!-- 选中 -->\n <div class=\"shape-modal\" :style=\"useSizeStyle(item.attr)\">\n <div class=\"shape-modal-select\" :class=\"{ active: select }\"></div>\n <div class=\"shape-modal-change\" :class=\"{ selectActive: select, hoverActive: hover }\"></div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, PropType } from 'vue'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditCanvasTypeEnum } from '@core/store/modules/chartEditStore/chartEditStore.d'\n\nimport { useDesignStore } from '@core/store/modules/designStore/designStore'\nimport { CreateComponentType, CreateComponentGroupType } from '@core/packages/index.d'\nimport { useSizeStyle, usePointStyle } from '../../hooks/useStyle.hook'\nimport { useMousePointHandle } from '../../hooks/useDrag.hook'\n\nconst props = defineProps({\n item: {\n type: Object as PropType<CreateComponentType | CreateComponentGroupType>,\n required: true\n },\n hiddenPoint: {\n type: Boolean,\n required: false\n }\n})\n\nconst designStore = useDesignStore()\nconst chartEditStore = useChartEditStore()\n\n// 锚点\nconst pointList = ['t', 'r', 'b', 'l', 'lt', 'rt', 'lb', 'rb']\n\n// 光标朝向\nconst cursorResize = ['n', 'e', 's', 'w', 'nw', 'ne', 'sw', 'se']\n\n// 颜色\nconst themeColor = computed(() => {\n return designStore.getAppTheme\n})\n\n// 计算当前选中目标\nconst hover = computed(() => {\n const isDrag = chartEditStore.getEditCanvas[EditCanvasTypeEnum.IS_DRAG]\n if (isDrag) return false\n\n if (props.item.status.lock) return false\n return props.item.id === chartEditStore.getTargetChart.hoverId\n})\n\n// 兼容多值场景\nconst select = computed(() => {\n const id = props.item.id\n if (props.item.status.lock) return false\n return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)\n})\n\n// 锁定\nconst lock = computed(() => {\n return props.item.status.lock\n})\n\n// 隐藏\nconst hide = computed(() => {\n return props.item.status.hide\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@include go(shape-box) {\n position: absolute;\n cursor: move;\n\n &.lock {\n cursor: default !important;\n }\n\n &.hide {\n display: none;\n }\n\n /* 锚点 */\n .shape-point {\n z-index: 1;\n position: absolute;\n width: 7px;\n height: 7px;\n border: 3px solid v-bind('themeColor');\n border-radius: 5px;\n background-color: #fff;\n transform: translate(-40%, -30%);\n &.t {\n width: 30px;\n transform: translate(-50%, -50%);\n }\n &.b {\n width: 30px;\n transform: translate(-50%, -30%);\n }\n &.l,\n &.r {\n height: 30px;\n }\n &.r {\n transform: translate(-20%, -50%);\n }\n &.l {\n transform: translate(-45%, -50%);\n }\n &.rt,\n &.rb {\n transform: translate(-30%, -30%);\n }\n }\n /* 选中 */\n .shape-modal {\n position: absolute;\n top: 0;\n left: 0;\n\n .shape-modal-select,\n .shape-modal-change {\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: 4px;\n }\n\n .shape-modal-select {\n opacity: 0.1;\n top: 2px;\n left: 2px;\n &.active {\n background-color: v-bind('themeColor');\n }\n }\n .shape-modal-change {\n border: 2px solid rgba(0, 0, 0, 0);\n &.selectActive,\n &.hoverActive {\n border-color: v-bind('themeColor');\n border-width: 2px;\n }\n &.hoverActive {\n border-style: dotted;\n }\n &.selectActive {\n border-style: solid;\n }\n }\n }\n}\n</style>\n","<template>\n <div class=\"go-edit-group-box\">\n <edit-shape-box\n :key=\"groupData.id\"\n :data-id=\"groupData.id\"\n :index=\"groupIndex\"\n :item=\"groupData\"\n :hiddenPoint=\"true\"\n :class=\"animationsClass(groupData.styles.animations)\"\n :style=\"{\n ...useComponentStyle(groupData.attr, groupIndex),\n ...useSizeStyle(groupData.attr),\n ...getFilterStyle(groupData.styles),\n ...getTransformStyle(groupData.styles),\n ...getBlendModeStyle(groupData.styles) as any\n }\"\n @click=\"mouseClickHandle($event, groupData)\"\n @mousedown=\"mousedownHandle($event, groupData)\"\n @mouseenter=\"mouseenterHandle($event, groupData)\"\n @mouseleave=\"mouseleaveHandle($event, groupData)\"\n @contextmenu=\"handleContextMenu($event, groupData, optionsHandle)\"\n >\n <!-- 组合组件 -->\n <edit-shape-box\n v-for=\"item in groupData.groupList\"\n :key=\"item.id\"\n :data-id=\"item.id\"\n :index=\"groupIndex\"\n :item=\"item\"\n :hiddenPoint=\"true\"\n :style=\"{\n ...useComponentStyle(item.attr, groupIndex)\n }\"\n >\n <component\n class=\"edit-content-chart\"\n :class=\"animationsClass(item.styles.animations)\"\n :is=\"item.chartConfig.chartKey\"\n :chartConfig=\"item\"\n :themeSetting=\"themeSetting\"\n :themeColor=\"themeColor\"\n :style=\"{\n ...useSizeStyle(item.attr),\n ...getFilterStyle(item.styles),\n ...getTransformStyle(item.styles)\n }\"\n ></component>\n </edit-shape-box>\n </edit-shape-box>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, PropType } from 'vue'\nimport { MenuEnum } from '@core/enums/editPageEnum'\nimport { chartColors } from '@core/settings/chartThemes/index'\nimport { CreateComponentType, CreateComponentGroupType } from '@core/packages/index.d'\nimport { MenuOptionsItemType } from '@core/views/chart/hooks/useContextMenu.hook.d'\nimport { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle, colorCustomMerge } from '@core/utils'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { useContextMenu, divider } from '@core/views/chart/hooks/useContextMenu.hook'\nimport { useMouseHandle } from '../../hooks/useDrag.hook'\nimport { useComponentStyle, useSizeStyle } from '../../hooks/useStyle.hook'\nimport { EditShapeBox } from '../../components/EditShapeBox'\n\nconst props = defineProps({\n groupData: {\n type: Object as PropType<CreateComponentGroupType>,\n required: true\n },\n groupIndex: {\n type: Number,\n required: true\n }\n})\n\nconst chartEditStore = useChartEditStore()\nconst { handleContextMenu } = useContextMenu()\n\n// 点击事件\nconst { mouseenterHandle, mouseleaveHandle, mousedownHandle, mouseClickHandle } = useMouseHandle()\n\n// 右键\nconst optionsHandle = (\n targetList: MenuOptionsItemType[],\n allList: MenuOptionsItemType[],\n targetInstance: CreateComponentType\n) => {\n const filter = (menulist: MenuEnum[]) => {\n return allList.filter(i => menulist.includes(i.key as MenuEnum))\n }\n\n // 多选处理\n if (chartEditStore.getTargetChart.selectId.length > 1) {\n return filter([MenuEnum.GROUP, MenuEnum.DELETE])\n } else {\n const statusMenuEnums: MenuEnum[] = []\n if (targetInstance.status.lock) {\n statusMenuEnums.push(MenuEnum.LOCK)\n } else {\n statusMenuEnums.push(MenuEnum.UNLOCK)\n }\n if (targetInstance.status.hide) {\n statusMenuEnums.push(MenuEnum.HIDE)\n } else {\n statusMenuEnums.push(MenuEnum.SHOW)\n }\n // 单选\n const singleMenuEnums = [MenuEnum.UN_GROUP]\n return [\n ...filter(singleMenuEnums),\n divider(),\n ...targetList.filter(i => !statusMenuEnums.includes(i.key as MenuEnum))\n ]\n }\n}\n\n// 配置项\nconst themeColor = computed(() => {\n const colorCustomMergeData = colorCustomMerge(chartEditStore.getEditCanvasConfig.chartCustomThemeColorInfo)\n return colorCustomMergeData[chartEditStore.getEditCanvasConfig.chartThemeColor]\n})\n\n// 主题色\nconst themeSetting = computed(() => {\n const chartThemeSetting = chartEditStore.getEditCanvasConfig.chartThemeSetting\n return chartThemeSetting\n})\n</script>\n","<template>\n <div class=\"go-edit-align-line\">\n <div\n class=\"line\"\n v-for=\"item in line.lineArr\"\n :key=\"item\"\n :class=\"[item.includes('row') ? 'row' : 'col', line['select'].has(item) && 'visible']\"\n :style=\"useComponentStyle(line['select'].get(item))\"\n ></div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, computed, watch } from 'vue'\nimport { useDesignStore } from '@core/store/modules/designStore/designStore'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditCanvasTypeEnum } from '@core/store/modules/chartEditStore/chartEditStore.d'\nimport { useSettingStore } from '@core/store/modules/settingStore/settingStore'\nimport { CreateComponentType, CreateComponentGroupType } from '@core/packages/index.d'\nimport { setComponentPosition } from '@core/utils'\nimport throttle from 'lodash/throttle'\nimport cloneDeep from 'lodash/cloneDeep'\n// 全局颜色\nconst designStore = useDesignStore()\n\nconst chartEditStore = useChartEditStore()\nconst settingStore = useSettingStore()\n\n// * 线条集合\nconst line = reactive({\n // 行横向row(上中下),列竖线col(左中右)\n lineArr: ['rowt', 'rowc', 'rowb', 'coll', 'colc', 'colr'],\n // 展示线\n select: new Map(),\n // 已经吸附\n sorptioned: {\n x: false,\n y: false\n }\n})\n\n// * 位置计算\nconst useComponentStyle = (attr?: Partial<{ x: number; y: number }>) => {\n if (!attr) return {}\n const componentStyle = {\n left: `${attr.x ? attr.x : 0}px`,\n top: `${attr.y ? attr.y : 0}px`\n }\n return componentStyle\n}\n\n// 颜色\nconst themeColor = computed(() => {\n return designStore.getAppTheme\n})\n\n// * 吸附距离\nconst minDistance = computed(() => {\n return settingStore.getChartAlignRange\n})\n\n// * 是否开始计算\nconst isComputedLine = computed(() => {\n // IS_DRAG 移动时为 true,Drag Hook里设置\n const isDrag = chartEditStore.getEditCanvas[EditCanvasTypeEnum.IS_DRAG]\n return isDrag\n})\n\n// * 吸附判定\nconst isSorption = (selectValue: number, componentValue: number) => {\n const isSorption = Math.abs(selectValue - componentValue) <= minDistance.value\n return isSorption\n}\n\n// * 当前目标\nconst selectId = computed(() => chartEditStore.getTargetChart.selectId)\nconst selectTarget = computed(() => chartEditStore.getComponentList[chartEditStore.fetchTargetIndex()])\nconst selectAttr = computed(() => selectTarget.value?.attr || {})\n\n// * 画布坐标\nconst canvasPositionList = computed(() => {\n return {\n id: '0',\n attr: {\n w: cloneDeep(chartEditStore.getEditCanvasConfig.width),\n h: cloneDeep(chartEditStore.getEditCanvasConfig.height),\n x: 0,\n y: 0,\n offsetX: 0,\n offsetY: 0,\n zIndex: 0\n }\n }\n})\n\n// * 监听鼠标移动\nwatch(\n () => chartEditStore.getMousePosition,\n throttle(() => {\n try {\n if (!isComputedLine.value || selectId.value.length !== 1) return\n // 获取目标组件数据\n\n const selectW = selectAttr.value.w\n const selectH = selectAttr.value.h\n\n // 距离左侧\n const selectLeftX = selectAttr.value.x\n const selectHalfX = selectLeftX + selectW / 2\n const selectRightX = selectLeftX + selectW\n const seletX = [selectLeftX, selectHalfX, selectRightX]\n\n // 距离顶部\n const selectTopY = selectAttr.value.y\n const selectHalfY = selectTopY + selectH / 2\n const selectBottomY = selectTopY + selectH\n const selectY = [selectTopY, selectHalfY, selectBottomY]\n\n line.select.clear()\n line.sorptioned.y = false\n // 循环查询所有组件数据\n const componentList = chartEditStore.getComponentList.map((e: CreateComponentType | CreateComponentGroupType) => {\n return {\n id: e.id,\n attr: e.attr\n }\n })\n componentList.push(canvasPositionList.value)\n // 传入画布数据\n line.lineArr.forEach(lineItem => {\n componentList.forEach((component: typeof canvasPositionList.value) => {\n // 排除自身\n if (selectId.value[0] === component.id) return\n const componentW = component.attr.w\n const componentH = component.attr.h\n\n // 距离左侧\n const componentLeftX = component.attr.x\n const componentHalfX = componentLeftX + componentW / 2\n const componentRightX = componentLeftX + componentW\n const componentX = [componentLeftX, componentHalfX, componentRightX]\n\n // 距离顶部\n const componentTopY = component.attr.y\n const componentHalfY = componentTopY + componentH / 2\n const componentBottomY = componentTopY + componentH\n const componentY = [componentTopY, componentHalfY, componentBottomY]\n\n // 横线对比的是 Y\n if (lineItem.includes('rowt')) {\n // 顶部\n if (isSorption(selectTopY, componentTopY)) {\n line.select.set(lineItem, { y: componentTopY })\n setComponentPosition(selectTarget.value, selectLeftX, componentTopY)\n }\n if (isSorption(selectTopY, componentHalfY)) {\n line.select.set(lineItem, { y: componentHalfY })\n setComponentPosition(selectTarget.value, selectLeftX, componentHalfY)\n }\n if (isSorption(selectTopY, componentBottomY)) {\n line.select.set(lineItem, { y: componentBottomY })\n setComponentPosition(selectTarget.value, selectLeftX, componentBottomY)\n }\n }\n if (lineItem.includes('rowc')) {\n // 顶部\n if (isSorption(selectHalfY, componentTopY)) {\n line.select.set(lineItem, { y: componentTopY })\n setComponentPosition(selectTarget.value, selectLeftX, componentTopY - selectH / 2)\n }\n if (isSorption(selectHalfY, componentHalfY)) {\n line.select.set(lineItem, { y: componentHalfY })\n setComponentPosition(selectTarget.value, selectLeftX, componentHalfY - selectH / 2)\n }\n if (isSorption(selectHalfY, componentBottomY)) {\n line.select.set(lineItem, { y: componentBottomY })\n setComponentPosition(selectTarget.value, selectLeftX, componentBottomY - selectH / 2)\n }\n }\n if (lineItem.includes('rowb')) {\n // 顶部\n if (isSorption(selectBottomY, componentTopY)) {\n line.select.set(lineItem, { y: componentTopY })\n setComponentPosition(selectTarget.value, selectLeftX, componentTopY - selectH)\n }\n if (isSorption(selectBottomY, componentHalfY)) {\n line.select.set(lineItem, { y: componentHalfY })\n setComponentPosition(selectTarget.value, selectLeftX, componentHalfY - selectH)\n }\n if (isSorption(selectBottomY, componentBottomY)) {\n line.select.set(lineItem, { y: componentBottomY })\n setComponentPosition(selectTarget.value, selectLeftX, componentBottomY - selectH)\n }\n }\n\n // 纵线对比的是 X\n if (lineItem.includes('coll')) {\n if (isSorption(selectLeftX, componentLeftX)) {\n line.select.set(lineItem, { x: componentLeftX })\n setComponentPosition(selectTarget.value, componentLeftX, selectTopY)\n }\n if (isSorption(selectLeftX, componentHalfX)) {\n line.select.set(lineItem, { x: componentHalfX })\n setComponentPosition(selectTarget.value, componentHalfX, selectTopY)\n }\n if (isSorption(selectLeftX, componentRightX)) {\n line.select.set(lineItem, { x: componentRightX })\n setComponentPosition(selectTarget.value, componentRightX, selectTopY)\n }\n }\n if (lineItem.includes('colc')) {\n if (isSorption(selectHalfX, componentLeftX)) {\n line.select.set(lineItem, { x: componentLeftX })\n setComponentPosition(selectTarget.value, componentLeftX - selectW / 2, selectTopY)\n }\n if (isSorption(selectHalfX, componentHalfX)) {\n line.select.set(lineItem, { x: componentHalfX })\n setComponentPosition(selectTarget.value, componentHalfX - selectW / 2, selectTopY)\n }\n if (isSorption(selectHalfX, componentRightX)) {\n line.select.set(lineItem, { x: componentRightX })\n setComponentPosition(selectTarget.value, componentRightX - selectW / 2, selectTopY)\n }\n }\n if (lineItem.includes('colr')) {\n if (isSorption(selectRightX, componentLeftX)) {\n line.select.set(lineItem, { x: componentLeftX })\n setComponentPosition(selectTarget.value, componentLeftX - selectW, selectTopY)\n }\n if (isSorption(selectRightX, componentHalfX)) {\n line.select.set(lineItem, { x: componentHalfX })\n setComponentPosition(selectTarget.value, componentHalfX - selectW, selectTopY)\n }\n if (isSorption(selectRightX, componentRightX)) {\n line.select.set(lineItem, { x: componentRightX })\n setComponentPosition(selectTarget.value, componentRightX - selectW, selectTopY)\n }\n }\n })\n })\n } catch (err) {\n console.log(err)\n }\n }, 200),\n {\n deep: true\n }\n)\n\n// * 取消对齐线\nwatch(\n () => isComputedLine.value,\n (val: boolean) => {\n if (!val) {\n line.select.clear()\n line.sorptioned.y = false\n }\n }\n)\n</script>\n\n<style lang=\"scss\" scoped>\n@include go(edit-align-line) {\n .line {\n z-index: 1;\n position: absolute;\n top: 0;\n left: 0;\n display: none;\n border-width: 1px;\n border-style: solid;\n border-color: v-bind('themeColor');\n opacity: 0.7;\n &.visible {\n display: block;\n }\n }\n .row {\n width: 100%;\n }\n .col {\n height: 100%;\n }\n}\n</style>\n","<template>\n <el-watermark\n id=\"go-edit-watermark\"\n :content=\"watermarkText\"\n :font=\"{ fontSize: 16 }\"\n :width=\"500\"\n :height=\"150\"\n :offset=\"[12, 80]\"\n :rotate=\"-15\"\n ></el-watermark>\n</template>\n\n<script setup lang=\"ts\">\nimport { watermarkText } from '@core/settings/designSetting'\n</script>\n\n<style lang=\"scss\" scoped>\n#go-edit-watermark {\n display: none;\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n}\n</style>","<template>\n <div class=\"go-edit-select\" v-if=\"isSelect\" :style=\"positionStyle\">\n <div class=\"select-background\"></div>\n <div class=\"select-border\"></div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, toRefs, watch, computed } from 'vue'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { useDesignStore } from '@core/store/modules/designStore/designStore'\nimport { useSizeStyle, useComponentStyle } from '../../hooks/useStyle.hook'\nimport { selectBoxIndex } from '@core/settings/designSetting'\n\n// 全局颜色\nconst designStore = useDesignStore()\nconst chartEditStore = useChartEditStore()\nconst { isSelect, scale } = toRefs(chartEditStore.getEditCanvas)\n\nconst themeColor = computed(() => {\n return designStore.getAppTheme\n})\n\n// 位置\nconst positionStyle = ref()\n\nwatch(\n () => chartEditStore.getMousePosition,\n positionInfo => {\n if (!isSelect.value) return\n\n // 这里的 x,y 是已经计算过的相对位移值\n const { startX, startY, x, y } = positionInfo\n\n const attr = {\n zIndex: selectBoxIndex,\n // left\n x: 0,\n // top\n y: 0,\n // 宽\n w: 0,\n // 高\n h: 0,\n // 偏移\n offsetX: 0,\n offsetY: 0\n }\n\n // 处理位置\n if (x > startX && y > startY) {\n // 右下方向\n attr.x = startX\n attr.y = startY\n attr.w = Math.round((x - startX) / scale.value)\n attr.h = Math.round((y - startY) / scale.value)\n } else if (x > startX && y < startY) {\n // 右上方向\n attr.x = startX\n attr.w = Math.round((x - startX) / scale.value)\n attr.h = Math.round((startY - y) / scale.value)\n attr.y = startY - attr.h\n } else if (x < startX && y > startY) {\n // 左下方向\n attr.y = startY\n attr.w = Math.round((startX - x) / scale.value)\n attr.h = Math.round((y - startY) / scale.value)\n attr.x = startX - attr.w\n } else {\n // 左上方向\n attr.w = Math.round((startX - x) / scale.value)\n attr.h = Math.round((startY - y) / scale.value)\n attr.x = startX - attr.w\n attr.y = startY - attr.h\n }\n\n positionStyle.value = {\n ...useComponentStyle(attr, selectBoxIndex),\n ...useSizeStyle(attr)\n }\n },\n {\n deep: true\n }\n)\n</script>\n\n<style lang=\"scss\" scoped>\n@include go('edit-select') {\n position: absolute;\n .select-border,\n .select-background {\n position: absolute;\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n .select-border {\n left: 0;\n top: 0;\n opacity: 1;\n border-width: 1px;\n border-style: solid;\n border-color: v-bind('themeColor');\n }\n .select-background {\n top: 2px;\n left: 2px;\n opacity: 0.08;\n background-color: v-bind('themeColor');\n }\n}\n</style>\n","<template>\n <div class=\"go-edit-range go-transition\" :style=\"rangeStyle\" @mousedown=\"mousedownBoxSelect($event, undefined)\">\n <slot></slot>\n <!-- 水印 -->\n <edit-watermark></edit-watermark>\n <!-- 拖拽时的辅助线 -->\n <edit-align-line></edit-align-line>\n <!-- 框选时的样式框 -->\n <edit-select></edit-select>\n <!-- 拖拽时的遮罩 -->\n <div class=\"go-edit-range-model\" :style=\"rangeModelStyle\"></div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { toRefs, computed } from 'vue'\nimport { useSizeStyle } from '../../hooks/useStyle.hook'\nimport { canvasModelIndex } from '@core/settings/designSetting'\nimport { mousedownBoxSelect } from '../../hooks/useDrag.hook'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditAlignLine } from '../EditAlignLine'\nimport { EditWatermark } from '../EditWatermark'\nimport { EditSelect } from '../EditSelect'\n\nconst chartEditStore = useChartEditStore()\n\nconst { getEditCanvasConfig, getEditCanvas } = toRefs(chartEditStore)\n\nconst size = computed(() => {\n return {\n w: getEditCanvasConfig.value.width,\n h: getEditCanvasConfig.value.height\n }\n})\n\nconst rangeStyle = computed(() => {\n // 缩放\n const scale = {\n transform: `scale(${getEditCanvas.value.scale})`\n }\n // @ts-ignore\n return { ...useSizeStyle(size.value), ...scale }\n})\n\n// 模态层\nconst rangeModelStyle = computed(() => {\n const dragStyle = getEditCanvas.value.isCreate && { 'z-index': 99999 }\n // @ts-ignore\n return { ...useSizeStyle(size.value), ...dragStyle }\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@include go(edit-range) {\n position: relative;\n transform-origin: left top;\n background-size: cover;\n overflow: hidden;\n @include fetch-border-color('hover-border-color');\n @include fetch-bg-color('background-color2');\n @include go(edit-range-model) {\n z-index: -1;\n position: absolute;\n left: 0;\n top: 0;\n }\n}\n</style>\n","<template>\n <div class=\"go-sketch-rule\">\n <sketch-rule\n v-if=\"sketchRuleReDraw\"\n :thick=\"thick\"\n :scale=\"scale\"\n :width=\"canvasBox().width\"\n :height=\"canvasBox().height\"\n :startX=\"startX\"\n :startY=\"startY\"\n :lines=\"lines\"\n :palette=\"paletteStyle\"\n >\n </sketch-rule>\n <div ref=\"$app\" class=\"edit-screens\" @scroll=\"handleScroll\">\n <div ref=\"$container\" class=\"edit-screen-container\" :style=\"{ width: containerWidth }\">\n <div\n ref=\"refSketchRuleBox\"\n class=\"canvas\"\n @mousedown=\"dragCanvas\"\n :style=\"{ marginLeft: '-' + (canvasBox().width / 2 - 25) + 'px' }\"\n >\n <div :style=\"{ pointerEvents: isPressSpace ? 'none' : 'auto' }\">\n <slot></slot>\n </div>\n </div>\n </div>\n </div>\n <!-- 修复右下角白点用的 -->\n <!-- <div v-if=\"designStore.getDarkTheme\" class=\"fix-edit-screens-block\"></div> -->\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { ref, reactive, onMounted, toRefs, watch, onUnmounted, computed } from 'vue'\nimport { useDesignStore } from '@core/store/modules/designStore/designStore'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { useChartLayoutStore } from '@core/store/modules/chartLayoutStore/chartLayoutStore'\nimport { ChartLayoutStoreEnum } from '@core/store/modules/chartLayoutStore/chartLayoutStore.d'\nimport throttle from 'lodash/throttle'\n\nconst chartEditStore = useChartEditStore()\nconst chartLayoutStore = useChartLayoutStore()\nconst designStore = useDesignStore()\n\nconst thick = 20\nlet prevMoveXValue = [0, 0]\nlet prevMoveYValue = [0, 0]\n\nconst $app = ref()\nconst sketchRuleReDraw = ref(true)\nconst refSketchRuleBox = ref()\nconst $container = ref()\nconst isPressSpace = ref(false)\nconst cursorStyle = ref('auto')\nconst { width, height } = toRefs(chartEditStore.getEditCanvasConfig)\nconst startX = ref(0)\nconst startY = ref(0)\nconst lines = reactive({ h: [], v: [] })\n\nconst scale = computed(() => {\n return chartEditStore.getEditCanvas.scale\n})\n\n// 画布尺寸(响应式)\nconst canvasBoxWidth = ref(800)\nconst canvasBoxHeight = ref(600)\n\n// 更新画布尺寸\nconst updateCanvasBoxSize = () => {\n const layoutDom = document.getElementById('go-chart-edit-layout')\n if (layoutDom) {\n const scrollW = 20\n const w = layoutDom.clientWidth - scrollW\n const h = layoutDom.clientHeight - scrollW\n if (w > 0 && h > 0) {\n canvasBoxWidth.value = w\n canvasBoxHeight.value = h\n }\n }\n}\n\n// 滚动条拖动的宽度\nconst containerWidth = computed(() => {\n return `${window.innerWidth * 2}px`\n})\n\n// 滚动条拖动的高度\nconst containerHeight = computed(() => {\n const h = height.value || 600\n return `${Math.max(h * 2, 1200)}px`\n})\n\n// 主题\nconst paletteStyle = computed(() => {\n const isDarkTheme = designStore.getDarkTheme\n return isDarkTheme\n ? {\n bgColor: '#18181c',\n longfgColor: '#4d4d4d',\n shortfgColor: '#4d4d4d',\n fontColor: '#4d4d4d',\n shadowColor: '#18181c',\n borderColor: '#18181c',\n cornerActiveColor: '#18181c'\n }\n : {}\n})\n\n// 颜色\nconst themeColor = computed(() => {\n return designStore.getAppTheme\n})\n\n// 处理鼠标拖动\nconst handleWheel = (e: any) => {\n if (e.ctrlKey || e.metaKey) {\n e.preventDefault()\n let resScale = scale.value\n // 放大(200%)\n if (e.wheelDelta >= 0 && scale.value < 2) {\n resScale = scale.value + 0.05\n chartEditStore.setScale(resScale)\n return\n }\n // 缩小(10%)\n if (e.wheelDelta < 0 && scale.value > 0.1) {\n resScale = scale.value - 0.05\n chartEditStore.setScale(resScale)\n }\n }\n}\n\n// 滚动条处理\nconst handleScroll = () => {\n if (!$app.value) return\n const screensRect = $app.value.getBoundingClientRect()\n const canvasRect = refSketchRuleBox.value.getBoundingClientRect()\n // 标尺开始的刻度\n startX.value = (screensRect.left + thick - canvasRect.left) / scale.value\n startY.value = (screensRect.top + thick - canvasRect.top) / scale.value\n}\n\n// 拖拽处理\nconst dragCanvas = (e: any) => {\n e.preventDefault()\n e.stopPropagation()\n\n if (e.which == 2) isPressSpace.value = true\n else if (!window.$KeyboardActive?.space) return\n // @ts-ignore\n document.activeElement?.blur()\n\n const startX = e.pageX\n const startY = e.pageY\n\n const handleMousemove = (e: MouseEvent) => {\n const nx = e.pageX - startX\n const ny = e.pageY - startY\n\n const [prevMoveX1, prevMoveX2] = prevMoveXValue\n const [prevMoveY1, prevMoveY2] = prevMoveYValue\n\n prevMoveXValue = [prevMoveX2, nx]\n prevMoveYValue = [prevMoveY2, ny]\n\n $app.value.scrollLeft -=\n prevMoveX2 > prevMoveX1 ? Math.abs(prevMoveX2 - prevMoveX1) : -Math.abs(prevMoveX2 - prevMoveX1)\n $app.value.scrollTop -=\n prevMoveY2 > prevMoveY1 ? Math.abs(prevMoveY2 - prevMoveY1) : -Math.abs(prevMoveY2 - prevMoveY1)\n }\n\n const handleMouseup = () => {\n window.removeEventListener('mousemove', handleMousemove)\n window.removeEventListener('mouseup', handleMouseup)\n prevMoveXValue = [0, 0]\n prevMoveYValue = [0, 0]\n isPressSpace.value = false\n }\n\n window.addEventListener('mousemove', handleMousemove)\n window.addEventListener('mouseup', handleMouseup)\n}\n\n// 计算画布大小\nconst canvasBox = () => {\n return {\n width: canvasBoxWidth.value,\n height: canvasBoxHeight.value\n }\n}\n\n// 重绘标尺\nconst reDraw = throttle(() => {\n updateCanvasBoxSize()\n sketchRuleReDraw.value = false\n setTimeout(() => {\n sketchRuleReDraw.value = true\n }, 10)\n},20)\n\n// 滚动居中\nconst canvasPosCenter = () => {\n const { width: containerWidth, height: containerHeight } = $container.value.getBoundingClientRect()\n const { width, height } = canvasBox()\n\n $app.value.scrollLeft = containerWidth / 2 - width / 2\n $app.value.scrollTop = containerHeight / 2 - height / 2\n}\n\n// 处理主题变化\nwatch(\n () => designStore.getDarkTheme,\n () => {\n reDraw()\n }\n)\n\n// // 处理标尺重制大小\nwatch(\n () => scale.value,\n (newValue, oldValue) => {\n if (oldValue !== newValue && chartLayoutStore.getRePositionCanvas) {\n chartLayoutStore.setItemUnHandle(ChartLayoutStoreEnum.RE_POSITION_CANVAS, false)\n }\n handleScroll()\n setTimeout(() => {\n canvasPosCenter()\n reDraw()\n }, 400)\n }\n)\n\n// 处理鼠标样式\nwatch(\n () => isPressSpace.value,\n newValue => {\n cursorStyle.value = newValue ? 'grab' : 'auto'\n }\n)\n\n// 处理窗口 resize 事件\nconst handleResize = throttle(() => {\n reDraw()\n}, 100)\n\nonMounted(() => {\n if ($app.value) {\n $app.value.addEventListener('wheel', handleWheel, { passive: false })\n // 初始化时先隐藏标尺,等 DOM 渲染完成后再显示\n sketchRuleReDraw.value = false\n // 延迟执行,确保 DOM 完全渲染后再计算尺寸\n setTimeout(() => {\n updateCanvasBoxSize()\n canvasPosCenter()\n sketchRuleReDraw.value = true\n }, 200)\n }\n // 监听窗口 resize 事件,用于作为组件库使用时的尺寸更新\n window.addEventListener('resize', handleResize)\n})\n\nonUnmounted(() => {\n if ($app.value) {\n $app.value.removeEventListener('wheel', handleWheel)\n }\n window.removeEventListener('resize', handleResize)\n})\n\nwindow.onKeySpacePressHold = (isHold: boolean) => {\n isPressSpace.value = isHold\n}\n</script>\n\n<style>\n/* 使用 SCSS 会报错,直接使用最基础的 CSS 进行修改,\n此库有计划 Vue3 版本,但是开发的时候还没发布 */\n#mb-ruler {\n top: 0;\n left: 0;\n}\n\n/* 横线 */\n#mb-ruler .v-container .lines .line {\n /* 最大缩放 200% */\n width: 200vw !important;\n border-top: 1px dashed v-bind('themeColor') !important;\n}\n\n#mb-ruler .v-container .indicator {\n border-bottom: 1px dashed v-bind('themeColor') !important;\n}\n\n/* 竖线 */\n#mb-ruler .h-container .lines .line {\n /* 最大缩放 200% */\n height: 200vh !important;\n border-left: 1px dashed v-bind('themeColor') !important;\n}\n\n#mb-ruler .h-container .indicator {\n border-left: 1px dashed v-bind('themeColor') !important;\n}\n\n/* 坐标数值背景颜色 */\n#mb-ruler .indicator .value {\n background-color: rgba(0, 0, 0, 0);\n}\n\n/* 删除按钮 */\n#mb-ruler .line .del {\n padding: 0;\n color: v-bind('themeColor');\n font-size: 26px;\n font-weight: bolder;\n}\n\n#mb-ruler .corner {\n border-width: 0 !important;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n@include go('sketch-rule') {\n overflow: hidden;\n width: 100%;\n height: 100%;\n\n .edit-screens {\n position: absolute;\n width: 100%;\n height: 100%;\n overflow: auto;\n user-select: none;\n padding-bottom: 0px;\n\n /* firefox */\n scrollbar-color: rgba(144, 146, 152, 0.3) transparent;\n scrollbar-width: thin;\n\n /* chrome */\n &::-webkit-scrollbar,\n &::-webkit-scrollbar-track-piece {\n background-color: transparent;\n }\n\n &::-webkit-scrollbar {\n width: 7px;\n }\n\n &::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background-color: rgba(144, 146, 152, 0.3);\n }\n // 修复右下角白点用的\n &::-webkit-scrollbar-corner {\n background-color: transparent;\n }\n }\n\n .fix-edit-screens-block {\n position: absolute;\n bottom: 0;\n right: 0;\n width: 10px;\n height: 10px;\n background-color: $--color-dark-bg-1;\n }\n\n .edit-screen-container {\n position: absolute;\n height: v-bind('containerHeight');\n top: 0;\n left: 0;\n }\n\n .canvas {\n position: absolute;\n top:50%;\n left: 50%;\n transform-origin: 50% 0;\n transform: translateY(-50%);\n\n &:hover {\n cursor: v-bind('cursorStyle');\n }\n\n &:active {\n cursor: crosshair;\n }\n }\n}\n</style>\n","import { HistoryTargetTypeEnum, HistoryActionTypeEnum } from './chartHistoryStore.d'\n\nexport const historyActionTypeName = {\n [HistoryActionTypeEnum.ADD]: '新增',\n [HistoryActionTypeEnum.DELETE]: '删除',\n [HistoryActionTypeEnum.UPDATE]: '更新',\n [HistoryActionTypeEnum.MOVE]: '移动',\n [HistoryActionTypeEnum.PASTE]: '粘贴',\n [HistoryActionTypeEnum.COPY]: '复制',\n [HistoryActionTypeEnum.CUT]: '剪切',\n [HistoryActionTypeEnum.TOP]: '置顶',\n [HistoryActionTypeEnum.BOTTOM]: '置底',\n [HistoryActionTypeEnum.UP]: '上移',\n [HistoryActionTypeEnum.DOWN]: '下移',\n [HistoryActionTypeEnum.GROUP]: '成组',\n [HistoryActionTypeEnum.UN_GROUP]: '解组',\n [HistoryActionTypeEnum.LOCK]: '锁定',\n [HistoryActionTypeEnum.UNLOCK]: '解锁',\n [HistoryActionTypeEnum.HIDE]: '隐藏',\n [HistoryActionTypeEnum.SHOW]: '显示',\n\n [HistoryTargetTypeEnum.CANVAS]: '画布初始化'\n}\n","/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeReverse = arrayProto.reverse;\n\n/**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\nfunction reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n}\n\nmodule.exports = reverse;\n","<template>\n <div class=\"go-flex-items-center edit-history-wrapper\">\n <el-popover \n :show-arrow=\"false\" \n trigger=\"click\" \n placement=\"top-start\"\n :width=\"280\"\n :teleported=\"true\"\n popper-class=\"edit-history-popover\"\n >\n <template #reference>\n <el-button class=\"mr-10\" size=\"small\" :disabled=\"options.length === 0\">\n <span class=\"btn-text\">历史记录</span>\n </el-button>\n </template>\n\n <template #default>\n <div class=\"history-list-box\" v-if=\"options.length > 0\">\n <el-scrollbar max-height=\"400px\">\n <div\n class=\"list-item go-flex-items-center\"\n v-for=\"(item, index) in options\"\n :key=\"index\"\n :title=\"item.label\"\n >\n <el-icon class=\"item-icon\" :size=\"16\">\n <component :is=\"item.icon\" />\n </el-icon>\n <span class=\"item-label\">{{ item.label }}</span>\n </div>\n </el-scrollbar>\n </div>\n <div v-else class=\"empty-tip\">暂无历史记录</div>\n </template>\n </el-popover>\n\n <el-tooltip :content=\"`最多只保留${editHistoryMax}条记录`\" placement=\"top\">\n <el-icon :size=\"21\" class=\"help-icon\">\n <help-outline-icon></help-outline-icon>\n </el-icon>\n </el-tooltip>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport { icon } from '@core/plugins'\nimport { useChartHistoryStore } from '@core/store/modules/chartHistoryStore/chartHistoryStore'\nimport { historyActionTypeName } from '@core/store/modules/chartHistoryStore/chartHistoryDefine'\nimport { CreateComponentType } from '@core/packages/index.d'\nimport { editHistoryMax } from '@core/settings/designSetting'\nimport reverse from 'lodash/reverse'\nimport {\n HistoryItemType,\n HistoryTargetTypeEnum,\n HistoryActionTypeEnum\n} from '@core/store/modules/chartHistoryStore/chartHistoryStore.d'\n\nconst {\n DesktopOutlineIcon,\n PencilIcon,\n TrashIcon,\n CopyIcon,\n LayersIcon,\n DuplicateIcon,\n HelpOutlineIcon,\n LockClosedOutlineIcon,\n LockOpenOutlineIcon,\n EyeOffOutlineIcon,\n EyeOutlineIcon\n} = icon.ionicons5\nconst { StackedMoveIcon, Carbon3DCursorIcon, Carbon3DSoftwareIcon } = icon.carbon\n\nconst chartHistoryStoreStore = useChartHistoryStore()\n\n// 设置类型对应图标\nconst iconHandle = (e: HistoryItemType) => {\n // 画布编辑\n if (e.targetType === HistoryTargetTypeEnum.CANVAS) {\n return DesktopOutlineIcon\n }\n switch (e.actionType) {\n case HistoryActionTypeEnum.UPDATE:\n return PencilIcon\n case HistoryActionTypeEnum.DELETE:\n return TrashIcon\n case HistoryActionTypeEnum.PASTE:\n return CopyIcon\n case HistoryActionTypeEnum.TOP:\n return LayersIcon\n case HistoryActionTypeEnum.BOTTOM:\n return LayersIcon\n case HistoryActionTypeEnum.UP:\n return LayersIcon\n case HistoryActionTypeEnum.DOWN:\n return LayersIcon\n case HistoryActionTypeEnum.MOVE:\n return StackedMoveIcon\n case HistoryActionTypeEnum.ADD:\n return DuplicateIcon\n case HistoryActionTypeEnum.GROUP:\n return Carbon3DCursorIcon\n case HistoryActionTypeEnum.UN_GROUP:\n return Carbon3DSoftwareIcon\n case HistoryActionTypeEnum.LOCK:\n return LockClosedOutlineIcon\n case HistoryActionTypeEnum.UNLOCK:\n return LockOpenOutlineIcon\n case HistoryActionTypeEnum.HIDE:\n return EyeOffOutlineIcon\n case HistoryActionTypeEnum.SHOW:\n return EyeOutlineIcon\n default:\n return PencilIcon\n }\n}\n\n// 设置类型对应文本\nconst labelHandle = (e: HistoryItemType) => {\n // 画布编辑\n if (e.targetType === HistoryTargetTypeEnum.CANVAS) {\n return historyActionTypeName[HistoryTargetTypeEnum.CANVAS]\n } else if (e.actionType === HistoryActionTypeEnum.GROUP || e.actionType === HistoryActionTypeEnum.UN_GROUP) {\n return `${historyActionTypeName[e.actionType]}`\n } else if (e.historyData.length) {\n return `${historyActionTypeName[e.actionType]} - ${(e.historyData[0] as CreateComponentType).chartConfig.title}`\n }\n}\n\nconst options = computed(() => {\n const backStack: HistoryItemType[] = chartHistoryStoreStore.getBackStack\n const opts = backStack.map((e: HistoryItemType) => {\n return {\n label: labelHandle(e),\n icon: iconHandle(e)\n }\n })\n\n return reverse(opts.filter(item => item.label))\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.edit-history-wrapper {\n position: relative;\n z-index: 10;\n}\n.mr-10 {\n margin-right: 10px;\n}\n.btn-text {\n font-size: 12px;\n}\n.help-icon {\n color: var(--el-text-color-secondary);\n cursor: help;\n}\n</style>\n\n<style lang=\"scss\">\n.edit-history-popover {\n z-index: 9999 !important;\n \n .history-list-box {\n .list-item {\n padding: 8px 6px;\n border-radius: 4px;\n cursor: default;\n transition: background 0.2s;\n \n &:hover {\n background: var(--el-fill-color-light);\n }\n \n .item-icon {\n margin-right: 10px;\n color: var(--el-text-color-secondary);\n flex-shrink: 0;\n }\n \n .item-label {\n color: var(--el-text-color-regular);\n font-size: 13px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n }\n \n .empty-tip {\n color: var(--el-text-color-secondary);\n text-align: center;\n padding: 20px;\n }\n}\n</style>\n","<template>\n <el-dialog v-model=\"modelShowRef\" :close-on-click-modal=\"true\" :show-close=\"false\" width=\"50vw\" @closed=\"closeHandle\">\n <el-table class=\"model-content\" :data=\"shortcutKeyOptions\" :border=\"false\" stripe>\n <el-table-column prop=\"label\" label=\"功能\" />\n <el-table-column prop=\"win\" label=\"Win 快捷键\" />\n <el-table-column label=\"Mac 快捷键\">\n <template #header>\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\n <span>Mac 快捷键</span>\n <el-icon :size=\"20\" class=\"go-cursor-pointer\" @click=\"closeHandle\">\n <close-icon></close-icon>\n </el-icon>\n </div>\n </template>\n <template #default=\"{ row }\">\n <span v-if=\"row.macSource\">{{ row.mac }}</span>\n <span v-else>\n <span style=\"font-size: 22px; background: linear-gradient(90deg, var(--el-color-primary), var(--el-color-success)); -webkit-background-clip: text; -webkit-text-fill-color: transparent;\">{{ row.mac.substr(0, 1) }}</span>\n + {{ row.mac.substr(3) }}\n </span>\n </template>\n </el-table-column>\n </el-table>\n </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { watch, ref } from 'vue'\nimport { icon } from '@core/plugins'\nimport { WinKeyboard, MacKeyboard } from '@core/enums/editPageEnum'\n\nconst { CloseIcon } = icon.ionicons5\nconst modelShowRef = ref(false)\n\nconst emit = defineEmits(['update:modelShow'])\n\nconst props = defineProps({\n modelShow: Boolean\n})\n\n\nwatch(() => props.modelShow, (newValue) => {\n modelShowRef.value = newValue\n})\n\n// 快捷键\nconst shortcutKeyOptions = [\n {\n label: '拖拽画布',\n win: `${WinKeyboard.SPACE.toUpperCase()} + 🖱️ `,\n mac: `${MacKeyboard.SPACE.toUpperCase()} + 🖱️ `,\n macSource: true\n },\n {\n label: '向 上/右/下/左 移动',\n win: `${WinKeyboard.CTRL.toUpperCase()} + ↑ 或 → 或 ↓ 或 ←`,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + ↑ `\n },\n {\n label: '锁定',\n win: `${WinKeyboard.CTRL.toUpperCase()} + L `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + L `\n },\n {\n label: '解锁',\n win: `${WinKeyboard.CTRL.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()}+ L `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + ${MacKeyboard.SHIFT.toUpperCase()} + L `\n },\n {\n label: '展示',\n win: `${WinKeyboard.CTRL.toUpperCase()} + H `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + H `\n },\n {\n label: '隐藏',\n win: `${WinKeyboard.CTRL.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()} + H `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + ${MacKeyboard.SHIFT.toUpperCase()} + H `\n },\n {\n label: '删除',\n win: 'Delete'.toUpperCase(),\n mac: `${MacKeyboard.CTRL.toUpperCase()} + Backspace `\n },\n {\n label: '复制',\n win: `${WinKeyboard.CTRL.toUpperCase()} + C `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + C `\n },\n {\n label: '剪切',\n win: `${WinKeyboard.CTRL.toUpperCase()} + X `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + X `\n },\n {\n label: '粘贴',\n win: `${WinKeyboard.CTRL.toUpperCase()} + V `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + V `\n },\n {\n label: '后退',\n win: `${WinKeyboard.CTRL.toUpperCase()} + Z `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + Z `\n },\n {\n label: '前进',\n win: `${WinKeyboard.CTRL.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()} + Z `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + ${MacKeyboard.SHIFT.toUpperCase()} + Z `\n },\n {\n label: '多选',\n win: `${WinKeyboard.CTRL.toUpperCase()} + 🖱️ `,\n mac: `${MacKeyboard.CTRL_SOURCE_KEY.toUpperCase()} + 🖱️ `\n },\n {\n label: '创建分组',\n win: `${WinKeyboard.CTRL.toUpperCase()} + G / 🖱️ `,\n mac: `${MacKeyboard.CTRL_SOURCE_KEY.toUpperCase()} + G / 🖱️`\n },\n {\n label: '解除分组',\n win: `${WinKeyboard.CTRL.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()} + G `,\n mac: `${MacKeyboard.CTRL_SOURCE_KEY.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()} + G `\n }\n]\n\nconst closeHandle = () => {\n emit('update:modelShow', false)\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.model-content {\n width: 50vw;\n padding-bottom: 20px;\n overflow: hidden;\n border-radius: 15px;\n td {\n padding: 5px 10px;\n }\n}\n</style>\n","<template>\n <div class=\"go-edit-shortcut\">\n <shortcut-key-modal v-model:modelShow=\"modelShow\"></shortcut-key-modal>\n <el-tooltip content=\"快捷键\" placement=\"top\">\n <el-button\n class=\"scale-btn\"\n size=\"small\"\n @click=\"modelShow = true\"\n >\n <el-icon :size=\"21\" style=\"color: var(--el-text-color-secondary)\">\n <dicom-overlay-icon></dicom-overlay-icon>\n </el-icon>\n </el-button>\n </el-tooltip>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { icon } from '@core/plugins'\nimport ShortcutKeyModal from './ShortcutKeyModal.vue'\n\nconst { DicomOverlayIcon } = icon.carbon\nconst modelShow = ref<boolean>(false)\n</script>\n\n<style lang=\"scss\" scoped>\n@include go('edit-shortcut') {\n .scale-btn {\n margin: 0 10px 0 0;\n .btn-text {\n font-size: 12px;\n margin-right: 3px;\n }\n }\n}\n</style>\n","<template>\n <div class=\"go-edit-bottom\">\n <div class=\"go-flex-items-center\" style=\"gap: 8px;\">\n <!-- 历史记录 -->\n <edit-history></edit-history>\n <!-- CTRL按键触发展示 -->\n <span id=\"keyboard-dress-show\" style=\"color: var(--el-text-color-secondary)\"></span>\n </div>\n\n <div class=\"bottom-ri go-flex-items-center\" style=\"gap: 8px;\">\n <!-- 快捷键提示 -->\n <edit-shortcut-key />\n\n <!-- 缩放比例 -->\n <el-select\n ref=\"selectInstRef\"\n class=\"scale-btn\"\n v-model=\"filterValue\"\n size=\"small\"\n :disabled=\"lockScale\"\n @change=\"selectHandle\"\n >\n <el-option\n v-for=\"opt in filterOptions\"\n :key=\"opt.value\"\n :label=\"opt.label\"\n :value=\"opt.value\"\n />\n </el-select>\n\n <!-- 锁定缩放 -->\n <el-tooltip :content=\"lockScale ? '解锁当前比例' : '锁定当前比例'\" placement=\"top\">\n <el-button @click=\"lockHandle\" text>\n <el-icon class=\"lock-icon\" :class=\"{ color: lockScale }\" :size=\"18\">\n <lock-closed-outline-icon v-if=\"lockScale\"></lock-closed-outline-icon>\n <lock-open-outline-icon v-else></lock-open-outline-icon>\n </el-icon>\n </el-button>\n </el-tooltip>\n\n <!-- 拖动 -->\n <el-slider\n class=\"scale-slider\"\n v-model=\"sliderValue\"\n :min=\"10\"\n :max=\"200\"\n :step=\"5\"\n :format-tooltip=\"sliderFormatTooltip\"\n :disabled=\"lockScale\"\n :marks=\"sliderMaks\"\n @change=\"sliderHandle\"\n ></el-slider>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref, toRefs, watchEffect } from 'vue'\nimport { icon } from '@core/plugins'\nimport { EditHistory } from '../EditHistory/index'\nimport EditShortcutKey from '../EditShortcutKey/index.vue'\nimport { useDesignStore } from '@core/store/modules/designStore/designStore'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditCanvasTypeEnum } from '@core/store/modules/chartEditStore/chartEditStore.d'\nimport { useChartLayoutStore } from '@core/store/modules/chartLayoutStore/chartLayoutStore'\nimport { ChartLayoutStoreEnum } from '@core/store/modules/chartLayoutStore/chartLayoutStore.d'\n\nconst { LockClosedOutlineIcon, LockOpenOutlineIcon } = icon.ionicons5\n\n// 全局颜色\nconst designStore = useDesignStore()\nconst themeColor = ref(designStore.getAppTheme)\nconst chartLayoutStore = useChartLayoutStore()\nconst chartEditStore = useChartEditStore()\nconst { lockScale, scale } = toRefs(chartEditStore.getEditCanvas)\nconst selectInstRef = ref<InstanceType<typeof import('element-plus')['ElSelect']> | null>(null)\n\n// 缩放选项\nlet filterOptions = [\n {\n label: '200%',\n value: 200\n },\n {\n label: '150%',\n value: 150\n },\n {\n label: '100%',\n value: 100\n },\n {\n label: '50%',\n value: 50\n },\n {\n label: '自适应',\n value: 0\n }\n]\n\n// 选择值\nconst filterValue = ref('')\n\n// 用户自选择\nconst selectHandle = (v: number) => {\n selectInstRef.value?.blur()\n if (v === 0) {\n chartLayoutStore.setItemUnHandle(ChartLayoutStoreEnum.RE_POSITION_CANVAS, true)\n chartEditStore.computedScale()\n return\n }\n chartEditStore.setScale(v / 100)\n}\n\n// 点击锁处理\nconst lockHandle = () => {\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.LOCK_SCALE, !lockScale.value)\n}\n\n// 拖动\nconst sliderValue = ref(100)\n\n// 拖动格式化\nconst sliderFormatTooltip = (v: string) => `${v}%`\n\n// 拖动处理\nconst sliderHandle = (v: number) => {\n chartEditStore.setScale(v / 100)\n}\n\nconst sliderMaks = reactive({\n 100: ''\n})\n\n// 监听 scale 变化\nwatchEffect(() => {\n const value = (scale.value * 100).toFixed(0)\n filterValue.value = `${value}%`\n sliderValue.value = parseInt(value)\n})\n</script>\n\n<style lang=\"scss\" scoped>\n$min-width: 500px;\n$max-width: 670px;\n@include go('edit-bottom') {\n width: 100%;\n min-width: $min-width;\n min-width: $max-width;\n padding: 0 10px;\n padding-left: 20px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n .bottom-ri {\n display: flex;\n align-items: center;\n .lock-icon {\n &.color {\n color: v-bind('themeColor');\n }\n }\n .scale-btn {\n width: 90px;\n font-size: 12px;\n :deep(.el-input__inner) {\n padding: 0 8px;\n }\n }\n .scale-slider {\n width: 100px;\n :deep(.el-slider__runway) {\n margin: 0;\n }\n }\n }\n}\n</style>\n","<template>\n <el-dialog \n v-model=\"modelShowRef\" \n :show-close=\"false\" \n width=\"560px\"\n class=\"go-system-setting-dialog\"\n @closed=\"closeHandle\"\n >\n <div class=\"go-system-setting\">\n <div class=\"setting-header\">\n <span class=\"title\">系统设置</span>\n <el-icon :size=\"18\" class=\"close-btn\" @click=\"closeHandle\">\n <close-icon />\n </el-icon>\n </div>\n\n <div class=\"setting-body\">\n <template v-for=\"item in list\" :key=\"item.key\">\n <div v-if=\"item.type === 'divider'\" class=\"setting-divider\"></div>\n <div v-else class=\"setting-row\">\n <div class=\"row-label\">\n <span>{{ item.name }}</span>\n <el-tooltip v-if=\"item.tip\" :content=\"item.tip\" placement=\"top\">\n <el-icon :size=\"14\" class=\"tip-icon\"><help-outline-icon /></el-icon>\n </el-tooltip>\n </div>\n <div class=\"row-control\">\n <el-switch\n v-if=\"item.type === 'switch'\"\n v-model=\"item.value\"\n size=\"small\"\n @change=\"handleChange($event, item)\"\n />\n <template v-else-if=\"item.type === 'number'\">\n <el-input-number\n v-model=\"item.value\"\n size=\"small\"\n :step=\"item.step || 1\"\n :min=\"item.min || 0\"\n controls-position=\"right\"\n @change=\"handleChange($event, item)\"\n />\n <span v-if=\"item.suffix\" class=\"suffix\">{{ item.suffix }}</span>\n </template>\n <el-select\n v-else-if=\"item.type === 'select'\"\n v-model=\"item.value\"\n size=\"small\"\n @change=\"handleChange($event, item)\"\n >\n <el-option\n v-for=\"opt in item.options\"\n :key=\"opt.value\"\n :label=\"opt.label\"\n :value=\"opt.value\"\n />\n </el-select>\n </div>\n <div class=\"row-desc\">{{ item.desc }}</div>\n </div>\n </template>\n </div>\n </div>\n </el-dialog>\n</template>\n\n<script script lang=\"ts\" setup>\nimport { reactive, ref, watch } from 'vue'\nimport { ListType } from './index.d'\nimport { useSettingStore } from '@core/store/modules/settingStore/settingStore'\nimport { SettingStoreEnums, ToolsStatusEnum } from '@core/store/modules/settingStore/settingStore.d'\nimport { icon } from '@core/plugins'\n\nconst props = defineProps({\n modelShow: Boolean\n})\n\nconst emit = defineEmits(['update:modelShow'])\nconst { HelpOutlineIcon, CloseIcon } = icon.ionicons5\nconst settingStore = useSettingStore()\nconst modelShowRef = ref(false)\n\nconst list = reactive<ListType[]>([\n {\n key: SettingStoreEnums.ASIDE_ALL_COLLAPSED,\n value: settingStore.getAsideAllCollapsed,\n type: 'switch',\n name: '菜单折叠',\n desc: '首页菜单折叠时隐藏至界面外'\n },\n {\n key: SettingStoreEnums.HIDE_PACKAGE_ONE_CATEGORY,\n value: settingStore.getHidePackageOneCategory,\n type: 'switch',\n name: '隐藏分类',\n desc: '工作空间表单分类只有单项时隐藏'\n },\n {\n key: SettingStoreEnums.CHANGE_LANG_RELOAD,\n value: settingStore.getChangeLangReload,\n type: 'switch',\n name: '切换语言',\n desc: '切换语言重新加载页面',\n tip: '若遇到部分区域语言切换失败,则建议开启'\n },\n {\n key: 'divider1',\n type: 'divider',\n name: '',\n desc: '',\n value: ''\n },\n {\n key: SettingStoreEnums.CHART_TOOLS_STATUS_HIDE,\n value: settingStore.getChartToolsStatusHide,\n type: 'switch',\n name: '隐藏工具栏',\n desc: '鼠标移入时,会展示切换到展开模式',\n },\n {\n key: SettingStoreEnums.CHART_TOOLS_STATUS,\n value: settingStore.getChartToolsStatus,\n type: 'select',\n name: '工具栏展示',\n desc: '工作空间工具栏展示方式',\n options: [\n {\n label: '侧边栏',\n value: ToolsStatusEnum.ASIDE\n },\n {\n label: '底部 Dock',\n value: ToolsStatusEnum.DOCK\n }\n ]\n },\n {\n key: 'divider0',\n type: 'divider',\n name: '',\n desc: '',\n value: ''\n },\n {\n key: SettingStoreEnums.CHART_MOVE_DISTANCE,\n value: settingStore.getChartMoveDistance,\n type: 'number',\n name: '移动距离',\n min: 1,\n step: 1,\n suffix: 'px',\n desc: '工作空间方向键控制移动距离'\n },\n {\n key: SettingStoreEnums.CHART_ALIGN_RANGE,\n value: settingStore.getChartAlignRange,\n type: 'number',\n name: '吸附距离',\n min: 10,\n step: 2,\n suffix: 'px',\n desc: '工作空间移动图表时的吸附距离'\n }\n])\n\nwatch(() => props.modelShow, (newValue) => {\n modelShowRef.value = newValue\n})\n\nconst closeHandle = () => {\n emit('update:modelShow', false)\n}\n\nconst handleChange = (e: MouseEvent, item: ListType) => {\n settingStore.setItem(item.key, item.value)\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.go-system-setting {\n .setting-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--el-border-color-lighter);\n \n .title {\n font-size: 16px;\n font-weight: 500;\n color: var(--el-text-color-primary);\n }\n \n .close-btn {\n cursor: pointer;\n color: var(--el-text-color-secondary);\n transition: color 0.2s;\n &:hover {\n color: var(--el-text-color-primary);\n }\n }\n }\n \n .setting-body {\n padding: 8px 0;\n }\n \n .setting-divider {\n height: 1px;\n margin: 8px 20px;\n background: var(--el-border-color-lighter);\n }\n \n .setting-row {\n display: grid;\n grid-template-columns: 90px 140px 1fr;\n align-items: center;\n gap: 16px;\n padding: 12px 20px;\n transition: background 0.2s;\n \n &:hover {\n background: var(--el-fill-color-light);\n }\n }\n \n .row-label {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 14px;\n color: var(--el-text-color-primary);\n \n .tip-icon {\n color: var(--el-text-color-secondary);\n cursor: help;\n }\n }\n \n .row-control {\n display: flex;\n align-items: center;\n gap: 6px;\n \n .suffix {\n font-size: 12px;\n color: var(--el-text-color-secondary);\n }\n \n :deep(.el-input-number) {\n width: 100px;\n }\n \n :deep(.el-select) {\n width: 120px;\n }\n }\n \n .row-desc {\n font-size: 12px;\n color: var(--el-text-color-secondary);\n }\n}\n</style>\n\n<style lang=\"scss\">\n.go-system-setting-dialog {\n background: var(--el-bg-color-overlay);\n border: 1px solid var(--el-border-color-lighter);\n border-radius: 8px;\n box-shadow: var(--el-box-shadow);\n \n .el-dialog__header {\n display: none;\n }\n \n .el-dialog__body {\n padding: 0;\n color: inherit;\n }\n}\n</style>\n","import { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\r\nimport { canvasCut, downloadTextFile, JSONStringify } from '@core/utils'\r\n\r\n// 导出\r\nexport const exportHandle = () => {\r\n // 在函数内部获取 store 实例\r\n const chartEditStore = useChartEditStore()\r\n \r\n // 取消选中\r\n chartEditStore.setTargetSelectChart(undefined)\r\n\r\n // 导出数据\r\n downloadTextFile(\r\n JSONStringify(chartEditStore.getStorageInfo() || []),\r\n undefined,\r\n 'json'\r\n )\r\n\r\n // 导出图片\r\n const range = document.querySelector('.go-edit-range') as HTMLElement\r\n const watermark = document.getElementById('go-edit-watermark')\r\n // 隐藏边距线\r\n if (!range || !watermark) {\r\n window['$message'].error('导出失败!')\r\n return\r\n }\r\n\r\n // 记录缩放比例\r\n const scaleTemp = chartEditStore.getEditCanvas.scale\r\n // 百分百展示页面\r\n chartEditStore.setScale(1, true)\r\n // 展示水印\r\n watermark.style.display = 'block'\r\n\r\n setTimeout(() => {\r\n canvasCut(range, () => {\r\n // 隐藏水印\r\n if (watermark) watermark.style.display = 'none'\r\n // 还原页面大小\r\n chartEditStore.setScale(scaleTemp, true)\r\n })\r\n }, 600)\r\n}\r\n","import { ref, nextTick } from 'vue'\nimport type { UploadRequestOptions } from 'element-plus'\nimport { FileTypeEnum } from '@core/enums/fileTypeEnum'\nimport { readFile, goDialog, JSONParse } from '@core/utils'\nimport { useSync } from '@core/views/chart/hooks/useSync.hook'\n\nexport const useFile = () => {\n const importUploadFileListRef = ref()\n const { updateComponent } = useSync()\n\n // 上传-前置\n //@ts-ignore\n const importBeforeUpload = ({ file }) => {\n importUploadFileListRef.value = []\n const type = file.file.type\n if (type !== FileTypeEnum.JSON && type !== FileTypeEnum.TXT) {\n window['$message'].warning('仅支持上传 【JSON】 格式文件,请重新上传!')\n return false\n }\n return true\n }\n\n // 上传-导入\n const importCustomRequest = (options: UploadRequestOptions) => {\n const { file } = options\n nextTick(() => {\n if (file) {\n readFile(file).then((fileData: any) => {\n goDialog({\n message: '请选择导入方式:',\n positiveText: '新增(可撤回)',\n negativeText: '覆盖(不可撤回)',\n negativeButtonProps: { type: 'info', ghost: false },\n // 新增\n onPositiveCallback: async () => {\n try {\n fileData = JSONParse(fileData)\n await updateComponent(fileData, false, true)\n window['$message'].success('导入成功!')\n } catch (error) {\n console.log(error)\n window['$message'].error('组件导入失败,请检查文件完整性!')\n }\n },\n // 覆盖\n onNegativeCallback: async () => {\n try {\n fileData = JSONParse(fileData)\n await updateComponent(fileData, true, true)\n window['$message'].success('导入成功!')\n } catch (error) {\n console.log(error)\n window['$message'].error('组件导入失败,请检查文件完整性!')\n }\n }\n })\n })\n } else {\n window['$message'].error('导入失败,请检查数据或联系管理员!')\n }\n })\n }\n\n return {\n importUploadFileListRef,\n importBeforeUpload,\n importCustomRequest\n }\n}\n","export enum TypeEnum {\n BUTTON = 'button',\n IMPORTUPLOAD = 'importUpload'\n}\n\nexport type BtnListType = {\n key: string\n type: TypeEnum\n name: string\n icon: any\n handle?: () => void\n}\n","<template>\n <div class=\"go-chart-edit-tools\" :class=\"[settingStore.getChartToolsStatus, isMiniComputed ? 'isMini' : 'unMini']\"\n @click=\"isMini && (isMini = false)\" @mouseenter=\"toolsMouseoverHandle\" @mouseleave=\"toolsMouseoutHandle\">\n <!-- PawIcon -->\n <el-icon v-show=\"settingStore.getChartToolsStatus === ToolsStatusEnum.ASIDE && isMiniComputed\" class=\"asideLogo\"\n :size=\"22\">\n <PawIcon></PawIcon>\n </el-icon>\n\n <el-tooltip v-for=\"(item, index) in btnListComputed\" :key=\"item.key\"\n :disabled=\"!isAside || (isHide && asideTootipDis)\" :content=\"item.name\" placement=\"left\">\n <div class=\"btn-item\">\n <el-button v-if=\"item.type === TypeEnum.BUTTON\" :circle=\"isAside\" @click=\"item.handle\">\n <el-icon :size=\"isAside ? 18 : 16\">\n <component :is=\"item.icon\"></component>\n </el-icon>\n <span v-show=\"!isAside\" class=\"btn-text\">{{ item.name }}</span>\n </el-button>\n <!-- 下载 -->\n <el-upload v-else-if=\"item.type === TypeEnum.IMPORTUPLOAD\" v-model:file-list=\"importUploadFileListRef\"\n :show-file-list=\"false\" :http-request=\"importCustomRequest\" :before-upload=\"importBeforeUpload\">\n <el-button :circle=\"isAside\">\n <el-icon :size=\"isAside ? 18 : 16\">\n <component :is=\"item.icon\"></component>\n </el-icon>\n <span v-show=\"!isAside\" class=\"btn-text\">{{ item.name }}</span>\n </el-button>\n </el-upload>\n </div>\n </el-tooltip>\n </div>\n <!-- 系统设置 model -->\n <go-system-set v-model:modelShow=\"globalSettingModel\"></go-system-set>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport { useSettingStore } from '@core/store/modules/settingStore/settingStore'\nimport { ToolsStatusEnum } from '@core/store/modules/settingStore/settingStore.d'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditCanvasTypeEnum } from '@core/store/modules/chartEditStore/chartEditStore.d'\nimport { getLocalStorage, setSessionStorage } from '@core/utils'\nimport { StorageEnum } from '@core/enums/storageEnum'\nimport { GoSystemSet } from '@core/components/GoSystemSet/index'\nimport { exportHandle } from './utils'\nimport { useFile } from './hooks/useFile.hooks'\nimport { useSyncUpdate } from './hooks/useSyncUpdate.hook'\nimport { BtnListType, TypeEnum } from './index.d'\nimport { icon } from '@core/plugins'\n\nconst { DownloadIcon, ShareIcon, PawIcon, SettingsSharpIcon, CreateIcon } = icon.ionicons5\nconst settingStore = useSettingStore()\nconst chartEditStore = useChartEditStore()\n// 初始化编辑 JSON 模块\nuseSyncUpdate()\n\n// 鼠标悬停定时器\nlet mouseTime: any = null\n// 系统设置 model\nconst globalSettingModel = ref(false)\n// 最小化\nconst isMini = ref<boolean>(true)\n// 控制 tootip 提示时机\nconst asideTootipDis = ref(true)\n// 文件上传\nconst { importUploadFileListRef, importCustomRequest, importBeforeUpload } = useFile()\n\n// 是否是侧边栏\nconst isAside = computed(() => settingStore.getChartToolsStatus === ToolsStatusEnum.ASIDE)\n\n// 是否隐藏(悬浮展示)\nconst isHide = computed(() => settingStore.getChartToolsStatusHide)\n\n// 是否展示最小化(与全局配置相关)\nconst isMiniComputed = computed(() => isMini.value && isHide.value)\n\n// 页面渲染配置\nconst btnListComputed = computed(() => {\n if (!isAside.value) return btnList\n const reverseArr: BtnListType[] = []\n btnList.map(item => {\n reverseArr.unshift(item)\n })\n return reverseArr\n})\n\n// 鼠标移入\nconst toolsMouseoverHandle = () => {\n mouseTime = setTimeout(() => {\n if (isMini.value) {\n isMini.value = false\n asideTootipDis.value = true\n }\n }, 200)\n setTimeout(() => {\n asideTootipDis.value = false\n }, 400)\n}\n\n// 鼠标移出\nconst toolsMouseoutHandle = () => {\n clearTimeout(mouseTime)\n if (!isMini.value) {\n isMini.value = true\n }\n}\n\n// 编辑处理(直接开启JSON编辑模式)\nconst editHandle = () => {\n window['$message'].warning('请通过顶部【同步内容】按钮同步最新数据!')\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_CODE_EDIT, true)\n}\n\n// 配置列表\nconst btnList: BtnListType[] = [\n {\n key: 'import',\n type: TypeEnum.IMPORTUPLOAD,\n name: '导入',\n icon: ShareIcon\n },\n {\n key: 'export',\n type: TypeEnum.BUTTON,\n name: '导出',\n icon: DownloadIcon,\n handle: exportHandle\n },\n {\n key: 'edit',\n type: TypeEnum.BUTTON,\n name: '编辑',\n icon: CreateIcon,\n handle: editHandle\n },\n {\n key: 'setting',\n type: TypeEnum.BUTTON,\n name: '设置',\n icon: SettingsSharpIcon,\n handle: () => {\n globalSettingModel.value = true\n }\n }\n]\n</script>\n\n<style lang=\"scss\" scoped>\n/* 底部区域的高度 */\n$dockHeight: 30px;\n$dockBottom: 60px;\n$dockMiniWidth: 200px;\n$dockMiniBottom: 53px;\n\n$asideHeight: 130px;\n$asideMiniHeight: 22px;\n$asideBottom: 70px;\n\n@include go('chart-edit-tools') {\n @extend .go-background-filter;\n position: absolute;\n display: flex;\n justify-content: space-around;\n align-items: center;\n border-radius: 25px;\n border: 1px solid;\n @include fetch-border-color('hover-border-color-shallow');\n\n .btn-text {\n margin-left: 4px;\n color: var(--el-text-color-secondary);\n }\n\n &.aside {\n display: flex;\n justify-content: center;\n flex-direction: column-reverse;\n height: auto;\n right: 20px;\n padding: 40px 8px;\n bottom: $asideBottom;\n overflow: hidden;\n transition: height ease 0.4s;\n\n .btn-item {\n margin-bottom: 10px;\n display: flex;\n justify-content: center;\n\n &:first-of-type {\n margin-bottom: 0;\n }\n\n @include deep() {\n .el-button {\n &.is-circle {\n width: 40px;\n height: 40px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n\n .el-upload {\n display: flex;\n justify-content: center;\n }\n }\n }\n\n &.unMini {\n animation: aside-in 0.4s ease forwards;\n\n @keyframes aside-in {\n 0% {\n opacity: 0.5;\n height: $asideMiniHeight;\n }\n\n 100% {\n height: $asideHeight;\n opacity: 1;\n }\n }\n\n .btn-item {\n position: relative;\n display: flex;\n }\n\n .asideLogo {\n opacity: 0.4;\n }\n }\n\n &.isMini {\n cursor: pointer;\n padding: 13px 13px;\n background-color: var(--el-fill-color);\n animation: aside-mini-in 0.4s ease forwards;\n\n @keyframes aside-mini-in {\n 0% {\n opacity: 0.5;\n height: $asideHeight;\n }\n\n 100% {\n opacity: 1;\n height: $asideMiniHeight;\n }\n }\n\n .btn-item {\n position: relative;\n display: none;\n }\n\n .asideLogo {\n opacity: 1;\n }\n }\n }\n\n &.dock {\n width: auto;\n left: 50%;\n transform: translateX(-50%);\n\n .btn-item {\n margin-right: 20px;\n\n &:last-child {\n margin-right: 0;\n }\n }\n\n &.unMini {\n animation: dock-in 0.4s ease forwards;\n\n @keyframes dock-in {\n 0% {\n opacity: 0;\n height: 0;\n padding: 5px;\n bottom: $dockMiniBottom;\n }\n\n 100% {\n height: $dockHeight;\n padding: 8px 30px;\n bottom: $dockBottom;\n border-radius: 25px;\n }\n }\n\n &::after {\n content: '';\n position: absolute;\n left: 0;\n width: 100%;\n height: 10px;\n bottom: -10px;\n cursor: pointer;\n }\n }\n\n /* 最小化 */\n &.isMini {\n height: 0;\n width: $dockMiniWidth;\n bottom: $dockMiniBottom;\n padding: 5px;\n border-radius: 8px;\n cursor: pointer;\n border: 0px;\n animation: dock-mini-in 1s ease forwards;\n\n @keyframes dock-mini-in {\n 0% {\n opacity: 1;\n height: $dockHeight;\n padding: 8px 30px;\n bottom: $dockBottom;\n border-radius: 25px;\n }\n\n 20% {\n height: 0;\n border-radius: 8px;\n }\n\n 50% {\n opacity: 0;\n bottom: calc(#{$dockMiniBottom} - 10px);\n pointer-events: none;\n }\n\n 100% {\n opacity: 1;\n height: 0;\n padding: 5px;\n bottom: $dockMiniBottom;\n }\n }\n\n .btn-item {\n position: relative;\n bottom: -50px;\n display: none;\n }\n }\n }\n}\n</style>\n","<template>\n <!-- <edit-rule></edit-rule> -->\n <content-box id=\"go-chart-edit-layout\" :flex=\"true\" :showTop=\"false\" :showBottom=\"true\" :depth=\"1\" :xScroll=\"true\"\n :disabledScroll=\"true\" @mousedown=\"mousedownHandleUnStop\" @drop=\"dragHandle\" @dragover=\"dragoverHandle\"\n @dragenter=\"dragoverHandle\">\n <edit-rule>\n <!-- 画布主体 -->\n <div id=\"go-chart-edit-content\" @contextmenu=\"handleContextMenu\">\n <!-- 展示 -->\n <edit-range>\n <!-- 滤镜预览 -->\n <div :style=\"{\n ...getFilterStyle(chartEditStore.getEditCanvasConfig),\n ...rangeStyle\n }\">\n <!-- 图表 -->\n <div v-for=\"(item, index) in chartEditStore.getComponentList\" :key=\"item.id\">\n <!-- 分组 -->\n <edit-group v-if=\"item.isGroup\" :groupData=\"(item as CreateComponentGroupType)\"\n :groupIndex=\"index\"></edit-group>\n\n <!-- 单组件 -->\n <edit-shape-box v-else :data-id=\"item.id\" :index=\"index\" :style=\"{\n ...useComponentStyle(item.attr, index),\n ...getBlendModeStyle(item.styles) as any\n }\" :item=\"item\" @click=\"mouseClickHandle($event, item)\" @mousedown=\"mousedownHandle($event, item)\"\n @mouseenter=\"mouseenterHandle($event, item)\" @mouseleave=\"mouseleaveHandle($event, item)\"\n @contextmenu=\"handleContextMenu($event, item, optionsHandle)\">\n <component class=\"edit-content-chart\" :class=\"animationsClass(item.styles.animations)\"\n :is=\"item.chartConfig.chartKey\" :chartConfig=\"item\" :themeSetting=\"themeSetting\"\n :themeColor=\"themeColor\" :style=\"{\n ...useSizeStyle(item.attr),\n ...getFilterStyle(item.styles),\n ...getTransformStyle(item.styles)\n }\"></component>\n </edit-shape-box>\n </div>\n </div>\n </edit-range>\n </div>\n </edit-rule>\n <!-- 工具栏 -->\n <template #aside>\n <edit-tools></edit-tools>\n </template>\n\n <!-- 底部控制 -->\n <template #bottom>\n <EditBottom></EditBottom>\n </template>\n </content-box>\n</template>\n\n<script lang=\"ts\" setup>\nimport { onMounted, computed, provide } from 'vue'\nimport { chartColors } from '@core/settings/chartThemes/index'\nimport { MenuEnum } from '@core/enums/editPageEnum'\nimport { CreateComponentType, CreateComponentGroupType } from '@core/packages/index.d'\nimport { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle, colorCustomMerge } from '@core/utils'\nimport { useContextMenu } from '@core/views/chart/hooks/useContextMenu.hook'\nimport { MenuOptionsItemType } from '@core/views/chart/hooks/useContextMenu.hook.d'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { useScale } from '@core/views/chart/hooks/useScale.hook'\nimport { useLayout } from './hooks/useLayout.hook'\nimport { useAddKeyboard } from '../hooks/useKeyboard.hook'\nimport { dragHandle, dragoverHandle, mousedownHandleUnStop, useMouseHandle } from './hooks/useDrag.hook'\nimport { useComponentStyle, useSizeStyle } from './hooks/useStyle.hook'\n\nimport { ContentBox } from '../ContentBox/index'\nimport { EditGroup } from './components/EditGroup'\nimport { EditRange } from './components/EditRange'\nimport { EditRule } from './components/EditRule'\nimport { EditBottom } from './components/EditBottom'\nimport { EditShapeBox } from './components/EditShapeBox'\nimport { EditTools } from './components/EditTools'\n\nconst chartEditStore = useChartEditStore()\nconst { handleContextMenu } = useContextMenu()\n\n// 编辑时注入scale变量\nconst { scale, SCALE_KEY } = useScale()\nprovide(SCALE_KEY, scale)\n\n// 布局处理\nuseLayout(async () => { })\n\n// 点击事件\nconst { mouseenterHandle, mouseleaveHandle, mousedownHandle, mouseClickHandle } = useMouseHandle()\n\n// 右键事件\nconst optionsHandle = (\n targetList: MenuOptionsItemType[],\n allList: MenuOptionsItemType[],\n targetInstance: CreateComponentType\n) => {\n // 多选处理\n if (chartEditStore.getTargetChart.selectId.length > 1) {\n return allList.filter(i => [MenuEnum.GROUP, MenuEnum.DELETE].includes(i.key as MenuEnum))\n }\n const statusMenuEnums: MenuEnum[] = []\n if (targetInstance.status.lock) {\n statusMenuEnums.push(MenuEnum.LOCK)\n } else {\n statusMenuEnums.push(MenuEnum.UNLOCK)\n }\n if (targetInstance.status.hide) {\n statusMenuEnums.push(MenuEnum.HIDE)\n } else {\n statusMenuEnums.push(MenuEnum.SHOW)\n }\n return targetList.filter(i => !statusMenuEnums.includes(i.key as MenuEnum))\n}\n\n// 主题色\nconst themeSetting = computed(() => {\n const chartThemeSetting = chartEditStore.getEditCanvasConfig.chartThemeSetting\n return chartThemeSetting\n})\n\n// 配置项\nconst themeColor = computed(() => {\n const colorCustomMergeData: any = colorCustomMerge(chartEditStore.getEditCanvasConfig.chartCustomThemeColorInfo)\n return colorCustomMergeData[chartEditStore.getEditCanvasConfig.chartThemeColor]\n})\n\n// 是否展示渲染\nconst filterShow = computed(() => {\n return chartEditStore.getEditCanvasConfig.filterShow\n})\n\n// 背景\nconst rangeStyle = computed(() => {\n // 设置背景色和图片背景\n const background = chartEditStore.getEditCanvasConfig.background\n const backgroundImage = chartEditStore.getEditCanvasConfig.backgroundImage\n const selectColor = chartEditStore.getEditCanvasConfig.selectColor\n const backgroundColor = background ? background : undefined\n\n const computedBackground = selectColor\n ? { background: backgroundColor }\n : { background: `url(${backgroundImage}) no-repeat center center / cover !important` }\n\n return {\n ...computedBackground,\n width: 'inherit',\n height: 'inherit'\n }\n})\n\n// 键盘事件\nonMounted(() => {\n useAddKeyboard()\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@include goId('chart-edit-layout') {\n position: relative;\n width: 100%;\n overflow: hidden;\n @extend .go-point-bg;\n @include background-image('background-point');\n\n @include goId('chart-edit-content') {\n overflow: hidden;\n @extend .go-transition;\n @include fetch-theme('box-shadow');\n\n .edit-content-chart {\n position: absolute;\n overflow: hidden;\n }\n }\n}\n</style>\n"],"names":["useLayout","fn","removeScale","onMounted","chartEditStore","useChartEditStore","EditCanvasTypeEnum","onUnmounted","global","k","_handlers","_mods","_scope","_MODIFIERS","_MAP","code","x","_downKeys","index","array","item","i","compareArray","a1","a2","modifierMap","updateModifierKey","event","dispatch","key","handler","modifiersMatch","scope","assignKey","getScope","clearModifier","resetModifiers","method","keys","mods","getKeys","getMods","unbindKey","multipleKeys","j","obj","isPressed","keyCode","getPressedKeyCodes","filter","tagName","setScope","deleteScope","handlers","mi","addEvent","object","previousKey","noConflict","module","this","winCtrlMerge","WinKeyboard","winShiftMerge","winKeyboardValue","MenuEnum","macCtrlMerge","MacKeyboard","macShiftMerge","macKeyboardValue","winKeyList","macKeyList","keyRecordHandle","setKeyboardDressShow","useAddKeyboard","switchHandle","keyboardValue","e","keymaster","throttle","debounce","dragHandle","loadingStart","drayDataString","DragKeyEnum","loadingFinish","dropData","JSONParse","ensureRegisteredComponent","newComponent","createComponent","setComponentPosition","error","loadingError","dragoverHandle","mousedownHandleUnStop","mousedownBoxSelect","onClickOutSide","useContextMenu","startScreenX","startScreenY","startOffsetX","startOffsetY","scale","mousemove","moveEvent","currX","currY","selectAttr","y","w","h","targetAttr","mouseup","useMouseHandle","_a","exList","MouseEventButton","selectId","canvasWidth","canvasHeight","targetMap","id","toRaw","startX","startY","prevComponentInstance","cloneDeep","offsetX","offsetY","componentInstance","distance","curComponentInstance","preItem","moveComponentInstance","err","useMousePointHandle","point","attr","componentId","itemAttrX","itemAttrY","itemAttrW","itemAttrH","isTop","isBottom","isLeft","isRight","newHeight","newWidth","useComponentStyle","useSizeStyle","usePointStyle","cursorResize","width","height","newLeft","newTop","props","__props","designStore","useDesignStore","pointList","themeColor","computed","hover","select","lock","hide","_createElementBlock","_normalizeClass","_renderSlot","_ctx","_openBlock","_Fragment","_normalizeStyle","_unref","$event","_createElementVNode","handleContextMenu","mouseenterHandle","mouseleaveHandle","mousedownHandle","mouseClickHandle","optionsHandle","targetList","allList","targetInstance","menulist","statusMenuEnums","singleMenuEnums","divider","colorCustomMerge","themeSetting","_hoisted_1","_createBlock","EditShapeBox","animationsClass","getFilterStyle","getTransformStyle","getBlendModeStyle","_cache","_renderList","_resolveDynamicComponent","settingStore","useSettingStore","line","reactive","minDistance","isComputedLine","isSorption","selectValue","componentValue","selectTarget","canvasPositionList","watch","selectW","selectH","selectLeftX","selectHalfX","selectRightX","seletX","selectTopY","selectHalfY","selectBottomY","selectY","componentList","lineItem","component","componentW","componentH","componentLeftX","componentHalfX","componentRightX","componentX","componentTopY","componentHalfY","componentBottomY","componentY","val","_component_el_watermark","watermarkText","isSelect","toRefs","positionStyle","ref","positionInfo","selectBoxIndex","getEditCanvasConfig","getEditCanvas","size","rangeStyle","rangeModelStyle","dragStyle","_createVNode","EditWatermark","EditAlignLine","EditSelect","thick","chartLayoutStore","useChartLayoutStore","prevMoveXValue","prevMoveYValue","$app","sketchRuleReDraw","refSketchRuleBox","$container","isPressSpace","cursorStyle","lines","canvasBoxWidth","canvasBoxHeight","updateCanvasBoxSize","layoutDom","containerWidth","containerHeight","paletteStyle","handleWheel","resScale","handleScroll","screensRect","canvasRect","dragCanvas","_b","handleMousemove","nx","ny","prevMoveX1","prevMoveX2","prevMoveY1","prevMoveY2","handleMouseup","canvasBox","reDraw","canvasPosCenter","newValue","oldValue","ChartLayoutStoreEnum","handleResize","isHold","_component_sketch_rule","historyActionTypeName","HistoryActionTypeEnum","HistoryTargetTypeEnum","arrayProto","nativeReverse","reverse","reverse_1","DesktopOutlineIcon","PencilIcon","TrashIcon","CopyIcon","LayersIcon","DuplicateIcon","HelpOutlineIcon","LockClosedOutlineIcon","LockOpenOutlineIcon","EyeOffOutlineIcon","EyeOutlineIcon","icon","StackedMoveIcon","Carbon3DCursorIcon","Carbon3DSoftwareIcon","chartHistoryStoreStore","useChartHistoryStore","iconHandle","labelHandle","options","opts","_component_el_popover","_component_el_button","_hoisted_2","_component_el_scrollbar","_component_el_icon","_hoisted_4","_toDisplayString","_hoisted_5","_component_el_tooltip","editHistoryMax","CloseIcon","modelShowRef","emit","__emit","shortcutKeyOptions","closeHandle","_component_el_dialog","_component_el_table","_component_el_table_column","_withCtx","row","_hoisted_3","_createTextVNode","DicomOverlayIcon","modelShow","ShortcutKeyModal","lockScale","selectInstRef","filterOptions","filterValue","selectHandle","v","lockHandle","sliderValue","sliderFormatTooltip","sliderHandle","sliderMaks","watchEffect","value","EditHistory","EditShortcutKey","_component_el_select","opt","_component_el_option","_component_el_slider","list","SettingStoreEnums","ToolsStatusEnum","handleChange","_hoisted_6","_hoisted_7","_component_el_switch","_component_el_input_number","_hoisted_8","_hoisted_9","exportHandle","downloadTextFile","JSONStringify","range","watermark","scaleTemp","canvasCut","useFile","importUploadFileListRef","updateComponent","useSync","file","type","FileTypeEnum","nextTick","readFile","fileData","goDialog","TypeEnum","DownloadIcon","ShareIcon","PawIcon","SettingsSharpIcon","CreateIcon","useSyncUpdate","mouseTime","globalSettingModel","isMini","asideTootipDis","importCustomRequest","importBeforeUpload","isAside","isHide","isMiniComputed","btnListComputed","btnList","reverseArr","toolsMouseoverHandle","toolsMouseoutHandle","editHandle","_vShow","_withDirectives","_component_el_upload","GoSystemSet","SCALE_KEY","useScale","provide","background","backgroundImage","ContentBox","EditTools","EditBottom","EditRule","args","EditRange","EditGroup"],"mappings":"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","x_google_ignoreList":[1,13]}
1
+ {"version":3,"file":"index-746b469a.js","sources":["../src/views/chart/ContentEdit/hooks/useLayout.hook.ts","../../../node_modules/.pnpm/keymaster@1.6.2/node_modules/keymaster/keymaster.js","../src/views/chart/hooks/useKeyboard.hook.ts","../src/views/chart/ContentEdit/hooks/useDrag.hook.ts","../src/views/chart/ContentEdit/hooks/useStyle.hook.ts","../src/views/chart/ContentEdit/components/EditShapeBox/index.vue","../src/views/chart/ContentEdit/components/EditGroup/index.vue","../src/views/chart/ContentEdit/components/EditAlignLine/index.vue","../src/views/chart/ContentEdit/components/EditWatermark/index.vue","../src/views/chart/ContentEdit/components/EditSelect/index.vue","../src/views/chart/ContentEdit/components/EditRange/index.vue","../src/views/chart/ContentEdit/components/EditRule/index.vue","../src/store/modules/chartHistoryStore/chartHistoryDefine.ts","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/reverse.js","../src/views/chart/ContentEdit/components/EditHistory/index.vue","../src/views/chart/ContentEdit/components/EditShortcutKey/ShortcutKeyModal.vue","../src/views/chart/ContentEdit/components/EditShortcutKey/index.vue","../src/views/chart/ContentEdit/components/EditBottom/index.vue","../src/components/GoSystemSet/index.vue","../src/views/chart/ContentEdit/components/EditTools/utils/index.ts","../src/views/chart/ContentEdit/components/EditTools/hooks/useFile.hooks.ts","../src/views/chart/ContentEdit/components/EditTools/index.d.ts","../src/views/chart/ContentEdit/components/EditTools/index.vue","../src/views/chart/ContentEdit/index.vue"],"sourcesContent":["import { onUnmounted, onMounted } from 'vue'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditCanvasTypeEnum } from '@core/store/modules/chartEditStore/chartEditStore.d'\n\n// 布局处理\nexport const useLayout = (fn: () => Promise<void>) => {\n let removeScale: Function = () => { }\n \n onMounted(async () => {\n // 在需要时才获取 store 实例\n const chartEditStore = useChartEditStore()\n \n // 设置 Dom 值(ref 不生效先用 document)\n chartEditStore.setEditCanvas(\n EditCanvasTypeEnum.EDIT_LAYOUT_DOM,\n document.getElementById('go-chart-edit-layout')\n )\n chartEditStore.setEditCanvas(\n EditCanvasTypeEnum.EDIT_CONTENT_DOM,\n document.getElementById('go-chart-edit-content')\n )\n\n // 获取数据\n await fn()\n // 监听初始化\n removeScale = chartEditStore.listenerScale()\n\n })\n\n onUnmounted(() => {\n // 在需要时才获取 store 实例\n const chartEditStore = useChartEditStore()\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.EDIT_LAYOUT_DOM, null)\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.EDIT_CONTENT_DOM, null)\n removeScale()\n })\n}","// keymaster.js\n// (c) 2011-2013 Thomas Fuchs\n// keymaster.js may be freely distributed under the MIT license.\n\n;(function(global){\n var k,\n _handlers = {},\n _mods = { 16: false, 18: false, 17: false, 91: false },\n _scope = 'all',\n // modifier keys\n _MODIFIERS = {\n '⇧': 16, shift: 16,\n '⌥': 18, alt: 18, option: 18,\n '⌃': 17, ctrl: 17, control: 17,\n '⌘': 91, command: 91\n },\n // special keys\n _MAP = {\n backspace: 8, tab: 9, clear: 12,\n enter: 13, 'return': 13,\n esc: 27, escape: 27, space: 32,\n left: 37, up: 38,\n right: 39, down: 40,\n del: 46, 'delete': 46,\n home: 36, end: 35,\n pageup: 33, pagedown: 34,\n ',': 188, '.': 190, '/': 191,\n '`': 192, '-': 189, '=': 187,\n ';': 186, '\\'': 222,\n '[': 219, ']': 221, '\\\\': 220\n },\n code = function(x){\n return _MAP[x] || x.toUpperCase().charCodeAt(0);\n },\n _downKeys = [];\n\n for(k=1;k<20;k++) _MAP['f'+k] = 111+k;\n\n // IE doesn't support Array#indexOf, so have a simple replacement\n function index(array, item){\n var i = array.length;\n while(i--) if(array[i]===item) return i;\n return -1;\n }\n\n // for comparing mods before unassignment\n function compareArray(a1, a2) {\n if (a1.length != a2.length) return false;\n for (var i = 0; i < a1.length; i++) {\n if (a1[i] !== a2[i]) return false;\n }\n return true;\n }\n\n var modifierMap = {\n 16:'shiftKey',\n 18:'altKey',\n 17:'ctrlKey',\n 91:'metaKey'\n };\n function updateModifierKey(event) {\n for(k in _mods) _mods[k] = event[modifierMap[k]];\n };\n\n // handle keydown event\n function dispatch(event) {\n var key, handler, k, i, modifiersMatch, scope;\n key = event.keyCode;\n\n if (index(_downKeys, key) == -1) {\n _downKeys.push(key);\n }\n\n // if a modifier key, set the key.<modifierkeyname> property to true and return\n if(key == 93 || key == 224) key = 91; // right command on webkit, command on Gecko\n if(key in _mods) {\n _mods[key] = true;\n // 'assignKey' from inside this closure is exported to window.key\n for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = true;\n return;\n }\n updateModifierKey(event);\n\n // see if we need to ignore the keypress (filter() can can be overridden)\n // by default ignore key presses if a select, textarea, or input is focused\n if(!assignKey.filter.call(this, event)) return;\n\n // abort if no potentially matching shortcuts found\n if (!(key in _handlers)) return;\n\n scope = getScope();\n\n // for each potential shortcut\n for (i = 0; i < _handlers[key].length; i++) {\n handler = _handlers[key][i];\n\n // see if it's in the current scope\n if(handler.scope == scope || handler.scope == 'all'){\n // check if modifiers match if any\n modifiersMatch = handler.mods.length > 0;\n for(k in _mods)\n if((!_mods[k] && index(handler.mods, +k) > -1) ||\n (_mods[k] && index(handler.mods, +k) == -1)) modifiersMatch = false;\n // call the handler and stop the event if neccessary\n if((handler.mods.length == 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch){\n if(handler.method(event, handler)===false){\n if(event.preventDefault) event.preventDefault();\n else event.returnValue = false;\n if(event.stopPropagation) event.stopPropagation();\n if(event.cancelBubble) event.cancelBubble = true;\n }\n }\n }\n }\n };\n\n // unset modifier keys on keyup\n function clearModifier(event){\n var key = event.keyCode, k,\n i = index(_downKeys, key);\n\n // remove key from _downKeys\n if (i >= 0) {\n _downKeys.splice(i, 1);\n }\n\n if(key == 93 || key == 224) key = 91;\n if(key in _mods) {\n _mods[key] = false;\n for(k in _MODIFIERS) if(_MODIFIERS[k] == key) assignKey[k] = false;\n }\n };\n\n function resetModifiers() {\n for(k in _mods) _mods[k] = false;\n for(k in _MODIFIERS) assignKey[k] = false;\n };\n\n // parse and assign shortcut\n function assignKey(key, scope, method){\n var keys, mods;\n keys = getKeys(key);\n if (method === undefined) {\n method = scope;\n scope = 'all';\n }\n\n // for each shortcut\n for (var i = 0; i < keys.length; i++) {\n // set modifier keys if any\n mods = [];\n key = keys[i].split('+');\n if (key.length > 1){\n mods = getMods(key);\n key = [key[key.length-1]];\n }\n // convert to keycode and...\n key = key[0]\n key = code(key);\n // ...store handler\n if (!(key in _handlers)) _handlers[key] = [];\n _handlers[key].push({ shortcut: keys[i], scope: scope, method: method, key: keys[i], mods: mods });\n }\n };\n\n // unbind all handlers for given key in current scope\n function unbindKey(key, scope) {\n var multipleKeys, keys,\n mods = [],\n i, j, obj;\n\n multipleKeys = getKeys(key);\n\n for (j = 0; j < multipleKeys.length; j++) {\n keys = multipleKeys[j].split('+');\n\n if (keys.length > 1) {\n mods = getMods(keys);\n key = keys[keys.length - 1];\n }\n\n key = code(key);\n\n if (scope === undefined) {\n scope = getScope();\n }\n if (!_handlers[key]) {\n return;\n }\n for (i = 0; i < _handlers[key].length; i++) {\n obj = _handlers[key][i];\n // only clear handlers if correct scope and mods match\n if (obj.scope === scope && compareArray(obj.mods, mods)) {\n _handlers[key][i] = {};\n }\n }\n }\n };\n\n // Returns true if the key with code 'keyCode' is currently down\n // Converts strings into key codes.\n function isPressed(keyCode) {\n if (typeof(keyCode)=='string') {\n keyCode = code(keyCode);\n }\n return index(_downKeys, keyCode) != -1;\n }\n\n function getPressedKeyCodes() {\n return _downKeys.slice(0);\n }\n\n function filter(event){\n var tagName = (event.target || event.srcElement).tagName;\n // ignore keypressed in any elements that support keyboard data input\n return !(tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA');\n }\n\n // initialize key.<modifier> to false\n for(k in _MODIFIERS) assignKey[k] = false;\n\n // set current scope (default 'all')\n function setScope(scope){ _scope = scope || 'all' };\n function getScope(){ return _scope || 'all' };\n\n // delete all handlers for a given scope\n function deleteScope(scope){\n var key, handlers, i;\n\n for (key in _handlers) {\n handlers = _handlers[key];\n for (i = 0; i < handlers.length; ) {\n if (handlers[i].scope === scope) handlers.splice(i, 1);\n else i++;\n }\n }\n };\n\n // abstract key logic for assign and unassign\n function getKeys(key) {\n var keys;\n key = key.replace(/\\s/g, '');\n keys = key.split(',');\n if ((keys[keys.length - 1]) == '') {\n keys[keys.length - 2] += ',';\n }\n return keys;\n }\n\n // abstract mods logic for assign and unassign\n function getMods(key) {\n var mods = key.slice(0, key.length - 1);\n for (var mi = 0; mi < mods.length; mi++)\n mods[mi] = _MODIFIERS[mods[mi]];\n return mods;\n }\n\n // cross-browser events\n function addEvent(object, event, method) {\n if (object.addEventListener)\n object.addEventListener(event, method, false);\n else if(object.attachEvent)\n object.attachEvent('on'+event, function(){ method(window.event) });\n };\n\n // set the handlers globally on document\n addEvent(document, 'keydown', function(event) { dispatch(event) }); // Passing _scope to a callback to ensure it remains the same by execution. Fixes #48\n addEvent(document, 'keyup', clearModifier);\n\n // reset modifiers to false whenever the window is (re)focused.\n addEvent(window, 'focus', resetModifiers);\n\n // store previously defined key\n var previousKey = global.key;\n\n // restore previously defined key and return reference to our key object\n function noConflict() {\n var k = global.key;\n global.key = previousKey;\n return k;\n }\n\n // set window.key and window.key.set/get/deleteScope, and the default filter\n global.key = assignKey;\n global.key.setScope = setScope;\n global.key.getScope = getScope;\n global.key.deleteScope = deleteScope;\n global.key.filter = filter;\n global.key.isPressed = isPressed;\n global.key.getPressedKeyCodes = getPressedKeyCodes;\n global.key.noConflict = noConflict;\n global.key.unbind = unbindKey;\n\n if(typeof module !== 'undefined') module.exports = assignKey;\n\n})(this);\n","import { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { WinKeyboard, MacKeyboard, MenuEnum } from '@core/enums/editPageEnum'\nimport throttle from 'lodash/throttle'\nimport debounce from 'lodash/debounce'\nimport keymaster from 'keymaster'\nimport { setKeyboardDressShow } from '@core/utils'\n\n// Keymaster可以支持识别以下组合键: ⇧,shift,option,⌥,alt,ctrl,control,command,和⌘\n\nconst winCtrlMerge = (e: string) => `${WinKeyboard.CTRL}+${e}`\nconst winShiftMerge = (e: string) => `${WinKeyboard.SHIFT}+${e}`\nconst winAltMerge = (e: string) => `${WinKeyboard.ALT}+${e}`\n\nexport const winKeyboardValue = {\n [MenuEnum.ARROW_UP]: winCtrlMerge('up'),\n [MenuEnum.ARROW_RIGHT]: winCtrlMerge('right'),\n [MenuEnum.ARROW_DOWN]: winCtrlMerge('down'),\n [MenuEnum.ARROW_LEFT]: winCtrlMerge('left'),\n [MenuEnum.COPY]: winCtrlMerge('c'),\n [MenuEnum.CUT]: winCtrlMerge('x'),\n [MenuEnum.PARSE]: winCtrlMerge('v'),\n [MenuEnum.DELETE]: 'delete',\n [MenuEnum.BACK]: winCtrlMerge('z'),\n [MenuEnum.FORWORD]: winCtrlMerge(winShiftMerge('z')),\n [MenuEnum.GROUP]: winCtrlMerge('g'),\n [MenuEnum.UN_GROUP]: winCtrlMerge(winShiftMerge('g')),\n [MenuEnum.LOCK]: winCtrlMerge('l'),\n [MenuEnum.UNLOCK]: winCtrlMerge(winShiftMerge('l')),\n [MenuEnum.HIDE]: winCtrlMerge('h'),\n [MenuEnum.SHOW]: winCtrlMerge(winShiftMerge('h'))\n}\n\n// 这个 Ctrl 后面还是换成了 ⌘\nconst macCtrlMerge = (e: string) => `${MacKeyboard.CTRL}+${e}`\nconst macShiftMerge = (e: string) => `${MacKeyboard.SHIFT}+${e}`\nconst macAltMerge = (e: string) => `${MacKeyboard.ALT}+${e}`\n\n// 没有测试 macOS 系统,因为我没有😤👻\nexport const macKeyboardValue = {\n [MenuEnum.ARROW_UP]: macCtrlMerge('arrowup'),\n [MenuEnum.ARROW_RIGHT]: macCtrlMerge('arrowright'),\n [MenuEnum.ARROW_DOWN]: macCtrlMerge('arrowdown'),\n [MenuEnum.ARROW_LEFT]: macCtrlMerge('arrowleft'),\n [MenuEnum.COPY]: macCtrlMerge('c'),\n [MenuEnum.CUT]: macCtrlMerge('x'),\n [MenuEnum.PARSE]: macCtrlMerge('v'),\n [MenuEnum.DELETE]: macCtrlMerge('backspace'),\n [MenuEnum.BACK]: macCtrlMerge('z'),\n [MenuEnum.FORWORD]: macCtrlMerge(macShiftMerge('z')),\n [MenuEnum.GROUP]: macCtrlMerge('g'),\n [MenuEnum.UN_GROUP]: macCtrlMerge(macShiftMerge('g')),\n [MenuEnum.LOCK]: macCtrlMerge('l'),\n [MenuEnum.UNLOCK]: macCtrlMerge(macShiftMerge('l')),\n [MenuEnum.HIDE]: macCtrlMerge('h'),\n [MenuEnum.SHOW]: macCtrlMerge(macShiftMerge('h'))\n}\n\n// Win 快捷键列表\nconst winKeyList: Array<string> = [\n winKeyboardValue.up,\n winKeyboardValue.right,\n winKeyboardValue.down,\n winKeyboardValue.left,\n\n winKeyboardValue.delete,\n winKeyboardValue.copy,\n winKeyboardValue.cut,\n winKeyboardValue.parse,\n\n winKeyboardValue.back,\n winKeyboardValue.forward,\n\n winKeyboardValue.group,\n winKeyboardValue.unGroup,\n\n winKeyboardValue.lock,\n winKeyboardValue.unLock,\n\n winKeyboardValue.hide,\n winKeyboardValue.show\n]\n\n// Mac 快捷键列表\nconst macKeyList: Array<string> = [\n macKeyboardValue.up,\n macKeyboardValue.right,\n macKeyboardValue.down,\n macKeyboardValue.left,\n\n macKeyboardValue.delete,\n macKeyboardValue.copy,\n macKeyboardValue.cut,\n macKeyboardValue.parse,\n\n macKeyboardValue.back,\n macKeyboardValue.forward,\n\n macKeyboardValue.group,\n macKeyboardValue.unGroup,\n\n macKeyboardValue.lock,\n macKeyboardValue.unLock,\n\n macKeyboardValue.hide,\n macKeyboardValue.show\n]\n\n// 处理键盘记录\nconst keyRecordHandle = () => {\n // 默认赋值\n window.$KeyboardActive = {\n ctrl: false,\n space: false\n }\n\n document.onkeydown = (e: KeyboardEvent) => {\n const { keyCode } = e\n if (keyCode == 32 && e.target == document.body) e.preventDefault()\n\n if ([17, 32].includes(keyCode) && window.$KeyboardActive) {\n setKeyboardDressShow(e.keyCode)\n switch (keyCode) {\n case 17: window.$KeyboardActive.ctrl = true; break\n case 32: window.$KeyboardActive.space = true; break\n }\n }\n }\n\n document.onkeyup = (e: KeyboardEvent) => {\n const { keyCode } = e\n if (keyCode == 32 && e.target == document.body) e.preventDefault()\n\n if ([17, 32].includes(keyCode) && window.$KeyboardActive) {\n setKeyboardDressShow()\n switch (keyCode) {\n case 17: window.$KeyboardActive.ctrl = false; break\n case 32: window.$KeyboardActive.space = false; break\n }\n }\n }\n}\n\n// 初始化监听事件\nexport const useAddKeyboard = () => {\n const throttleTime = 50\n // 在函数内部获取 store 实例\n const chartEditStore = useChartEditStore()\n \n const switchHandle = (keyboardValue: typeof winKeyboardValue, e: string) => {\n switch (e) {\n // ct+↑\n case keyboardValue.up:\n keymaster(e, throttle(() => { chartEditStore.setMove(MenuEnum.ARROW_UP); return false }, throttleTime))\n break;\n // ct+→\n case keyboardValue.right:\n keymaster(e, throttle(() => { chartEditStore.setMove(MenuEnum.ARROW_RIGHT); return false }, throttleTime))\n break;\n // ct+↓\n case keyboardValue.down:\n keymaster(e, throttle(() => { chartEditStore.setMove(MenuEnum.ARROW_DOWN); return false }, throttleTime))\n break;\n // ct+←\n case keyboardValue.left:\n keymaster(e, throttle(() => { chartEditStore.setMove(MenuEnum.ARROW_LEFT); return false }, throttleTime))\n break;\n\n // 删除 delete\n case keyboardValue.delete:\n keymaster(e, debounce(() => { chartEditStore.removeComponentList(); return false }, throttleTime))\n break;\n // 复制 ct+v\n case keyboardValue.copy:\n keymaster(e, debounce(() => { chartEditStore.setCopy(); return false }, throttleTime))\n break;\n // 剪切 ct+x\n case keyboardValue.cut:\n keymaster(e, debounce(() => { chartEditStore.setCut(); return false }, throttleTime))\n break;\n // 粘贴 ct+v\n case keyboardValue.parse:\n keymaster(e, throttle(() => { chartEditStore.setParse(); return false }, throttleTime))\n break;\n\n // 撤回 ct+z\n case keyboardValue.back:\n keymaster(e, throttle(() => { chartEditStore.setBack(); return false }, throttleTime))\n break;\n // 前进 ct+sh+z\n case keyboardValue.forward:\n keymaster(e, throttle(() => { chartEditStore.setForward(); return false }, throttleTime))\n break;\n \n // 创建分组 ct+g\n case keyboardValue.group:\n keymaster(e, throttle(() => { chartEditStore.setGroup(); return false }, throttleTime))\n break;\n // 解除分组 ct+sh+g\n case keyboardValue.unGroup:\n keymaster(e, throttle(() => { chartEditStore.setUnGroup(); return false }, throttleTime))\n break;\n\n // 锁定 ct+l\n case keyboardValue.lock:\n keymaster(e, throttle(() => { chartEditStore.setLock(); return false }, throttleTime))\n break;\n // 解除锁定 ct+sh+l\n case keyboardValue.unLock:\n keymaster(e, throttle(() => { chartEditStore.setUnLock(); return false }, throttleTime))\n break;\n\n // 隐藏 ct+h\n case keyboardValue.hide:\n keymaster(e, throttle(() => { chartEditStore.setHide(); return false }, throttleTime))\n break;\n // 解除隐藏 ct+sh+h\n case keyboardValue.show:\n keymaster(e, throttle(() => { chartEditStore.setShow(); return false }, throttleTime))\n break;\n }\n }\n winKeyList.forEach((key: string) => {\n switchHandle(winKeyboardValue, key)\n })\n macKeyList.forEach((key: string) => {\n switchHandle(macKeyboardValue, key)\n })\n\n keyRecordHandle()\n}\n\n// 卸载监听事件\nexport const useRemoveKeyboard = () => {\n document.onkeydown = () => {};\n document.onkeyup = () => {};\n\n winKeyList.forEach((key: string) => {\n keymaster.unbind(key)\n })\n macKeyList.forEach((key: string) => {\n keymaster.unbind(key)\n })\n}","import { toRaw } from 'vue'\nimport { DragKeyEnum, MouseEventButton } from '@core/enums/editPageEnum'\nimport { createComponent, ensureRegisteredComponent } from '@core/packages/registry'\nimport { ConfigType } from '@core/packages/index.d'\nimport { CreateComponentType, CreateComponentGroupType, PickCreateComponentType } from '@core/packages/index.d'\nimport { useContextMenu } from '@core/views/chart/hooks/useContextMenu.hook'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditCanvasTypeEnum } from '@core/store/modules/chartEditStore/chartEditStore.d'\nimport { loadingStart, loadingFinish, loadingError, setComponentPosition, JSONParse } from '@core/utils'\nimport { throttle, cloneDeep } from 'lodash'\n\n// * 拖拽到编辑区域里\nexport const dragHandle = async (e: DragEvent) => {\n e.preventDefault()\n\n try {\n loadingStart()\n // 在函数内部获取 store 实例\n const chartEditStore = useChartEditStore()\n\n // 获取拖拽数据\n const drayDataString = e!.dataTransfer!.getData(DragKeyEnum.DRAG_KEY)\n if (!drayDataString) {\n loadingFinish()\n return\n }\n\n // 修改状态\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_CREATE, false)\n const dropData: Exclude<ConfigType, ['image']> = JSONParse(drayDataString)\n if (dropData.disabled) return\n ensureRegisteredComponent(dropData as ConfigType)\n\n // 创建新图表组件\n let newComponent: CreateComponentType = await createComponent(dropData)\n if (dropData.redirectComponent) {\n dropData.dataset && (newComponent.option.dataset = dropData.dataset)\n newComponent.chartConfig.title = dropData.title\n newComponent.chartConfig.chartFrame = dropData.chartFrame\n }\n\n setComponentPosition(newComponent, e.offsetX - newComponent.attr.w / 2, e.offsetY - newComponent.attr.h / 2)\n chartEditStore.addComponentList(newComponent, false, true)\n chartEditStore.setTargetSelectChart(newComponent.id)\n loadingFinish()\n } catch (error) {\n console.error('[hgdataview] create component failed', error)\n loadingError()\n window['$message'].warning(`图表正在研发中, 敬请期待...`)\n }\n}\n\n// * 进入拖拽区域\nexport const dragoverHandle = (e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n\n if (e.dataTransfer) e.dataTransfer.dropEffect = 'copy'\n}\n\n// * 不拦截默认行为点击\nexport const mousedownHandleUnStop = (e: MouseEvent, item?: CreateComponentType | CreateComponentGroupType) => {\n const chartEditStore = useChartEditStore()\n if (item) {\n chartEditStore.setTargetSelectChart(item.id)\n return\n }\n chartEditStore.setTargetSelectChart(undefined)\n}\n\n// * 框选\nexport const mousedownBoxSelect = (e: MouseEvent, item?: CreateComponentType | CreateComponentGroupType) => {\n e.stopPropagation()\n e.preventDefault()\n const chartEditStore = useChartEditStore()\n const { onClickOutSide } = useContextMenu()\n\n // 点击空白处\n if (!item) {\n onClickOutSide()\n }\n\n const startScreenX = e.screenX\n const startScreenY = e.screenY\n const startOffsetX = e.offsetX\n const startOffsetY = e.offsetY\n\n // 记录缩放\n const scale = chartEditStore.getEditCanvas.scale\n\n chartEditStore.setMousePosition(undefined, undefined, startOffsetX, startOffsetY)\n\n // 移动框选\n const mousemove = throttle((moveEvent: MouseEvent) => {\n // 取消当前选中\n chartEditStore.setTargetSelectChart()\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_SELECT, true)\n\n // 这里先把相对值算好,不然组件无法获取 startScreenX 和 startScreenY 的值\n const currX = startOffsetX + moveEvent.screenX - startScreenX\n const currY = startOffsetY + moveEvent.screenY - startScreenY\n chartEditStore.setMousePosition(currX, currY)\n\n // 计算框选的左上角和右下角\n const selectAttr = {\n // 左上角\n x1: 0,\n y1: 0,\n // 右下角\n x2: 0,\n y2: 0\n }\n if (currX > startOffsetX && currY > startOffsetY) {\n // 右下方向\n selectAttr.x1 = startOffsetX\n selectAttr.y1 = startOffsetY\n selectAttr.x2 = Math.round(startOffsetX + (moveEvent.screenX - startScreenX) / scale)\n selectAttr.y2 = Math.round(startOffsetY + (moveEvent.screenY - startScreenY) / scale)\n } else if (currX > startOffsetX && currY < startOffsetY) {\n // 右上方向\n selectAttr.x1 = startOffsetX\n selectAttr.y1 = Math.round(startOffsetY - (startScreenY - moveEvent.screenY) / scale)\n selectAttr.x2 = Math.round(startOffsetX + (moveEvent.screenX - startScreenX) / scale)\n selectAttr.y2 = startOffsetY\n } else if (currX < startOffsetX && currY > startOffsetY) {\n selectAttr.x1 = Math.round(startOffsetX - (startScreenX - moveEvent.screenX) / scale)\n selectAttr.y1 = startOffsetY\n selectAttr.x2 = startOffsetX\n selectAttr.y2 = Math.round(startOffsetY + (moveEvent.screenY - startScreenY) / scale)\n // 左下方向\n } else {\n // 左上方向\n selectAttr.x1 = Math.round(startOffsetX - (startScreenX - moveEvent.screenX) / scale)\n selectAttr.y1 = Math.round(startOffsetY - (startScreenY - moveEvent.screenY) / scale)\n selectAttr.x2 = startOffsetX\n selectAttr.y2 = startOffsetY\n }\n\n // 遍历组件\n chartEditStore.getComponentList.forEach(item => {\n if (!chartEditStore.getTargetChart.selectId.includes(item.id)) {\n // 处理左上角\n let isSelect = false\n const { x, y, w, h } = item.attr\n const targetAttr = {\n // 左上角\n x1: x,\n y1: y,\n // 右下角\n x2: x + w,\n y2: y + h\n }\n // 全包含则选中\n if (\n targetAttr.x1 - selectAttr.x1 >= 0 &&\n targetAttr.y1 - selectAttr.y1 >= 0 &&\n targetAttr.x2 - selectAttr.x2 <= 0 &&\n targetAttr.y2 - selectAttr.y2 <= 0 &&\n !item.status.lock &&\n !item.status.hide\n ) {\n isSelect = true\n chartEditStore.setTargetSelectChart(item.id, true)\n }\n }\n })\n }, 30)\n\n // 鼠标抬起\n const mouseup = () => {\n // 鼠标抬起时,结束mousemove的节流函数,避免选框不消失问题\n mousemove.cancel()\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_SELECT, false)\n chartEditStore.setMousePosition(0, 0, 0, 0)\n document.removeEventListener('mousemove', mousemove)\n document.removeEventListener('mouseup', mouseup)\n }\n document.addEventListener('mousemove', mousemove)\n document.addEventListener('mouseup', mouseup)\n}\n\n// * 鼠标事件\nexport const useMouseHandle = () => {\n // 在函数内部获取 store 实例和 context menu\n const chartEditStore = useChartEditStore()\n const { onClickOutSide } = useContextMenu()\n\n // * Click 事件, 松开鼠标触发\n const mouseClickHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {\n e.preventDefault()\n e.stopPropagation()\n if (item.status.lock) return\n // 若此时按下了 CTRL, 表示多选\n if (window.$KeyboardActive?.ctrl) {\n // 若已选中,则去除\n if (chartEditStore.targetChart.selectId.includes(item.id)) {\n const exList = chartEditStore.targetChart.selectId.filter(e => e !== item.id)\n chartEditStore.setTargetSelectChart(exList)\n } else {\n chartEditStore.setTargetSelectChart(item.id, true)\n }\n }\n }\n\n // * 按下事件(包含移动事件)\n const mousedownHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {\n e.preventDefault()\n e.stopPropagation()\n if (item.status.lock) return\n onClickOutSide()\n // 按下左键 + CTRL\n if (e.buttons === MouseEventButton.LEFT && window.$KeyboardActive?.ctrl) return\n\n // 按下右键 + 选中多个 + 目标元素是多选子元素\n const selectId = chartEditStore.getTargetChart.selectId\n if (e.buttons === MouseEventButton.RIGHT && selectId.length > 1 && selectId.includes(item.id)) return\n\n // 选中当前目标组件\n chartEditStore.setTargetSelectChart(item.id)\n\n // 按下右键\n if (e.buttons === MouseEventButton.RIGHT) return\n\n const scale = chartEditStore.getEditCanvas.scale\n const canvasWidth = chartEditStore.getEditCanvasConfig.width\n const canvasHeight = chartEditStore.getEditCanvasConfig.height\n\n // 记录图表初始位置和大小\n const targetMap = new Map()\n chartEditStore.getTargetChart.selectId.forEach(id => {\n const index = chartEditStore.fetchTargetIndex(id)\n if (index !== -1) {\n const { x, y, w, h } = toRaw(chartEditStore.getComponentList[index]).attr\n targetMap.set(id, { x, y, w, h })\n }\n })\n\n // 记录点击初始位置\n const startX = e.screenX\n const startY = e.screenY\n\n // 记录历史位置\n let prevComponentInstance: Array<CreateComponentType | CreateComponentGroupType> = []\n chartEditStore.getTargetChart.selectId.forEach(id => {\n if (!targetMap.has(id)) return\n\n const index = chartEditStore.fetchTargetIndex(id)\n // 拿到初始位置数据\n prevComponentInstance.push(cloneDeep(chartEditStore.getComponentList[index]))\n })\n\n // 记录初始位置\n chartEditStore.setMousePosition(undefined, undefined, startX, startY)\n\n // 移动-计算偏移量\n const mousemove = throttle((moveEvent: MouseEvent) => {\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_DRAG, true)\n chartEditStore.setMousePosition(moveEvent.screenX, moveEvent.screenY)\n\n // 当前偏移量,处理 scale 比例问题\n let offsetX = (moveEvent.screenX - startX) / scale\n let offsetY = (moveEvent.screenY - startY) / scale\n\n chartEditStore.getTargetChart.selectId.forEach(id => {\n if (!targetMap.has(id)) return\n\n const index = chartEditStore.fetchTargetIndex(id)\n // 拿到初始位置数据\n const { x, y, w, h } = targetMap.get(id)\n const componentInstance = chartEditStore.getComponentList[index]\n\n let currX = Math.round(x + offsetX)\n let currY = Math.round(y + offsetY)\n\n // 要预留的距离\n const distance = 50\n\n // 基于左上角位置检测\n currX = currX < -w + distance ? -w + distance : currX\n currY = currY < -h + distance ? -h + distance : currY\n\n // 基于右下角位置检测\n currX = currX > canvasWidth - distance ? canvasWidth - distance : currX\n currY = currY > canvasHeight - distance ? canvasHeight - distance : currY\n if (componentInstance) {\n componentInstance.attr = Object.assign(componentInstance.attr, {\n x: currX,\n y: currY\n })\n }\n })\n return\n }, 20)\n\n const mouseup = () => {\n try {\n chartEditStore.setMousePosition(0, 0, 0, 0)\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_DRAG, false)\n // 加入历史栈\n if (prevComponentInstance.length) {\n chartEditStore.getTargetChart.selectId.forEach(id => {\n if (!targetMap.has(id)) return\n const index = chartEditStore.fetchTargetIndex(id)\n const curComponentInstance = chartEditStore.getComponentList[index]\n // 找到记录的所选组件\n prevComponentInstance.forEach(preItem => {\n if (preItem.id === id) {\n preItem.attr = Object.assign(preItem.attr, {\n offsetX: curComponentInstance.attr.x - preItem.attr.x,\n offsetY: curComponentInstance.attr.y - preItem.attr.y\n })\n }\n })\n })\n\n const moveComponentInstance = prevComponentInstance.filter(\n item => item.attr.offsetX !== 0 && item.attr.offsetY !== 0\n )\n moveComponentInstance.length && chartEditStore.moveComponentList(moveComponentInstance)\n }\n document.removeEventListener('mousemove', mousemove)\n document.removeEventListener('mouseup', mouseup)\n } catch (err) {\n console.log(err)\n }\n }\n\n document.addEventListener('mousemove', mousemove)\n document.addEventListener('mouseup', mouseup)\n }\n\n // * 进入事件\n const mouseenterHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {\n e.preventDefault()\n e.stopPropagation()\n if (!chartEditStore.getEditCanvas.isSelect) {\n chartEditStore.setTargetHoverChart(item.id)\n }\n }\n\n // * 移出事件\n const mouseleaveHandle = (e: MouseEvent, item: CreateComponentType | CreateComponentGroupType) => {\n e.preventDefault()\n e.stopPropagation()\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_DRAG, false)\n chartEditStore.setTargetHoverChart(undefined)\n }\n\n return { mouseClickHandle, mousedownHandle, mouseenterHandle, mouseleaveHandle }\n}\n\n// * 移动锚点\nexport const useMousePointHandle = (\n e: MouseEvent,\n point: string,\n attr: PickCreateComponentType<'attr'>,\n componentId: string\n) => {\n e.stopPropagation()\n e.preventDefault()\n\n // 在函数内部获取 store 实例\n const chartEditStore = useChartEditStore()\n \n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_DRAG, true)\n chartEditStore.setTargetSelectChart(componentId)\n\n const scale = chartEditStore.getEditCanvas.scale\n\n const itemAttrX = attr.x\n const itemAttrY = attr.y\n const itemAttrW = attr.w\n const itemAttrH = attr.h\n\n // 记录点击初始位置\n const startX = e.screenX\n const startY = e.screenY\n\n // 记录初始位置\n chartEditStore.setMousePosition(startX, startY)\n\n const mousemove = throttle((moveEvent: MouseEvent) => {\n chartEditStore.setMousePosition(moveEvent.screenX, moveEvent.screenY)\n\n let currX = Math.round((moveEvent.screenX - startX) / scale)\n let currY = Math.round((moveEvent.screenY - startY) / scale)\n\n const isTop = /t/.test(point)\n const isBottom = /b/.test(point)\n const isLeft = /l/.test(point)\n const isRight = /r/.test(point)\n\n const newHeight = itemAttrH + (isTop ? -currY : isBottom ? currY : 0)\n const newWidth = itemAttrW + (isLeft ? -currX : isRight ? currX : 0)\n\n attr.h = newHeight > 0 ? newHeight : 0\n attr.w = newWidth > 0 ? newWidth : 0\n attr.x = itemAttrX + (isLeft ? currX : 0)\n attr.y = itemAttrY + (isTop ? currY : 0)\n }, 50)\n\n const mouseup = () => {\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_DRAG, false)\n chartEditStore.setMousePosition(0, 0, 0, 0)\n document.removeEventListener('mousemove', mousemove)\n document.removeEventListener('mouseup', mouseup)\n }\n\n document.addEventListener('mousemove', mousemove)\n document.addEventListener('mouseup', mouseup)\n}\n","import { PickCreateComponentType } from '@core/packages/index.d'\n\ntype AttrType = PickCreateComponentType<'attr'>\n\nexport const useComponentStyle = (attr: AttrType, index: number) => {\n if(!attr) return {}\n const componentStyle = {\n zIndex: index + 1,\n left: `${attr.x}px`,\n top: `${attr.y}px`\n }\n return componentStyle\n}\n\nexport const useSizeStyle = (attr: AttrType, scale?: number) => {\n if(!attr) return {}\n return {\n width: `${scale ? scale * attr.w : attr.w}px`,\n height: `${scale ? scale * attr.h : attr.h}px`\n }\n}\n\n// 锚点位置\nexport const usePointStyle = (\n point: string,\n index: number,\n attr: PickCreateComponentType<'attr'>,\n cursorResize: string[]\n) => {\n const { w: width, h: height } = attr\n\n const isTop = /t/.test(point)\n const isBottom = /b/.test(point)\n const isLeft = /l/.test(point)\n const isRight = /r/.test(point)\n\n let newLeft = 0\n let newTop = 0\n\n // 四个角的点\n if (point.length === 2) {\n newLeft = isLeft ? 0 : width\n newTop = isTop ? 0 : height\n } else {\n // 上下两点的点,宽度居中\n if (isTop || isBottom) {\n newLeft = width / 2\n newTop = isTop ? 0 : height\n }\n\n // 左右两边的点,高度居中\n if (isLeft || isRight) {\n newLeft = isLeft ? 0 : width\n newTop = Math.floor(height / 2)\n }\n }\n\n const style = {\n left: `${newLeft}px`,\n top: `${newTop}px`,\n cursor: cursorResize[index] + '-resize'\n }\n\n return style\n}\n","<template>\n <div class=\"go-shape-box\" :class=\"{ lock, hide }\">\n <slot></slot>\n <!-- 锚点 -->\n <template v-if=\"!hiddenPoint\">\n <div\n :class=\"`shape-point ${point}`\"\n v-for=\"(point, index) in select ? pointList : []\"\n :key=\"index\"\n :style=\"usePointStyle(point, index, item.attr, cursorResize)\"\n @mousedown=\"useMousePointHandle($event, point, item.attr, item.id)\"\n ></div>\n </template>\n\n <!-- 选中 -->\n <div class=\"shape-modal\" :style=\"useSizeStyle(item.attr)\">\n <div class=\"shape-modal-select\" :class=\"{ active: select }\"></div>\n <div class=\"shape-modal-change\" :class=\"{ selectActive: select, hoverActive: hover }\"></div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, PropType } from 'vue'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditCanvasTypeEnum } from '@core/store/modules/chartEditStore/chartEditStore.d'\n\nimport { useDesignStore } from '@core/store/modules/designStore/designStore'\nimport { CreateComponentType, CreateComponentGroupType } from '@core/packages/index.d'\nimport { useSizeStyle, usePointStyle } from '../../hooks/useStyle.hook'\nimport { useMousePointHandle } from '../../hooks/useDrag.hook'\n\nconst props = defineProps({\n item: {\n type: Object as PropType<CreateComponentType | CreateComponentGroupType>,\n required: true\n },\n hiddenPoint: {\n type: Boolean,\n required: false\n }\n})\n\nconst designStore = useDesignStore()\nconst chartEditStore = useChartEditStore()\n\n// 锚点\nconst pointList = ['t', 'r', 'b', 'l', 'lt', 'rt', 'lb', 'rb']\n\n// 光标朝向\nconst cursorResize = ['n', 'e', 's', 'w', 'nw', 'ne', 'sw', 'se']\n\n// 颜色\nconst themeColor = computed(() => {\n return designStore.getAppTheme\n})\n\n// 计算当前选中目标\nconst hover = computed(() => {\n const isDrag = chartEditStore.getEditCanvas[EditCanvasTypeEnum.IS_DRAG]\n if (isDrag) return false\n\n if (props.item.status.lock) return false\n return props.item.id === chartEditStore.getTargetChart.hoverId\n})\n\n// 兼容多值场景\nconst select = computed(() => {\n const id = props.item.id\n if (props.item.status.lock) return false\n return chartEditStore.getTargetChart.selectId.find((e: string) => e === id)\n})\n\n// 锁定\nconst lock = computed(() => {\n return props.item.status.lock\n})\n\n// 隐藏\nconst hide = computed(() => {\n return props.item.status.hide\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@include go(shape-box) {\n position: absolute;\n cursor: move;\n\n &.lock {\n cursor: default !important;\n }\n\n &.hide {\n display: none;\n }\n\n /* 锚点 */\n .shape-point {\n z-index: 1;\n position: absolute;\n width: 7px;\n height: 7px;\n border: 3px solid v-bind('themeColor');\n border-radius: 5px;\n background-color: #fff;\n transform: translate(-40%, -30%);\n &.t {\n width: 30px;\n transform: translate(-50%, -50%);\n }\n &.b {\n width: 30px;\n transform: translate(-50%, -30%);\n }\n &.l,\n &.r {\n height: 30px;\n }\n &.r {\n transform: translate(-20%, -50%);\n }\n &.l {\n transform: translate(-45%, -50%);\n }\n &.rt,\n &.rb {\n transform: translate(-30%, -30%);\n }\n }\n /* 选中 */\n .shape-modal {\n position: absolute;\n top: 0;\n left: 0;\n\n .shape-modal-select,\n .shape-modal-change {\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: 4px;\n }\n\n .shape-modal-select {\n opacity: 0.1;\n top: 2px;\n left: 2px;\n &.active {\n background-color: v-bind('themeColor');\n }\n }\n .shape-modal-change {\n border: 2px solid rgba(0, 0, 0, 0);\n &.selectActive,\n &.hoverActive {\n border-color: v-bind('themeColor');\n border-width: 2px;\n }\n &.hoverActive {\n border-style: dotted;\n }\n &.selectActive {\n border-style: solid;\n }\n }\n }\n}\n</style>\n","<template>\n <div class=\"go-edit-group-box\">\n <edit-shape-box\n :key=\"groupData.id\"\n :data-id=\"groupData.id\"\n :index=\"groupIndex\"\n :item=\"groupData\"\n :hiddenPoint=\"true\"\n :class=\"animationsClass(groupData.styles.animations)\"\n :style=\"{\n ...useComponentStyle(groupData.attr, groupIndex),\n ...useSizeStyle(groupData.attr),\n ...getFilterStyle(groupData.styles),\n ...getTransformStyle(groupData.styles),\n ...getBlendModeStyle(groupData.styles) as any\n }\"\n @click=\"mouseClickHandle($event, groupData)\"\n @mousedown=\"mousedownHandle($event, groupData)\"\n @mouseenter=\"mouseenterHandle($event, groupData)\"\n @mouseleave=\"mouseleaveHandle($event, groupData)\"\n @contextmenu=\"handleContextMenu($event, groupData, optionsHandle)\"\n >\n <!-- 组合组件 -->\n <edit-shape-box\n v-for=\"item in groupData.groupList\"\n :key=\"item.id\"\n :data-id=\"item.id\"\n :index=\"groupIndex\"\n :item=\"item\"\n :hiddenPoint=\"true\"\n :style=\"{\n ...useComponentStyle(item.attr, groupIndex)\n }\"\n >\n <component\n class=\"edit-content-chart\"\n :class=\"animationsClass(item.styles.animations)\"\n :is=\"item.chartConfig.chartKey\"\n :chartConfig=\"item\"\n :themeSetting=\"themeSetting\"\n :themeColor=\"themeColor\"\n :style=\"{\n ...useSizeStyle(item.attr),\n ...getFilterStyle(item.styles),\n ...getTransformStyle(item.styles)\n }\"\n ></component>\n </edit-shape-box>\n </edit-shape-box>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, PropType } from 'vue'\nimport { MenuEnum } from '@core/enums/editPageEnum'\nimport { chartColors } from '@core/settings/chartThemes/index'\nimport { CreateComponentType, CreateComponentGroupType } from '@core/packages/index.d'\nimport { MenuOptionsItemType } from '@core/views/chart/hooks/useContextMenu.hook.d'\nimport { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle, colorCustomMerge } from '@core/utils'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { useContextMenu, divider } from '@core/views/chart/hooks/useContextMenu.hook'\nimport { useMouseHandle } from '../../hooks/useDrag.hook'\nimport { useComponentStyle, useSizeStyle } from '../../hooks/useStyle.hook'\nimport { EditShapeBox } from '../../components/EditShapeBox'\n\nconst props = defineProps({\n groupData: {\n type: Object as PropType<CreateComponentGroupType>,\n required: true\n },\n groupIndex: {\n type: Number,\n required: true\n }\n})\n\nconst chartEditStore = useChartEditStore()\nconst { handleContextMenu } = useContextMenu()\n\n// 点击事件\nconst { mouseenterHandle, mouseleaveHandle, mousedownHandle, mouseClickHandle } = useMouseHandle()\n\n// 右键\nconst optionsHandle = (\n targetList: MenuOptionsItemType[],\n allList: MenuOptionsItemType[],\n targetInstance: CreateComponentType\n) => {\n const filter = (menulist: MenuEnum[]) => {\n return allList.filter(i => menulist.includes(i.key as MenuEnum))\n }\n\n // 多选处理\n if (chartEditStore.getTargetChart.selectId.length > 1) {\n return filter([MenuEnum.GROUP, MenuEnum.DELETE])\n } else {\n const statusMenuEnums: MenuEnum[] = []\n if (targetInstance.status.lock) {\n statusMenuEnums.push(MenuEnum.LOCK)\n } else {\n statusMenuEnums.push(MenuEnum.UNLOCK)\n }\n if (targetInstance.status.hide) {\n statusMenuEnums.push(MenuEnum.HIDE)\n } else {\n statusMenuEnums.push(MenuEnum.SHOW)\n }\n // 单选\n const singleMenuEnums = [MenuEnum.UN_GROUP]\n return [\n ...filter(singleMenuEnums),\n divider(),\n ...targetList.filter(i => !statusMenuEnums.includes(i.key as MenuEnum))\n ]\n }\n}\n\n// 配置项\nconst themeColor = computed(() => {\n const colorCustomMergeData = colorCustomMerge(chartEditStore.getEditCanvasConfig.chartCustomThemeColorInfo)\n return colorCustomMergeData[chartEditStore.getEditCanvasConfig.chartThemeColor]\n})\n\n// 主题色\nconst themeSetting = computed(() => {\n const chartThemeSetting = chartEditStore.getEditCanvasConfig.chartThemeSetting\n return chartThemeSetting\n})\n</script>\n","<template>\n <div class=\"go-edit-align-line\">\n <div\n class=\"line\"\n v-for=\"item in line.lineArr\"\n :key=\"item\"\n :class=\"[item.includes('row') ? 'row' : 'col', line['select'].has(item) && 'visible']\"\n :style=\"useComponentStyle(line['select'].get(item))\"\n ></div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, computed, watch } from 'vue'\nimport { useDesignStore } from '@core/store/modules/designStore/designStore'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditCanvasTypeEnum } from '@core/store/modules/chartEditStore/chartEditStore.d'\nimport { useSettingStore } from '@core/store/modules/settingStore/settingStore'\nimport { CreateComponentType, CreateComponentGroupType } from '@core/packages/index.d'\nimport { setComponentPosition } from '@core/utils'\nimport throttle from 'lodash/throttle'\nimport cloneDeep from 'lodash/cloneDeep'\n// 全局颜色\nconst designStore = useDesignStore()\n\nconst chartEditStore = useChartEditStore()\nconst settingStore = useSettingStore()\n\n// * 线条集合\nconst line = reactive({\n // 行横向row(上中下),列竖线col(左中右)\n lineArr: ['rowt', 'rowc', 'rowb', 'coll', 'colc', 'colr'],\n // 展示线\n select: new Map(),\n // 已经吸附\n sorptioned: {\n x: false,\n y: false\n }\n})\n\n// * 位置计算\nconst useComponentStyle = (attr?: Partial<{ x: number; y: number }>) => {\n if (!attr) return {}\n const componentStyle = {\n left: `${attr.x ? attr.x : 0}px`,\n top: `${attr.y ? attr.y : 0}px`\n }\n return componentStyle\n}\n\n// 颜色\nconst themeColor = computed(() => {\n return designStore.getAppTheme\n})\n\n// * 吸附距离\nconst minDistance = computed(() => {\n return settingStore.getChartAlignRange\n})\n\n// * 是否开始计算\nconst isComputedLine = computed(() => {\n // IS_DRAG 移动时为 true,Drag Hook里设置\n const isDrag = chartEditStore.getEditCanvas[EditCanvasTypeEnum.IS_DRAG]\n return isDrag\n})\n\n// * 吸附判定\nconst isSorption = (selectValue: number, componentValue: number) => {\n const isSorption = Math.abs(selectValue - componentValue) <= minDistance.value\n return isSorption\n}\n\n// * 当前目标\nconst selectId = computed(() => chartEditStore.getTargetChart.selectId)\nconst selectTarget = computed(() => chartEditStore.getComponentList[chartEditStore.fetchTargetIndex()])\nconst selectAttr = computed(() => selectTarget.value?.attr || {})\n\n// * 画布坐标\nconst canvasPositionList = computed(() => {\n return {\n id: '0',\n attr: {\n w: cloneDeep(chartEditStore.getEditCanvasConfig.width),\n h: cloneDeep(chartEditStore.getEditCanvasConfig.height),\n x: 0,\n y: 0,\n offsetX: 0,\n offsetY: 0,\n zIndex: 0\n }\n }\n})\n\n// * 监听鼠标移动\nwatch(\n () => chartEditStore.getMousePosition,\n throttle(() => {\n try {\n if (!isComputedLine.value || selectId.value.length !== 1) return\n // 获取目标组件数据\n\n const selectW = selectAttr.value.w\n const selectH = selectAttr.value.h\n\n // 距离左侧\n const selectLeftX = selectAttr.value.x\n const selectHalfX = selectLeftX + selectW / 2\n const selectRightX = selectLeftX + selectW\n const seletX = [selectLeftX, selectHalfX, selectRightX]\n\n // 距离顶部\n const selectTopY = selectAttr.value.y\n const selectHalfY = selectTopY + selectH / 2\n const selectBottomY = selectTopY + selectH\n const selectY = [selectTopY, selectHalfY, selectBottomY]\n\n line.select.clear()\n line.sorptioned.y = false\n // 循环查询所有组件数据\n const componentList = chartEditStore.getComponentList.map((e: CreateComponentType | CreateComponentGroupType) => {\n return {\n id: e.id,\n attr: e.attr\n }\n })\n componentList.push(canvasPositionList.value)\n // 传入画布数据\n line.lineArr.forEach(lineItem => {\n componentList.forEach((component: typeof canvasPositionList.value) => {\n // 排除自身\n if (selectId.value[0] === component.id) return\n const componentW = component.attr.w\n const componentH = component.attr.h\n\n // 距离左侧\n const componentLeftX = component.attr.x\n const componentHalfX = componentLeftX + componentW / 2\n const componentRightX = componentLeftX + componentW\n const componentX = [componentLeftX, componentHalfX, componentRightX]\n\n // 距离顶部\n const componentTopY = component.attr.y\n const componentHalfY = componentTopY + componentH / 2\n const componentBottomY = componentTopY + componentH\n const componentY = [componentTopY, componentHalfY, componentBottomY]\n\n // 横线对比的是 Y\n if (lineItem.includes('rowt')) {\n // 顶部\n if (isSorption(selectTopY, componentTopY)) {\n line.select.set(lineItem, { y: componentTopY })\n setComponentPosition(selectTarget.value, selectLeftX, componentTopY)\n }\n if (isSorption(selectTopY, componentHalfY)) {\n line.select.set(lineItem, { y: componentHalfY })\n setComponentPosition(selectTarget.value, selectLeftX, componentHalfY)\n }\n if (isSorption(selectTopY, componentBottomY)) {\n line.select.set(lineItem, { y: componentBottomY })\n setComponentPosition(selectTarget.value, selectLeftX, componentBottomY)\n }\n }\n if (lineItem.includes('rowc')) {\n // 顶部\n if (isSorption(selectHalfY, componentTopY)) {\n line.select.set(lineItem, { y: componentTopY })\n setComponentPosition(selectTarget.value, selectLeftX, componentTopY - selectH / 2)\n }\n if (isSorption(selectHalfY, componentHalfY)) {\n line.select.set(lineItem, { y: componentHalfY })\n setComponentPosition(selectTarget.value, selectLeftX, componentHalfY - selectH / 2)\n }\n if (isSorption(selectHalfY, componentBottomY)) {\n line.select.set(lineItem, { y: componentBottomY })\n setComponentPosition(selectTarget.value, selectLeftX, componentBottomY - selectH / 2)\n }\n }\n if (lineItem.includes('rowb')) {\n // 顶部\n if (isSorption(selectBottomY, componentTopY)) {\n line.select.set(lineItem, { y: componentTopY })\n setComponentPosition(selectTarget.value, selectLeftX, componentTopY - selectH)\n }\n if (isSorption(selectBottomY, componentHalfY)) {\n line.select.set(lineItem, { y: componentHalfY })\n setComponentPosition(selectTarget.value, selectLeftX, componentHalfY - selectH)\n }\n if (isSorption(selectBottomY, componentBottomY)) {\n line.select.set(lineItem, { y: componentBottomY })\n setComponentPosition(selectTarget.value, selectLeftX, componentBottomY - selectH)\n }\n }\n\n // 纵线对比的是 X\n if (lineItem.includes('coll')) {\n if (isSorption(selectLeftX, componentLeftX)) {\n line.select.set(lineItem, { x: componentLeftX })\n setComponentPosition(selectTarget.value, componentLeftX, selectTopY)\n }\n if (isSorption(selectLeftX, componentHalfX)) {\n line.select.set(lineItem, { x: componentHalfX })\n setComponentPosition(selectTarget.value, componentHalfX, selectTopY)\n }\n if (isSorption(selectLeftX, componentRightX)) {\n line.select.set(lineItem, { x: componentRightX })\n setComponentPosition(selectTarget.value, componentRightX, selectTopY)\n }\n }\n if (lineItem.includes('colc')) {\n if (isSorption(selectHalfX, componentLeftX)) {\n line.select.set(lineItem, { x: componentLeftX })\n setComponentPosition(selectTarget.value, componentLeftX - selectW / 2, selectTopY)\n }\n if (isSorption(selectHalfX, componentHalfX)) {\n line.select.set(lineItem, { x: componentHalfX })\n setComponentPosition(selectTarget.value, componentHalfX - selectW / 2, selectTopY)\n }\n if (isSorption(selectHalfX, componentRightX)) {\n line.select.set(lineItem, { x: componentRightX })\n setComponentPosition(selectTarget.value, componentRightX - selectW / 2, selectTopY)\n }\n }\n if (lineItem.includes('colr')) {\n if (isSorption(selectRightX, componentLeftX)) {\n line.select.set(lineItem, { x: componentLeftX })\n setComponentPosition(selectTarget.value, componentLeftX - selectW, selectTopY)\n }\n if (isSorption(selectRightX, componentHalfX)) {\n line.select.set(lineItem, { x: componentHalfX })\n setComponentPosition(selectTarget.value, componentHalfX - selectW, selectTopY)\n }\n if (isSorption(selectRightX, componentRightX)) {\n line.select.set(lineItem, { x: componentRightX })\n setComponentPosition(selectTarget.value, componentRightX - selectW, selectTopY)\n }\n }\n })\n })\n } catch (err) {\n console.log(err)\n }\n }, 200),\n {\n deep: true\n }\n)\n\n// * 取消对齐线\nwatch(\n () => isComputedLine.value,\n (val: boolean) => {\n if (!val) {\n line.select.clear()\n line.sorptioned.y = false\n }\n }\n)\n</script>\n\n<style lang=\"scss\" scoped>\n@include go(edit-align-line) {\n .line {\n z-index: 1;\n position: absolute;\n top: 0;\n left: 0;\n display: none;\n border-width: 1px;\n border-style: solid;\n border-color: v-bind('themeColor');\n opacity: 0.7;\n &.visible {\n display: block;\n }\n }\n .row {\n width: 100%;\n }\n .col {\n height: 100%;\n }\n}\n</style>\n","<template>\n <el-watermark\n id=\"go-edit-watermark\"\n :content=\"watermarkText\"\n :font=\"{ fontSize: 16 }\"\n :width=\"500\"\n :height=\"150\"\n :offset=\"[12, 80]\"\n :rotate=\"-15\"\n ></el-watermark>\n</template>\n\n<script setup lang=\"ts\">\nimport { watermarkText } from '@core/settings/designSetting'\n</script>\n\n<style lang=\"scss\" scoped>\n#go-edit-watermark {\n display: none;\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n}\n</style>","<template>\n <div class=\"go-edit-select\" v-if=\"isSelect\" :style=\"positionStyle\">\n <div class=\"select-background\"></div>\n <div class=\"select-border\"></div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, toRefs, watch, computed } from 'vue'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { useDesignStore } from '@core/store/modules/designStore/designStore'\nimport { useSizeStyle, useComponentStyle } from '../../hooks/useStyle.hook'\nimport { selectBoxIndex } from '@core/settings/designSetting'\n\n// 全局颜色\nconst designStore = useDesignStore()\nconst chartEditStore = useChartEditStore()\nconst { isSelect, scale } = toRefs(chartEditStore.getEditCanvas)\n\nconst themeColor = computed(() => {\n return designStore.getAppTheme\n})\n\n// 位置\nconst positionStyle = ref()\n\nwatch(\n () => chartEditStore.getMousePosition,\n positionInfo => {\n if (!isSelect.value) return\n\n // 这里的 x,y 是已经计算过的相对位移值\n const { startX, startY, x, y } = positionInfo\n\n const attr = {\n zIndex: selectBoxIndex,\n // left\n x: 0,\n // top\n y: 0,\n // 宽\n w: 0,\n // 高\n h: 0,\n // 偏移\n offsetX: 0,\n offsetY: 0\n }\n\n // 处理位置\n if (x > startX && y > startY) {\n // 右下方向\n attr.x = startX\n attr.y = startY\n attr.w = Math.round((x - startX) / scale.value)\n attr.h = Math.round((y - startY) / scale.value)\n } else if (x > startX && y < startY) {\n // 右上方向\n attr.x = startX\n attr.w = Math.round((x - startX) / scale.value)\n attr.h = Math.round((startY - y) / scale.value)\n attr.y = startY - attr.h\n } else if (x < startX && y > startY) {\n // 左下方向\n attr.y = startY\n attr.w = Math.round((startX - x) / scale.value)\n attr.h = Math.round((y - startY) / scale.value)\n attr.x = startX - attr.w\n } else {\n // 左上方向\n attr.w = Math.round((startX - x) / scale.value)\n attr.h = Math.round((startY - y) / scale.value)\n attr.x = startX - attr.w\n attr.y = startY - attr.h\n }\n\n positionStyle.value = {\n ...useComponentStyle(attr, selectBoxIndex),\n ...useSizeStyle(attr)\n }\n },\n {\n deep: true\n }\n)\n</script>\n\n<style lang=\"scss\" scoped>\n@include go('edit-select') {\n position: absolute;\n .select-border,\n .select-background {\n position: absolute;\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n .select-border {\n left: 0;\n top: 0;\n opacity: 1;\n border-width: 1px;\n border-style: solid;\n border-color: v-bind('themeColor');\n }\n .select-background {\n top: 2px;\n left: 2px;\n opacity: 0.08;\n background-color: v-bind('themeColor');\n }\n}\n</style>\n","<template>\n <div class=\"go-edit-range go-transition\" :style=\"rangeStyle\" @mousedown=\"mousedownBoxSelect($event, undefined)\">\n <slot></slot>\n <!-- 水印 -->\n <edit-watermark></edit-watermark>\n <!-- 拖拽时的辅助线 -->\n <edit-align-line></edit-align-line>\n <!-- 框选时的样式框 -->\n <edit-select></edit-select>\n <!-- 拖拽时的遮罩 -->\n <div class=\"go-edit-range-model\" :style=\"rangeModelStyle\"></div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { toRefs, computed } from 'vue'\nimport { useSizeStyle } from '../../hooks/useStyle.hook'\nimport { canvasModelIndex } from '@core/settings/designSetting'\nimport { mousedownBoxSelect } from '../../hooks/useDrag.hook'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditAlignLine } from '../EditAlignLine'\nimport { EditWatermark } from '../EditWatermark'\nimport { EditSelect } from '../EditSelect'\n\nconst chartEditStore = useChartEditStore()\n\nconst { getEditCanvasConfig, getEditCanvas } = toRefs(chartEditStore)\n\nconst size = computed(() => {\n return {\n w: getEditCanvasConfig.value.width,\n h: getEditCanvasConfig.value.height\n }\n})\n\nconst rangeStyle = computed(() => {\n // 缩放\n const scale = {\n transform: `scale(${getEditCanvas.value.scale})`\n }\n // @ts-ignore\n return { ...useSizeStyle(size.value), ...scale }\n})\n\n// 模态层\nconst rangeModelStyle = computed(() => {\n const dragStyle = getEditCanvas.value.isCreate && { 'z-index': 99999 }\n // @ts-ignore\n return { ...useSizeStyle(size.value), ...dragStyle }\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@include go(edit-range) {\n position: relative;\n transform-origin: left top;\n background-size: cover;\n overflow: hidden;\n @include fetch-border-color('hover-border-color');\n @include fetch-bg-color('background-color2');\n @include go(edit-range-model) {\n z-index: -1;\n position: absolute;\n left: 0;\n top: 0;\n }\n}\n</style>\n","<template>\n <div class=\"go-sketch-rule\">\n <sketch-rule\n v-if=\"sketchRuleReDraw\"\n :thick=\"thick\"\n :scale=\"scale\"\n :width=\"canvasBox().width\"\n :height=\"canvasBox().height\"\n :startX=\"startX\"\n :startY=\"startY\"\n :lines=\"lines\"\n :palette=\"paletteStyle\"\n >\n </sketch-rule>\n <div ref=\"$app\" class=\"edit-screens\" @scroll=\"handleScroll\">\n <div ref=\"$container\" class=\"edit-screen-container\" :style=\"{ width: containerWidth }\">\n <div\n ref=\"refSketchRuleBox\"\n class=\"canvas\"\n @mousedown=\"dragCanvas\"\n :style=\"{ marginLeft: '-' + (canvasBox().width / 2 - 25) + 'px' }\"\n >\n <div :style=\"{ pointerEvents: isPressSpace ? 'none' : 'auto' }\">\n <slot></slot>\n </div>\n </div>\n </div>\n </div>\n <!-- 修复右下角白点用的 -->\n <!-- <div v-if=\"designStore.getDarkTheme\" class=\"fix-edit-screens-block\"></div> -->\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { ref, reactive, onMounted, toRefs, watch, onUnmounted, computed } from 'vue'\nimport { useDesignStore } from '@core/store/modules/designStore/designStore'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { useChartLayoutStore } from '@core/store/modules/chartLayoutStore/chartLayoutStore'\nimport { ChartLayoutStoreEnum } from '@core/store/modules/chartLayoutStore/chartLayoutStore.d'\nimport throttle from 'lodash/throttle'\n\nconst chartEditStore = useChartEditStore()\nconst chartLayoutStore = useChartLayoutStore()\nconst designStore = useDesignStore()\n\nconst thick = 20\nlet prevMoveXValue = [0, 0]\nlet prevMoveYValue = [0, 0]\n\nconst $app = ref()\nconst sketchRuleReDraw = ref(true)\nconst refSketchRuleBox = ref()\nconst $container = ref()\nconst isPressSpace = ref(false)\nconst cursorStyle = ref('auto')\nconst { width, height } = toRefs(chartEditStore.getEditCanvasConfig)\nconst startX = ref(0)\nconst startY = ref(0)\nconst lines = reactive({ h: [], v: [] })\n\nconst scale = computed(() => {\n return chartEditStore.getEditCanvas.scale\n})\n\n// 画布尺寸(响应式)\nconst canvasBoxWidth = ref(800)\nconst canvasBoxHeight = ref(600)\n\n// 更新画布尺寸\nconst updateCanvasBoxSize = () => {\n const layoutDom = document.getElementById('go-chart-edit-layout')\n if (layoutDom) {\n const scrollW = 20\n const w = layoutDom.clientWidth - scrollW\n const h = layoutDom.clientHeight - scrollW\n if (w > 0 && h > 0) {\n canvasBoxWidth.value = w\n canvasBoxHeight.value = h\n }\n }\n}\n\n// 滚动条拖动的宽度\nconst containerWidth = computed(() => {\n return `${window.innerWidth * 2}px`\n})\n\n// 滚动条拖动的高度\nconst containerHeight = computed(() => {\n const h = height.value || 600\n return `${Math.max(h * 2, 1200)}px`\n})\n\n// 主题\nconst paletteStyle = computed(() => {\n const isDarkTheme = designStore.getDarkTheme\n return isDarkTheme\n ? {\n bgColor: '#18181c',\n longfgColor: '#4d4d4d',\n shortfgColor: '#4d4d4d',\n fontColor: '#4d4d4d',\n shadowColor: '#18181c',\n borderColor: '#18181c',\n cornerActiveColor: '#18181c'\n }\n : {}\n})\n\n// 颜色\nconst themeColor = computed(() => {\n return designStore.getAppTheme\n})\n\n// 处理鼠标拖动\nconst handleWheel = (e: any) => {\n if (e.ctrlKey || e.metaKey) {\n e.preventDefault()\n let resScale = scale.value\n // 放大(200%)\n if (e.wheelDelta >= 0 && scale.value < 2) {\n resScale = scale.value + 0.05\n chartEditStore.setScale(resScale)\n return\n }\n // 缩小(10%)\n if (e.wheelDelta < 0 && scale.value > 0.1) {\n resScale = scale.value - 0.05\n chartEditStore.setScale(resScale)\n }\n }\n}\n\n// 滚动条处理\nconst handleScroll = () => {\n if (!$app.value) return\n const screensRect = $app.value.getBoundingClientRect()\n const canvasRect = refSketchRuleBox.value.getBoundingClientRect()\n // 标尺开始的刻度\n startX.value = (screensRect.left + thick - canvasRect.left) / scale.value\n startY.value = (screensRect.top + thick - canvasRect.top) / scale.value\n}\n\n// 拖拽处理\nconst dragCanvas = (e: any) => {\n e.preventDefault()\n e.stopPropagation()\n\n if (e.which == 2) isPressSpace.value = true\n else if (!window.$KeyboardActive?.space) return\n // @ts-ignore\n document.activeElement?.blur()\n\n const startX = e.pageX\n const startY = e.pageY\n\n const handleMousemove = (e: MouseEvent) => {\n const nx = e.pageX - startX\n const ny = e.pageY - startY\n\n const [prevMoveX1, prevMoveX2] = prevMoveXValue\n const [prevMoveY1, prevMoveY2] = prevMoveYValue\n\n prevMoveXValue = [prevMoveX2, nx]\n prevMoveYValue = [prevMoveY2, ny]\n\n $app.value.scrollLeft -=\n prevMoveX2 > prevMoveX1 ? Math.abs(prevMoveX2 - prevMoveX1) : -Math.abs(prevMoveX2 - prevMoveX1)\n $app.value.scrollTop -=\n prevMoveY2 > prevMoveY1 ? Math.abs(prevMoveY2 - prevMoveY1) : -Math.abs(prevMoveY2 - prevMoveY1)\n }\n\n const handleMouseup = () => {\n window.removeEventListener('mousemove', handleMousemove)\n window.removeEventListener('mouseup', handleMouseup)\n prevMoveXValue = [0, 0]\n prevMoveYValue = [0, 0]\n isPressSpace.value = false\n }\n\n window.addEventListener('mousemove', handleMousemove)\n window.addEventListener('mouseup', handleMouseup)\n}\n\n// 计算画布大小\nconst canvasBox = () => {\n return {\n width: canvasBoxWidth.value,\n height: canvasBoxHeight.value\n }\n}\n\n// 重绘标尺\nconst reDraw = throttle(() => {\n updateCanvasBoxSize()\n sketchRuleReDraw.value = false\n setTimeout(() => {\n sketchRuleReDraw.value = true\n }, 10)\n},20)\n\n// 滚动居中\nconst canvasPosCenter = () => {\n const { width: containerWidth, height: containerHeight } = $container.value.getBoundingClientRect()\n const { width, height } = canvasBox()\n\n $app.value.scrollLeft = containerWidth / 2 - width / 2\n $app.value.scrollTop = containerHeight / 2 - height / 2\n}\n\n// 处理主题变化\nwatch(\n () => designStore.getDarkTheme,\n () => {\n reDraw()\n }\n)\n\n// // 处理标尺重制大小\nwatch(\n () => scale.value,\n (newValue, oldValue) => {\n if (oldValue !== newValue && chartLayoutStore.getRePositionCanvas) {\n chartLayoutStore.setItemUnHandle(ChartLayoutStoreEnum.RE_POSITION_CANVAS, false)\n }\n handleScroll()\n setTimeout(() => {\n canvasPosCenter()\n reDraw()\n }, 400)\n }\n)\n\n// 处理鼠标样式\nwatch(\n () => isPressSpace.value,\n newValue => {\n cursorStyle.value = newValue ? 'grab' : 'auto'\n }\n)\n\n// 处理窗口 resize 事件\nconst handleResize = throttle(() => {\n reDraw()\n}, 100)\n\nonMounted(() => {\n if ($app.value) {\n $app.value.addEventListener('wheel', handleWheel, { passive: false })\n // 初始化时先隐藏标尺,等 DOM 渲染完成后再显示\n sketchRuleReDraw.value = false\n // 延迟执行,确保 DOM 完全渲染后再计算尺寸\n setTimeout(() => {\n updateCanvasBoxSize()\n canvasPosCenter()\n sketchRuleReDraw.value = true\n }, 200)\n }\n // 监听窗口 resize 事件,用于作为组件库使用时的尺寸更新\n window.addEventListener('resize', handleResize)\n})\n\nonUnmounted(() => {\n if ($app.value) {\n $app.value.removeEventListener('wheel', handleWheel)\n }\n window.removeEventListener('resize', handleResize)\n})\n\nwindow.onKeySpacePressHold = (isHold: boolean) => {\n isPressSpace.value = isHold\n}\n</script>\n\n<style>\n/* 使用 SCSS 会报错,直接使用最基础的 CSS 进行修改,\n此库有计划 Vue3 版本,但是开发的时候还没发布 */\n#mb-ruler {\n top: 0;\n left: 0;\n}\n\n/* 横线 */\n#mb-ruler .v-container .lines .line {\n /* 最大缩放 200% */\n width: 200vw !important;\n border-top: 1px dashed v-bind('themeColor') !important;\n}\n\n#mb-ruler .v-container .indicator {\n border-bottom: 1px dashed v-bind('themeColor') !important;\n}\n\n/* 竖线 */\n#mb-ruler .h-container .lines .line {\n /* 最大缩放 200% */\n height: 200vh !important;\n border-left: 1px dashed v-bind('themeColor') !important;\n}\n\n#mb-ruler .h-container .indicator {\n border-left: 1px dashed v-bind('themeColor') !important;\n}\n\n/* 坐标数值背景颜色 */\n#mb-ruler .indicator .value {\n background-color: rgba(0, 0, 0, 0);\n}\n\n/* 删除按钮 */\n#mb-ruler .line .del {\n padding: 0;\n color: v-bind('themeColor');\n font-size: 26px;\n font-weight: bolder;\n}\n\n#mb-ruler .corner {\n border-width: 0 !important;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n@include go('sketch-rule') {\n overflow: hidden;\n width: 100%;\n height: 100%;\n\n .edit-screens {\n position: absolute;\n width: 100%;\n height: 100%;\n overflow: auto;\n user-select: none;\n padding-bottom: 0px;\n\n /* firefox */\n scrollbar-color: rgba(144, 146, 152, 0.3) transparent;\n scrollbar-width: thin;\n\n /* chrome */\n &::-webkit-scrollbar,\n &::-webkit-scrollbar-track-piece {\n background-color: transparent;\n }\n\n &::-webkit-scrollbar {\n width: 7px;\n }\n\n &::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background-color: rgba(144, 146, 152, 0.3);\n }\n // 修复右下角白点用的\n &::-webkit-scrollbar-corner {\n background-color: transparent;\n }\n }\n\n .fix-edit-screens-block {\n position: absolute;\n bottom: 0;\n right: 0;\n width: 10px;\n height: 10px;\n background-color: $--color-dark-bg-1;\n }\n\n .edit-screen-container {\n position: absolute;\n height: v-bind('containerHeight');\n top: 0;\n left: 0;\n }\n\n .canvas {\n position: absolute;\n top:50%;\n left: 50%;\n transform-origin: 50% 0;\n transform: translateY(-50%);\n\n &:hover {\n cursor: v-bind('cursorStyle');\n }\n\n &:active {\n cursor: crosshair;\n }\n }\n}\n</style>\n","import { HistoryTargetTypeEnum, HistoryActionTypeEnum } from './chartHistoryStore.d'\n\nexport const historyActionTypeName = {\n [HistoryActionTypeEnum.ADD]: '新增',\n [HistoryActionTypeEnum.DELETE]: '删除',\n [HistoryActionTypeEnum.UPDATE]: '更新',\n [HistoryActionTypeEnum.MOVE]: '移动',\n [HistoryActionTypeEnum.PASTE]: '粘贴',\n [HistoryActionTypeEnum.COPY]: '复制',\n [HistoryActionTypeEnum.CUT]: '剪切',\n [HistoryActionTypeEnum.TOP]: '置顶',\n [HistoryActionTypeEnum.BOTTOM]: '置底',\n [HistoryActionTypeEnum.UP]: '上移',\n [HistoryActionTypeEnum.DOWN]: '下移',\n [HistoryActionTypeEnum.GROUP]: '成组',\n [HistoryActionTypeEnum.UN_GROUP]: '解组',\n [HistoryActionTypeEnum.LOCK]: '锁定',\n [HistoryActionTypeEnum.UNLOCK]: '解锁',\n [HistoryActionTypeEnum.HIDE]: '隐藏',\n [HistoryActionTypeEnum.SHOW]: '显示',\n\n [HistoryTargetTypeEnum.CANVAS]: '画布初始化'\n}\n","/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeReverse = arrayProto.reverse;\n\n/**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\nfunction reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n}\n\nmodule.exports = reverse;\n","<template>\n <div class=\"go-flex-items-center edit-history-wrapper\">\n <el-popover \n :show-arrow=\"false\" \n trigger=\"click\" \n placement=\"top-start\"\n :width=\"280\"\n :teleported=\"true\"\n popper-class=\"edit-history-popover\"\n >\n <template #reference>\n <el-button class=\"mr-10\" size=\"small\" :disabled=\"options.length === 0\">\n <span class=\"btn-text\">历史记录</span>\n </el-button>\n </template>\n\n <template #default>\n <div class=\"history-list-box\" v-if=\"options.length > 0\">\n <el-scrollbar max-height=\"400px\">\n <div\n class=\"list-item go-flex-items-center\"\n v-for=\"(item, index) in options\"\n :key=\"index\"\n :title=\"item.label\"\n >\n <el-icon class=\"item-icon\" :size=\"16\">\n <component :is=\"item.icon\" />\n </el-icon>\n <span class=\"item-label\">{{ item.label }}</span>\n </div>\n </el-scrollbar>\n </div>\n <div v-else class=\"empty-tip\">暂无历史记录</div>\n </template>\n </el-popover>\n\n <el-tooltip :content=\"`最多只保留${editHistoryMax}条记录`\" placement=\"top\">\n <el-icon :size=\"21\" class=\"help-icon\">\n <help-outline-icon></help-outline-icon>\n </el-icon>\n </el-tooltip>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport { icon } from '@core/plugins'\nimport { useChartHistoryStore } from '@core/store/modules/chartHistoryStore/chartHistoryStore'\nimport { historyActionTypeName } from '@core/store/modules/chartHistoryStore/chartHistoryDefine'\nimport { CreateComponentType } from '@core/packages/index.d'\nimport { editHistoryMax } from '@core/settings/designSetting'\nimport reverse from 'lodash/reverse'\nimport {\n HistoryItemType,\n HistoryTargetTypeEnum,\n HistoryActionTypeEnum\n} from '@core/store/modules/chartHistoryStore/chartHistoryStore.d'\n\nconst {\n DesktopOutlineIcon,\n PencilIcon,\n TrashIcon,\n CopyIcon,\n LayersIcon,\n DuplicateIcon,\n HelpOutlineIcon,\n LockClosedOutlineIcon,\n LockOpenOutlineIcon,\n EyeOffOutlineIcon,\n EyeOutlineIcon\n} = icon.ionicons5\nconst { StackedMoveIcon, Carbon3DCursorIcon, Carbon3DSoftwareIcon } = icon.carbon\n\nconst chartHistoryStoreStore = useChartHistoryStore()\n\n// 设置类型对应图标\nconst iconHandle = (e: HistoryItemType) => {\n // 画布编辑\n if (e.targetType === HistoryTargetTypeEnum.CANVAS) {\n return DesktopOutlineIcon\n }\n switch (e.actionType) {\n case HistoryActionTypeEnum.UPDATE:\n return PencilIcon\n case HistoryActionTypeEnum.DELETE:\n return TrashIcon\n case HistoryActionTypeEnum.PASTE:\n return CopyIcon\n case HistoryActionTypeEnum.TOP:\n return LayersIcon\n case HistoryActionTypeEnum.BOTTOM:\n return LayersIcon\n case HistoryActionTypeEnum.UP:\n return LayersIcon\n case HistoryActionTypeEnum.DOWN:\n return LayersIcon\n case HistoryActionTypeEnum.MOVE:\n return StackedMoveIcon\n case HistoryActionTypeEnum.ADD:\n return DuplicateIcon\n case HistoryActionTypeEnum.GROUP:\n return Carbon3DCursorIcon\n case HistoryActionTypeEnum.UN_GROUP:\n return Carbon3DSoftwareIcon\n case HistoryActionTypeEnum.LOCK:\n return LockClosedOutlineIcon\n case HistoryActionTypeEnum.UNLOCK:\n return LockOpenOutlineIcon\n case HistoryActionTypeEnum.HIDE:\n return EyeOffOutlineIcon\n case HistoryActionTypeEnum.SHOW:\n return EyeOutlineIcon\n default:\n return PencilIcon\n }\n}\n\n// 设置类型对应文本\nconst labelHandle = (e: HistoryItemType) => {\n // 画布编辑\n if (e.targetType === HistoryTargetTypeEnum.CANVAS) {\n return historyActionTypeName[HistoryTargetTypeEnum.CANVAS]\n } else if (e.actionType === HistoryActionTypeEnum.GROUP || e.actionType === HistoryActionTypeEnum.UN_GROUP) {\n return `${historyActionTypeName[e.actionType]}`\n } else if (e.historyData.length) {\n return `${historyActionTypeName[e.actionType]} - ${(e.historyData[0] as CreateComponentType).chartConfig.title}`\n }\n}\n\nconst options = computed(() => {\n const backStack: HistoryItemType[] = chartHistoryStoreStore.getBackStack\n const opts = backStack.map((e: HistoryItemType) => {\n return {\n label: labelHandle(e),\n icon: iconHandle(e)\n }\n })\n\n return reverse(opts.filter(item => item.label))\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.edit-history-wrapper {\n position: relative;\n z-index: 10;\n}\n.mr-10 {\n margin-right: 10px;\n}\n.btn-text {\n font-size: 12px;\n}\n.help-icon {\n color: var(--el-text-color-secondary);\n cursor: help;\n}\n</style>\n\n<style lang=\"scss\">\n.edit-history-popover {\n z-index: 9999 !important;\n \n .history-list-box {\n .list-item {\n padding: 8px 6px;\n border-radius: 4px;\n cursor: default;\n transition: background 0.2s;\n \n &:hover {\n background: var(--el-fill-color-light);\n }\n \n .item-icon {\n margin-right: 10px;\n color: var(--el-text-color-secondary);\n flex-shrink: 0;\n }\n \n .item-label {\n color: var(--el-text-color-regular);\n font-size: 13px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n }\n \n .empty-tip {\n color: var(--el-text-color-secondary);\n text-align: center;\n padding: 20px;\n }\n}\n</style>\n","<template>\n <el-dialog v-model=\"modelShowRef\" :close-on-click-modal=\"true\" :show-close=\"false\" width=\"50vw\" @closed=\"closeHandle\">\n <el-table class=\"model-content\" :data=\"shortcutKeyOptions\" :border=\"false\" stripe>\n <el-table-column prop=\"label\" label=\"功能\" />\n <el-table-column prop=\"win\" label=\"Win 快捷键\" />\n <el-table-column label=\"Mac 快捷键\">\n <template #header>\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\n <span>Mac 快捷键</span>\n <el-icon :size=\"20\" class=\"go-cursor-pointer\" @click=\"closeHandle\">\n <close-icon></close-icon>\n </el-icon>\n </div>\n </template>\n <template #default=\"{ row }\">\n <span v-if=\"row.macSource\">{{ row.mac }}</span>\n <span v-else>\n <span style=\"font-size: 22px; background: linear-gradient(90deg, var(--el-color-primary), var(--el-color-success)); -webkit-background-clip: text; -webkit-text-fill-color: transparent;\">{{ row.mac.substr(0, 1) }}</span>\n + {{ row.mac.substr(3) }}\n </span>\n </template>\n </el-table-column>\n </el-table>\n </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { watch, ref } from 'vue'\nimport { icon } from '@core/plugins'\nimport { WinKeyboard, MacKeyboard } from '@core/enums/editPageEnum'\n\nconst { CloseIcon } = icon.ionicons5\nconst modelShowRef = ref(false)\n\nconst emit = defineEmits(['update:modelShow'])\n\nconst props = defineProps({\n modelShow: Boolean\n})\n\n\nwatch(() => props.modelShow, (newValue) => {\n modelShowRef.value = newValue\n})\n\n// 快捷键\nconst shortcutKeyOptions = [\n {\n label: '拖拽画布',\n win: `${WinKeyboard.SPACE.toUpperCase()} + 🖱️ `,\n mac: `${MacKeyboard.SPACE.toUpperCase()} + 🖱️ `,\n macSource: true\n },\n {\n label: '向 上/右/下/左 移动',\n win: `${WinKeyboard.CTRL.toUpperCase()} + ↑ 或 → 或 ↓ 或 ←`,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + ↑ `\n },\n {\n label: '锁定',\n win: `${WinKeyboard.CTRL.toUpperCase()} + L `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + L `\n },\n {\n label: '解锁',\n win: `${WinKeyboard.CTRL.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()}+ L `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + ${MacKeyboard.SHIFT.toUpperCase()} + L `\n },\n {\n label: '展示',\n win: `${WinKeyboard.CTRL.toUpperCase()} + H `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + H `\n },\n {\n label: '隐藏',\n win: `${WinKeyboard.CTRL.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()} + H `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + ${MacKeyboard.SHIFT.toUpperCase()} + H `\n },\n {\n label: '删除',\n win: 'Delete'.toUpperCase(),\n mac: `${MacKeyboard.CTRL.toUpperCase()} + Backspace `\n },\n {\n label: '复制',\n win: `${WinKeyboard.CTRL.toUpperCase()} + C `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + C `\n },\n {\n label: '剪切',\n win: `${WinKeyboard.CTRL.toUpperCase()} + X `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + X `\n },\n {\n label: '粘贴',\n win: `${WinKeyboard.CTRL.toUpperCase()} + V `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + V `\n },\n {\n label: '后退',\n win: `${WinKeyboard.CTRL.toUpperCase()} + Z `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + Z `\n },\n {\n label: '前进',\n win: `${WinKeyboard.CTRL.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()} + Z `,\n mac: `${MacKeyboard.CTRL.toUpperCase()} + ${MacKeyboard.SHIFT.toUpperCase()} + Z `\n },\n {\n label: '多选',\n win: `${WinKeyboard.CTRL.toUpperCase()} + 🖱️ `,\n mac: `${MacKeyboard.CTRL_SOURCE_KEY.toUpperCase()} + 🖱️ `\n },\n {\n label: '创建分组',\n win: `${WinKeyboard.CTRL.toUpperCase()} + G / 🖱️ `,\n mac: `${MacKeyboard.CTRL_SOURCE_KEY.toUpperCase()} + G / 🖱️`\n },\n {\n label: '解除分组',\n win: `${WinKeyboard.CTRL.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()} + G `,\n mac: `${MacKeyboard.CTRL_SOURCE_KEY.toUpperCase()} + ${WinKeyboard.SHIFT.toUpperCase()} + G `\n }\n]\n\nconst closeHandle = () => {\n emit('update:modelShow', false)\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.model-content {\n width: 50vw;\n padding-bottom: 20px;\n overflow: hidden;\n border-radius: 15px;\n td {\n padding: 5px 10px;\n }\n}\n</style>\n","<template>\n <div class=\"go-edit-shortcut\">\n <shortcut-key-modal v-model:modelShow=\"modelShow\"></shortcut-key-modal>\n <el-tooltip content=\"快捷键\" placement=\"top\">\n <el-button\n class=\"scale-btn\"\n size=\"small\"\n @click=\"modelShow = true\"\n >\n <el-icon :size=\"21\" style=\"color: var(--el-text-color-secondary)\">\n <dicom-overlay-icon></dicom-overlay-icon>\n </el-icon>\n </el-button>\n </el-tooltip>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { icon } from '@core/plugins'\nimport ShortcutKeyModal from './ShortcutKeyModal.vue'\n\nconst { DicomOverlayIcon } = icon.carbon\nconst modelShow = ref<boolean>(false)\n</script>\n\n<style lang=\"scss\" scoped>\n@include go('edit-shortcut') {\n .scale-btn {\n margin: 0 10px 0 0;\n .btn-text {\n font-size: 12px;\n margin-right: 3px;\n }\n }\n}\n</style>\n","<template>\n <div class=\"go-edit-bottom\">\n <div class=\"go-flex-items-center\" style=\"gap: 8px;\">\n <!-- 历史记录 -->\n <edit-history></edit-history>\n <!-- CTRL按键触发展示 -->\n <span id=\"keyboard-dress-show\" style=\"color: var(--el-text-color-secondary)\"></span>\n </div>\n\n <div class=\"bottom-ri go-flex-items-center\" style=\"gap: 8px;\">\n <!-- 快捷键提示 -->\n <edit-shortcut-key />\n\n <!-- 缩放比例 -->\n <el-select\n ref=\"selectInstRef\"\n class=\"scale-btn\"\n v-model=\"filterValue\"\n size=\"small\"\n :disabled=\"lockScale\"\n @change=\"selectHandle\"\n >\n <el-option\n v-for=\"opt in filterOptions\"\n :key=\"opt.value\"\n :label=\"opt.label\"\n :value=\"opt.value\"\n />\n </el-select>\n\n <!-- 锁定缩放 -->\n <el-tooltip :content=\"lockScale ? '解锁当前比例' : '锁定当前比例'\" placement=\"top\">\n <el-button @click=\"lockHandle\" text>\n <el-icon class=\"lock-icon\" :class=\"{ color: lockScale }\" :size=\"18\">\n <lock-closed-outline-icon v-if=\"lockScale\"></lock-closed-outline-icon>\n <lock-open-outline-icon v-else></lock-open-outline-icon>\n </el-icon>\n </el-button>\n </el-tooltip>\n\n <!-- 拖动 -->\n <el-slider\n class=\"scale-slider\"\n v-model=\"sliderValue\"\n :min=\"10\"\n :max=\"200\"\n :step=\"5\"\n :format-tooltip=\"sliderFormatTooltip\"\n :disabled=\"lockScale\"\n :marks=\"sliderMaks\"\n @change=\"sliderHandle\"\n ></el-slider>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref, toRefs, watchEffect } from 'vue'\nimport { icon } from '@core/plugins'\nimport { EditHistory } from '../EditHistory/index'\nimport EditShortcutKey from '../EditShortcutKey/index.vue'\nimport { useDesignStore } from '@core/store/modules/designStore/designStore'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditCanvasTypeEnum } from '@core/store/modules/chartEditStore/chartEditStore.d'\nimport { useChartLayoutStore } from '@core/store/modules/chartLayoutStore/chartLayoutStore'\nimport { ChartLayoutStoreEnum } from '@core/store/modules/chartLayoutStore/chartLayoutStore.d'\n\nconst { LockClosedOutlineIcon, LockOpenOutlineIcon } = icon.ionicons5\n\n// 全局颜色\nconst designStore = useDesignStore()\nconst themeColor = ref(designStore.getAppTheme)\nconst chartLayoutStore = useChartLayoutStore()\nconst chartEditStore = useChartEditStore()\nconst { lockScale, scale } = toRefs(chartEditStore.getEditCanvas)\nconst selectInstRef = ref<InstanceType<typeof import('element-plus')['ElSelect']> | null>(null)\n\n// 缩放选项\nlet filterOptions = [\n {\n label: '200%',\n value: 200\n },\n {\n label: '150%',\n value: 150\n },\n {\n label: '100%',\n value: 100\n },\n {\n label: '50%',\n value: 50\n },\n {\n label: '自适应',\n value: 0\n }\n]\n\n// 选择值\nconst filterValue = ref('')\n\n// 用户自选择\nconst selectHandle = (v: number) => {\n selectInstRef.value?.blur()\n if (v === 0) {\n chartLayoutStore.setItemUnHandle(ChartLayoutStoreEnum.RE_POSITION_CANVAS, true)\n chartEditStore.computedScale()\n return\n }\n chartEditStore.setScale(v / 100)\n}\n\n// 点击锁处理\nconst lockHandle = () => {\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.LOCK_SCALE, !lockScale.value)\n}\n\n// 拖动\nconst sliderValue = ref(100)\n\n// 拖动格式化\nconst sliderFormatTooltip = (v: string) => `${v}%`\n\n// 拖动处理\nconst sliderHandle = (v: number) => {\n chartEditStore.setScale(v / 100)\n}\n\nconst sliderMaks = reactive({\n 100: ''\n})\n\n// 监听 scale 变化\nwatchEffect(() => {\n const value = (scale.value * 100).toFixed(0)\n filterValue.value = `${value}%`\n sliderValue.value = parseInt(value)\n})\n</script>\n\n<style lang=\"scss\" scoped>\n$min-width: 500px;\n$max-width: 670px;\n@include go('edit-bottom') {\n width: 100%;\n min-width: $min-width;\n min-width: $max-width;\n padding: 0 10px;\n padding-left: 20px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n .bottom-ri {\n display: flex;\n align-items: center;\n .lock-icon {\n &.color {\n color: v-bind('themeColor');\n }\n }\n .scale-btn {\n width: 90px;\n font-size: 12px;\n :deep(.el-input__inner) {\n padding: 0 8px;\n }\n }\n .scale-slider {\n width: 100px;\n :deep(.el-slider__runway) {\n margin: 0;\n }\n }\n }\n}\n</style>\n","<template>\n <el-dialog \n v-model=\"modelShowRef\" \n :show-close=\"false\" \n width=\"560px\"\n class=\"go-system-setting-dialog\"\n @closed=\"closeHandle\"\n >\n <div class=\"go-system-setting\">\n <div class=\"setting-header\">\n <span class=\"title\">系统设置</span>\n <el-icon :size=\"18\" class=\"close-btn\" @click=\"closeHandle\">\n <close-icon />\n </el-icon>\n </div>\n\n <div class=\"setting-body\">\n <template v-for=\"item in list\" :key=\"item.key\">\n <div v-if=\"item.type === 'divider'\" class=\"setting-divider\"></div>\n <div v-else class=\"setting-row\">\n <div class=\"row-label\">\n <span>{{ item.name }}</span>\n <el-tooltip v-if=\"item.tip\" :content=\"item.tip\" placement=\"top\">\n <el-icon :size=\"14\" class=\"tip-icon\"><help-outline-icon /></el-icon>\n </el-tooltip>\n </div>\n <div class=\"row-control\">\n <el-switch\n v-if=\"item.type === 'switch'\"\n v-model=\"item.value\"\n size=\"small\"\n @change=\"handleChange($event, item)\"\n />\n <template v-else-if=\"item.type === 'number'\">\n <el-input-number\n v-model=\"item.value\"\n size=\"small\"\n :step=\"item.step || 1\"\n :min=\"item.min || 0\"\n controls-position=\"right\"\n @change=\"handleChange($event, item)\"\n />\n <span v-if=\"item.suffix\" class=\"suffix\">{{ item.suffix }}</span>\n </template>\n <el-select\n v-else-if=\"item.type === 'select'\"\n v-model=\"item.value\"\n size=\"small\"\n @change=\"handleChange($event, item)\"\n >\n <el-option\n v-for=\"opt in item.options\"\n :key=\"opt.value\"\n :label=\"opt.label\"\n :value=\"opt.value\"\n />\n </el-select>\n </div>\n <div class=\"row-desc\">{{ item.desc }}</div>\n </div>\n </template>\n </div>\n </div>\n </el-dialog>\n</template>\n\n<script script lang=\"ts\" setup>\nimport { reactive, ref, watch } from 'vue'\nimport { ListType } from './index.d'\nimport { useSettingStore } from '@core/store/modules/settingStore/settingStore'\nimport { SettingStoreEnums, ToolsStatusEnum } from '@core/store/modules/settingStore/settingStore.d'\nimport { icon } from '@core/plugins'\n\nconst props = defineProps({\n modelShow: Boolean\n})\n\nconst emit = defineEmits(['update:modelShow'])\nconst { HelpOutlineIcon, CloseIcon } = icon.ionicons5\nconst settingStore = useSettingStore()\nconst modelShowRef = ref(false)\n\nconst list = reactive<ListType[]>([\n {\n key: SettingStoreEnums.ASIDE_ALL_COLLAPSED,\n value: settingStore.getAsideAllCollapsed,\n type: 'switch',\n name: '菜单折叠',\n desc: '首页菜单折叠时隐藏至界面外'\n },\n {\n key: SettingStoreEnums.HIDE_PACKAGE_ONE_CATEGORY,\n value: settingStore.getHidePackageOneCategory,\n type: 'switch',\n name: '隐藏分类',\n desc: '工作空间表单分类只有单项时隐藏'\n },\n {\n key: SettingStoreEnums.CHANGE_LANG_RELOAD,\n value: settingStore.getChangeLangReload,\n type: 'switch',\n name: '切换语言',\n desc: '切换语言重新加载页面',\n tip: '若遇到部分区域语言切换失败,则建议开启'\n },\n {\n key: 'divider1',\n type: 'divider',\n name: '',\n desc: '',\n value: ''\n },\n {\n key: SettingStoreEnums.CHART_TOOLS_STATUS_HIDE,\n value: settingStore.getChartToolsStatusHide,\n type: 'switch',\n name: '隐藏工具栏',\n desc: '鼠标移入时,会展示切换到展开模式',\n },\n {\n key: SettingStoreEnums.CHART_TOOLS_STATUS,\n value: settingStore.getChartToolsStatus,\n type: 'select',\n name: '工具栏展示',\n desc: '工作空间工具栏展示方式',\n options: [\n {\n label: '侧边栏',\n value: ToolsStatusEnum.ASIDE\n },\n {\n label: '底部 Dock',\n value: ToolsStatusEnum.DOCK\n }\n ]\n },\n {\n key: 'divider0',\n type: 'divider',\n name: '',\n desc: '',\n value: ''\n },\n {\n key: SettingStoreEnums.CHART_MOVE_DISTANCE,\n value: settingStore.getChartMoveDistance,\n type: 'number',\n name: '移动距离',\n min: 1,\n step: 1,\n suffix: 'px',\n desc: '工作空间方向键控制移动距离'\n },\n {\n key: SettingStoreEnums.CHART_ALIGN_RANGE,\n value: settingStore.getChartAlignRange,\n type: 'number',\n name: '吸附距离',\n min: 10,\n step: 2,\n suffix: 'px',\n desc: '工作空间移动图表时的吸附距离'\n }\n])\n\nwatch(() => props.modelShow, (newValue) => {\n modelShowRef.value = newValue\n})\n\nconst closeHandle = () => {\n emit('update:modelShow', false)\n}\n\nconst handleChange = (e: MouseEvent, item: ListType) => {\n settingStore.setItem(item.key, item.value)\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.go-system-setting {\n .setting-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--el-border-color-lighter);\n \n .title {\n font-size: 16px;\n font-weight: 500;\n color: var(--el-text-color-primary);\n }\n \n .close-btn {\n cursor: pointer;\n color: var(--el-text-color-secondary);\n transition: color 0.2s;\n &:hover {\n color: var(--el-text-color-primary);\n }\n }\n }\n \n .setting-body {\n padding: 8px 0;\n }\n \n .setting-divider {\n height: 1px;\n margin: 8px 20px;\n background: var(--el-border-color-lighter);\n }\n \n .setting-row {\n display: grid;\n grid-template-columns: 90px 140px 1fr;\n align-items: center;\n gap: 16px;\n padding: 12px 20px;\n transition: background 0.2s;\n \n &:hover {\n background: var(--el-fill-color-light);\n }\n }\n \n .row-label {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 14px;\n color: var(--el-text-color-primary);\n \n .tip-icon {\n color: var(--el-text-color-secondary);\n cursor: help;\n }\n }\n \n .row-control {\n display: flex;\n align-items: center;\n gap: 6px;\n \n .suffix {\n font-size: 12px;\n color: var(--el-text-color-secondary);\n }\n \n :deep(.el-input-number) {\n width: 100px;\n }\n \n :deep(.el-select) {\n width: 120px;\n }\n }\n \n .row-desc {\n font-size: 12px;\n color: var(--el-text-color-secondary);\n }\n}\n</style>\n\n<style lang=\"scss\">\n.go-system-setting-dialog {\n background: var(--el-bg-color-overlay);\n border: 1px solid var(--el-border-color-lighter);\n border-radius: 8px;\n box-shadow: var(--el-box-shadow);\n \n .el-dialog__header {\n display: none;\n }\n \n .el-dialog__body {\n padding: 0;\n color: inherit;\n }\n}\n</style>\n","import { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\r\nimport { canvasCut, downloadTextFile, JSONStringify } from '@core/utils'\r\n\r\n// 导出\r\nexport const exportHandle = () => {\r\n // 在函数内部获取 store 实例\r\n const chartEditStore = useChartEditStore()\r\n \r\n // 取消选中\r\n chartEditStore.setTargetSelectChart(undefined)\r\n\r\n // 导出数据\r\n downloadTextFile(\r\n JSONStringify(chartEditStore.getStorageInfo() || []),\r\n undefined,\r\n 'json'\r\n )\r\n\r\n // 导出图片\r\n const range = document.querySelector('.go-edit-range') as HTMLElement\r\n const watermark = document.getElementById('go-edit-watermark')\r\n // 隐藏边距线\r\n if (!range || !watermark) {\r\n window['$message'].error('导出失败!')\r\n return\r\n }\r\n\r\n // 记录缩放比例\r\n const scaleTemp = chartEditStore.getEditCanvas.scale\r\n // 百分百展示页面\r\n chartEditStore.setScale(1, true)\r\n // 展示水印\r\n watermark.style.display = 'block'\r\n\r\n setTimeout(() => {\r\n canvasCut(range, () => {\r\n // 隐藏水印\r\n if (watermark) watermark.style.display = 'none'\r\n // 还原页面大小\r\n chartEditStore.setScale(scaleTemp, true)\r\n })\r\n }, 600)\r\n}\r\n","import { ref, nextTick } from 'vue'\nimport type { UploadRequestOptions } from 'element-plus'\nimport { FileTypeEnum } from '@core/enums/fileTypeEnum'\nimport { readFile, goDialog, JSONParse } from '@core/utils'\nimport { useSync } from '@core/views/chart/hooks/useSync.hook'\n\nexport const useFile = () => {\n const importUploadFileListRef = ref()\n const { updateComponent } = useSync()\n\n // 上传-前置\n //@ts-ignore\n const importBeforeUpload = ({ file }) => {\n importUploadFileListRef.value = []\n const type = file.file.type\n if (type !== FileTypeEnum.JSON && type !== FileTypeEnum.TXT) {\n window['$message'].warning('仅支持上传 【JSON】 格式文件,请重新上传!')\n return false\n }\n return true\n }\n\n // 上传-导入\n const importCustomRequest = (options: UploadRequestOptions) => {\n const { file } = options\n nextTick(() => {\n if (file) {\n readFile(file).then((fileData: any) => {\n goDialog({\n message: '请选择导入方式:',\n positiveText: '新增(可撤回)',\n negativeText: '覆盖(不可撤回)',\n negativeButtonProps: { type: 'info', ghost: false },\n // 新增\n onPositiveCallback: async () => {\n try {\n fileData = JSONParse(fileData)\n await updateComponent(fileData, false, true)\n window['$message'].success('导入成功!')\n } catch (error) {\n console.log(error)\n window['$message'].error('组件导入失败,请检查文件完整性!')\n }\n },\n // 覆盖\n onNegativeCallback: async () => {\n try {\n fileData = JSONParse(fileData)\n await updateComponent(fileData, true, true)\n window['$message'].success('导入成功!')\n } catch (error) {\n console.log(error)\n window['$message'].error('组件导入失败,请检查文件完整性!')\n }\n }\n })\n })\n } else {\n window['$message'].error('导入失败,请检查数据或联系管理员!')\n }\n })\n }\n\n return {\n importUploadFileListRef,\n importBeforeUpload,\n importCustomRequest\n }\n}\n","export enum TypeEnum {\n BUTTON = 'button',\n IMPORTUPLOAD = 'importUpload'\n}\n\nexport type BtnListType = {\n key: string\n type: TypeEnum\n name: string\n icon: any\n handle?: () => void\n}\n","<template>\n <div class=\"go-chart-edit-tools\" :class=\"[settingStore.getChartToolsStatus, isMiniComputed ? 'isMini' : 'unMini']\"\n @click=\"isMini && (isMini = false)\" @mouseenter=\"toolsMouseoverHandle\" @mouseleave=\"toolsMouseoutHandle\">\n <!-- PawIcon -->\n <el-icon v-show=\"settingStore.getChartToolsStatus === ToolsStatusEnum.ASIDE && isMiniComputed\" class=\"asideLogo\"\n :size=\"22\">\n <PawIcon></PawIcon>\n </el-icon>\n\n <el-tooltip v-for=\"(item, index) in btnListComputed\" :key=\"item.key\"\n :disabled=\"!isAside || (isHide && asideTootipDis)\" :content=\"item.name\" placement=\"left\">\n <div class=\"btn-item\">\n <el-button v-if=\"item.type === TypeEnum.BUTTON\" :circle=\"isAside\" @click=\"item.handle\">\n <el-icon :size=\"isAside ? 18 : 16\">\n <component :is=\"item.icon\"></component>\n </el-icon>\n <span v-show=\"!isAside\" class=\"btn-text\">{{ item.name }}</span>\n </el-button>\n <!-- 下载 -->\n <el-upload v-else-if=\"item.type === TypeEnum.IMPORTUPLOAD\" v-model:file-list=\"importUploadFileListRef\"\n :show-file-list=\"false\" :http-request=\"importCustomRequest\" :before-upload=\"importBeforeUpload\">\n <el-button :circle=\"isAside\">\n <el-icon :size=\"isAside ? 18 : 16\">\n <component :is=\"item.icon\"></component>\n </el-icon>\n <span v-show=\"!isAside\" class=\"btn-text\">{{ item.name }}</span>\n </el-button>\n </el-upload>\n </div>\n </el-tooltip>\n </div>\n <!-- 系统设置 model -->\n <go-system-set v-model:modelShow=\"globalSettingModel\"></go-system-set>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport { useSettingStore } from '@core/store/modules/settingStore/settingStore'\nimport { ToolsStatusEnum } from '@core/store/modules/settingStore/settingStore.d'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { EditCanvasTypeEnum } from '@core/store/modules/chartEditStore/chartEditStore.d'\nimport { getLocalStorage, setSessionStorage } from '@core/utils'\nimport { StorageEnum } from '@core/enums/storageEnum'\nimport { GoSystemSet } from '@core/components/GoSystemSet/index'\nimport { exportHandle } from './utils'\nimport { useFile } from './hooks/useFile.hooks'\nimport { useSyncUpdate } from './hooks/useSyncUpdate.hook'\nimport { BtnListType, TypeEnum } from './index.d'\nimport { icon } from '@core/plugins'\n\nconst { DownloadIcon, ShareIcon, PawIcon, SettingsSharpIcon, CreateIcon } = icon.ionicons5\nconst settingStore = useSettingStore()\nconst chartEditStore = useChartEditStore()\n// 初始化编辑 JSON 模块\nuseSyncUpdate()\n\n// 鼠标悬停定时器\nlet mouseTime: any = null\n// 系统设置 model\nconst globalSettingModel = ref(false)\n// 最小化\nconst isMini = ref<boolean>(true)\n// 控制 tootip 提示时机\nconst asideTootipDis = ref(true)\n// 文件上传\nconst { importUploadFileListRef, importCustomRequest, importBeforeUpload } = useFile()\n\n// 是否是侧边栏\nconst isAside = computed(() => settingStore.getChartToolsStatus === ToolsStatusEnum.ASIDE)\n\n// 是否隐藏(悬浮展示)\nconst isHide = computed(() => settingStore.getChartToolsStatusHide)\n\n// 是否展示最小化(与全局配置相关)\nconst isMiniComputed = computed(() => isMini.value && isHide.value)\n\n// 页面渲染配置\nconst btnListComputed = computed(() => {\n if (!isAside.value) return btnList\n const reverseArr: BtnListType[] = []\n btnList.map(item => {\n reverseArr.unshift(item)\n })\n return reverseArr\n})\n\n// 鼠标移入\nconst toolsMouseoverHandle = () => {\n mouseTime = setTimeout(() => {\n if (isMini.value) {\n isMini.value = false\n asideTootipDis.value = true\n }\n }, 200)\n setTimeout(() => {\n asideTootipDis.value = false\n }, 400)\n}\n\n// 鼠标移出\nconst toolsMouseoutHandle = () => {\n clearTimeout(mouseTime)\n if (!isMini.value) {\n isMini.value = true\n }\n}\n\n// 编辑处理(直接开启JSON编辑模式)\nconst editHandle = () => {\n window['$message'].warning('请通过顶部【同步内容】按钮同步最新数据!')\n chartEditStore.setEditCanvas(EditCanvasTypeEnum.IS_CODE_EDIT, true)\n}\n\n// 配置列表\nconst btnList: BtnListType[] = [\n {\n key: 'import',\n type: TypeEnum.IMPORTUPLOAD,\n name: '导入',\n icon: ShareIcon\n },\n {\n key: 'export',\n type: TypeEnum.BUTTON,\n name: '导出',\n icon: DownloadIcon,\n handle: exportHandle\n },\n {\n key: 'edit',\n type: TypeEnum.BUTTON,\n name: '编辑',\n icon: CreateIcon,\n handle: editHandle\n },\n {\n key: 'setting',\n type: TypeEnum.BUTTON,\n name: '设置',\n icon: SettingsSharpIcon,\n handle: () => {\n globalSettingModel.value = true\n }\n }\n]\n</script>\n\n<style lang=\"scss\" scoped>\n/* 底部区域的高度 */\n$dockHeight: 30px;\n$dockBottom: 60px;\n$dockMiniWidth: 200px;\n$dockMiniBottom: 53px;\n\n$asideHeight: 130px;\n$asideMiniHeight: 22px;\n$asideBottom: 70px;\n\n@include go('chart-edit-tools') {\n @extend .go-background-filter;\n position: absolute;\n display: flex;\n justify-content: space-around;\n align-items: center;\n border-radius: 25px;\n border: 1px solid;\n @include fetch-border-color('hover-border-color-shallow');\n\n .btn-text {\n margin-left: 4px;\n color: var(--el-text-color-secondary);\n }\n\n &.aside {\n display: flex;\n justify-content: center;\n flex-direction: column-reverse;\n height: auto;\n right: 20px;\n padding: 40px 8px;\n bottom: $asideBottom;\n overflow: hidden;\n transition: height ease 0.4s;\n\n .btn-item {\n margin-bottom: 10px;\n display: flex;\n justify-content: center;\n\n &:first-of-type {\n margin-bottom: 0;\n }\n\n @include deep() {\n .el-button {\n &.is-circle {\n width: 40px;\n height: 40px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n\n .el-upload {\n display: flex;\n justify-content: center;\n }\n }\n }\n\n &.unMini {\n animation: aside-in 0.4s ease forwards;\n\n @keyframes aside-in {\n 0% {\n opacity: 0.5;\n height: $asideMiniHeight;\n }\n\n 100% {\n height: $asideHeight;\n opacity: 1;\n }\n }\n\n .btn-item {\n position: relative;\n display: flex;\n }\n\n .asideLogo {\n opacity: 0.4;\n }\n }\n\n &.isMini {\n cursor: pointer;\n padding: 13px 13px;\n background-color: var(--el-fill-color);\n animation: aside-mini-in 0.4s ease forwards;\n\n @keyframes aside-mini-in {\n 0% {\n opacity: 0.5;\n height: $asideHeight;\n }\n\n 100% {\n opacity: 1;\n height: $asideMiniHeight;\n }\n }\n\n .btn-item {\n position: relative;\n display: none;\n }\n\n .asideLogo {\n opacity: 1;\n }\n }\n }\n\n &.dock {\n width: auto;\n left: 50%;\n transform: translateX(-50%);\n\n .btn-item {\n margin-right: 20px;\n\n &:last-child {\n margin-right: 0;\n }\n }\n\n &.unMini {\n animation: dock-in 0.4s ease forwards;\n\n @keyframes dock-in {\n 0% {\n opacity: 0;\n height: 0;\n padding: 5px;\n bottom: $dockMiniBottom;\n }\n\n 100% {\n height: $dockHeight;\n padding: 8px 30px;\n bottom: $dockBottom;\n border-radius: 25px;\n }\n }\n\n &::after {\n content: '';\n position: absolute;\n left: 0;\n width: 100%;\n height: 10px;\n bottom: -10px;\n cursor: pointer;\n }\n }\n\n /* 最小化 */\n &.isMini {\n height: 0;\n width: $dockMiniWidth;\n bottom: $dockMiniBottom;\n padding: 5px;\n border-radius: 8px;\n cursor: pointer;\n border: 0px;\n animation: dock-mini-in 1s ease forwards;\n\n @keyframes dock-mini-in {\n 0% {\n opacity: 1;\n height: $dockHeight;\n padding: 8px 30px;\n bottom: $dockBottom;\n border-radius: 25px;\n }\n\n 20% {\n height: 0;\n border-radius: 8px;\n }\n\n 50% {\n opacity: 0;\n bottom: calc(#{$dockMiniBottom} - 10px);\n pointer-events: none;\n }\n\n 100% {\n opacity: 1;\n height: 0;\n padding: 5px;\n bottom: $dockMiniBottom;\n }\n }\n\n .btn-item {\n position: relative;\n bottom: -50px;\n display: none;\n }\n }\n }\n}\n</style>\n","<template>\n <!-- <edit-rule></edit-rule> -->\n <content-box id=\"go-chart-edit-layout\" :flex=\"true\" :showTop=\"false\" :showBottom=\"true\" :depth=\"1\" :xScroll=\"true\"\n :disabledScroll=\"true\" @mousedown=\"mousedownHandleUnStop\" @drop=\"dragHandle\" @dragover=\"dragoverHandle\"\n @dragenter=\"dragoverHandle\">\n <edit-rule>\n <!-- 画布主体 -->\n <div id=\"go-chart-edit-content\" @contextmenu=\"handleContextMenu\">\n <!-- 展示 -->\n <edit-range>\n <!-- 滤镜预览 -->\n <div :style=\"{\n ...getFilterStyle(chartEditStore.getEditCanvasConfig),\n ...rangeStyle\n }\">\n <!-- 图表 -->\n <div v-for=\"(item, index) in chartEditStore.getComponentList\" :key=\"item.id\">\n <!-- 分组 -->\n <edit-group v-if=\"item.isGroup\" :groupData=\"(item as CreateComponentGroupType)\"\n :groupIndex=\"index\"></edit-group>\n\n <!-- 单组件 -->\n <edit-shape-box v-else :data-id=\"item.id\" :index=\"index\" :style=\"{\n ...useComponentStyle(item.attr, index),\n ...getBlendModeStyle(item.styles) as any\n }\" :item=\"item\" @click=\"mouseClickHandle($event, item)\" @mousedown=\"mousedownHandle($event, item)\"\n @mouseenter=\"mouseenterHandle($event, item)\" @mouseleave=\"mouseleaveHandle($event, item)\"\n @contextmenu=\"handleContextMenu($event, item, optionsHandle)\">\n <component class=\"edit-content-chart\" :class=\"animationsClass(item.styles.animations)\"\n :is=\"item.chartConfig.chartKey\" :chartConfig=\"item\" :themeSetting=\"themeSetting\"\n :themeColor=\"themeColor\" :style=\"{\n ...useSizeStyle(item.attr),\n ...getFilterStyle(item.styles),\n ...getTransformStyle(item.styles)\n }\"></component>\n </edit-shape-box>\n </div>\n </div>\n </edit-range>\n </div>\n </edit-rule>\n <!-- 工具栏 -->\n <template #aside>\n <edit-tools></edit-tools>\n </template>\n\n <!-- 底部控制 -->\n <template #bottom>\n <EditBottom></EditBottom>\n </template>\n </content-box>\n</template>\n\n<script lang=\"ts\" setup>\nimport { onMounted, computed, provide } from 'vue'\nimport { chartColors } from '@core/settings/chartThemes/index'\nimport { MenuEnum } from '@core/enums/editPageEnum'\nimport { CreateComponentType, CreateComponentGroupType } from '@core/packages/index.d'\nimport { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle, colorCustomMerge } from '@core/utils'\nimport { useContextMenu } from '@core/views/chart/hooks/useContextMenu.hook'\nimport { MenuOptionsItemType } from '@core/views/chart/hooks/useContextMenu.hook.d'\nimport { useChartEditStore } from '@core/store/modules/chartEditStore/chartEditStore'\nimport { useScale } from '@core/views/chart/hooks/useScale.hook'\nimport { useLayout } from './hooks/useLayout.hook'\nimport { useAddKeyboard } from '../hooks/useKeyboard.hook'\nimport { dragHandle, dragoverHandle, mousedownHandleUnStop, useMouseHandle } from './hooks/useDrag.hook'\nimport { useComponentStyle, useSizeStyle } from './hooks/useStyle.hook'\n\nimport { ContentBox } from '../ContentBox/index'\nimport { EditGroup } from './components/EditGroup'\nimport { EditRange } from './components/EditRange'\nimport { EditRule } from './components/EditRule'\nimport { EditBottom } from './components/EditBottom'\nimport { EditShapeBox } from './components/EditShapeBox'\nimport { EditTools } from './components/EditTools'\n\nconst chartEditStore = useChartEditStore()\nconst { handleContextMenu } = useContextMenu()\n\n// 编辑时注入scale变量\nconst { scale, SCALE_KEY } = useScale()\nprovide(SCALE_KEY, scale)\n\n// 布局处理\nuseLayout(async () => { })\n\n// 点击事件\nconst { mouseenterHandle, mouseleaveHandle, mousedownHandle, mouseClickHandle } = useMouseHandle()\n\n// 右键事件\nconst optionsHandle = (\n targetList: MenuOptionsItemType[],\n allList: MenuOptionsItemType[],\n targetInstance: CreateComponentType\n) => {\n // 多选处理\n if (chartEditStore.getTargetChart.selectId.length > 1) {\n return allList.filter(i => [MenuEnum.GROUP, MenuEnum.DELETE].includes(i.key as MenuEnum))\n }\n const statusMenuEnums: MenuEnum[] = []\n if (targetInstance.status.lock) {\n statusMenuEnums.push(MenuEnum.LOCK)\n } else {\n statusMenuEnums.push(MenuEnum.UNLOCK)\n }\n if (targetInstance.status.hide) {\n statusMenuEnums.push(MenuEnum.HIDE)\n } else {\n statusMenuEnums.push(MenuEnum.SHOW)\n }\n return targetList.filter(i => !statusMenuEnums.includes(i.key as MenuEnum))\n}\n\n// 主题色\nconst themeSetting = computed(() => {\n const chartThemeSetting = chartEditStore.getEditCanvasConfig.chartThemeSetting\n return chartThemeSetting\n})\n\n// 配置项\nconst themeColor = computed(() => {\n const colorCustomMergeData: any = colorCustomMerge(chartEditStore.getEditCanvasConfig.chartCustomThemeColorInfo)\n return colorCustomMergeData[chartEditStore.getEditCanvasConfig.chartThemeColor]\n})\n\n// 是否展示渲染\nconst filterShow = computed(() => {\n return chartEditStore.getEditCanvasConfig.filterShow\n})\n\n// 背景\nconst rangeStyle = computed(() => {\n // 设置背景色和图片背景\n const background = chartEditStore.getEditCanvasConfig.background\n const backgroundImage = chartEditStore.getEditCanvasConfig.backgroundImage\n const selectColor = chartEditStore.getEditCanvasConfig.selectColor\n const backgroundColor = background ? background : undefined\n\n const computedBackground = selectColor\n ? { background: backgroundColor }\n : { background: `url(${backgroundImage}) no-repeat center center / cover !important` }\n\n return {\n ...computedBackground,\n width: 'inherit',\n height: 'inherit'\n }\n})\n\n// 键盘事件\nonMounted(() => {\n useAddKeyboard()\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@include goId('chart-edit-layout') {\n position: relative;\n width: 100%;\n overflow: hidden;\n @extend .go-point-bg;\n @include background-image('background-point');\n\n @include goId('chart-edit-content') {\n overflow: hidden;\n @extend .go-transition;\n @include fetch-theme('box-shadow');\n\n .edit-content-chart {\n position: absolute;\n overflow: hidden;\n }\n }\n}\n</style>\n"],"names":["useLayout","fn","removeScale","onMounted","chartEditStore","useChartEditStore","EditCanvasTypeEnum","onUnmounted","global","k","_handlers","_mods","_scope","_MODIFIERS","_MAP","code","x","_downKeys","index","array","item","i","compareArray","a1","a2","modifierMap","updateModifierKey","event","dispatch","key","handler","modifiersMatch","scope","assignKey","getScope","clearModifier","resetModifiers","method","keys","mods","getKeys","getMods","unbindKey","multipleKeys","j","obj","isPressed","keyCode","getPressedKeyCodes","filter","tagName","setScope","deleteScope","handlers","mi","addEvent","object","previousKey","noConflict","module","this","winCtrlMerge","WinKeyboard","winShiftMerge","winKeyboardValue","MenuEnum","macCtrlMerge","MacKeyboard","macShiftMerge","macKeyboardValue","winKeyList","macKeyList","keyRecordHandle","setKeyboardDressShow","useAddKeyboard","switchHandle","keyboardValue","e","keymaster","throttle","debounce","dragHandle","loadingStart","drayDataString","DragKeyEnum","loadingFinish","dropData","JSONParse","ensureRegisteredComponent","newComponent","createComponent","setComponentPosition","error","loadingError","dragoverHandle","mousedownHandleUnStop","mousedownBoxSelect","onClickOutSide","useContextMenu","startScreenX","startScreenY","startOffsetX","startOffsetY","scale","mousemove","moveEvent","currX","currY","selectAttr","y","w","h","targetAttr","mouseup","useMouseHandle","_a","exList","MouseEventButton","selectId","canvasWidth","canvasHeight","targetMap","id","toRaw","startX","startY","prevComponentInstance","cloneDeep","offsetX","offsetY","componentInstance","distance","curComponentInstance","preItem","moveComponentInstance","err","useMousePointHandle","point","attr","componentId","itemAttrX","itemAttrY","itemAttrW","itemAttrH","isTop","isBottom","isLeft","isRight","newHeight","newWidth","useComponentStyle","useSizeStyle","usePointStyle","cursorResize","width","height","newLeft","newTop","props","__props","designStore","useDesignStore","pointList","themeColor","computed","hover","select","lock","hide","_createElementBlock","_normalizeClass","_renderSlot","_ctx","_openBlock","_Fragment","_normalizeStyle","_unref","$event","_createElementVNode","handleContextMenu","mouseenterHandle","mouseleaveHandle","mousedownHandle","mouseClickHandle","optionsHandle","targetList","allList","targetInstance","menulist","statusMenuEnums","singleMenuEnums","divider","colorCustomMerge","themeSetting","_hoisted_1","_createBlock","EditShapeBox","animationsClass","getFilterStyle","getTransformStyle","getBlendModeStyle","_cache","_renderList","_resolveDynamicComponent","settingStore","useSettingStore","line","reactive","minDistance","isComputedLine","isSorption","selectValue","componentValue","selectTarget","canvasPositionList","watch","selectW","selectH","selectLeftX","selectHalfX","selectRightX","seletX","selectTopY","selectHalfY","selectBottomY","selectY","componentList","lineItem","component","componentW","componentH","componentLeftX","componentHalfX","componentRightX","componentX","componentTopY","componentHalfY","componentBottomY","componentY","val","_component_el_watermark","watermarkText","isSelect","toRefs","positionStyle","ref","positionInfo","selectBoxIndex","getEditCanvasConfig","getEditCanvas","size","rangeStyle","rangeModelStyle","dragStyle","_createVNode","EditWatermark","EditAlignLine","EditSelect","thick","chartLayoutStore","useChartLayoutStore","prevMoveXValue","prevMoveYValue","$app","sketchRuleReDraw","refSketchRuleBox","$container","isPressSpace","cursorStyle","lines","canvasBoxWidth","canvasBoxHeight","updateCanvasBoxSize","layoutDom","containerWidth","containerHeight","paletteStyle","handleWheel","resScale","handleScroll","screensRect","canvasRect","dragCanvas","_b","handleMousemove","nx","ny","prevMoveX1","prevMoveX2","prevMoveY1","prevMoveY2","handleMouseup","canvasBox","reDraw","canvasPosCenter","newValue","oldValue","ChartLayoutStoreEnum","handleResize","isHold","_component_sketch_rule","historyActionTypeName","HistoryActionTypeEnum","HistoryTargetTypeEnum","arrayProto","nativeReverse","reverse","reverse_1","DesktopOutlineIcon","PencilIcon","TrashIcon","CopyIcon","LayersIcon","DuplicateIcon","HelpOutlineIcon","LockClosedOutlineIcon","LockOpenOutlineIcon","EyeOffOutlineIcon","EyeOutlineIcon","icon","StackedMoveIcon","Carbon3DCursorIcon","Carbon3DSoftwareIcon","chartHistoryStoreStore","useChartHistoryStore","iconHandle","labelHandle","options","opts","_component_el_popover","_component_el_button","_hoisted_2","_component_el_scrollbar","_component_el_icon","_hoisted_4","_toDisplayString","_hoisted_5","_component_el_tooltip","editHistoryMax","CloseIcon","modelShowRef","emit","__emit","shortcutKeyOptions","closeHandle","_component_el_dialog","_component_el_table","_component_el_table_column","_withCtx","row","_hoisted_3","_createTextVNode","DicomOverlayIcon","modelShow","ShortcutKeyModal","lockScale","selectInstRef","filterOptions","filterValue","selectHandle","v","lockHandle","sliderValue","sliderFormatTooltip","sliderHandle","sliderMaks","watchEffect","value","EditHistory","EditShortcutKey","_component_el_select","opt","_component_el_option","_component_el_slider","list","SettingStoreEnums","ToolsStatusEnum","handleChange","_hoisted_6","_hoisted_7","_component_el_switch","_component_el_input_number","_hoisted_8","_hoisted_9","exportHandle","downloadTextFile","JSONStringify","range","watermark","scaleTemp","canvasCut","useFile","importUploadFileListRef","updateComponent","useSync","file","type","FileTypeEnum","nextTick","readFile","fileData","goDialog","TypeEnum","DownloadIcon","ShareIcon","PawIcon","SettingsSharpIcon","CreateIcon","useSyncUpdate","mouseTime","globalSettingModel","isMini","asideTootipDis","importCustomRequest","importBeforeUpload","isAside","isHide","isMiniComputed","btnListComputed","btnList","reverseArr","toolsMouseoverHandle","toolsMouseoutHandle","editHandle","_vShow","_withDirectives","_component_el_upload","GoSystemSet","SCALE_KEY","useScale","provide","background","backgroundImage","ContentBox","EditTools","EditBottom","EditRule","args","EditRange","EditGroup"],"mappings":"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","x_google_ignoreList":[1,13]}