cbvirtua 1.0.49 → 1.0.51
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.
- package/canvas-demo-master/canvas-demo-master/README.md +7 -0
- package/canvas-demo-master/canvas-demo-master/countShowBall/README.md +7 -0
- package/canvas-demo-master/canvas-demo-master/countShowBall/countdown.js +227 -0
- package/canvas-demo-master/canvas-demo-master/countShowBall/digit.js +135 -0
- package/canvas-demo-master/canvas-demo-master/countShowBall/index.html +23 -0
- package/canvas-demo-master/canvas-demo-master/write/README.md +17 -0
- package/canvas-demo-master/canvas-demo-master/write/css/write.css +40 -0
- package/canvas-demo-master/canvas-demo-master/write/index.html +26 -0
- package/canvas-demo-master/canvas-demo-master/write/js/controller.js +43 -0
- package/canvas-demo-master/canvas-demo-master/write/js/index.js +10 -0
- package/canvas-demo-master/canvas-demo-master/write/js/paper.js +63 -0
- package/canvas-demo-master/canvas-demo-master/write/js/require.js +36 -0
- package/canvas-demo-master/canvas-demo-master/write/js/write.js +143 -0
- package/canvas-demo-master/canvas-demo-master/writeRxJS/README.md +17 -0
- package/canvas-demo-master/canvas-demo-master/writeRxJS/css/write.css +40 -0
- package/canvas-demo-master/canvas-demo-master/writeRxJS/index.html +27 -0
- package/canvas-demo-master/canvas-demo-master/writeRxJS/js/controller.js +43 -0
- package/canvas-demo-master/canvas-demo-master/writeRxJS/js/index.js +10 -0
- package/canvas-demo-master/canvas-demo-master/writeRxJS/js/paper.js +65 -0
- package/canvas-demo-master/canvas-demo-master/writeRxJS/js/require.js +36 -0
- package/canvas-demo-master/canvas-demo-master/writeRxJS/js/write.js +107 -0
- package/drawingBoard-main/drawingBoard-main/README.md +32 -0
- package/drawingBoard-main/drawingBoard-main/index.html +13 -0
- package/drawingBoard-main/drawingBoard-main/package.json +31 -0
- package/drawingBoard-main/drawingBoard-main/pnpm-lock.yaml +2378 -0
- package/drawingBoard-main/drawingBoard-main/public/vite.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/App.vue +64 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/huabi.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/huabigongju-juxing.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/huabigongju-tuoyuan.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/huabigongju-wenben.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/jiantougongju-hover.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/layer.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/layer_1.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/tuceng.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/tuceng_1.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/wujiaoxing.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/xiangpigongju.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/xuanzegongju.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/assets/zhixiangongju.svg +1 -0
- package/drawingBoard-main/drawingBoard-main/src/components/plugins/LayerOptions.tsx +67 -0
- package/drawingBoard-main/drawingBoard-main/src/components/plugins/LineSegmentBackgroundColorPlugin.tsx +25 -0
- package/drawingBoard-main/drawingBoard-main/src/components/plugins/LineSegmentColorPlugin.tsx +25 -0
- package/drawingBoard-main/drawingBoard-main/src/components/plugins/LineSegmentSizePlugin.tsx +26 -0
- package/drawingBoard-main/drawingBoard-main/src/components/plugins/TextColor.tsx +25 -0
- package/drawingBoard-main/drawingBoard-main/src/components/plugins/TextSize.tsx +27 -0
- package/drawingBoard-main/drawingBoard-main/src/components/tools/Menu.scss +10 -0
- package/drawingBoard-main/drawingBoard-main/src/components/tools/Menu.tsx +33 -0
- package/drawingBoard-main/drawingBoard-main/src/components/tools/Tips.scss +16 -0
- package/drawingBoard-main/drawingBoard-main/src/components/tools/Tips.tsx +5 -0
- package/drawingBoard-main/drawingBoard-main/src/components/tools/Toolbar.scss +26 -0
- package/drawingBoard-main/drawingBoard-main/src/components/tools/Toolbar.tsx +39 -0
- package/drawingBoard-main/drawingBoard-main/src/components/tools/ToolbarMenu.scss +45 -0
- package/drawingBoard-main/drawingBoard-main/src/components/tools/ToolbarMenu.tsx +61 -0
- package/drawingBoard-main/drawingBoard-main/src/components/tools/index.tsx +22 -0
- package/drawingBoard-main/drawingBoard-main/src/main.scss +4 -0
- package/drawingBoard-main/drawingBoard-main/src/main.ts +11 -0
- package/drawingBoard-main/drawingBoard-main/src/shims-vue.d.ts +5 -0
- package/drawingBoard-main/drawingBoard-main/src/utils/App.ts +24 -0
- package/drawingBoard-main/drawingBoard-main/src/utils/DrawingBoard.ts +213 -0
- package/drawingBoard-main/drawingBoard-main/src/utils/History.ts +70 -0
- package/drawingBoard-main/drawingBoard-main/src/utils/Tools.ts +241 -0
- package/drawingBoard-main/drawingBoard-main/src/utils/types.ts +55 -0
- package/drawingBoard-main/drawingBoard-main/src/vite-env.d.ts +1 -0
- package/drawingBoard-main/drawingBoard-main/tsconfig.app.json +36 -0
- package/drawingBoard-main/drawingBoard-main/tsconfig.json +7 -0
- package/drawingBoard-main/drawingBoard-main/tsconfig.node.json +23 -0
- package/drawingBoard-main/drawingBoard-main/vite.config.ts +16 -0
- package/package.json +1 -1
- package/canvas-example-main.zip +0 -0
- package/hanzi-writer/.prettierrc.json +0 -7
- package/hanzi-writer/COPYING.md +0 -11
- package/hanzi-writer/LICENSE +0 -20
- package/hanzi-writer/README.md +0 -37
- package/hanzi-writer/babel.config.js +0 -14
- package/hanzi-writer/dist/types/HanziWriter.d.ts +0 -108
- package/hanzi-writer/dist/types/LoadingManager.d.ts +0 -20
- package/hanzi-writer/dist/types/Positioner.d.ts +0 -22
- package/hanzi-writer/dist/types/Quiz.d.ts +0 -40
- package/hanzi-writer/dist/types/RenderState.d.ts +0 -74
- package/hanzi-writer/dist/types/__tests__/HanziWriter-test.d.ts +0 -1
- package/hanzi-writer/dist/types/__tests__/LoadingManager-test.d.ts +0 -1
- package/hanzi-writer/dist/types/__tests__/Mutation-test.d.ts +0 -1
- package/hanzi-writer/dist/types/__tests__/Positioner-test.d.ts +0 -1
- package/hanzi-writer/dist/types/__tests__/Quiz-test.d.ts +0 -1
- package/hanzi-writer/dist/types/__tests__/RenderState-test.d.ts +0 -1
- package/hanzi-writer/dist/types/__tests__/defaultCharDataLoader-test.d.ts +0 -1
- package/hanzi-writer/dist/types/__tests__/geometry-test.d.ts +0 -1
- package/hanzi-writer/dist/types/__tests__/parseCharData-test.d.ts +0 -1
- package/hanzi-writer/dist/types/__tests__/strokeMatches-test.d.ts +0 -1
- package/hanzi-writer/dist/types/__tests__/utils-test.d.ts +0 -1
- package/hanzi-writer/dist/types/characterActions.d.ts +0 -18
- package/hanzi-writer/dist/types/defaultCharDataLoader.d.ts +0 -3
- package/hanzi-writer/dist/types/defaultOptions.d.ts +0 -3
- package/hanzi-writer/dist/types/geometry.d.ts +0 -38
- package/hanzi-writer/dist/types/models/Character.d.ts +0 -6
- package/hanzi-writer/dist/types/models/Stroke.d.ts +0 -17
- package/hanzi-writer/dist/types/models/UserStroke.d.ts +0 -8
- package/hanzi-writer/dist/types/parseCharData.d.ts +0 -3
- package/hanzi-writer/dist/types/quizActions.d.ts +0 -10
- package/hanzi-writer/dist/types/renderers/HanziWriterRendererBase.d.ts +0 -14
- package/hanzi-writer/dist/types/renderers/RenderTargetBase.d.ts +0 -22
- package/hanzi-writer/dist/types/renderers/StrokeRendererBase.d.ts +0 -13
- package/hanzi-writer/dist/types/renderers/canvas/CharacterRenderer.d.ts +0 -14
- package/hanzi-writer/dist/types/renderers/canvas/HanziWriterRenderer.d.ts +0 -19
- package/hanzi-writer/dist/types/renderers/canvas/RenderTarget.d.ts +0 -6
- package/hanzi-writer/dist/types/renderers/canvas/StrokeRenderer.d.ts +0 -16
- package/hanzi-writer/dist/types/renderers/canvas/__tests__/CharacterRenderer-test.d.ts +0 -1
- package/hanzi-writer/dist/types/renderers/canvas/__tests__/HanziWriterRenderer-test.d.ts +0 -1
- package/hanzi-writer/dist/types/renderers/canvas/__tests__/RenderTarget-test.d.ts +0 -1
- package/hanzi-writer/dist/types/renderers/canvas/__tests__/StrokeRenderer-test.d.ts +0 -1
- package/hanzi-writer/dist/types/renderers/canvas/__tests__/canvasUtils-test.d.ts +0 -1
- package/hanzi-writer/dist/types/renderers/canvas/__tests__/renderUserStroke-test.d.ts +0 -1
- package/hanzi-writer/dist/types/renderers/canvas/canvasUtils.d.ts +0 -9
- package/hanzi-writer/dist/types/renderers/canvas/index.d.ts +0 -7
- package/hanzi-writer/dist/types/renderers/canvas/renderUserStroke.d.ts +0 -7
- package/hanzi-writer/dist/types/renderers/svg/CharacterRenderer.d.ts +0 -20
- package/hanzi-writer/dist/types/renderers/svg/HanziWriterRenderer.d.ts +0 -20
- package/hanzi-writer/dist/types/renderers/svg/RenderTarget.d.ts +0 -11
- package/hanzi-writer/dist/types/renderers/svg/StrokeRenderer.d.ts +0 -21
- package/hanzi-writer/dist/types/renderers/svg/UserStrokeRenderer.d.ts +0 -15
- package/hanzi-writer/dist/types/renderers/svg/__tests__/CharacterRenderer-test.d.ts +0 -1
- package/hanzi-writer/dist/types/renderers/svg/__tests__/HanziWriterRenderer-test.d.ts +0 -1
- package/hanzi-writer/dist/types/renderers/svg/__tests__/StrokeRenderer-test.d.ts +0 -1
- package/hanzi-writer/dist/types/renderers/svg/__tests__/svgUtils-test.d.ts +0 -1
- package/hanzi-writer/dist/types/renderers/svg/index.d.ts +0 -7
- package/hanzi-writer/dist/types/renderers/svg/svgUtils.d.ts +0 -5
- package/hanzi-writer/dist/types/strokeMatches.d.ts +0 -14
- package/hanzi-writer/dist/types/testUtils.d.ts +0 -1
- package/hanzi-writer/dist/types/typings/types.d.ts +0 -121
- package/hanzi-writer/dist/types/utils.d.ts +0 -26
- package/hanzi-writer/jest-jsdom-env.js +0 -20
- package/hanzi-writer/package.json +0 -66
- package/hanzi-writer/rollup.config.js +0 -58
- package/hanzi-writer/tsconfig.json +0 -79
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { onMounted, onUnmounted } from 'vue';
|
|
3
|
+
import App from './utils/App';
|
|
4
|
+
import { Star } from 'leafer-ui';
|
|
5
|
+
import { INITIAL_HEIGHT, INITIAL_WIDTH } from './utils/Tools';
|
|
6
|
+
import LineSegmentBackgroundColorPlugin from './components/plugins/LineSegmentBackgroundColorPlugin';
|
|
7
|
+
import FIVE_POINTED_STAR_ICON from './assets/wujiaoxing.svg'
|
|
8
|
+
|
|
9
|
+
const fivePointedStar = {
|
|
10
|
+
icon: FIVE_POINTED_STAR_ICON,
|
|
11
|
+
name: 'fivePointedStar',
|
|
12
|
+
title: '五角星',
|
|
13
|
+
index: 1,
|
|
14
|
+
corners: 5,
|
|
15
|
+
innerRadius: 0.382,
|
|
16
|
+
fill: 'rgb(50,205,121)',
|
|
17
|
+
createdFactory(x, y) {
|
|
18
|
+
return new Star({
|
|
19
|
+
// 这个 name 需要和 config.toolbar 每一项中的 name 一致,否则 menuPlugins 出不来
|
|
20
|
+
name: 'fivePointedStar',
|
|
21
|
+
x,
|
|
22
|
+
y,
|
|
23
|
+
width: INITIAL_WIDTH,
|
|
24
|
+
height: INITIAL_HEIGHT,
|
|
25
|
+
corners: this.corners,
|
|
26
|
+
innerRadius: this.innerRadius,
|
|
27
|
+
fill: this.fill,
|
|
28
|
+
editable: true,
|
|
29
|
+
})
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
// 后续可自行扩展
|
|
33
|
+
menuPlugins: [LineSegmentBackgroundColorPlugin]
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
onMounted(() =>
|
|
37
|
+
App.init({
|
|
38
|
+
domId: 'drawing-board-container',
|
|
39
|
+
config: {
|
|
40
|
+
// 增加工具栏组件
|
|
41
|
+
toolbar: [
|
|
42
|
+
// 五角星组件
|
|
43
|
+
fivePointedStar
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
onChange: json => {
|
|
47
|
+
console.log(json);
|
|
48
|
+
},
|
|
49
|
+
})
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
onUnmounted(() => App.destroy());
|
|
53
|
+
</script>
|
|
54
|
+
|
|
55
|
+
<template>
|
|
56
|
+
<div id="drawing-board-container"></div>
|
|
57
|
+
</template>
|
|
58
|
+
|
|
59
|
+
<style lang="scss" scoped>
|
|
60
|
+
#drawing-board-container {
|
|
61
|
+
width: 100vw;
|
|
62
|
+
height: 100vh;
|
|
63
|
+
}
|
|
64
|
+
</style>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="192.48px" viewBox="0 0 1064 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#2c2c2c" d="M33.792 950.6816a53.248 53.248 0 0 0 61.76768 61.72672L372.736 963.1744 1030.22592 305.68448a53.248 53.248 0 0 0 0-75.28448L815.88224 16.05632a53.248 53.248 0 0 0-75.28448 0L83.1488 673.54624 33.792 950.6816zM952.07424 268.0832L372.736 847.33952 199.0656 673.54624 778.24 94.28992l173.79328 173.79328zM309.20704 899.60448l-197.71392 35.10272 35.2256-197.59104 162.48832 162.48832z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#2c2c2c" d="M799.5 179c24.6 0 44.5 20 44.5 44.5v575.9c0 24.6-20 44.5-44.5 44.5h-576c-24.6 0-44.5-20-44.5-44.5V223.5c0-24.6 20-44.5 44.5-44.5h576m0-120h-576C132.7 59 59 132.7 59 223.5v575.9C59 890.3 132.7 964 223.5 964h575.9c90.9 0 164.5-73.7 164.5-164.5v-576C964 132.7 890.3 59 799.5 59z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#2c2c2c" d="M512.5 146c47.9 0 94.3 9.4 137.9 27.8 42.2 17.8 80.1 43.4 112.7 76 32.6 32.6 58.2 70.5 76 112.7 18.5 43.6 27.8 90 27.8 138s-9.4 94.3-27.8 138c-17.8 42.2-43.4 80.1-76 112.7-32.6 32.6-70.5 58.2-112.7 76-43.6 18.5-90 27.8-137.9 27.8-47.9 0-94.3-9.4-138-27.8-42.2-17.8-80.1-43.4-112.7-76-32.6-32.6-58.2-70.5-76-112.7-18.5-43.6-27.8-90-27.8-138s9.4-94.3 27.8-138c17.8-42.2 43.4-80.1 76-112.7 32.6-32.6 70.5-58.2 112.7-76 43.7-18.4 90.1-27.8 138-27.8m0-120C250.4 26 38 238.4 38 500.5S250.4 975 512.5 975 987 762.6 987 500.5 774.6 26 512.5 26z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#2c2c2c" d="M187.3 81.2h685.5c35.5 0 64.3 28.8 64.3 64.3s-28.8 64.3-64.3 64.3H187.3c-35.5 0-64.3-28.8-64.3-64.3s28.8-64.3 64.3-64.3zM530 124c35.5 0 64.3 28.8 64.3 64.3v728.3c0 35.5-28.8 64.3-64.3 64.3s-64.3-28.8-64.3-64.3V188.3c0-35.5 28.8-64.3 64.3-64.3z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#2c2c2c" d="M571.904 196.266667L169.813333 303.900444A63.146667 63.146667 0 1 1 137.102222 181.873778L637.724444 47.729778a113.777778 113.777778 0 0 1 139.377778 80.440889l134.144 500.622222a63.146667 63.146667 0 0 1-122.083555 32.768L681.415111 259.413333 265.102222 980.48a63.203556 63.203556 0 1 1-109.454222-63.203556L571.904 196.209778z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#2c2c2c" d="M942.933333 311.466667l-384-192c-25.6-17.066667-55.466667-17.066667-81.066666 0l-384 192c0 4.266667-4.266667 8.533333-8.533334 8.533333-4.266667 17.066667 0 34.133333 12.8 38.4L234.666667 426.666667l-115.2 59.733333c-12.8 8.533333-21.333333 21.333333-21.333334 34.133333 0 12.8 8.533333 29.866667 21.333334 34.133334l98.133333 51.2-98.133333 51.2c-12.8 8.533333-21.333333 21.333333-21.333334 34.133333 0 12.8 8.533333 29.866667 21.333334 34.133333l358.4 179.2c12.8 8.533333 25.6 12.8 38.4 12.8 12.8 0 29.866667-4.266667 42.666666-12.8l358.4-179.2c12.8-8.533333 21.333333-21.333333 21.333334-34.133333 0-12.8-8.533333-29.866667-21.333334-34.133333l-98.133333-51.2 98.133333-51.2c12.8-8.533333 21.333333-21.333333 21.333334-34.133334 0-12.8-8.533333-29.866667-21.333334-34.133333L806.4 426.666667l136.533333-68.266667c4.266667-4.266667 8.533333-4.266667 8.533334-8.533333 4.266667-17.066667 0-34.133333-8.533334-38.4z m-81.066666 379.733333l-328.533334 166.4c-8.533333 4.266667-17.066667 4.266667-25.6 0l-328.533333-166.4 106.666667-55.466667 196.266666 98.133334c12.8 8.533333 25.6 12.8 38.4 12.8 12.8 0 29.866667-4.266667 42.666667-12.8l196.266667-98.133334 102.4 55.466667z m0-170.666667l-106.666667 55.466667-64 29.866667-162.133333 81.066666c-8.533333 4.266667-17.066667 4.266667-25.6 0L341.333333 605.866667l-64-29.866667L170.666667 520.533333l128-64 183.466666 93.866667c25.6 17.066667 55.466667 17.066667 81.066667 0l183.466667-93.866667 115.2 64z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#2c2c2c" d="M81.066667 712.533333l384 192c25.6 17.066667 55.466667 17.066667 81.06666599 0l384.00000001-192c0-4.266667 4.266667-8.533333 8.533334-8.533333 4.266667-17.066667 0-34.133333-12.8-38.4L789.333333 597.333333l115.2-59.733333c12.8-8.533333 21.333333-21.333333 21.333334-34.133333 0-12.8-8.533333-29.866667-21.333334-34.133334l-98.133333-51.2 98.13333301-51.2c12.8-8.533333 21.333333-21.333333 21.33333399-34.133333 0-12.8-8.533333-29.866667-21.333334-34.133333l-358.40000001-179.2c-12.8-8.533333-25.6-12.8-38.39999998-12.8-12.8 0-29.866667 4.266667-42.66666601 12.8l-358.4 179.2c-12.8 8.533333-21.333333 21.333333-21.333334 34.133333 0 12.8 8.533333 29.866667 21.33333399 34.133333l98.13333301 51.2-98.133333 51.2c-12.8 8.533333-21.333333 21.333333-21.333334 34.133334 0 12.8 8.533333 29.866667 21.333334 34.133333L217.59999999 597.333333l-136.53333298 68.266667c-4.266667 4.266667-8.533333 4.266667-8.53333401 8.533333-4.266667 17.066667 0 34.133333 8.533334 38.4z m81.066666-379.733333l328.533334-166.4c8.533333-4.266667 17.066667-4.266667 25.6 0l328.533333 166.4-106.666667 55.466667-196.266666-98.133334c-12.8-8.533333-25.6-12.8-38.4-12.79999999-12.8 0-29.866667 4.266667-42.666667 12.79999999l-196.266667 98.133334-102.4-55.466667z m0 170.666667l106.666667-55.466667 64-29.866667 162.133333-81.066666c8.533333-4.266667 17.066667-4.266667 25.6 0L682.666667 418.133333l64 29.866667L853.333333 503.466667l-128 64-183.466666-93.866667c-25.6-17.066667-55.466667-17.066667-81.066667 0l-183.466667 93.866667-115.2-64z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="icon" width="200px" height="176.55px" viewBox="0 0 1160 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#2c2c2c" d="M75.093333 6.826667h791.893334c40.96 0 68.266667 27.306667 68.266666 68.266666v648.533334c0 40.96-27.306667 68.266667-68.266666 68.266666H75.093333c-40.96 0-68.266667-27.306667-68.266666-68.266666V75.093333c0-34.133333 34.133333-68.266667 68.266666-68.266666z" /><path fill="#2c2c2c" d="M1044.48 1010.346667H402.773333c-40.96 0-68.266667-27.306667-68.266666-68.266667s27.306667-68.266667 68.266666-68.266667h614.4V402.773333c0-40.96 27.306667-68.266667 68.266667-68.266666s68.266667 27.306667 68.266667 68.266666v498.346667c0 61.44-47.786667 109.226667-109.226667 109.226667z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#2c2c2c" d="M875.76 751.32H771.98c-18.75 0-33.96-15.2-33.96-33.96s15.2-33.96 33.96-33.96h103.78c8.3 0 15.31-8.21 15.31-17.93V190.71c0-9.72-7.01-17.93-15.31-17.93H301.29c-8.3 0-15.31 8.21-15.31 17.93v115.93c0 18.75-15.2 33.96-33.96 33.96s-33.96-15.2-33.96-33.96V190.71c0-47.34 37.34-85.85 83.23-85.85h574.47c45.89 0 83.23 38.51 83.23 85.85v474.76c0 47.34-37.34 85.85-83.23 85.85z" /><path fill="#2c2c2c" d="M722.71 919.14H148.24c-45.89 0-83.23-38.51-83.23-85.85V358.53c0-47.34 37.34-85.85 83.23-85.85h574.47c45.89 0 83.23 38.51 83.23 85.85v474.76c0 47.34-37.34 85.85-83.23 85.85zM148.24 340.6c-8.3 0-15.31 8.21-15.31 17.93v474.76c0 9.72 7.01 17.93 15.31 17.93h574.47c8.3 0 15.31-8.21 15.31-17.93V358.53c0-9.72-7.01-17.93-15.31-17.93H148.24z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M959.008 406.016l-308-47.008L512 64 372.992 359.008l-308 47.008 223.008 228-52.992 324L512 805.024l276.992 152.992-52.992-324zM512 740L304 856.992l40-235.008-179.008-182.016 242.016-32 104.992-224 104 224 240.992 34.016L680 622.976l36.992 235.008z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#2c2c2c" d="M668.475077 0L327.561846 340.913231 0 668.475077 355.524923 1024 1024 355.524923 668.475077 0zM103.069538 676.627692l280.300308-280.260923 142.611692 142.572308 101.651693 101.691077-280.300308 280.300308-244.263385-244.263385z m344.65477 265.452308h573.44v78.651077H368.64l79.084308-78.651077z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#2c2c2c" d="M158.249312 479.384104h355.828639a30.245434 30.245434 0 0 1 29.652387 30.146594v355.828638L926.542649 97.560207z m355.828639 544.615501a32.321101 32.321101 0 0 1-6.91889-0.790731 29.652387 29.652387 0 0 1-23.227703-29.652386V539.677291H30.348685a30.146593 30.146593 0 0 1-13.640098-57.130265L980.213468 3.660982a29.652387 29.652387 0 0 1 40.228405 40.327246l-478.886044 963.208358a29.652387 29.652387 0 0 1-26.88483 16.803019z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="icon" width="200px" height="186.69px" viewBox="0 0 1097 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#2c2c2c" d="M1039.945143 98.230857L134.802286 1003.373714l-77.531429-77.604571L962.267429 20.626286z" /></svg>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { IPluginProps } from 'src/utils/types';
|
|
2
|
+
import Top from '../../assets/layer.svg'
|
|
3
|
+
import Bottom from '../../assets/layer_1.svg'
|
|
4
|
+
import With from '../../assets/tuceng.svg'
|
|
5
|
+
import Next from '../../assets/tuceng_1.svg'
|
|
6
|
+
|
|
7
|
+
import { ElIcon } from 'element-plus';
|
|
8
|
+
|
|
9
|
+
const LAYER_LIST = [
|
|
10
|
+
{ icon: Top, title: '置于顶层', type: 'top' },
|
|
11
|
+
{ icon: With, title: '置于上一层', type: 'next' },
|
|
12
|
+
{ icon: Next, title: '置于下一层', type: 'with' },
|
|
13
|
+
{ icon: Bottom, title: '置于底层', type: 'bottom' },
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
const Index = ({ drawingBoard }: IPluginProps) => {
|
|
17
|
+
const graphics = drawingBoard.getSelectedGraphics();
|
|
18
|
+
|
|
19
|
+
const getActiveLayer = (type) => {
|
|
20
|
+
const zIndex = graphics.value['zIndex']
|
|
21
|
+
|
|
22
|
+
if (zIndex >= 999 && type === 'top') {
|
|
23
|
+
return 'on'
|
|
24
|
+
} else if (zIndex <= -999 && type === 'bottom') {
|
|
25
|
+
return 'on'
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return ''
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<div className="toolbarMenuLayer">
|
|
33
|
+
{
|
|
34
|
+
LAYER_LIST.map(Layer => {
|
|
35
|
+
return (
|
|
36
|
+
<span
|
|
37
|
+
className={getActiveLayer(Layer.type)}
|
|
38
|
+
key={Layer.type}
|
|
39
|
+
title={Layer.title}
|
|
40
|
+
onClick={() => {
|
|
41
|
+
switch (Layer.type) {
|
|
42
|
+
case 'top':
|
|
43
|
+
graphics.value['zIndex'] = 999
|
|
44
|
+
break;
|
|
45
|
+
case 'next':
|
|
46
|
+
graphics.value['zIndex'] += 1
|
|
47
|
+
break;
|
|
48
|
+
case 'with':
|
|
49
|
+
graphics.value['zIndex'] -= 1
|
|
50
|
+
break;
|
|
51
|
+
case 'bottom':
|
|
52
|
+
graphics.value['zIndex'] = -999
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}}>
|
|
56
|
+
<ElIcon>
|
|
57
|
+
<Layer.icon />
|
|
58
|
+
</ElIcon>
|
|
59
|
+
</span>
|
|
60
|
+
)
|
|
61
|
+
})
|
|
62
|
+
}
|
|
63
|
+
</div>
|
|
64
|
+
)
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export default Index;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { IPluginProps } from '../../utils/types'
|
|
2
|
+
import { ElRow, ElCol, ElColorPicker } from 'element-plus'
|
|
3
|
+
const LineSegmentBackgroundColorPlugin = ({ drawingBoard }: IPluginProps) => {
|
|
4
|
+
const graphics = drawingBoard.getSelectedGraphics()
|
|
5
|
+
|
|
6
|
+
return (
|
|
7
|
+
<ElRow>
|
|
8
|
+
<ElCol span={24}>
|
|
9
|
+
<p class="text">填充颜色</p>
|
|
10
|
+
</ElCol>
|
|
11
|
+
|
|
12
|
+
<ElCol span={24} >
|
|
13
|
+
<ElColorPicker
|
|
14
|
+
show-alpha
|
|
15
|
+
modelValue={graphics.value['fill']}
|
|
16
|
+
onUpdate:modelValue={(val) => {
|
|
17
|
+
graphics.value['fill'] = val
|
|
18
|
+
}}
|
|
19
|
+
/>
|
|
20
|
+
</ElCol>
|
|
21
|
+
</ElRow >
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default LineSegmentBackgroundColorPlugin
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ElRow, ElCol, ElColorPicker } from 'element-plus'
|
|
2
|
+
import { IPluginProps } from '../../utils/types'
|
|
3
|
+
const LineSegmentColorPlugin = ({ drawingBoard }: IPluginProps) => {
|
|
4
|
+
const graphics = drawingBoard.getSelectedGraphics()
|
|
5
|
+
|
|
6
|
+
return (
|
|
7
|
+
<ElRow>
|
|
8
|
+
<ElCol span={24}>
|
|
9
|
+
<p class="text">线段颜色</p>
|
|
10
|
+
</ElCol>
|
|
11
|
+
|
|
12
|
+
<ElCol span={24} >
|
|
13
|
+
<ElColorPicker
|
|
14
|
+
show-alpha
|
|
15
|
+
modelValue={graphics.value['stroke']}
|
|
16
|
+
onUpdate:modelValue={(val) => {
|
|
17
|
+
graphics.value['stroke'] = val
|
|
18
|
+
}}
|
|
19
|
+
/>
|
|
20
|
+
</ElCol>
|
|
21
|
+
</ElRow >
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default LineSegmentColorPlugin
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { IPluginProps } from '../../utils/types'
|
|
2
|
+
import { ElRow, ElCol, ElSlider } from 'element-plus'
|
|
3
|
+
const LineSegmentPlugin = ({ drawingBoard }: IPluginProps) => {
|
|
4
|
+
const graphics = drawingBoard.getSelectedGraphics()
|
|
5
|
+
|
|
6
|
+
return (
|
|
7
|
+
<ElRow>
|
|
8
|
+
<ElCol span={24}>
|
|
9
|
+
<p class="text">线段粗细</p>
|
|
10
|
+
</ElCol>
|
|
11
|
+
|
|
12
|
+
<ElCol span={24} >
|
|
13
|
+
<ElSlider
|
|
14
|
+
modelValue={graphics.value['strokeWidth']}
|
|
15
|
+
onUpdate:modelValue={(val) => {
|
|
16
|
+
graphics.value['strokeWidth'] = val
|
|
17
|
+
}}
|
|
18
|
+
max={20}
|
|
19
|
+
min={1}
|
|
20
|
+
/>
|
|
21
|
+
</ElCol>
|
|
22
|
+
</ElRow >
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default LineSegmentPlugin
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { IPluginProps } from '../../utils/types'
|
|
2
|
+
import { ElRow, ElCol, ElColorPicker } from 'element-plus'
|
|
3
|
+
const TextColor = ({ drawingBoard }: IPluginProps) => {
|
|
4
|
+
const graphics = drawingBoard.getSelectedGraphics()
|
|
5
|
+
|
|
6
|
+
return (
|
|
7
|
+
<ElRow>
|
|
8
|
+
<ElCol span={24}>
|
|
9
|
+
<p class="text">文字颜色</p>
|
|
10
|
+
</ElCol>
|
|
11
|
+
|
|
12
|
+
<ElCol span={24} >
|
|
13
|
+
<ElColorPicker
|
|
14
|
+
show-alpha
|
|
15
|
+
modelValue={graphics.value['fill']}
|
|
16
|
+
onUpdate:modelValue={(val) => {
|
|
17
|
+
graphics.value['fill'] = val
|
|
18
|
+
}}
|
|
19
|
+
/>
|
|
20
|
+
</ElCol>
|
|
21
|
+
</ElRow >
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default TextColor
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { IPluginProps } from '../../utils/types'
|
|
2
|
+
import { ElRow, ElCol, ElSlider } from 'element-plus'
|
|
3
|
+
const TextSize = ({ drawingBoard }: IPluginProps) => {
|
|
4
|
+
const graphics = drawingBoard.getSelectedGraphics()
|
|
5
|
+
|
|
6
|
+
return (
|
|
7
|
+
<ElRow>
|
|
8
|
+
<ElCol span={24}>
|
|
9
|
+
<p class="text">文字大小</p>
|
|
10
|
+
</ElCol>
|
|
11
|
+
|
|
12
|
+
<ElCol span={24} >
|
|
13
|
+
<ElSlider
|
|
14
|
+
show-alpha
|
|
15
|
+
modelValue={graphics.value['fontSize']}
|
|
16
|
+
onUpdate:modelValue={(val) => {
|
|
17
|
+
graphics.value['fontSize'] = val
|
|
18
|
+
}}
|
|
19
|
+
max={100}
|
|
20
|
+
min={12}
|
|
21
|
+
/>
|
|
22
|
+
</ElCol>
|
|
23
|
+
</ElRow >
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default TextSize
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import './Menu.scss';
|
|
2
|
+
|
|
3
|
+
import { defineComponent } from 'vue';
|
|
4
|
+
import { ElTooltip, ElButton } from 'element-plus'
|
|
5
|
+
import { ArrowLeft, ArrowRight, DeleteFilled, Download } from '@element-plus/icons-vue'
|
|
6
|
+
|
|
7
|
+
import App from '../../utils/App'
|
|
8
|
+
|
|
9
|
+
export default defineComponent({
|
|
10
|
+
name: 'appMenu',
|
|
11
|
+
setup() {
|
|
12
|
+
|
|
13
|
+
return () => (
|
|
14
|
+
<section class="appMenu">
|
|
15
|
+
<ElTooltip effect="dark" content="撤销" placement="top-start">
|
|
16
|
+
<ElButton onClick={() => App.drawingBoardInstance.historyBack()} icon={ArrowLeft} circle></ElButton>
|
|
17
|
+
</ElTooltip>
|
|
18
|
+
|
|
19
|
+
<ElTooltip effect="dark" content="取消撤销" placement="top-start">
|
|
20
|
+
<ElButton onClick={() => App.drawingBoardInstance.historyUnBack()} icon={ArrowRight} circle></ElButton>
|
|
21
|
+
</ElTooltip>
|
|
22
|
+
|
|
23
|
+
<ElTooltip effect="dark" content="清空白板" placement="top-start">
|
|
24
|
+
<ElButton onClick={() => App.drawingBoardInstance.leaferInstanceReadonly.tree.clear()} icon={DeleteFilled} circle></ElButton>
|
|
25
|
+
</ElTooltip>
|
|
26
|
+
|
|
27
|
+
<ElTooltip effect="dark" content="导出为图片" placement="top-start">
|
|
28
|
+
<ElButton onClick={() => App.drawingBoardInstance.leaferInstanceReadonly.export('画板.png')} icon={Download} circle></ElButton>
|
|
29
|
+
</ElTooltip>
|
|
30
|
+
</section >
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
})
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
.toolsTitle {
|
|
2
|
+
position: absolute;
|
|
3
|
+
display: flex;
|
|
4
|
+
bottom: 2%;
|
|
5
|
+
right: 1%;
|
|
6
|
+
border: 1px solid #dcdfe6;
|
|
7
|
+
border-radius: 10px;
|
|
8
|
+
padding: 20px;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
|
11
|
+
|
|
12
|
+
&:hover {
|
|
13
|
+
transform: scale(1.05);
|
|
14
|
+
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.5), 0 6px 20px rgba(0, 0, 0, 0.3);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.toolbar {
|
|
2
|
+
position: absolute;
|
|
3
|
+
display: flex;
|
|
4
|
+
top: 5%;
|
|
5
|
+
// width: 300px;
|
|
6
|
+
height: 40px;
|
|
7
|
+
left: 50%;
|
|
8
|
+
transform: translateX(-50%);
|
|
9
|
+
border: 1px solid #dcdfe6;
|
|
10
|
+
border-radius: 10px;
|
|
11
|
+
padding: 10px 20px;
|
|
12
|
+
|
|
13
|
+
&-item {
|
|
14
|
+
padding: 10px;
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.active {
|
|
19
|
+
background-color: #3f85ed;
|
|
20
|
+
border-radius: 5px;
|
|
21
|
+
|
|
22
|
+
path {
|
|
23
|
+
fill: #ffffff;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import './Toolbar.scss';
|
|
2
|
+
|
|
3
|
+
import { toolBarOptions } from '../../utils/Tools'
|
|
4
|
+
import { ElIcon } from 'element-plus';
|
|
5
|
+
import App from '../../utils/App';
|
|
6
|
+
import { computed, defineComponent } from 'vue';
|
|
7
|
+
|
|
8
|
+
export default defineComponent({
|
|
9
|
+
name: 'Toolbar',
|
|
10
|
+
setup() {
|
|
11
|
+
const getClass = computed(() => (idx: number) => {
|
|
12
|
+
if (!App.drawingBoardInstance) return '';
|
|
13
|
+
|
|
14
|
+
return App.drawingBoardInstance?.tools?.toolbarActiveIndex.value === idx ? 'active' : ''
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
const clickHandler = (index: number) => {
|
|
18
|
+
if (App.drawingBoardInstance?.tools?.toolbarActiveIndex.value === index) return;
|
|
19
|
+
|
|
20
|
+
App.drawingBoardInstance.tools.toolbarActiveIndex.value = index;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return () => (
|
|
24
|
+
<section className="toolbar">
|
|
25
|
+
{
|
|
26
|
+
toolBarOptions.map((item, index) => {
|
|
27
|
+
return (
|
|
28
|
+
<div className={`toolbar-item ${getClass.value(index)}`} key={index} title={item.title} onClick={() => clickHandler(index)}>
|
|
29
|
+
<ElIcon>
|
|
30
|
+
<item.icon />
|
|
31
|
+
</ElIcon>
|
|
32
|
+
</div>
|
|
33
|
+
)
|
|
34
|
+
})
|
|
35
|
+
}
|
|
36
|
+
</section>
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
})
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
.toolbarMenu {
|
|
2
|
+
position: absolute;
|
|
3
|
+
width: 200px;
|
|
4
|
+
max-height: 500px;
|
|
5
|
+
overflow-y: auto;
|
|
6
|
+
border: 1px solid #dcdfe6;
|
|
7
|
+
padding: 10px 20px;
|
|
8
|
+
border-radius: 10px;
|
|
9
|
+
top: 20%;
|
|
10
|
+
right: 5%;
|
|
11
|
+
|
|
12
|
+
.toolbarMenuOption {
|
|
13
|
+
margin-top: 10px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.toolbarMenuLayer {
|
|
17
|
+
margin: 20px 0 10px;
|
|
18
|
+
display: flex;
|
|
19
|
+
justify-content: center;
|
|
20
|
+
gap: 30px;
|
|
21
|
+
|
|
22
|
+
.on {
|
|
23
|
+
background-color: #3f85ed;
|
|
24
|
+
border-radius: 5px;
|
|
25
|
+
|
|
26
|
+
path {
|
|
27
|
+
fill: #ffffff;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.el-icon {
|
|
32
|
+
border: 1px dashed #409eff;
|
|
33
|
+
padding: 2px;
|
|
34
|
+
box-sizing: border-box;
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
width: 25px;
|
|
37
|
+
height: 25px;
|
|
38
|
+
|
|
39
|
+
svg {
|
|
40
|
+
width: 100%;
|
|
41
|
+
height: 100%;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import './ToolbarMenu.scss'
|
|
2
|
+
|
|
3
|
+
import { computed, defineComponent } from 'vue';
|
|
4
|
+
import App from '../../utils/App';
|
|
5
|
+
import { toolBarOptions } from '../../utils/Tools'
|
|
6
|
+
import LayerOptions from '../plugins/LayerOptions'
|
|
7
|
+
|
|
8
|
+
export default defineComponent({
|
|
9
|
+
name: 'ToolbarMenu',
|
|
10
|
+
setup() {
|
|
11
|
+
const activeGraphics = computed(() => {
|
|
12
|
+
if (App.drawingBoardInstance.tools.toolbarActiveIndex.value) {
|
|
13
|
+
return toolBarOptions[App.drawingBoardInstance.tools.toolbarActiveIndex.value]
|
|
14
|
+
} else if (App.drawingBoardInstance.selectedGraphics.value) {
|
|
15
|
+
return toolBarOptions.find(v => {
|
|
16
|
+
return v.name === App.drawingBoardInstance.selectedGraphics.value.name
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
// const changeGraphicsZIndex = (type: string) => {
|
|
22
|
+
// const graphics = App.drawingBoardInstance.getSelectedGraphics();
|
|
23
|
+
|
|
24
|
+
// graphics
|
|
25
|
+
// }
|
|
26
|
+
|
|
27
|
+
return () => (
|
|
28
|
+
<div>
|
|
29
|
+
{
|
|
30
|
+
activeGraphics.value?.menuPlugins?.length ? < section className="toolbarMenu" >
|
|
31
|
+
{
|
|
32
|
+
activeGraphics.value?.menuPlugins?.map(menuPlugin => {
|
|
33
|
+
return (
|
|
34
|
+
<div className="toolbarMenuOption">
|
|
35
|
+
<menuPlugin drawingBoard={App.drawingBoardInstance} />
|
|
36
|
+
</div>
|
|
37
|
+
)
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
<LayerOptions drawingBoard={App.drawingBoardInstance} />
|
|
42
|
+
|
|
43
|
+
{/* <div className="toolbarMenuLayer">
|
|
44
|
+
{
|
|
45
|
+
LAYER_LIST.map(Layer => {
|
|
46
|
+
return (
|
|
47
|
+
<span title={Layer.title} onClick={() => changeGraphicsZIndex(Layer.type)} key={Layer.type}>
|
|
48
|
+
<ElIcon>
|
|
49
|
+
<Layer.icon />
|
|
50
|
+
</ElIcon>
|
|
51
|
+
</span>
|
|
52
|
+
)
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
</div> */}
|
|
56
|
+
</section > : null
|
|
57
|
+
}
|
|
58
|
+
</div>
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
})
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import App from "../../utils/App"
|
|
2
|
+
import Toolbar from "./Toolbar"
|
|
3
|
+
import ToolbarMenu from "./ToolbarMenu"
|
|
4
|
+
import Menu from "./Menu"
|
|
5
|
+
import Tips from "./Tips"
|
|
6
|
+
|
|
7
|
+
const Index = () => {
|
|
8
|
+
return (
|
|
9
|
+
<div className="toolsIndex">
|
|
10
|
+
<Toolbar />
|
|
11
|
+
|
|
12
|
+
{
|
|
13
|
+
App.drawingBoardInstance?.tools?.toolbarActiveIndex ? <ToolbarMenu /> : null
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
<Menu />
|
|
17
|
+
<Tips content="HUY 画板" />
|
|
18
|
+
</div>
|
|
19
|
+
)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default Index
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createApp } from 'vue'
|
|
2
|
+
import App from './App.vue'
|
|
3
|
+
import ElementPlus from 'element-plus'
|
|
4
|
+
import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
|
5
|
+
|
|
6
|
+
import 'element-plus/dist/index.css'
|
|
7
|
+
import './main.scss'
|
|
8
|
+
|
|
9
|
+
createApp(App)
|
|
10
|
+
.use(ElementPlus, { locale: zhCn })
|
|
11
|
+
.mount('#app')
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import DrawingBoard from "./DrawingBoard";
|
|
2
|
+
import { IAppProps } from "./types";
|
|
3
|
+
|
|
4
|
+
class App {
|
|
5
|
+
static drawingBoardInstance: null | DrawingBoard = null;
|
|
6
|
+
|
|
7
|
+
static init = ({
|
|
8
|
+
domId,
|
|
9
|
+
onChange,
|
|
10
|
+
config = {}
|
|
11
|
+
}: IAppProps) => {
|
|
12
|
+
this.drawingBoardInstance = new DrawingBoard({
|
|
13
|
+
domId,
|
|
14
|
+
onChange,
|
|
15
|
+
config
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
static destroy() {
|
|
20
|
+
this.drawingBoardInstance && this.drawingBoardInstance.destroy();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default App
|