@hostlink/nuxt-light 0.0.13 → 0.0.15
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/dist/module.json +1 -1
- package/dist/runtime/components/l-app.vue +1 -1
- package/dist/runtime/components/l-form.vue +1 -1
- package/dist/runtime/pages/EventLog/_eventlog_id/view.vue +1 -3
- package/dist/runtime/pages/System/menu/index.vue +224 -0
- package/dist/runtime/routes.mjs +10 -0
- package/package.json +1 -1
package/dist/module.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import { ref } from "vue";
|
|
3
3
|
import { useRouter, useRoute } from "vue-router";
|
|
4
|
+
import { useQuasar } from "quasar";
|
|
4
5
|
|
|
5
6
|
const route = useRoute();
|
|
6
7
|
const router = useRouter();
|
|
@@ -16,7 +17,6 @@ const props = defineProps({
|
|
|
16
17
|
const que = useQuasar();
|
|
17
18
|
const emit = defineEmits(["save"]);
|
|
18
19
|
const save = async () => {
|
|
19
|
-
console.log(form.value)
|
|
20
20
|
|
|
21
21
|
let valid = await form.value.validate();
|
|
22
22
|
if (!valid) return;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import { getObject } from "
|
|
2
|
+
import { getObject } from "../../../light"
|
|
3
3
|
const obj = await getObject(["eventlog_id", "class", "id", "action", "created_time", "username"]);
|
|
4
4
|
</script>
|
|
5
5
|
<template>
|
|
@@ -12,8 +12,6 @@ const obj = await getObject(["eventlog_id", "class", "id", "action", "created_ti
|
|
|
12
12
|
<l-item label="Action">{{ obj.action }}</l-item>
|
|
13
13
|
<l-item label="Created time">{{ obj.created_time }}</l-item>
|
|
14
14
|
<l-item label="Username">{{ obj.username }}</l-item>
|
|
15
|
-
|
|
16
|
-
|
|
17
15
|
</l-list>
|
|
18
16
|
</l-card>
|
|
19
17
|
</l-page>
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { reactive, ref, computed } from 'vue';
|
|
3
|
+
import { m, q } from "../../../light";
|
|
4
|
+
import { useQuasar } from 'quasar';
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const quasar = useQuasar();
|
|
8
|
+
const menus = ref(await q("appMenus", []));
|
|
9
|
+
|
|
10
|
+
const selected = ref(null);
|
|
11
|
+
const tree1 = ref(null)
|
|
12
|
+
|
|
13
|
+
const getUUID = () => {
|
|
14
|
+
//iso v4
|
|
15
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
16
|
+
let r = Math.random() * 16 | 0,
|
|
17
|
+
v = c == 'x' ? r : (r & 0x3 | 0x8);
|
|
18
|
+
return v.toString(16);
|
|
19
|
+
}).toUpperCase();
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const onReload = async () => {
|
|
24
|
+
menus.value = await q("appMenus", []);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const onAdd = () => {
|
|
28
|
+
|
|
29
|
+
quasar.dialog({
|
|
30
|
+
title: 'Add Menu',
|
|
31
|
+
message: 'Enter menu label',
|
|
32
|
+
prompt: {
|
|
33
|
+
model: '',
|
|
34
|
+
},
|
|
35
|
+
cancel: true,
|
|
36
|
+
persistent: true,
|
|
37
|
+
}).onOk((data) => {
|
|
38
|
+
if (data === '') return;
|
|
39
|
+
|
|
40
|
+
menus.value.push({
|
|
41
|
+
label: data,
|
|
42
|
+
uuid: getUUID(),
|
|
43
|
+
children: [],
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
const onAddChild = (node) => {
|
|
49
|
+
|
|
50
|
+
quasar.dialog({
|
|
51
|
+
title: 'Add Child Menu',
|
|
52
|
+
message: 'Enter menu label',
|
|
53
|
+
prompt: {
|
|
54
|
+
model: '',
|
|
55
|
+
},
|
|
56
|
+
cancel: true,
|
|
57
|
+
persistent: true,
|
|
58
|
+
}).onOk((data) => {
|
|
59
|
+
if (data === '') return;
|
|
60
|
+
|
|
61
|
+
node.children.push({
|
|
62
|
+
label: data,
|
|
63
|
+
uuid: getUUID(),
|
|
64
|
+
parent: node.uuid,
|
|
65
|
+
children: [],
|
|
66
|
+
});
|
|
67
|
+
tree1.value.setExpanded(selected.value, true)
|
|
68
|
+
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
const onRemove = (node) => {
|
|
72
|
+
const parent = node.parent;
|
|
73
|
+
if (parent) {
|
|
74
|
+
const parentNode = tree1.value.getNodeByKey(parent);
|
|
75
|
+
parentNode.children = parentNode.children.filter((item) => item.uuid !== node.uuid);
|
|
76
|
+
selected.value = parent;
|
|
77
|
+
|
|
78
|
+
} else {
|
|
79
|
+
menus.value = menus.value.filter((item) => item.uuid !== node.uuid);
|
|
80
|
+
|
|
81
|
+
selected.value = null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const splitterModel = ref(50)
|
|
86
|
+
|
|
87
|
+
const selectedNode = computed(() => {
|
|
88
|
+
return tree1.value.getNodeByKey(selected.value);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
const onSave = () => {
|
|
92
|
+
|
|
93
|
+
//confirm
|
|
94
|
+
quasar.dialog({
|
|
95
|
+
title: 'Save Menu',
|
|
96
|
+
message: 'Are you sure to save menu?',
|
|
97
|
+
cancel: true,
|
|
98
|
+
persistent: true,
|
|
99
|
+
}).onOk(async () => {
|
|
100
|
+
if (await m("updateAppMenus", {
|
|
101
|
+
data: menus.value
|
|
102
|
+
})) {
|
|
103
|
+
quasar.notify({
|
|
104
|
+
message: 'Menu saved',
|
|
105
|
+
color: 'positive',
|
|
106
|
+
icon: 'check',
|
|
107
|
+
position: 'top',
|
|
108
|
+
timeout: 1000,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const showMove = ref(false)
|
|
116
|
+
const onMove = () => {
|
|
117
|
+
showMove.value = true;
|
|
118
|
+
}
|
|
119
|
+
const moveTarget = ref(null)
|
|
120
|
+
|
|
121
|
+
const onMoveConfirm = () => {
|
|
122
|
+
|
|
123
|
+
const selectedNode = tree1.value.getNodeByKey(selected.value);
|
|
124
|
+
|
|
125
|
+
//clone selected node
|
|
126
|
+
const newNode = JSON.parse(JSON.stringify(selectedNode));
|
|
127
|
+
|
|
128
|
+
onRemove(selectedNode);
|
|
129
|
+
|
|
130
|
+
//add to target
|
|
131
|
+
newNode.parent = moveTarget.value;
|
|
132
|
+
let targetNode = tree1.value.getNodeByKey(moveTarget.value);
|
|
133
|
+
targetNode.children = targetNode.children || [];
|
|
134
|
+
targetNode.children.push(newNode);
|
|
135
|
+
|
|
136
|
+
tree1.value.setExpanded(moveTarget.value, true)
|
|
137
|
+
|
|
138
|
+
showMove.value = false;
|
|
139
|
+
|
|
140
|
+
}
|
|
141
|
+
const onMoveToRoot = () => {
|
|
142
|
+
const selectedNode = tree1.value.getNodeByKey(selected.value);
|
|
143
|
+
|
|
144
|
+
//clone selected node
|
|
145
|
+
const newNode = JSON.parse(JSON.stringify(selectedNode));
|
|
146
|
+
newNode.parent = null;
|
|
147
|
+
onRemove(selectedNode);
|
|
148
|
+
|
|
149
|
+
//add to target
|
|
150
|
+
|
|
151
|
+
menus.value.push(newNode);
|
|
152
|
+
|
|
153
|
+
showMove.value = false;
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
</script>
|
|
159
|
+
|
|
160
|
+
<template>
|
|
161
|
+
<l-page>
|
|
162
|
+
<q-dialog v-model="showMove">
|
|
163
|
+
<l-card>
|
|
164
|
+
<q-card-section>
|
|
165
|
+
<q-tree :nodes="menus" selected-color="primary" default-expand-all v-model:selected="moveTarget"
|
|
166
|
+
node-key="uuid" ref="tree2" />
|
|
167
|
+
</q-card-section>
|
|
168
|
+
|
|
169
|
+
<q-card-actions align="right">
|
|
170
|
+
<q-btn flat label="Cancel" color="primary" v-close-popup />
|
|
171
|
+
<q-btn flat label="Move" color="primary" @click="onMoveConfirm" />
|
|
172
|
+
<q-btn flat label="Move to root" color="primary" @click="onMoveToRoot" />
|
|
173
|
+
</q-card-actions>
|
|
174
|
+
</l-card>
|
|
175
|
+
</q-dialog>
|
|
176
|
+
|
|
177
|
+
<l-card>
|
|
178
|
+
<q-splitter v-model="splitterModel" style="height:680px">
|
|
179
|
+
<template #before>
|
|
180
|
+
<q-card-section>
|
|
181
|
+
<q-btn outline rounded color="primary" @click="onAdd" label="Add" icon="sym_o_add" />
|
|
182
|
+
<q-btn outline rounded color="primary" @click="onReload" label="Reload" icon="sym_o_refresh" />
|
|
183
|
+
|
|
184
|
+
<q-btn outline rounded color="primary" @click="onSave" label="Save" icon="sym_o_save" />
|
|
185
|
+
</q-card-section>
|
|
186
|
+
|
|
187
|
+
<q-tree :nodes="menus" selected-color="primary" default-expand-all v-model:selected="selected"
|
|
188
|
+
node-key="uuid" ref="tree1" />
|
|
189
|
+
</template>
|
|
190
|
+
|
|
191
|
+
<template #after v-if="selected">
|
|
192
|
+
|
|
193
|
+
<q-card-section>
|
|
194
|
+
<q-btn outline rounded color="primary" @click="onRemove(selectedNode)" label="Remove"
|
|
195
|
+
icon="sym_o_remove" />
|
|
196
|
+
<q-btn outline rounded color="primary" @click="onAddChild(selectedNode)" label="Add Child"
|
|
197
|
+
icon="sym_o_add" />
|
|
198
|
+
|
|
199
|
+
<q-btn outline rounded color="primary" @click="onMove(selectedNode)" label="Move"
|
|
200
|
+
icon="sym_o_move" />
|
|
201
|
+
|
|
202
|
+
</q-card-section>
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
<q-card-section>
|
|
206
|
+
<q-form>
|
|
207
|
+
<l-input label="Label" v-model="selectedNode.label" />
|
|
208
|
+
<l-input label="To" v-model="selectedNode.to" />
|
|
209
|
+
<l-input label="Icon" v-model="selectedNode.icon" />
|
|
210
|
+
<l-input label="Permission" v-model="selectedNode.permission" />
|
|
211
|
+
<l-input label="UUID" v-model="selectedNode.uuid" readonly />
|
|
212
|
+
|
|
213
|
+
</q-form>
|
|
214
|
+
</q-card-section>
|
|
215
|
+
</template>
|
|
216
|
+
|
|
217
|
+
</q-splitter>
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
</l-card>
|
|
222
|
+
|
|
223
|
+
</l-page>
|
|
224
|
+
</template>
|
package/dist/runtime/routes.mjs
CHANGED
|
@@ -78,6 +78,11 @@ function System_view_as() {
|
|
|
78
78
|
/* webpackChunkName: "System-view_as" */ './pages/System/view_as.vue'
|
|
79
79
|
)
|
|
80
80
|
}
|
|
81
|
+
function System_menu_index() {
|
|
82
|
+
return import(
|
|
83
|
+
/* webpackChunkName: "System-menu-index" */ './pages/System/menu/index.vue'
|
|
84
|
+
)
|
|
85
|
+
}
|
|
81
86
|
function User_add() {
|
|
82
87
|
return import(/* webpackChunkName: "User-add" */ './pages/User/add.vue')
|
|
83
88
|
}
|
|
@@ -213,6 +218,11 @@ export default [
|
|
|
213
218
|
path: '/System/view_as',
|
|
214
219
|
component: System_view_as,
|
|
215
220
|
},
|
|
221
|
+
{
|
|
222
|
+
name: 'System-menu',
|
|
223
|
+
path: '/System/menu',
|
|
224
|
+
component: System_menu_index,
|
|
225
|
+
},
|
|
216
226
|
{
|
|
217
227
|
name: 'User-add',
|
|
218
228
|
path: '/User/add',
|