@zhangqingcq/vgce 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhangqingcq/vgce",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Vector graphics configure editor. svg组态编辑器。基于vue3.3+ts+element-plus+vite",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,5 +1,6 @@
1
1
  <!--左侧工具栏-->
2
2
  <script lang="ts" setup>
3
+ import { isEmpty } from 'lodash-es'
3
4
  import { ElCollapse, ElCollapseItem, ElIcon, ElMessage } from 'element-plus'
4
5
  import type { IConfig, IConfigItem } from '@/config/types'
5
6
  import { pinia } from '@/hooks'
@@ -23,7 +24,16 @@
23
24
  'echarts'
24
25
  ])
25
26
  const createBegin = (svg_item: IConfigItem) => {
26
- globalStore.setCreateInfo(svg_item)
27
+ globalStore.setCreateInfo(sortProps(svg_item))
28
+ }
29
+
30
+ const sortProps = (svg_item: IConfigItem): IConfigItem => {
31
+ if (svg_item?.props && !isEmpty(svg_item.props)) {
32
+ Object.keys(svg_item.props).forEach((k, i) => {
33
+ svg_item.props[k].sort = String(i)
34
+ })
35
+ }
36
+ return svg_item
27
37
  }
28
38
  const dragEndEvent = (e: DragEvent) => {
29
39
  //拖动时记录拖动的svg信息
@@ -21,6 +21,38 @@
21
21
  code: false
22
22
  })
23
23
 
24
+ const _objInfo = computed(() => {
25
+ const keys: Record<string, any> = {}
26
+ let l = 0
27
+ let t = []
28
+ for (let k of Object.keys(props.objInfo)) {
29
+ const s = props.objInfo[k]?.sort
30
+ if (s) {
31
+ const _s = Number(s)
32
+ if (_s > l) {
33
+ l = _s
34
+ }
35
+ }
36
+ if (s) {
37
+ keys[s] = k
38
+ } else {
39
+ return Object.keys(props.objInfo).map((k) => ({
40
+ ...props.objInfo[k],
41
+ _key: k
42
+ }))
43
+ }
44
+ }
45
+
46
+ for (let i = 0; i < l + 1; i++) {
47
+ const _i = String(i)
48
+ t.push({
49
+ ...props.objInfo[keys[_i]],
50
+ _key: keys[_i]
51
+ })
52
+ }
53
+ return t
54
+ })
55
+
24
56
  function propsChangeHandle(e: any) {
25
57
  let t: any = window.setTimeout(function () {
26
58
  emit('change', e)
@@ -31,19 +63,19 @@
31
63
  </script>
32
64
 
33
65
  <template>
34
- <div v-for="(attr_item, key) in props.objInfo" :key="key">
66
+ <div v-for="attr_item in _objInfo" :key="attr_item._key">
35
67
  <!--表单项上显示的灰色值-->
36
68
  <el-form-item v-if="props.code" class="props-row" size="small">
37
69
  <template #label>
38
70
  <el-tooltip
39
- :content="String(key)"
40
- v-if="getStringWidth(String(key)) > 78"
71
+ :content="String(attr_item._key)"
72
+ v-if="getStringWidth(String(attr_item._key)) > 78"
41
73
  placement="left"
42
74
  popper-class="props-popper"
43
75
  >
44
- <div class="one-row-txt" style="width: 78px">{{ key }}</div>
76
+ <div class="one-row-txt" style="width: 78px">{{ attr_item._key }}</div>
45
77
  </el-tooltip>
46
- <span v-else>{{ key }}</span>
78
+ <span v-else>{{ attr_item._key }}</span>
47
79
  </template>
48
80
  <el-tooltip
49
81
  :content="JSON.stringify(attr_item.val)"
@@ -56,10 +88,10 @@
56
88
  <span v-else>{{ attr_item.val }}</span>
57
89
  </el-form-item>
58
90
  <!--props-->
59
- <el-form-item :label="attr_item.title" size="small" v-if="props.hide.indexOf(String(key)) < 0">
91
+ <el-form-item :label="attr_item.title" size="small" v-if="props.hide.indexOf(String(attr_item._key)) < 0">
60
92
  <el-select
61
93
  v-if="attr_item.type === EConfigItemPropsType.Select"
62
- v-model="attr_item.val"
94
+ v-model="props.objInfo[attr_item._key].val"
63
95
  placeholder="Select"
64
96
  size="small"
65
97
  :disabled="Boolean(attr_item?.disabled)"
@@ -69,19 +101,19 @@
69
101
  </el-select>
70
102
  <el-input-number
71
103
  v-else-if="attr_item.type === EConfigItemPropsType.InputNumber"
72
- v-model="attr_item.val"
104
+ v-model="props.objInfo[attr_item._key].val"
73
105
  :disabled="Boolean(attr_item?.disabled)"
74
106
  @change="propsChangeHandle"
75
107
  />
76
108
  <el-input
77
109
  v-else-if="attr_item.type === EConfigItemPropsType.Input"
78
- v-model="attr_item.val"
110
+ v-model="props.objInfo[attr_item._key].val"
79
111
  :disabled="Boolean(attr_item?.disabled)"
80
112
  @change="propsChangeHandle"
81
113
  />
82
114
  <el-input
83
115
  v-else-if="attr_item.type === EConfigItemPropsType.Textarea"
84
- v-model="attr_item.val"
116
+ v-model="props.objInfo[attr_item._key].val"
85
117
  autosize
86
118
  type="textarea"
87
119
  :disabled="Boolean(attr_item?.disabled)"
@@ -89,19 +121,19 @@
89
121
  />
90
122
  <el-color-picker
91
123
  v-else-if="attr_item.type === EConfigItemPropsType.Color"
92
- v-model="attr_item.val"
124
+ v-model="props.objInfo[attr_item._key].val"
93
125
  :disabled="Boolean(attr_item?.disabled)"
94
126
  @change="propsChangeHandle"
95
127
  />
96
128
  <el-switch
97
129
  v-else-if="attr_item.type === EConfigItemPropsType.Switch"
98
- v-model="attr_item.val"
130
+ v-model="props.objInfo[attr_item._key].val"
99
131
  :disabled="Boolean(attr_item?.disabled)"
100
132
  @change="propsChangeHandle"
101
133
  />
102
134
  <code-edit-modal
103
135
  v-else-if="attr_item.type === EConfigItemPropsType.JsonEdit"
104
- v-model="attr_item.val"
136
+ v-model="props.objInfo[attr_item._key].val"
105
137
  :disabled="Boolean(attr_item?.disabled)"
106
138
  @close="propsChangeHandle"
107
139
  />
@@ -119,8 +151,4 @@
119
151
  .props-popper {
120
152
  max-width: 350px;
121
153
  }
122
- sdf {
123
- color: rgb(245, 247, 250);
124
- background-color: rgb(92, 184, 122);
125
- }
126
154
  </style>
@@ -36,6 +36,7 @@ export interface IConfigItemProps {
36
36
  val: any
37
37
  options?: any
38
38
  disabled?: boolean
39
+ sort?: string
39
40
  }
40
41
  }
41
42