@zhangqingcq/vgce 0.0.20 → 0.0.22

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 (56) hide show
  1. package/README.md +1 -1
  2. package/dist/style.css +2 -2
  3. package/dist/vgce.js +15858 -15276
  4. package/dist/vgce.umd.cjs +82 -129
  5. package/package.json +13 -15
  6. package/src/assets/base.less +79 -31
  7. package/src/assets/icons/delete-gray.svg +1 -0
  8. package/src/assets/icons/delete.svg +1 -12
  9. package/src/assets/icons/export.svg +1 -1
  10. package/src/assets/icons/import.svg +1 -1
  11. package/src/assets/icons/line-active.svg +1 -0
  12. package/src/assets/icons/line.svg +1 -0
  13. package/src/assets/icons/menu-fold.svg +1 -9
  14. package/src/assets/icons/menu-unfold.svg +1 -9
  15. package/src/assets/icons/preview.svg +1 -6
  16. package/src/assets/icons/question.svg +1 -0
  17. package/src/assets/icons/redo-gray.svg +1 -0
  18. package/src/assets/icons/redo.svg +1 -8
  19. package/src/assets/icons/return.svg +1 -8
  20. package/src/assets/icons/rotate.svg +1 -1
  21. package/src/assets/icons/save.svg +1 -9
  22. package/src/assets/icons/undo-gray.svg +1 -0
  23. package/src/assets/icons/undo.svg +1 -7
  24. package/src/assets/svgs/sheet-border.svg +1 -0
  25. package/src/assets/svgs/svg-text.svg +1 -5
  26. package/src/components/svg-analysis/index.vue +1 -1
  27. package/src/components/svg-editor/center-panel/index.vue +508 -176
  28. package/src/components/svg-editor/component-tree/index.vue +4 -0
  29. package/src/components/svg-editor/connection-line/index.vue +12 -8
  30. package/src/components/svg-editor/connection-panel/index.vue +121 -181
  31. package/src/components/svg-editor/handle-panel/index.vue +32 -24
  32. package/src/components/svg-editor/index.vue +24 -25
  33. package/src/components/svg-editor/left-panel/index.vue +2 -2
  34. package/src/components/svg-editor/right-panel/bind-anchor.vue +124 -0
  35. package/src/components/svg-editor/right-panel/code-edit-modal.vue +1 -1
  36. package/src/components/svg-editor/right-panel/dynamic-el-form-item.vue +8 -1
  37. package/src/components/svg-editor/right-panel/index.vue +117 -56
  38. package/src/components/svg-editor/top-panel/index.vue +109 -25
  39. package/src/components/svg-viewer/index.vue +31 -21
  40. package/src/components/vue3-ruler-tool/index.vue +329 -372
  41. package/src/config/files/clock-a.vue +64 -64
  42. package/src/config/svg/animation/index.ts +1 -1
  43. package/src/config/svg/custom/svg-text.ts +2 -2
  44. package/src/config/svg/stateful/index.ts +1 -1
  45. package/src/config/svg/stateless/index.ts +3 -2
  46. package/src/config/svg/stateless/sheet-border.ts +22 -0
  47. package/src/config/types.ts +1 -0
  48. package/src/stores/config/index.ts +1 -8
  49. package/src/stores/config/types.ts +0 -8
  50. package/src/stores/global/index.ts +0 -10
  51. package/src/stores/global/types.ts +33 -10
  52. package/src/stores/svg-edit-layout/index.ts +7 -0
  53. package/src/stores/svg-edit-layout/types.ts +1 -0
  54. package/src/utils/index.ts +227 -103
  55. package/src/utils/scale-core.ts +1 -0
  56. package/src/views/EditorS.vue +1 -1
@@ -8,6 +8,10 @@
8
8
  const global_store = useGlobalStore(pinia)
9
9
  const current_node_key = ref(global_store.handle_svg_info?.info.id || '')
10
10
  const handleNodeClick = (data: IDoneJson) => {
11
+ for (let e of global_store.done_json) {
12
+ e.selected = false
13
+ e.old_position = { x: 0, y: 0 }
14
+ }
11
15
  global_store.intention = EGlobalStoreIntention.Select
12
16
  global_store.setHandleSvgInfo(data)
13
17
  }
@@ -5,9 +5,13 @@
5
5
  import { pinia } from '@/hooks'
6
6
  import { useGlobalStore } from '@/stores/global'
7
7
  import { EConfigAnimationsType } from '@/config/types'
8
+ import { useConfigStore } from '@/stores/config'
9
+ import { useSvgEditLayoutStore } from '@/stores/svg-edit-layout'
8
10
 
9
11
  const props = withDefaults(defineProps<{ itemInfo: IDoneJson; pointVisible: boolean }>(), { pointVisible: false })
10
12
  const globalStore = useGlobalStore(pinia)
13
+ const configStore = useConfigStore(pinia)
14
+ const svgEditLayoutStore = useSvgEditLayoutStore(pinia)
11
15
  const setConnectionLineNode = (point_index: number, e: MouseEvent, x: number, y: number) => {
12
16
  if (globalStore.intention === EGlobalStoreIntention.Connection) {
13
17
  return
@@ -23,15 +27,15 @@
23
27
  point_index: point_index
24
28
  }
25
29
  globalStore.intention = EGlobalStoreIntention.SetConnectionLineNode
26
- globalStore.setMouseInfo({
30
+ globalStore.mouse_info = {
27
31
  state: EMouseInfoState.Down,
28
- position_x: clientX,
29
- position_y: clientY,
30
- now_position_x: clientX,
31
- now_position_y: clientY,
32
+ position_x: Math.round((clientX - svgEditLayoutStore.canvasInfo.left) / configStore.svg.scale),
33
+ position_y: Math.round((clientY - svgEditLayoutStore.canvasInfo.top) / configStore.svg.scale),
34
+ now_position_x: 0,
35
+ now_position_y: 0,
32
36
  new_position_x: 0,
33
37
  new_position_y: 0
34
- })
38
+ }
35
39
  }
36
40
  </script>
37
41
 
@@ -47,7 +51,7 @@
47
51
  : props.itemInfo.props.stroke.val
48
52
  "
49
53
  :stroke-width="props.itemInfo.props['stroke-width'].val"
50
- style="cursor: move"
54
+ :style="{ cursor: globalStore.intention === EGlobalStoreIntention.Connection ? 'crosshair' : 'move' }"
51
55
  stroke-dashoffset="0"
52
56
  :stroke-dasharray="
53
57
  props.itemInfo.animations?.type.val === EConfigAnimationsType.Electricity
@@ -107,7 +111,7 @@
107
111
  </animateMotion>
108
112
  </circle>
109
113
  <!-- 更改线段 -->
110
- <g v-if="props.pointVisible">
114
+ <g>
111
115
  <circle
112
116
  v-for="(item, index) in props.itemInfo.props.point_position.val"
113
117
  :key="index"
@@ -1,197 +1,137 @@
1
1
  <!-- 连线组件 -->
2
2
  <script lang="ts" setup>
3
- import { straight_line_system } from '@/components/config'
4
3
  import { ELineBindAnchors } from '@/components/config/types'
5
- import type { ISystemStraightLine } from '@/components/config/types'
6
- import { pinia } from '@/hooks'
7
- import { useConfigStore } from '@/stores/config'
8
- import { useGlobalStore } from '@/stores/global'
9
- import { EGlobalStoreIntention, EMouseInfoState } from '@/stores/global/types'
10
4
  import type { IDoneJson } from '@/stores/global/types'
11
- import { getAnchorPosByAnchorType, getCoordinateOffset, objectDeepClone, randomString } from '@/utils'
5
+ import { EGlobalStoreIntention } from '@/stores/global/types'
6
+ import { createLine, getCoordinateOffset, moveAnchors } from '@/utils'
7
+ import { useGlobalStore } from '@/stores/global'
8
+ import { pinia } from '@/hooks'
12
9
 
13
- const props = defineProps<{ itemInfo: IDoneJson }>()
14
- const globalStore = useGlobalStore(pinia)
15
- const configStore = useConfigStore(pinia)
10
+ const props = defineProps<{
11
+ itemInfo: IDoneJson
12
+ }>()
16
13
  const offset = ref(4)
17
- const fill = ref('#4F80FF')
14
+ const fill = ref('#ab712e')
18
15
  const radius = ref(4)
19
- /**
20
- * 点了连线
21
- * @param bind_anchor_type 绑定锚点类型
22
- * @param e
23
- */
24
- const onConnectionMouseDown = (bind_anchor_type: ELineBindAnchors, e: MouseEvent) => {
25
- e.preventDefault()
16
+ const outRadius = ref(12)
17
+ const globalStore = useGlobalStore(pinia)
26
18
 
27
- const { clientX, clientY } = e
28
- let create_line_info = objectDeepClone<ISystemStraightLine>(configStore.connection_line)
29
- console.log('onConnectionMouseDown', configStore.connection_line, e)
30
- //以后顶部可以选择连线是哪种 直线先不做
31
- /*if (false) {
32
- create_line_info = straight_line_system
33
- }*/
34
- create_line_info.bind_anchors.start = {
35
- type: bind_anchor_type,
36
- target_id: props.itemInfo.id
37
- }
38
- const { x, y } = getAnchorPosByAnchorType(bind_anchor_type, props.itemInfo)
39
- const done_item_json = {
40
- id: straight_line_system.name + randomString(),
41
- x: x,
42
- y: y,
43
- client: {
44
- x: clientX,
45
- y: clientY
46
- },
47
- scale_x: 1,
48
- scale_y: 1,
49
- rotate: 0,
50
- actual_bound: {
51
- x: 0,
52
- y: 0,
53
- width: 0,
54
- height: 0
55
- },
56
- point_coordinate: {
57
- tl: {
58
- x: 0,
59
- y: 0
60
- },
61
- tc: {
62
- x: 0,
63
- y: 0
64
- },
65
- tr: {
66
- x: 0,
67
- y: 0
68
- },
69
- l: {
70
- x: 0,
71
- y: 0
72
- },
73
- r: {
74
- x: 0,
75
- y: 0
76
- },
77
- bl: {
78
- x: 0,
79
- y: 0
80
- },
81
- bc: {
82
- x: 0,
83
- y: 0
84
- },
85
- br: {
86
- x: 0,
87
- y: 0
19
+ const cxT = computed(
20
+ () => props.itemInfo.actual_bound.x + props.itemInfo.actual_bound.width / 2 - offset.value + radius.value
21
+ )
22
+
23
+ const cyT = computed(
24
+ () =>
25
+ props.itemInfo.actual_bound.y -
26
+ offset.value -
27
+ getCoordinateOffset(props.itemInfo.actual_bound.height, props.itemInfo.scale_y) +
28
+ radius.value
29
+ )
30
+
31
+ const cxR = computed(
32
+ () =>
33
+ props.itemInfo.actual_bound.x -
34
+ offset.value +
35
+ props.itemInfo.actual_bound.width +
36
+ getCoordinateOffset(props.itemInfo.actual_bound.width, props.itemInfo.scale_x) +
37
+ radius.value
38
+ )
39
+
40
+ const cyR = computed(
41
+ () =>
42
+ props.itemInfo.actual_bound.y -
43
+ offset.value +
44
+ (props.itemInfo.actual_bound.height * props.itemInfo.scale_y) / 2 -
45
+ getCoordinateOffset(props.itemInfo.actual_bound.height, props.itemInfo.scale_y) +
46
+ radius.value
47
+ )
48
+
49
+ const cxB = computed(
50
+ () => props.itemInfo.actual_bound.x - offset.value + props.itemInfo.actual_bound.width / 2 + radius.value
51
+ )
52
+ const cyB = computed(
53
+ () =>
54
+ props.itemInfo.actual_bound.y -
55
+ offset.value +
56
+ props.itemInfo.actual_bound.height +
57
+ getCoordinateOffset(props.itemInfo.actual_bound.height, props.itemInfo.scale_y) +
58
+ radius.value
59
+ )
60
+
61
+ const cxL = computed(
62
+ () =>
63
+ props.itemInfo.actual_bound.x -
64
+ offset.value -
65
+ getCoordinateOffset(props.itemInfo.actual_bound.width, props.itemInfo.scale_x) +
66
+ radius.value
67
+ )
68
+ const cyL = computed(
69
+ () =>
70
+ props.itemInfo.actual_bound.y -
71
+ offset.value +
72
+ (props.itemInfo.actual_bound.height * props.itemInfo.scale_y) / 2 -
73
+ getCoordinateOffset(props.itemInfo.actual_bound.height, props.itemInfo.scale_y) +
74
+ radius.value
75
+ )
76
+ const bindAnchor = (e: any, type: ELineBindAnchors) => {
77
+ if (globalStore.intention === EGlobalStoreIntention.None) {
78
+ createLine(e, type, props.itemInfo)
79
+ } else if (globalStore.intention === EGlobalStoreIntention.Connection) {
80
+ //点击锚上在连线的情况下点击结束连线并绑定锚点
81
+ e.stopPropagation()
82
+ if (globalStore.handle_svg_info?.info.bind_anchors) {
83
+ globalStore.handle_svg_info.info.bind_anchors.end = {
84
+ type: type,
85
+ target_id: props.itemInfo.id
88
86
  }
89
- },
90
- ...create_line_info
87
+ globalStore.intention = EGlobalStoreIntention.None
88
+ globalStore.setHandleSvgInfo(null)
89
+ nextTick(function () {
90
+ moveAnchors(props.itemInfo)
91
+ })
92
+ }
91
93
  }
92
- done_item_json.props.point_position.val.push({
93
- x: configStore.svg.svg_position_center.x,
94
- y: configStore.svg.svg_position_center.y
95
- })
96
- globalStore.setHandleSvgInfo(done_item_json, globalStore.done_json.length)
97
- globalStore.setDoneJson(done_item_json)
98
-
99
- globalStore.intention = EGlobalStoreIntention.Connection
100
- globalStore.setMouseInfo({
101
- state: EMouseInfoState.Down,
102
- position_x: clientX,
103
- position_y: clientY,
104
- now_position_x: clientX,
105
- now_position_y: clientY,
106
- new_position_x: 0,
107
- new_position_y: 0
108
- })
109
94
  }
110
95
  </script>
111
96
 
112
97
  <template>
113
- <g style="vector-effect: non-scaling-stroke">
114
- <circle
115
- id="connection_tc"
116
- :cx="props.itemInfo.actual_bound.x + props.itemInfo.actual_bound.width / 2 - offset + radius"
117
- :cy="
118
- props.itemInfo.actual_bound.y -
119
- offset -
120
- getCoordinateOffset(props.itemInfo.actual_bound.height, props.itemInfo.scale_y) +
121
- radius
122
- "
123
- :r="radius"
124
- stroke="rgba(0,0,0,0)"
125
- stroke-width="2"
126
- :fill="fill"
127
- :style="{ 'vector-effect': 'non-scaling-stroke', cursor: 'pointer' }"
128
- pointer-events="all"
129
- @mousedown="onConnectionMouseDown(ELineBindAnchors.TopCenter, $event)"
130
- />
131
- <circle
132
- id="connection_l"
133
- :cx="
134
- props.itemInfo.actual_bound.x -
135
- offset -
136
- getCoordinateOffset(props.itemInfo.actual_bound.width, props.itemInfo.scale_x) +
137
- radius
138
- "
139
- :cy="
140
- props.itemInfo.actual_bound.y -
141
- offset +
142
- (props.itemInfo.actual_bound.height * props.itemInfo.scale_y) / 2 -
143
- getCoordinateOffset(props.itemInfo.actual_bound.height, props.itemInfo.scale_y) +
144
- radius
145
- "
146
- :r="radius"
147
- stroke="rgba(0,0,0,0)"
148
- stroke-width="2"
149
- :fill="fill"
150
- :style="{ 'vector-effect': 'non-scaling-stroke', cursor: 'pointer' }"
151
- pointer-events="all"
152
- @mousedown="onConnectionMouseDown(ELineBindAnchors.Left, $event)"
153
- />
154
- <circle
155
- id="connection_r"
156
- :cx="
157
- props.itemInfo.actual_bound.x -
158
- offset +
159
- props.itemInfo.actual_bound.width +
160
- getCoordinateOffset(props.itemInfo.actual_bound.width, props.itemInfo.scale_x) +
161
- radius
162
- "
163
- :cy="
164
- props.itemInfo.actual_bound.y -
165
- offset +
166
- (props.itemInfo.actual_bound.height * props.itemInfo.scale_y) / 2 -
167
- getCoordinateOffset(props.itemInfo.actual_bound.height, props.itemInfo.scale_y) +
168
- radius
169
- "
170
- :r="radius"
171
- stroke="rgba(0,0,0,0)"
172
- stroke-width="2"
173
- :fill="fill"
174
- :style="{ 'vector-effect': 'non-scaling-stroke', cursor: 'pointer' }"
175
- pointer-events="all"
176
- @mousedown="onConnectionMouseDown(ELineBindAnchors.Right, $event)"
177
- />
178
- <circle
179
- id="connection_bc"
180
- :cx="props.itemInfo.actual_bound.x - offset + props.itemInfo.actual_bound.width / 2 + radius"
181
- :cy="
182
- props.itemInfo.actual_bound.y -
183
- offset +
184
- props.itemInfo.actual_bound.height +
185
- getCoordinateOffset(props.itemInfo.actual_bound.height, props.itemInfo.scale_y) +
186
- radius
187
- "
188
- :r="radius"
189
- stroke="rgba(0,0,0,0)"
190
- stroke-width="2"
191
- :fill="fill"
192
- :style="{ 'vector-effect': 'non-scaling-stroke', cursor: 'pointer' }"
193
- pointer-events="all"
194
- @mousedown="onConnectionMouseDown(ELineBindAnchors.BottomCenter, $event)"
195
- />
98
+ <g
99
+ style="vector-effect: non-scaling-stroke"
100
+ class="connect-points"
101
+ :fill="fill"
102
+ stroke-width="2"
103
+ stroke="rgba(0,0,0,0)"
104
+ >
105
+ <g @mousedown="bindAnchor($event, ELineBindAnchors.TopCenter)">
106
+ <circle class="out-circle" :cx="cxT" :cy="cyT" :r="outRadius" fill-opacity=".3" />
107
+ <circle id="connection_tc" :cx="cxT" :cy="cyT" :r="radius" pointer-events="all" />
108
+ </g>
109
+ <g @mousedown="bindAnchor($event, ELineBindAnchors.Right)">
110
+ <circle class="out-circle" :cx="cxR" :cy="cyR" :r="outRadius" fill-opacity=".3" />
111
+ <circle id="connection_r" :cx="cxR" :cy="cyR" :r="radius" pointer-events="all" />
112
+ </g>
113
+ <g @mousedown="bindAnchor($event, ELineBindAnchors.BottomCenter)">
114
+ <circle class="out-circle" :cx="cxB" :cy="cyB" :r="outRadius" fill-opacity=".3" />
115
+ <circle id="connection_bc" :cx="cxB" :cy="cyB" :r="radius" pointer-events="all" />
116
+ </g>
117
+ <g @mousedown="bindAnchor($event, ELineBindAnchors.Left)">
118
+ <circle class="out-circle" :cx="cxL" :cy="cyL" :r="outRadius" fill-opacity=".3" />
119
+ <circle id="connection_l" :cx="cxL" :cy="cyL" :r="radius" :style="{ cursor: 'crosshair' }" pointer-events="all" />
120
+ </g>
196
121
  </g>
197
122
  </template>
123
+ <style lang="less" scoped>
124
+ .connect-points g {
125
+ cursor: crosshair;
126
+
127
+ &:hover {
128
+ .out-circle {
129
+ visibility: visible;
130
+ }
131
+ }
132
+
133
+ .out-circle {
134
+ visibility: hidden;
135
+ }
136
+ }
137
+ </style>
@@ -6,12 +6,14 @@
6
6
  import { EGlobalStoreIntention, EMouseInfoState, EScaleInfoType } from '@/stores/global/types'
7
7
  import type { IDoneJson } from '@/stores/global/types'
8
8
  import { getCoordinateOffset } from '@/utils'
9
+ import { useConfigStore } from '@/stores/config'
9
10
 
10
11
  const props = defineProps<{ itemInfo: IDoneJson }>()
11
12
  const globalStore = useGlobalStore(pinia)
13
+ const configStore = useConfigStore(pinia)
12
14
  const svgEditLayoutStore = useSvgEditLayoutStore(pinia)
13
15
  const offset = ref(4)
14
- const fill = ref('#4F80FF')
16
+ const fill = ref('#ab712e')
15
17
  const angle_to_cursor = [
16
18
  {
17
19
  start: 338,
@@ -63,20 +65,26 @@
63
65
  }
64
66
  ]
65
67
  const onHandleMouseDown = (type: EScaleInfoType, e: MouseEvent) => {
66
- console.log('onHandleMouseDown', e)
68
+ console.log('handMousedown', e)
67
69
  const { clientX, clientY } = e
68
70
  e.stopPropagation()
69
71
  globalStore.intention = EGlobalStoreIntention.Zoom
70
- globalStore.setMouseInfo({
72
+ const x = Math.round(
73
+ (clientX - svgEditLayoutStore.canvasInfo.left) / configStore.svg.scale - svgEditLayoutStore.center_offset.x
74
+ )
75
+ const y = Math.round(
76
+ (clientY - svgEditLayoutStore.canvasInfo.top) / configStore.svg.scale - svgEditLayoutStore.center_offset.y
77
+ )
78
+ globalStore.mouse_info = {
71
79
  state: EMouseInfoState.Down,
72
- position_x: clientX - svgEditLayoutStore.center_offset.x,
73
- position_y: clientY - svgEditLayoutStore.center_offset.y,
74
- now_position_x: clientX - svgEditLayoutStore.center_offset.x,
75
- now_position_y: clientY - svgEditLayoutStore.center_offset.y,
80
+ position_x: x,
81
+ position_y: y,
82
+ now_position_x: x,
83
+ now_position_y: y,
76
84
  new_position_x: 0,
77
85
  new_position_y: 0
78
- })
79
- globalStore.setScaleInfo({
86
+ }
87
+ globalStore.scale_info = {
80
88
  type: type,
81
89
  scale_times: {
82
90
  x: props.itemInfo.scale_x,
@@ -87,33 +95,33 @@
87
95
  y: props.itemInfo.y
88
96
  },
89
97
  symmetric_point: {
90
- x:
91
- props.itemInfo.client.x +
92
- Math.abs(clientX - svgEditLayoutStore.center_offset.x - props.itemInfo.client.x) *
93
- (clientX - svgEditLayoutStore.center_offset.x < props.itemInfo.client.x ? 1 : -1),
94
- y:
95
- props.itemInfo.client.y +
96
- Math.abs(clientY - svgEditLayoutStore.center_offset.y - props.itemInfo.client.y) *
97
- (clientY - svgEditLayoutStore.center_offset.y < props.itemInfo.client.y ? 1 : -1)
98
+ x: x + Math.abs(x - props.itemInfo.center_position.x) * 2 * (x > props.itemInfo.center_position.x ? -1 : 1),
99
+ y: y + Math.abs(y - props.itemInfo.center_position.y) * 2 * (y > props.itemInfo.center_position.y ? -1 : 1)
98
100
  }
99
- })
101
+ }
100
102
  }
101
103
  const onRotateCircleMouseDown = (e: MouseEvent) => {
102
104
  const { clientX, clientY } = e
105
+ const x = Math.round(
106
+ (clientX - svgEditLayoutStore.canvasInfo.left) / configStore.svg.scale - svgEditLayoutStore.center_offset.x
107
+ )
108
+ const y = Math.round(
109
+ (clientY - svgEditLayoutStore.canvasInfo.top) / configStore.svg.scale - svgEditLayoutStore.center_offset.y
110
+ )
103
111
  e.stopPropagation()
104
112
  globalStore.intention = EGlobalStoreIntention.Rotate
105
113
  globalStore.rotate_info = {
106
114
  angle: props.itemInfo.rotate
107
115
  }
108
- globalStore.setMouseInfo({
116
+ globalStore.mouse_info = {
109
117
  state: EMouseInfoState.Down,
110
- position_x: clientX - svgEditLayoutStore.center_offset.x,
111
- position_y: clientY - svgEditLayoutStore.center_offset.y,
112
- now_position_x: clientX - svgEditLayoutStore.center_offset.x,
113
- now_position_y: clientY - svgEditLayoutStore.center_offset.y,
118
+ position_x: x,
119
+ position_y: y,
120
+ now_position_x: x,
121
+ now_position_y: y,
114
122
  new_position_x: 0,
115
123
  new_position_y: 0
116
- })
124
+ }
117
125
  }
118
126
  /**
119
127
  * 获取旋转之后的光标样式
@@ -31,17 +31,15 @@
31
31
  import { useGlobalStore } from '@/stores/global'
32
32
  import { useConfigStore } from '@/stores/config'
33
33
  import { fileRead, fileWrite } from '@/utils/file-read-write'
34
+ import { useEditPrivateStore } from '@/stores/system'
34
35
 
35
36
  const props = withDefaults(defineProps<{ customToolbar?: IConfig; data?: string; saveFile?: boolean }>(), {
36
37
  saveFile: false
37
38
  })
38
- const presetLine = ref([])
39
- const input = (list: any) => {
40
- presetLine.value = list
41
- }
42
39
  const globalStore = useGlobalStore(pinia)
43
40
  const svgEditLayoutStore = useSvgEditLayoutStore(pinia)
44
41
  const configStore = useConfigStore(pinia)
42
+ const editPrivateStore = useEditPrivateStore(pinia)
45
43
  const importJsonRef = ref<InstanceType<typeof ImportJson>>()
46
44
  const visible_conf: IVisibleConf = reactive({
47
45
  [EVisibleConfKey.ExportJson]: false,
@@ -74,6 +72,9 @@
74
72
  globalStore.setDoneJson(done_json)
75
73
  }
76
74
  onMounted(() => {
75
+ //清除外部传入不同数据,形成历史记录的问题
76
+ editPrivateStore.history_doneComponent = []
77
+ editPrivateStore.history_now_index = 0
77
78
  if (props.data) {
78
79
  useImportDataModel(props.data)
79
80
  } else {
@@ -81,9 +82,6 @@
81
82
  }
82
83
  globalStore.intention = EGlobalStoreIntention.None
83
84
  })
84
- defineExpose({
85
- setGraphNodeJson
86
- })
87
85
 
88
86
  const { appContext } = getCurrentInstance()!
89
87
 
@@ -101,6 +99,10 @@
101
99
  emits('onSave', d)
102
100
  }
103
101
  }
102
+
103
+ defineExpose({
104
+ setGraphNodeJson
105
+ })
104
106
  </script>
105
107
  <template>
106
108
  <div>
@@ -114,27 +116,27 @@
114
116
  ></top-panel>
115
117
  </el-header>
116
118
  <el-container class="middle">
117
- <el-aside class="side-nav" :class="svgEditLayoutStore.left_nav ? 'show-nav' : 'hide-nav'">
119
+ <el-aside
120
+ class="side-nav"
121
+ :class="svgEditLayoutStore.left_nav ? 'show-nav' : 'hide-nav'"
122
+ style="border-right: 1px solid #efefef"
123
+ >
118
124
  <el-scrollbar class="el-scroll-pc">
119
125
  <left-panel class="content-left" :custom-toolbar="props.customToolbar" />
120
126
  </el-scrollbar>
121
127
  </el-aside>
122
128
  <el-main class="middle main">
123
129
  <div class="canvas-main-pc">
124
- <Vue3RulerTool
125
- class="canvas-main-pc"
126
- :value="presetLine"
127
- :step-length="50"
128
- :parent="true"
129
- :is-scale-revise="false"
130
- v-model:visible="configStore.svg.ruler"
131
- @input="input"
132
- >
133
- <center-panel></center-panel>
130
+ <Vue3RulerTool class="canvas-main-pc" :visible="configStore.svg.ruler">
131
+ <center-panel />
134
132
  </Vue3RulerTool>
135
133
  </div>
136
134
  </el-main>
137
- <el-aside class="side-nav" :class="svgEditLayoutStore.right_nav ? 'show-nav' : 'hide-nav'">
135
+ <el-aside
136
+ class="side-nav"
137
+ :class="svgEditLayoutStore.right_nav ? 'show-nav' : 'hide-nav'"
138
+ style="border-left: 1px solid #efefef"
139
+ >
138
140
  <el-scrollbar class="el-scroll-pc">
139
141
  <right-panel></right-panel>
140
142
  </el-scrollbar>
@@ -177,9 +179,9 @@
177
179
  height: calc(100vh - @headerHeight - 1px);
178
180
 
179
181
  &.main {
180
- margin: 0 5px;
181
182
  background-color: #ffffff;
182
- padding: 0 2px;
183
+ padding: 0;
184
+ overflow: hidden;
183
185
  }
184
186
 
185
187
  .side-nav {
@@ -188,8 +190,6 @@
188
190
  position: relative;
189
191
  overflow: inherit;
190
192
  transition: all 0.5s;
191
- // background-color: rgb(250, 251, 253);
192
- box-shadow: 0 0 2px #dfcfcf;
193
193
 
194
194
  .content-left {
195
195
  overflow: hidden;
@@ -214,8 +214,7 @@
214
214
  display: flex;
215
215
  flex-direction: row;
216
216
  align-items: center;
217
- box-shadow: 0 0 2px #dfcfcf;
218
- margin-bottom: 1px;
217
+ border-bottom: 1px solid #efefef;
219
218
  height: @headerHeight;
220
219
  }
221
220
 
@@ -37,10 +37,10 @@
37
37
  </script>
38
38
  <template>
39
39
  <div>
40
- <el-collapse v-model="activeNames">
40
+ <el-collapse v-model="activeNames" style="border-top: none">
41
41
  <el-collapse-item :name="item.groupType" v-for="item of left_tool_bar" :key="item.title">
42
42
  <template #title>
43
- <div style="font-weight: bold">{{ item.title }}</div>
43
+ <div>{{ item.title }}</div>
44
44
  </template>
45
45
  <div class="component-group flex flex-wrap">
46
46
  <div