renusify 2.5.1 → 3.0.0

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 (212) hide show
  1. package/components/app/index.vue +74 -22
  2. package/components/app/toast/index.vue +76 -71
  3. package/components/app/toast/toast.vue +62 -44
  4. package/components/avatar/index.vue +208 -84
  5. package/components/button/buttonConfirm.vue +53 -26
  6. package/components/button/buttonGroup.js +0 -2
  7. package/components/button/buttonGroup.vue +310 -62
  8. package/components/button/index.vue +584 -100
  9. package/components/calendar/index.js +0 -2
  10. package/components/calendar/index.vue +326 -262
  11. package/components/calendar/month.vue +64 -55
  12. package/components/calendar/year.vue +30 -25
  13. package/components/card/index.vue +139 -59
  14. package/components/codeEditor/highlightCss.vue +38 -39
  15. package/components/codeEditor/highlightHtml.vue +64 -64
  16. package/components/codeEditor/highlightJs.vue +37 -38
  17. package/components/codeEditor/index.vue +129 -79
  18. package/components/codeEditor/run.vue +225 -39
  19. package/components/codeEditor/useCodeFormatter.js +150 -0
  20. package/components/confirm/index.vue +140 -81
  21. package/components/container/col.vue +5 -4
  22. package/components/container/divider.vue +28 -19
  23. package/components/container/index.vue +34 -15
  24. package/components/container/row.vue +26 -9
  25. package/components/container/spacer.vue +2 -4
  26. package/components/container/style.scss +3 -0
  27. package/components/content/index.vue +49 -32
  28. package/components/cropper/index.vue +401 -244
  29. package/components/float/index.vue +542 -415
  30. package/components/form/addressInput/index.vue +184 -109
  31. package/components/form/camInput/index.vue +370 -244
  32. package/components/form/checkInput/index.vue +138 -71
  33. package/components/form/checkboxInput/index.vue +87 -47
  34. package/components/form/colorInput/Alpha.vue +81 -83
  35. package/components/form/colorInput/Hue.vue +91 -68
  36. package/components/form/colorInput/Preview.vue +43 -47
  37. package/components/form/colorInput/Saturation.vue +101 -86
  38. package/components/form/colorInput/index.vue +72 -40
  39. package/components/form/colorInput/picker.vue +111 -106
  40. package/components/form/colorInput/useColor.js +153 -0
  41. package/components/form/dateInput/index.vue +691 -356
  42. package/components/form/dateInput/month.vue +63 -54
  43. package/components/form/dateInput/year.vue +35 -25
  44. package/components/form/fileInput/index.js +0 -1
  45. package/components/form/fileInput/index.vue +263 -106
  46. package/components/form/fileInput/single.vue +323 -164
  47. package/components/form/groupInput/index.vue +199 -101
  48. package/components/form/index.vue +189 -83
  49. package/components/form/input/index.vue +416 -377
  50. package/components/form/jsonInput/JsonView.vue +54 -56
  51. package/components/form/jsonInput/index.vue +247 -165
  52. package/components/form/maskInput/index.vue +252 -132
  53. package/components/form/numberInput/index.js +0 -1
  54. package/components/form/numberInput/index.vue +226 -117
  55. package/components/form/passwordInput/index.js +2 -1
  56. package/components/form/passwordInput/index.vue +269 -102
  57. package/components/form/radioInput/index.vue +143 -72
  58. package/components/form/rangeInput/index.vue +280 -167
  59. package/components/form/ratingInput/index.vue +57 -57
  60. package/components/form/selectInput/index.js +1 -3
  61. package/components/form/selectInput/index.vue +584 -296
  62. package/components/form/switchInput/index.vue +73 -59
  63. package/components/form/telInput/index.js +0 -1
  64. package/components/form/telInput/index.vue +238 -135
  65. package/components/form/textArea/index.vue +72 -35
  66. package/components/form/textEditor/index.vue +739 -0
  67. package/components/form/{text-editor → textEditor}/style.scss +8 -16
  68. package/components/form/textInput/index.vue +54 -32
  69. package/components/form/timeInput/index.vue +83 -56
  70. package/components/form/timeInput/range.vue +116 -95
  71. package/components/form/timeInput/timepicker.vue +382 -449
  72. package/components/form/uniqueInput/index.vue +105 -48
  73. package/components/form/unitInput/index.vue +139 -84
  74. package/components/formCreator/index.js +0 -1
  75. package/components/formCreator/index.vue +314 -148
  76. package/components/highlight/index.vue +41 -25
  77. package/components/highlight/style.scss +2 -2
  78. package/components/highlight/{mixin.js → useHighlight.js} +181 -160
  79. package/components/icon/index.vue +79 -33
  80. package/components/img/index.vue +249 -147
  81. package/components/img/preview.vue +180 -198
  82. package/components/img/svgImg.vue +42 -39
  83. package/components/index.js +5 -20
  84. package/components/infinite/index.js +1 -2
  85. package/components/infinite/index.vue +248 -66
  86. package/components/map/index.vue +428 -261
  87. package/components/map/route.vue +794 -487
  88. package/components/map/select.vue +118 -58
  89. package/components/menu/index.vue +201 -91
  90. package/components/meta/meta.js +26 -3
  91. package/components/modal/index.vue +383 -158
  92. package/components/notify/index.vue +204 -86
  93. package/components/notify/notification.vue +38 -55
  94. package/components/progress/circle.vue +189 -70
  95. package/components/progress/line.vue +266 -46
  96. package/components/searchBox/index.js +1 -3
  97. package/components/searchBox/index.vue +194 -101
  98. package/components/skeleton/index.vue +45 -20
  99. package/components/slider/index.vue +318 -156
  100. package/components/swiper/index.vue +254 -106
  101. package/components/table/crud/footer.vue +77 -53
  102. package/components/table/crud/header.vue +71 -72
  103. package/components/table/crud/index.vue +631 -401
  104. package/components/table/index.vue +721 -278
  105. package/components/timeAgo/index.vue +145 -96
  106. package/components/tour/index.vue +338 -235
  107. package/components/tree/index.vue +235 -89
  108. package/components/tree/tree-element.vue +107 -106
  109. package/directive/animate/index.js +77 -0
  110. package/directive/clickOutSide/index.js +98 -0
  111. package/directive/drag/index.js +153 -0
  112. package/directive/index.js +11 -13
  113. package/directive/intersect/index.js +263 -0
  114. package/directive/mask/index.js +67 -0
  115. package/directive/parallax/index.js +78 -0
  116. package/directive/ripple/index.js +14 -0
  117. package/directive/scroll/index.js +244 -0
  118. package/directive/sortable/index.js +274 -0
  119. package/directive/title/index.js +75 -0
  120. package/directive/touch/index.js +268 -0
  121. package/index.js +10 -8
  122. package/package.json +5 -2
  123. package/plugins/validation/Validate.js +88 -79
  124. package/scripts/generate-docs.mjs +226 -0
  125. package/scripts/menu.mjs +240 -0
  126. package/scripts/parser.mjs +1086 -0
  127. package/style/_index.scss +7 -0
  128. package/style/app.scss +13 -65
  129. package/style/colors.scss +5 -22
  130. package/style/functions/index.scss +8 -0
  131. package/style/mixins/index.scss +17 -5
  132. package/style/variables/base.scss +154 -175
  133. package/style/variables/color.scss +0 -12
  134. package/style/variables/utilities.scss +0 -180
  135. package/tools/helper.js +0 -8
  136. package/tools/icons.js +6 -1
  137. package/tools/root.js +71 -0
  138. package/components/app/style.scss +0 -41
  139. package/components/app/toast/style.scss +0 -20
  140. package/components/avatar/style.scss +0 -32
  141. package/components/bar/bottomNav.js +0 -1
  142. package/components/bar/bottomNav.vue +0 -28
  143. package/components/bar/bottomNavigationCircle.js +0 -2
  144. package/components/bar/bottomNavigationCircle.vue +0 -99
  145. package/components/bar/scss/bottomNav.scss +0 -67
  146. package/components/bar/scss/toolbar.scss +0 -174
  147. package/components/bar/toolbar/index.js +0 -8
  148. package/components/bar/toolbar/index.vue +0 -35
  149. package/components/bar/toolbar/laptop.vue +0 -33
  150. package/components/bar/toolbar/menuChilds.vue +0 -41
  151. package/components/bar/toolbar/menuLaptop.vue +0 -41
  152. package/components/bar/toolbar/menuMob.vue +0 -39
  153. package/components/bar/toolbar/mixin.js +0 -43
  154. package/components/bar/toolbar/mobile.vue +0 -34
  155. package/components/breadcrumb/bredcrumbItem.vue +0 -39
  156. package/components/breadcrumb/index.js +0 -3
  157. package/components/breadcrumb/index.vue +0 -71
  158. package/components/breadcrumb/style.scss +0 -51
  159. package/components/button/style.scss +0 -411
  160. package/components/card/style.scss +0 -86
  161. package/components/chart/chart.js +0 -1
  162. package/components/chart/chart.vue +0 -69
  163. package/components/chart/worldMap.js +0 -2
  164. package/components/chart/worldMap.vue +0 -1112
  165. package/components/chat/MessageList.vue +0 -163
  166. package/components/chat/chatInput.vue +0 -150
  167. package/components/chat/chatMsg.vue +0 -276
  168. package/components/chat/index.js +0 -11
  169. package/components/chat/index.vue +0 -113
  170. package/components/chip/index.js +0 -3
  171. package/components/chip/index.vue +0 -77
  172. package/components/chip/style.scss +0 -199
  173. package/components/codeEditor/mixin.js +0 -145
  174. package/components/countdown/index.js +0 -1
  175. package/components/countdown/index.vue +0 -105
  176. package/components/form/colorInput/mixin.js +0 -132
  177. package/components/form/fileInput/file.js +0 -148
  178. package/components/form/telInput/assets/flags.png +0 -0
  179. package/components/form/telInput/assets/flags@2x.png +0 -0
  180. package/components/form/text-editor/index.vue +0 -710
  181. package/components/icon/style.scss +0 -17
  182. package/components/infinite/div.js +0 -6
  183. package/components/infinite/div.vue +0 -193
  184. package/components/infinite/page.js +0 -3
  185. package/components/infinite/page.vue +0 -105
  186. package/components/list/index.js +0 -3
  187. package/components/list/index.vue +0 -122
  188. package/components/list/style.scss +0 -66
  189. package/components/message/index.js +0 -4
  190. package/components/message/index.vue +0 -40
  191. package/components/modal/style.scss +0 -146
  192. package/components/nestable/NestableItem.vue +0 -307
  193. package/components/nestable/editable.js +0 -44
  194. package/components/nestable/index.js +0 -1
  195. package/components/nestable/index.vue +0 -226
  196. package/components/nestable/methods.js +0 -416
  197. package/components/progress/style.scss +0 -229
  198. package/components/table/style.scss +0 -338
  199. package/components/tabs/index.js +0 -3
  200. package/components/tabs/index.vue +0 -151
  201. package/components/timeline/index.js +0 -6
  202. package/components/timeline/index.vue +0 -76
  203. package/directive/resize/index.js +0 -30
  204. package/directive/skeleton/index.js +0 -27
  205. package/directive/skeleton/style.scss +0 -37
  206. package/plugins/request/Request.js +0 -68
  207. package/style/animation.scss +0 -94
  208. package/style/style.scss +0 -8
  209. package/tools/rootable.js +0 -75
  210. /package/components/form/{text-editor → textEditor}/index.js +0 -0
  211. /package/components/form/{text-editor → textEditor}/preview.js +0 -0
  212. /package/components/form/{text-editor → textEditor}/preview.vue +0 -0
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <r-container ref="tree" :class="classes" full-width>
2
+ <r-container ref="treeRef" :class="classes" full-width>
3
3
  <r-row v-if="searchLink">
4
4
  <r-col>
5
5
  <r-select-input
@@ -13,18 +13,20 @@
13
13
  <r-float v-if="show" :minZoom="0.01" :zoom="0.7" bordered>
14
14
  <template v-slot="{move,ease,transform}">
15
15
  <div :class="{
16
- 'tree-rotate':rotate
17
- }">
16
+ 'tree-rotate':rotate
17
+ }">
18
18
  <r-tree-element :expand="expand"
19
19
  :link="link"
20
20
  :model-value="node"
21
- :openAll="openAll"
22
21
  :sortBy="sortBy"
23
22
  @expand="handleExpand(ease,move,transform,$event)"
24
23
  @select="handleSelect"
25
24
  @update:model-value="$emit('update:modelValue',$event)"
26
25
  >
27
26
  <template v-slot="{ item,nodeKey }">
27
+ <!-- Default slot for custom tree node content
28
+ @binding {Object} item - The tree node item
29
+ @binding {String} nodeKey - The key identifier for the node -->
28
30
  <slot :item="item" :nodeKey="nodeKey">{{ item }}</slot>
29
31
  </template>
30
32
  </r-tree-element>
@@ -32,110 +34,254 @@
32
34
  </template>
33
35
  </r-float>
34
36
  </r-container>
35
-
36
37
  </template>
37
- <script>
38
-
39
- export default {
40
- name: 'r-tree',
41
- props: {
42
- modelValue: Object,
43
- link: String,
44
- searchLink: String,
45
- sortBy: {
46
- type: String,
47
- default: 'gen'
48
- },
49
- gen: String,
50
- selected: String,
51
- rotate: Boolean,
52
- expand: {
53
- type: Boolean,
54
- default: false
55
- },
56
- childsName: {
57
- type: String,
58
- default: 'childs'
59
- },
60
- openAll: Boolean,
61
- headers: Object
62
- },
63
- emits: ['update:modelValue', 'select-node'],
64
- data() {
65
- return {
66
- show: false,
67
- search: null,
68
- nodeParent: this.gen,
69
- node: this.modelValue
70
- }
71
- },
72
- created() {
73
- if (this.modelValue) {
74
- this.show = true
75
- } else if (this.link) {
76
- this.get()
77
- }
38
+ <script setup>
39
+ import {ref, computed, watch, inject} from 'vue'
40
+
41
+ /**
42
+ * @example // Tree usage
43
+ * <template>
44
+ * <r-tree style="height:600px" v-model="treeData" :link="link" :searchLink="searchLink" :gen="gen" :selected="selected" :rotate="rotate" :childsName="childsName" :openAll="openAll" :headers="headers" @update:model-Value="log(`update:modelValue`,$event)" @select-node="log(`select-node`,$event)">
45
+ * <template v-slot="{nodeKey,item}">
46
+ * <r-card class="pa-5 title-1 mx-1">{{nodeKey}}:{{item.name}}</r-card>
47
+ * </template>
48
+ * </r-tree>
49
+ * </template>
50
+ * <script>
51
+ * import { ref } from 'vue'
52
+ *
53
+ * const treeData = ref({
54
+ * "0": {
55
+ * "name": "Root",
56
+ * "childs": {
57
+ * "1": {
58
+ * "name": "Child 1",
59
+ * "childs": {
60
+ * "3": {
61
+ * "name": "Grandchild 1",
62
+ * "childs": {
63
+ * "4": {
64
+ * "name": "Great Grandchild 1",
65
+ * "childs": {
66
+ * "6": {
67
+ * "name": "Level 5 Node 1",
68
+ * "childs": {
69
+ * "7": {
70
+ * "name": "Level 6 Node 1",
71
+ * "childs": {},
72
+ * },
73
+ * "8": {
74
+ * "name": "Level 6 Node 2",
75
+ * "childs": {},
76
+ * }
77
+ * },
78
+ * }
79
+ * },
80
+ * },
81
+ * "5": {
82
+ * "name": "Great Grandchild 2",
83
+ * "childs": {},
84
+ * }
85
+ * },
86
+ * }
87
+ * },
88
+ * },
89
+ * "2": {
90
+ * "name": "Child 2",
91
+ * "childs": {},
92
+ * }
93
+ * },
94
+ * }
95
+ * })
96
+ *
97
+ * const link = ref(null)
98
+ * const searchLink = ref(null)
99
+ * const gen = ref("0") // Root node ID
100
+ * const selected = ref(null)
101
+ * const rotate = ref(false)
102
+ * const childsName = ref("childs") // Property name for children
103
+ * const openAll = ref(false)
104
+ * const headers = ref({})
105
+ *
106
+ * const log = (name, event) => {
107
+ * console.log(name, event)
108
+ * }
109
+ * <//script>
110
+ * */
111
+
112
+
113
+ const props = defineProps({
114
+ /**
115
+ * Tree data model
116
+ * @type {Object}
117
+ */
118
+ modelValue: Object,
119
+ /**
120
+ * API endpoint URL for fetching tree data
121
+ * @type {String}
122
+ */
123
+ link: String,
124
+ /**
125
+ * API endpoint URL for search functionality
126
+ * @type {String}
127
+ */
128
+ searchLink: String,
129
+ /**
130
+ * Property name to sort tree nodes by
131
+ * @type {String}
132
+ * @default 'gen'
133
+ */
134
+ sortBy: {
135
+ type: String,
136
+ default: 'gen'
78
137
  },
79
- watch: {
80
- modelValue: function (newVal) {
81
- this.node = newVal
82
- }
138
+ /**
139
+ * Initial node identifier to load
140
+ * @type {String}
141
+ */
142
+ gen: String,
143
+ /**
144
+ * Currently selected node identifier
145
+ * @type {String}
146
+ */
147
+ selected: String,
148
+ /**
149
+ * Rotates the tree layout
150
+ * @type {Boolean}
151
+ */
152
+ rotate: Boolean,
153
+ /**
154
+ * Expands all tree nodes by default
155
+ * @type {Boolean}
156
+ * @default false
157
+ */
158
+ expand: {
159
+ type: Boolean,
160
+ default: false
83
161
  },
84
- computed: {
85
- classes() {
86
- let a = {'tree-searchable': this.searchLink}
87
- a[`${this.$r.prefix}tree`] = true
88
- return a
89
- }
162
+ /**
163
+ * Property name for child nodes in tree data
164
+ * @type {String}
165
+ * @default 'childs'
166
+ */
167
+ childsName: {
168
+ type: String,
169
+ default: 'childs'
90
170
  },
91
- methods: {
92
- change(e) {
93
- if (e && "value" in e) {
94
- this.nodeParent = e.value
95
- this.show = false
96
- this.get()
97
- }
98
- },
99
- get() {
100
- this.$axios.get(this.link + this.nodeParent, {headers: this.headers})
101
- .then(({data}) => {
102
- this.node = data
103
- this.show = true
104
- })
105
- },
106
- handleExpand(ease, move, transform, $event) {
107
- const el = $event[1].getBoundingClientRect()
108
- ease()
109
- const node_info = $event[1].querySelector('.node-info').getBoundingClientRect()
110
- const card_h = node_info.height
111
- const card_w = node_info.width
112
- const parent = this.$refs.tree.$el
113
- const bb = this.$refs.tree.$el.getBoundingClientRect()
114
- move(parent.offsetWidth / 2 - (el.left - bb.left + ($event[0] ? el.width / 2 : el.width - card_w / 2)),
115
- parent.offsetHeight / 2 - (el.top - bb.top + (this.rotate ? el.height - card_h : card_h / 2)))
116
- },
117
- handleSelect(e) {
118
- this.$emit('select-node', e)
119
- }
171
+ /**
172
+ * Additional headers for API requests
173
+ * @type {Object}
174
+ */
175
+ headers: Object
176
+ })
177
+
178
+ const emit = defineEmits([
179
+ /**
180
+ * Emitted when tree data changes
181
+ * @param {Object} data - Updated tree data
182
+ */
183
+ 'update:modelValue',
184
+ /**
185
+ * Emitted when a tree node is selected
186
+ * @param {Object} node - Selected node data
187
+ */
188
+ 'select-node'
189
+ ])
190
+
191
+ const {$r} = inject('renusify')
192
+ const $axios = inject('axios')
193
+
194
+ const show = ref(false)
195
+ const search = ref(null)
196
+ const nodeParent = ref(props.gen)
197
+ const node = ref(props.modelValue)
198
+
199
+ const treeRef = ref(null)
200
+
201
+ const classes = computed(() => {
202
+ const a = {'tree-searchable': props.searchLink}
203
+ a[`${$r.prefix}tree`] = true
204
+ return a
205
+ })
206
+
207
+ /**
208
+ * Handles search selection changes
209
+ * @param {Object} e - Selected search item with value property
210
+ */
211
+ const change = (e) => {
212
+ if (e && "value" in e) {
213
+ nodeParent.value = e.value
214
+ show.value = false
215
+ get()
120
216
  }
121
217
  }
218
+
219
+ /**
220
+ * Fetches tree data from the API endpoint
221
+ */
222
+ const get = () => {
223
+ $axios.get(props.link + nodeParent.value, {headers: props.headers})
224
+ .then(({data}) => {
225
+ node.value = data
226
+ show.value = true
227
+ })
228
+ }
229
+
230
+ /**
231
+ * Handles tree node expansion with animation
232
+ * @param {Function} ease - Animation easing function
233
+ * @param {Function} move - Move function for positioning
234
+ * @param {Function} transform - Transform function
235
+ * @param {Array} $event - Event data containing node information
236
+ */
237
+ const handleExpand = (ease, move, transform, $event) => {
238
+ const el = $event[1].getBoundingClientRect()
239
+ ease()
240
+ const node_info = $event[1].querySelector('.node-info').getBoundingClientRect()
241
+ const card_h = node_info.height
242
+ const card_w = node_info.width
243
+ const parent = treeRef.value.$el
244
+ const bb = treeRef.value.$el.getBoundingClientRect()
245
+ move(parent.offsetWidth / 2 - (el.left - bb.left + ($event[0] ? el.width / 2 : el.width - card_w / 2)),
246
+ parent.offsetHeight / 2 - (el.top - bb.top + (props.rotate ? el.height - card_h : card_h / 2)))
247
+ }
248
+
249
+ /**
250
+ * Handles tree node selection
251
+ * @param {Object} e - Selected node data
252
+ */
253
+ const handleSelect = (e) => {
254
+ emit('select-node', e)
255
+ }
256
+
257
+ if (props.modelValue) {
258
+ show.value = true
259
+ } else if (props.link) {
260
+ get()
261
+ }
262
+
263
+ // Watchers
264
+ watch(() => props.modelValue, (newVal) => {
265
+ node.value = newVal
266
+ })
267
+
122
268
  </script>
123
269
  <style lang="scss">
124
- @use "../../style/variables/base";
270
+ @use "../../style" as *;
125
271
 
126
272
  $distance: 20px;
127
- .#{base.$prefix}tree {
273
+ .#{$prefix}tree {
128
274
  position: relative;
129
275
  width: 100%;
130
276
  height: 100%;
131
277
 
132
278
  &.tree-searchable {
133
- .#{base.$prefix}float {
279
+ .#{$prefix}float {
134
280
  height: calc(100% - 70px)
135
281
  }
136
282
  }
137
283
 
138
- .#{base.$prefix}float {
284
+ .#{$prefix}float {
139
285
  direction: ltr;
140
286
  }
141
287
 
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <r-container v-if="show" full-width :class="`${$r.prefix}tree-element px-0`" ref="tree">
2
+ <r-container v-if="show" ref="treeRef" :class="`${$r.prefix}tree-element px-0`" full-width>
3
3
  <r-row class="h-center flex-nowrap no-gutters">
4
4
  <r-col class="text-center">
5
5
  <div class="d-flex h-center mb-1 node-info" @click.prevent="$emit('select',{key:nodeKey,item:node[nodeKey]})">
@@ -28,7 +28,7 @@
28
28
  :model-value="{[child['gen']]:child}"
29
29
  @expand="handleExpand"
30
30
  :expand="expand"
31
- :openAll="openAll"
31
+ :sort-by="sortBy"
32
32
  @select="$emit('select',$event)"
33
33
  >
34
34
  <template v-slot="{ item,nodeKey }">
@@ -39,11 +39,10 @@
39
39
  </r-row>
40
40
  </r-container>
41
41
  </template>
42
- <script>
42
+ <script setup>
43
+ import {ref, computed, inject} from 'vue'
43
44
 
44
- export default {
45
- name: 'r-tree-element',
46
- props: {
45
+ const props = defineProps({
47
46
  modelValue: Object,
48
47
  link: String,
49
48
  parentNode: String,
@@ -59,120 +58,122 @@ export default {
59
58
  type: String,
60
59
  default: 'childs'
61
60
  },
62
- openAll: Boolean,
63
61
  headers: Object
64
- },
65
- emits:['update:modelValue','fire','select','expand'],
66
- data() {
67
- return {
68
- back: false,
69
- show: false,
70
- loading: false,
71
- open: this.expand,
72
- }
73
- },
74
- mounted() {
75
- if (this.modelValue) {
76
- this.show = true
77
- }
78
- if (this.openAll && this.childs.length > 0) {
79
- this.open = true;
80
- }
81
- },
82
- computed: {
83
- node() {
84
- return this.modelValue
85
- },
86
- size() {
87
- return this.childs.length
88
- },
89
- childs() {
90
- let res = []
91
- if (!this.node || !(this.nodeKey in this.node) || !(this.childsName in this.node[this.nodeKey])) {
92
- return res
93
- }
94
- const childs = this.node[this.nodeKey][this.childsName]
62
+ })
95
63
 
96
- let s = []
97
- for (const key in childs) {
98
- if (this.$helper.hasKey(childs, key)) {
99
- if (childs[key]['gen'] === undefined) {
100
- childs[key]['gen'] = key
101
- }
102
- s.push({
103
- 'key': key,
104
- 'value': childs[key]
105
- })
106
- }
107
- }
108
- const sortBy = this.sortBy
109
- s.sort(function (a, b) {
110
- if (a['value'][sortBy] !== undefined) {
111
- if (b['value'][sortBy] !== undefined) {
112
- if (typeof a['value'][sortBy] === 'number' && typeof b['value'][sortBy] === 'number') {
113
- return a['value'][sortBy] - b['value'][sortBy];
114
- } else {
115
- return String(a['value'][sortBy]).localeCompare(String(b['value'][sortBy]));
116
- }
117
- }
118
- return -1;
119
- }
120
- return b['value'][sortBy] !== undefined ? 1 : 0;
121
- });
122
- const lng = s.length
123
- for (let i = 0; i < lng; i++) {
124
- res.push(s[i]['value'])
125
- }
126
- return res
127
- },
128
- nodeKey() {
129
- const keys = Object.keys(this.node)
130
- if (keys) {
131
- return keys[0]
64
+ const emit = defineEmits(['update:modelValue', 'fire', 'select', 'expand'])
65
+
66
+ const {$helper} = inject('renusify')
67
+ const $axios = inject('axios')
68
+
69
+ const show = ref(false)
70
+ const loading = ref(false)
71
+ const open = ref(props.expand)
72
+
73
+ const treeRef = ref(null)
74
+
75
+ const node = computed(() => props.modelValue)
76
+
77
+ const size = computed(() => childs.value.length)
78
+
79
+ const childs = computed(() => {
80
+ const res = []
81
+ const nodeKeyValue = nodeKey.value
82
+
83
+ if (!node.value || !nodeKeyValue || !(nodeKeyValue in node.value) || !(props.childsName in node.value[nodeKeyValue])) {
84
+ return res
85
+ }
86
+
87
+ const childs = node.value[nodeKeyValue][props.childsName]
88
+ const s = []
89
+
90
+ for (const key in childs) {
91
+ if ($helper.hasKey(childs, key)) {
92
+ if (childs[key]['gen'] === undefined) {
93
+ childs[key]['gen'] = key
132
94
  }
133
- return false
95
+ s.push({
96
+ 'key': key,
97
+ 'value': childs[key]
98
+ })
134
99
  }
135
- },
136
- methods: {
137
- updateNode(e, key) {
138
- let res = Object.assign({}, this.modelValue)
139
- res[this.nodeKey][this.childsName][key] = e[key]
140
- this.$emit('update:modelValue', this.modelValue)
141
- },
142
- handleExpand(e, current) {
143
- if (current) {
144
- if (this.link && this.size === 0) {
145
- this.loading = true
146
- this.$axios.get(this.link + e, {headers: this.headers})
147
- .then(({data}) => {
148
- this.$emit('update:modelValue', data)
149
- this.open = !this.open
150
- setTimeout(() => {
151
- this.$emit('expand', [this.open, this.$refs.tree.$el])
152
- }, 220)
153
- this.loading = false
154
- }, () => {
155
- this.loading = false
156
- })
100
+ }
101
+
102
+ const sortBy = props.sortBy
103
+ s.sort(function (a, b) {
104
+ if (a['value'][sortBy] !== undefined) {
105
+ if (b['value'][sortBy] !== undefined) {
106
+ if (typeof a['value'][sortBy] === 'number' && typeof b['value'][sortBy] === 'number') {
107
+ return a['value'][sortBy] - b['value'][sortBy]
157
108
  } else {
158
- this.open = !this.open
159
- setTimeout(() => {
160
- this.$emit('expand', [this.open, this.$refs.tree.$el])
161
- }, 250)
109
+ return String(a['value'][sortBy]).localeCompare(String(b['value'][sortBy]))
162
110
  }
163
-
164
- } else {
165
- this.$emit('expand', e)
166
111
  }
112
+ return -1
113
+ }
114
+ return b['value'][sortBy] !== undefined ? 1 : 0
115
+ })
116
+
117
+ const lng = s.length
118
+ for (let i = 0; i < lng; i++) {
119
+ res.push(s[i]['value'])
120
+ }
121
+
122
+ return res
123
+ })
124
+
125
+ const nodeKey = computed(() => {
126
+ if (!node.value) return false
127
+
128
+ const keys = Object.keys(node.value)
129
+ if (keys.length > 0) {
130
+ return keys[0]
131
+ }
132
+
133
+ return false
134
+ })
135
+
136
+ const updateNode = (e, key) => {
137
+ const res = {...props.modelValue}
138
+ res[nodeKey.value][props.childsName][key] = e[key]
139
+ emit('update:modelValue', props.modelValue)
140
+ }
141
+
142
+ const handleExpand = (e, current) => {
143
+ if (current) {
144
+ if (props.link && size.value === 0) {
145
+ loading.value = true
146
+ $axios.get(props.link + e, {headers: props.headers})
147
+ .then(({data}) => {
148
+ emit('update:modelValue', data)
149
+ open.value = !open.value
150
+ setTimeout(() => {
151
+ emit('expand', [open.value, treeRef.value.$el])
152
+ }, 220)
153
+ loading.value = false
154
+ })
155
+ .catch(() => {
156
+ loading.value = false
157
+ })
158
+ } else {
159
+ open.value = !open.value
160
+ setTimeout(() => {
161
+ emit('expand', [open.value, treeRef.value.$el])
162
+ }, 250)
167
163
  }
164
+ } else {
165
+ emit('expand', e)
168
166
  }
169
167
  }
168
+ if (props.modelValue) {
169
+ show.value = true
170
+ }
170
171
  </script>
171
172
  <style lang="scss">
172
- @use "../../style/variables/base";
173
+ @use "../../style" as *;
173
174
 
174
175
  $distance: 20px;
175
- .#{base.$prefix}tree-element {
176
+ .#{$prefix}tree-element {
176
177
  direction: ltr;
177
178
  position: relative;
178
179
  display: table;