tianheng-ui 0.1.11 → 0.1.14

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 (51) hide show
  1. package/lib/theme-chalk/js/axios.js +3 -2
  2. package/lib/theme-chalk/js/util.js +23 -0
  3. package/lib/theme-chalk/styles/feature.scss +15 -0
  4. package/lib/tianheng-ui.js +13 -14
  5. package/package.json +1 -1
  6. package/packages/FormMaking/GenerateForm.vue +6 -1
  7. package/packages/FormMaking/GenerateFormItem.vue +9 -5
  8. package/packages/FormMaking/GenerateFormItemH5.vue +1 -1
  9. package/packages/FormMaking/WidgetConfig.vue +39 -51
  10. package/packages/FormMaking/WidgetForm.vue +9 -10
  11. package/packages/FormMaking/WidgetFormItem.vue +2 -2
  12. package/packages/FormMaking/WidgetSelect.vue +0 -1
  13. package/packages/FormMaking/WidgetTools.vue +539 -0
  14. package/packages/FormMaking/config/index.js +6 -0
  15. package/packages/FormMaking/custom/config.js +21 -24
  16. package/packages/FormMaking/custom/configs/button.vue +25 -25
  17. package/packages/FormMaking/custom/configs/cascader.vue +7 -7
  18. package/packages/FormMaking/custom/configs/checkbox.vue +23 -22
  19. package/packages/FormMaking/custom/configs/color.vue +3 -3
  20. package/packages/FormMaking/custom/configs/date.vue +3 -3
  21. package/packages/FormMaking/custom/configs/input.vue +3 -3
  22. package/packages/FormMaking/custom/configs/number.vue +3 -3
  23. package/packages/FormMaking/custom/configs/radio.vue +23 -19
  24. package/packages/FormMaking/custom/configs/rate.vue +3 -3
  25. package/packages/FormMaking/custom/configs/select.vue +25 -20
  26. package/packages/FormMaking/custom/configs/slider.vue +3 -3
  27. package/packages/FormMaking/custom/configs/switch.vue +3 -3
  28. package/packages/FormMaking/custom/configs/tabs.vue +12 -17
  29. package/packages/FormMaking/custom/configs/textarea.vue +3 -3
  30. package/packages/FormMaking/custom/configs/time.vue +3 -3
  31. package/packages/FormMaking/custom/configs/upload.vue +5 -5
  32. package/packages/FormMaking/custom/items/button.vue +35 -1
  33. package/packages/FormMaking/custom/items/checkbox.vue +1 -1
  34. package/packages/FormMaking/custom/items/date.vue +1 -0
  35. package/packages/FormMaking/custom/items/grid_dev.vue +3 -3
  36. package/packages/FormMaking/custom/items/tableH5_dev.vue +3 -3
  37. package/packages/FormMaking/custom/items/table_dev.vue +3 -3
  38. package/packages/FormMaking/custom/items/tabs_dev.vue +3 -3
  39. package/packages/FormMaking/custom/mixins/index.js +12 -12
  40. package/packages/FormMaking/index.vue +93 -469
  41. package/packages/FormMaking/styles/index.scss +1 -21
  42. package/packages/FormMaking/util/index.js +24 -0
  43. package/packages/FormMaking/util/request.js +9 -12
  44. package/packages/TableMaking/WidgetTools.vue +246 -0
  45. package/packages/TableMaking/custom/config.js +110 -0
  46. package/packages/TableMaking/generateTable.vue +2 -2
  47. package/packages/TableMaking/index.vue +62 -157
  48. package/packages/TableMaking/util/index.js +54 -1
  49. package/packages/TableMaking/widgetConfig.vue +261 -178
  50. package/packages/TableMaking/widgetTable.vue +16 -46
  51. package/packages/index.js +5 -4
@@ -64,14 +64,14 @@
64
64
  <el-select
65
65
  style="width:100%"
66
66
  v-model="widget.options.remoteFunc"
67
- value-key="api"
67
+ value-key="id"
68
68
  placeholder="请选择远端方法"
69
69
  clearable
70
70
  >
71
71
  <el-option
72
- v-for="item in remoteApis"
73
- :key="item.api"
74
- :label="item.name"
72
+ v-for="item in config.remoteFuncs"
73
+ :key="item.id"
74
+ :label="item.label"
75
75
  :value="item"
76
76
  >
77
77
  </el-option>
@@ -137,9 +137,9 @@
137
137
  >
138
138
  <el-option
139
139
  v-for="item in config.eventScript"
140
- :key="item.key"
141
- :label="item.name"
142
- :value="item.key"
140
+ :key="item.id"
141
+ :label="item.label"
142
+ :value="item.id"
143
143
  >
144
144
  </el-option>
145
145
  </el-select>
@@ -43,40 +43,35 @@
43
43
  </div>
44
44
  <div style="display: flex;">
45
45
  <div style="flex:1;">最大勾选:</div>
46
- <el-input-number
47
- v-model="widget.options.max"
48
- :min="widget.options.min || 1"
49
- >
46
+ <el-input-number v-model="widget.options.max" :min="0">
50
47
  </el-input-number>
51
48
  </div>
52
49
  </el-form-item>
53
50
 
54
51
  <el-form-item label="选项">
55
- <div
56
- style="display: flex;align-items: center;justify-content: space-between;margin-bottom:10px;"
57
- >
58
- <el-radio-group v-model="widget.options.remote" size="mini">
52
+ <div class="config-header" slot="label">
53
+ <span class="title">选项</span>
54
+ <el-radio-group
55
+ class="value"
56
+ v-model="widget.options.remote"
57
+ size="mini"
58
+ >
59
59
  <el-radio-button :label="false">静态数据</el-radio-button>
60
60
  <el-radio-button :label="true">远端数据</el-radio-button>
61
61
  </el-radio-group>
62
-
63
- <div v-if="!widget.options.remote">
64
- <span>显示标签</span>
65
- <el-switch v-model="widget.options.showLabel"> </el-switch>
66
- </div>
67
62
  </div>
68
63
  <template v-if="widget.options.remote">
69
64
  <el-select
70
65
  style="width:100%"
71
66
  v-model="widget.options.remoteFunc"
72
- value-key="api"
67
+ :value-key="config.remoteFuncs.props.key"
73
68
  placeholder="请选择远端方法"
74
69
  clearable
75
70
  >
76
71
  <el-option
77
- v-for="item in remoteApis"
78
- :key="item.api"
79
- :label="item.name"
72
+ v-for="item in config.remoteFuncs.options"
73
+ :key="item[config.remoteFuncs.props.key]"
74
+ :label="item[config.remoteFuncs.props.label]"
80
75
  :value="item"
81
76
  >
82
77
  </el-option>
@@ -93,6 +88,12 @@
93
88
  </el-input>
94
89
  </template>
95
90
  <template v-else>
91
+ <el-switch
92
+ v-model="widget.options.showLabel"
93
+ active-text="显示标签"
94
+ inactive-text="隐藏标签"
95
+ >
96
+ </el-switch>
96
97
  <el-checkbox-group v-model="widget.options.defaultValue">
97
98
  <draggable
98
99
  tag="ul"
@@ -188,9 +189,9 @@
188
189
  >
189
190
  <el-option
190
191
  v-for="item in config.eventScript"
191
- :key="item.key"
192
- :label="item.name"
193
- :value="item.key"
192
+ :key="item.id"
193
+ :label="item.label"
194
+ :value="item.id"
194
195
  >
195
196
  </el-option>
196
197
  </el-select>
@@ -220,8 +221,8 @@ export default {
220
221
  methods: {
221
222
  handleAddOption() {
222
223
  this.widget.options.options.push({
223
- value: `新选项${this.widget.options.options.length + 1}`,
224
- label: `新选项${this.widget.options.options.length + 1}`
224
+ value: `选值 ${this.widget.options.options.length + 1}`,
225
+ label: `选项 ${this.widget.options.options.length + 1}`
225
226
  });
226
227
  },
227
228
  handleOptionsRemove(index) {
@@ -86,9 +86,9 @@
86
86
  >
87
87
  <el-option
88
88
  v-for="item in config.eventScript"
89
- :key="item.key"
90
- :label="item.name"
91
- :value="item.key"
89
+ :key="item.id"
90
+ :label="item.label"
91
+ :value="item.id"
92
92
  >
93
93
  </el-option>
94
94
  </el-select>
@@ -122,9 +122,9 @@
122
122
  >
123
123
  <el-option
124
124
  v-for="item in config.eventScript"
125
- :key="item.key"
126
- :label="item.name"
127
- :value="item.key"
125
+ :key="item.id"
126
+ :label="item.label"
127
+ :value="item.id"
128
128
  >
129
129
  </el-option>
130
130
  </el-select>
@@ -171,9 +171,9 @@
171
171
  >
172
172
  <el-option
173
173
  v-for="item in config.eventScript"
174
- :key="item.key"
175
- :label="item.name"
176
- :value="item.key"
174
+ :key="item.id"
175
+ :label="item.label"
176
+ :value="item.id"
177
177
  >
178
178
  </el-option>
179
179
  </el-select>
@@ -104,9 +104,9 @@
104
104
  >
105
105
  <el-option
106
106
  v-for="item in config.eventScript"
107
- :key="item.key"
108
- :label="item.name"
109
- :value="item.key"
107
+ :key="item.id"
108
+ :label="item.label"
109
+ :value="item.id"
110
110
  >
111
111
  </el-option>
112
112
  </el-select>
@@ -35,33 +35,31 @@
35
35
  </el-radio-group>
36
36
  </el-form-item>
37
37
 
38
- <el-form-item label="选项">
39
- <div
40
- style="display: flex;align-items: center;justify-content: space-between;margin-bottom:10px;"
41
- >
42
- <el-radio-group v-model="widget.options.remote" size="mini">
38
+ <el-form-item>
39
+ <div class="config-header" slot="label">
40
+ <span class="title">选项</span>
41
+ <el-radio-group
42
+ class="value"
43
+ v-model="widget.options.remote"
44
+ size="mini"
45
+ >
43
46
  <el-radio-button :label="false">静态数据</el-radio-button>
44
47
  <el-radio-button :label="true">远端数据</el-radio-button>
45
48
  </el-radio-group>
46
-
47
- <div v-if="!widget.options.remote">
48
- <span>显示标签</span>
49
- <el-switch v-model="widget.options.showLabel"> </el-switch>
50
- </div>
51
49
  </div>
52
50
 
53
51
  <template v-if="widget.options.remote">
54
52
  <el-select
55
53
  style="width:100%"
56
54
  v-model="widget.options.remoteFunc"
57
- value-key="api"
55
+ :value-key="config.remoteFuncs.props.key"
58
56
  placeholder="请选择远端方法"
59
57
  clearable
60
58
  >
61
59
  <el-option
62
- v-for="item in remoteApis"
63
- :key="item.api"
64
- :label="item.name"
60
+ v-for="item in config.remoteFuncs.options"
61
+ :key="item[config.remoteFuncs.props.key]"
62
+ :label="item[config.remoteFuncs.props.label]"
65
63
  :value="item"
66
64
  >
67
65
  </el-option>
@@ -78,6 +76,12 @@
78
76
  </el-input>
79
77
  </template>
80
78
  <template v-else>
79
+ <el-switch
80
+ v-model="widget.options.showLabel"
81
+ active-text="显示标签"
82
+ inactive-text="隐藏标签"
83
+ >
84
+ </el-switch>
81
85
  <el-radio-group v-model="widget.options.defaultValue">
82
86
  <draggable
83
87
  tag="ul"
@@ -165,9 +169,9 @@
165
169
  >
166
170
  <el-option
167
171
  v-for="item in config.eventScript"
168
- :key="item.key"
169
- :label="item.name"
170
- :value="item.key"
172
+ :key="item.id"
173
+ :label="item.label"
174
+ :value="item.id"
171
175
  >
172
176
  </el-option>
173
177
  </el-select>
@@ -197,8 +201,8 @@ export default {
197
201
  methods: {
198
202
  handleAddOption() {
199
203
  this.widget.options.options.push({
200
- value: `新选项${this.widget.options.options.length + 1}`,
201
- label: `新选项${this.widget.options.options.length + 1}`
204
+ value: `选值 ${this.widget.options.options.length + 1}`,
205
+ label: `选项 ${this.widget.options.options.length + 1}`
202
206
  });
203
207
  },
204
208
  handleOptionsRemove(index) {
@@ -73,9 +73,9 @@
73
73
  >
74
74
  <el-option
75
75
  v-for="item in config.eventScript"
76
- :key="item.key"
77
- :label="item.name"
78
- :value="item.key"
76
+ :key="item.id"
77
+ :label="item.label"
78
+ :value="item.id"
79
79
  >
80
80
  </el-option>
81
81
  </el-select>
@@ -33,31 +33,29 @@
33
33
  </el-form-item>
34
34
 
35
35
  <el-form-item label="选项">
36
- <div
37
- style="display: flex;align-items: center;justify-content: space-between;margin-bottom:10px;"
38
- >
39
- <el-radio-group v-model="widget.options.remote" size="mini">
36
+ <div class="config-header" slot="label">
37
+ <span class="title">选项</span>
38
+ <el-radio-group
39
+ class="value"
40
+ v-model="widget.options.remote"
41
+ size="mini"
42
+ >
40
43
  <el-radio-button :label="false">静态数据</el-radio-button>
41
44
  <el-radio-button :label="true">远端数据</el-radio-button>
42
45
  </el-radio-group>
43
-
44
- <div v-if="!widget.options.remote">
45
- <span>显示标签</span>
46
- <el-switch v-model="widget.options.showLabel"> </el-switch>
47
- </div>
48
46
  </div>
49
47
  <template v-if="widget.options.remote">
50
48
  <el-select
51
49
  style="width:100%"
52
50
  v-model="widget.options.remoteFunc"
53
- value-key="api"
51
+ value-key="id"
54
52
  placeholder="请选择远端方法"
55
53
  clearable
56
54
  >
57
55
  <el-option
58
- v-for="item in remoteApis"
59
- :key="item.api"
60
- :label="item.name"
56
+ v-for="item in config.remoteFuncs"
57
+ :key="item.id"
58
+ :label="item.label"
61
59
  :value="item"
62
60
  >
63
61
  </el-option>
@@ -74,6 +72,12 @@
74
72
  </el-input>
75
73
  </template>
76
74
  <template v-else>
75
+ <el-switch
76
+ v-model="widget.options.showLabel"
77
+ active-text="显示标签"
78
+ inactive-text="隐藏标签"
79
+ >
80
+ </el-switch>
77
81
  <template v-if="widget.options.multiple">
78
82
  <el-checkbox-group v-model="widget.options.defaultValue">
79
83
  <draggable
@@ -92,18 +96,19 @@
92
96
  >
93
97
  <el-checkbox :label="item.value" style="margin-right: 5px;">
94
98
  <el-input
99
+ v-model="item.value"
95
100
  :style="{
96
101
  width: widget.options.showLabel ? '90px' : '180px'
97
102
  }"
98
- v-model="item.value"
99
103
  :disabled="
100
104
  widget.options.defaultValue.indexOf(item.value) !== -1
101
105
  "
102
106
  ></el-input>
103
107
  <el-input
104
- v-if="widget.options.showLabel"
108
+ v-show="widget.options.showLabel"
105
109
  style="width:90px;"
106
110
  v-model="item.label"
111
+ placeholder="标签"
107
112
  >
108
113
  </el-input>
109
114
  </el-checkbox>
@@ -244,9 +249,9 @@
244
249
  >
245
250
  <el-option
246
251
  v-for="item in config.eventScript"
247
- :key="item.key"
248
- :label="item.name"
249
- :value="item.key"
252
+ :key="item.id"
253
+ :label="item.label"
254
+ :value="item.id"
250
255
  >
251
256
  </el-option>
252
257
  </el-select>
@@ -291,8 +296,8 @@ export default {
291
296
  },
292
297
  handleAddOption() {
293
298
  this.widget.options.options.push({
294
- value: `新选项${this.widget.options.options.length + 1}`,
295
- label: `新选项${this.widget.options.options.length + 1}`
299
+ value: `选值 ${this.widget.options.options.length + 1}`,
300
+ label: `选项 ${this.widget.options.options.length + 1}`
296
301
  });
297
302
  },
298
303
  handleOptionsRemove(index) {
@@ -106,9 +106,9 @@
106
106
  >
107
107
  <el-option
108
108
  v-for="item in config.eventScript"
109
- :key="item.key"
110
- :label="item.name"
111
- :value="item.key"
109
+ :key="item.id"
110
+ :label="item.label"
111
+ :value="item.id"
112
112
  >
113
113
  </el-option>
114
114
  </el-select>
@@ -94,9 +94,9 @@
94
94
  >
95
95
  <el-option
96
96
  v-for="item in config.eventScript"
97
- :key="item.key"
98
- :label="item.name"
99
- :value="item.key"
97
+ :key="item.id"
98
+ :label="item.label"
99
+ :value="item.id"
100
100
  >
101
101
  </el-option>
102
102
  </el-select>
@@ -46,38 +46,33 @@
46
46
  <el-form-item label="选项">
47
47
  <el-radio-group
48
48
  v-model="widget.options.remote"
49
- size="mini"
50
49
  style="margin-bottom:10px;"
50
+ size="mini"
51
51
  >
52
52
  <el-radio-button :label="false">静态数据</el-radio-button>
53
- <el-radio-button :label="true">远端数据</el-radio-button>
53
+ <el-radio-button :label="true" disabled>远端数据</el-radio-button>
54
54
  </el-radio-group>
55
55
  <div v-if="widget.options.remote">
56
56
  <el-select
57
+ v-model="widget.options.remoteFunc"
57
58
  class="remoteApis"
58
59
  size="mini"
59
- v-model="widget.options.remoteFunc"
60
60
  placeholder="请选择远端方法"
61
61
  >
62
62
  <template slot="prefix">
63
63
  <div style="width:70px;">接口名</div>
64
64
  </template>
65
- <el-option-group
66
- v-for="group in remoteApis"
67
- :key="group.label"
68
- :label="group.label"
65
+
66
+ <el-option
67
+ v-for="item in config.remoteFuncs.options"
68
+ :key="item[config.remoteFuncs.props.key]"
69
+ :label="item[config.remoteFuncs.props.label]"
70
+ :value="item"
69
71
  >
70
- <el-option
71
- v-for="item in group.options"
72
- :key="item.value"
73
- :label="item.label"
74
- :value="item.value"
75
- >
76
- </el-option>
77
- </el-option-group>
72
+ </el-option>
78
73
  </el-select>
79
74
 
80
- <el-input size="mini" style="" v-model="widget.options.props.value">
75
+ <!-- <el-input size="mini" style="" v-model="widget.options.props.value">
81
76
  <template slot="prepend">
82
77
  <div style="width:30px;">值</div>
83
78
  </template>
@@ -86,7 +81,7 @@
86
81
  <template slot="prepend">
87
82
  <div style="width:30px;">标签</div>
88
83
  </template>
89
- </el-input>
84
+ </el-input> -->
90
85
  </div>
91
86
  <template v-else>
92
87
  <el-radio-group v-model="widget.options.defaultValue">
@@ -152,9 +152,9 @@
152
152
  >
153
153
  <el-option
154
154
  v-for="item in config.eventScript"
155
- :key="item.key"
156
- :label="item.name"
157
- :value="item.key"
155
+ :key="item.id"
156
+ :label="item.label"
157
+ :value="item.id"
158
158
  >
159
159
  </el-option>
160
160
  </el-select>
@@ -109,9 +109,9 @@
109
109
  >
110
110
  <el-option
111
111
  v-for="item in config.eventScript"
112
- :key="item.key"
113
- :label="item.name"
114
- :value="item.key"
112
+ :key="item.id"
113
+ :label="item.label"
114
+ :value="item.id"
115
115
  >
116
116
  </el-option>
117
117
  </el-select>
@@ -71,15 +71,15 @@
71
71
  </el-radio-group>
72
72
  <el-select
73
73
  v-if="widget.options.remote"
74
- style="width:100%"
75
74
  v-model="widget.options.remoteFunc"
76
- value-key="api"
75
+ style="width:100%"
76
+ :value-key="config.remoteFuncs.props.key"
77
77
  placeholder="请选择远端方法"
78
78
  >
79
79
  <el-option
80
- v-for="item in remoteApis"
81
- :key="item.api"
82
- :label="item.name"
80
+ v-for="item in config.remoteFuncs.options"
81
+ :key="item[config.remoteFuncs.props.key]"
82
+ :label="item[config.remoteFuncs.props.label]"
83
83
  :value="item"
84
84
  >
85
85
  </el-option>
@@ -20,8 +20,42 @@
20
20
 
21
21
  <script>
22
22
  import { itemsComponent } from "../mixins/index";
23
+ import * as Axios from "lib/theme-chalk/js/axios";
23
24
  export default {
24
- mixins: [itemsComponent]
25
+ mixins: [itemsComponent],
26
+ data() {
27
+ return {
28
+ axios: null
29
+ };
30
+ },
31
+ created() {
32
+ const oauthConfig = localStorage.getItem("TH_OauthConfig") || "{}";
33
+ this.axios = Axios.init(JSON.parse(oauthConfig));
34
+ },
35
+ methods: {
36
+ hendleRemoteData() {
37
+ const remoteFunc = this.widget.options.remoteFunc;
38
+ const requestConfig = {
39
+ url: `/lc/api${remoteFunc.url}`,
40
+ method: remoteFunc.method,
41
+ headers: remoteFunc.headers
42
+ };
43
+ let params = { ...remoteFunc.params };
44
+ if (remoteFunc.needPage) {
45
+ params.pageNum = 1;
46
+ params.pageSize = 20;
47
+ }
48
+ if (remoteFunc.method.toLowerCase() === "get") {
49
+ requestConfig.params = params;
50
+ } else {
51
+ params = Object.assign(params, this.models);
52
+ requestConfig.data = params;
53
+ }
54
+ this.axios(requestConfig).then(res => {
55
+ this.$emit("button-submit", requestConfig);
56
+ });
57
+ }
58
+ }
25
59
  };
26
60
  </script>
27
61
 
@@ -4,7 +4,7 @@
4
4
  :style="{ width: widget.options.width }"
5
5
  :disabled="widget.options.disabled"
6
6
  :min="widget.options.min"
7
- :max="widget.options.max"
7
+ :max="widget.options.max || 99999"
8
8
  @change="handleEventAction(widget.events.onChange)"
9
9
  >
10
10
  <template v-if="widget.options.buttonType">
@@ -12,6 +12,7 @@
12
12
  :editable="widget.options.editable"
13
13
  :clearable="widget.options.clearable"
14
14
  :value-format="widget.options.format"
15
+ :format="widget.options.format"
15
16
  @change="handleEventAction(widget.events.onChange)"
16
17
  @focus="handleEventAction(widget.events.onFocus)"
17
18
  @blur="handleEventAction(widget.events.onBlur)"
@@ -83,9 +83,9 @@ export default {
83
83
  return false;
84
84
  }
85
85
 
86
- const key =
87
- Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
88
- if (!newComponent.model) {
86
+ if (!newComponent.key) {
87
+ const key =
88
+ Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
89
89
  newComponent.key = key;
90
90
  newComponent.model = `${newComponent.type}_${key}`;
91
91
  }
@@ -83,9 +83,9 @@ export default {
83
83
  return false;
84
84
  }
85
85
 
86
- const key =
87
- Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
88
- if (!newComponent.model) {
86
+ if (!newComponent.key) {
87
+ const key =
88
+ Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
89
89
  newComponent.key = key;
90
90
  newComponent.model = `${newComponent.type}_${key}`;
91
91
  }
@@ -70,9 +70,9 @@ export default {
70
70
  return false;
71
71
  }
72
72
 
73
- const key =
74
- Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
75
- if (!newComponent.model) {
73
+ if (!newComponent.key) {
74
+ const key =
75
+ Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
76
76
  newComponent.key = key;
77
77
  newComponent.model = `${newComponent.type}_${key}`;
78
78
  }
@@ -84,9 +84,9 @@ export default {
84
84
  return false;
85
85
  }
86
86
 
87
- const key =
88
- Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
89
- if (!newComponent.model) {
87
+ if (!newComponent.key) {
88
+ const key =
89
+ Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
90
90
  newComponent.key = key;
91
91
  newComponent.model = `${newComponent.type}_${key}`;
92
92
  }