@hostlink/nuxt-light 0.0.99 → 0.0.101
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/module.mjs +1 -2
- package/dist/runtime/components/l-app-main.vue +2 -2
- package/dist/runtime/components/l-customizer.vue +4 -3
- package/dist/runtime/components/l-table.vue +109 -68
- package/dist/runtime/lib/SystemValue.d.ts +4 -3
- package/dist/runtime/lib/SystemValue.mjs +1 -8
- package/dist/runtime/lib/sv.d.ts +4 -1
- package/dist/runtime/lib/sv.mjs +11 -8
- package/dist/runtime/pages/User/_user_id/view.vue +38 -2
- package/dist/runtime/types/User.mjs +4 -7
- package/package.json +1 -1
- package/dist/runtime/lib/loadSV.d.ts +0 -3
- package/dist/runtime/lib/loadSV.mjs +0 -4
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -59,8 +59,7 @@ const module = defineNuxtModule({
|
|
|
59
59
|
{ name: "getModelColumns", from },
|
|
60
60
|
{ name: "getModelFields", from },
|
|
61
61
|
{ name: "getModelField", from },
|
|
62
|
-
{ name: "getGQLFields", from }
|
|
63
|
-
{ name: "sv", from }
|
|
62
|
+
{ name: "getGQLFields", from }
|
|
64
63
|
]);
|
|
65
64
|
addPlugin({
|
|
66
65
|
src: resolver.resolve("./runtime/plugin"),
|
|
@@ -7,9 +7,9 @@ import { ref, computed, reactive, provide, watch } from 'vue';
|
|
|
7
7
|
import { useRuntimeConfig } from 'nuxt/app';
|
|
8
8
|
|
|
9
9
|
//download system value
|
|
10
|
-
import { download } from './../lib/SystemValue'
|
|
10
|
+
/* import { download } from './../lib/SystemValue'
|
|
11
11
|
await download();
|
|
12
|
-
|
|
12
|
+
*/
|
|
13
13
|
const config = useRuntimeConfig();
|
|
14
14
|
|
|
15
15
|
const appVersion = config.public.appVersion ?? '0.0.1';
|
|
@@ -31,10 +31,11 @@ const COLORS = [
|
|
|
31
31
|
|
|
32
32
|
defineEmits(['update:theme', 'update:menuOverlayHeader', 'update:dense', 'update:color', 'update:miniState', 'update:footer'])
|
|
33
33
|
|
|
34
|
-
const color = defineModel("color", { type: String, default: "primary" })
|
|
35
|
-
|
|
36
|
-
|
|
37
34
|
const props = defineProps({
|
|
35
|
+
color: {
|
|
36
|
+
type: String,
|
|
37
|
+
default: 'primary'
|
|
38
|
+
},
|
|
38
39
|
menuOverlayHeader: {
|
|
39
40
|
type: Boolean,
|
|
40
41
|
default: false
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import { reactive } from 'vue'
|
|
3
2
|
import { useQuasar, QTable } from 'quasar';
|
|
4
3
|
import { ref, computed, onMounted, useSlots, useAttrs } from "vue";
|
|
5
4
|
import { t, deleteObject, q, useLight, GQLFieldBuilder } from '../';
|
|
5
|
+
import { toQuery } from '@hostlink/light';
|
|
6
6
|
|
|
7
7
|
const errors = ref<InstanceType<any>>([]);
|
|
8
8
|
|
|
@@ -20,7 +20,7 @@ const props = defineProps({
|
|
|
20
20
|
sortable?: boolean,
|
|
21
21
|
searchable?: boolean,
|
|
22
22
|
searchType?: string,
|
|
23
|
-
searchOptions?: Array<any
|
|
23
|
+
searchOptions?: Array<any> | Function,
|
|
24
24
|
searchMultiple?: boolean,
|
|
25
25
|
field?: string | Object,
|
|
26
26
|
gqlField?: string | Array<string> | Object,
|
|
@@ -95,6 +95,19 @@ props.columns?.forEach((col) => {
|
|
|
95
95
|
col.label = t(col.label)
|
|
96
96
|
})
|
|
97
97
|
|
|
98
|
+
if (props.columns) {
|
|
99
|
+
for (let i = 0; i < props.columns.length; i++) {
|
|
100
|
+
if (props.columns[i].searchOptions) {
|
|
101
|
+
let opts = props.columns[i].searchOptions;
|
|
102
|
+
if (typeof opts == "function") {
|
|
103
|
+
props.columns[i].searchOptions = await opts();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
98
111
|
const renderColumns = computed(() => {
|
|
99
112
|
if (props.columns == undefined) return undefined;
|
|
100
113
|
|
|
@@ -114,8 +127,26 @@ const renderColumns = computed(() => {
|
|
|
114
127
|
})
|
|
115
128
|
|
|
116
129
|
interface LTableRequest {
|
|
117
|
-
|
|
118
|
-
|
|
130
|
+
sort: string,
|
|
131
|
+
fields: Array<string>,
|
|
132
|
+
gql: {
|
|
133
|
+
data: {
|
|
134
|
+
__args: {
|
|
135
|
+
limit: number
|
|
136
|
+
},
|
|
137
|
+
[key: string]: any
|
|
138
|
+
},
|
|
139
|
+
meta: {
|
|
140
|
+
total: boolean,
|
|
141
|
+
key: boolean,
|
|
142
|
+
name: boolean
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
offset: number,
|
|
146
|
+
limit: number,
|
|
147
|
+
loadData: (model: string, filters: any, fields: Array<any>) => void,
|
|
148
|
+
loadObjects: (model: string, filters: any, fields: Array<any>) => void,
|
|
149
|
+
setData: (data: { data: Array<{ data: any }>, meta: { total: Number, key: string, name: string } }) => void,
|
|
119
150
|
}
|
|
120
151
|
|
|
121
152
|
const emits = defineEmits<{
|
|
@@ -242,94 +273,104 @@ const getData = async (
|
|
|
242
273
|
|
|
243
274
|
const onRequest = async (p: any) => {
|
|
244
275
|
|
|
276
|
+
let sort = "";
|
|
277
|
+
if (p.pagination.sortBy) {
|
|
278
|
+
sort = p.pagination.sortBy + ":" + (p.pagination.descending ? "desc" : "asc");
|
|
279
|
+
}
|
|
245
280
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
async loadData(operation: string, filters: any = null, fields: Array<any> = []) {
|
|
252
|
-
|
|
281
|
+
//fields
|
|
282
|
+
const builder = GQLFieldBuilder();
|
|
283
|
+
if (props.rowKey) {
|
|
284
|
+
builder.add(props.rowKey);
|
|
285
|
+
}
|
|
253
286
|
|
|
254
|
-
|
|
287
|
+
props.columns?.forEach((col) => {
|
|
288
|
+
if (col.gqlField) {
|
|
289
|
+
builder.add(col.gqlField);
|
|
290
|
+
}
|
|
255
291
|
|
|
256
|
-
|
|
292
|
+
if (col.name.startsWith("_")) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
builder.add(col.name);
|
|
257
296
|
|
|
258
|
-
|
|
259
|
-
builder.add(props.rowKey);
|
|
260
|
-
}
|
|
297
|
+
});
|
|
261
298
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
299
|
+
if (actionView) {
|
|
300
|
+
builder.add("canView");
|
|
301
|
+
}
|
|
265
302
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
}
|
|
303
|
+
if (actionDelete) {
|
|
304
|
+
builder.add("canDelete");
|
|
305
|
+
}
|
|
270
306
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
builder.add(col.name);
|
|
307
|
+
if (activeEdit) {
|
|
308
|
+
builder.add("canUpdate");
|
|
309
|
+
}
|
|
275
310
|
|
|
276
|
-
});
|
|
277
311
|
|
|
278
|
-
|
|
279
|
-
|
|
312
|
+
const callback = {
|
|
313
|
+
sort: sort,
|
|
314
|
+
fields: builder.get(),
|
|
315
|
+
offset: (p.pagination.page - 1) * p.pagination.rowsPerPage,
|
|
316
|
+
limit: p.pagination.rowsPerPage,
|
|
317
|
+
gql: {
|
|
318
|
+
__args: {
|
|
319
|
+
filters: getFilterValue(),
|
|
320
|
+
sort: sort
|
|
321
|
+
},
|
|
322
|
+
data: {
|
|
323
|
+
__args: {
|
|
324
|
+
limit: p.pagination.rowsPerPage,
|
|
325
|
+
offset: (p.pagination.page - 1) * p.pagination.rowsPerPage
|
|
326
|
+
},
|
|
327
|
+
...toQuery(builder.get())
|
|
328
|
+
},
|
|
329
|
+
meta: {
|
|
330
|
+
total: true,
|
|
331
|
+
key: true,
|
|
332
|
+
name: true
|
|
280
333
|
}
|
|
334
|
+
},
|
|
335
|
+
setData(data: { data: Array<{ data: any }>, meta: { total: Number, key: string, name: string } }) {
|
|
336
|
+
rows.value = data.data;
|
|
337
|
+
primaryKey.value = data.meta.key;
|
|
338
|
+
modelName.value = data.meta.name;
|
|
339
|
+
pagination.value.rowsNumber = data.meta.total;
|
|
281
340
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
341
|
+
pagination.value.page = p.pagination.page;
|
|
342
|
+
pagination.value.sortBy = p.pagination.sortBy;
|
|
343
|
+
pagination.value.descending = p.pagination.descending;
|
|
344
|
+
pagination.value.rowsPerPage = p.pagination.rowsPerPage;
|
|
285
345
|
|
|
286
|
-
|
|
287
|
-
builder.add("canUpdate");
|
|
288
|
-
}
|
|
346
|
+
loading.value = false;
|
|
289
347
|
|
|
290
|
-
|
|
348
|
+
validateData();
|
|
349
|
+
},
|
|
350
|
+
loadObjects(model: string, filters: any = null, fields: Array<any> = []) {
|
|
351
|
+
return this.loadData("list" + model, filters, fields);
|
|
352
|
+
},
|
|
353
|
+
async loadData(operation: string, filters: any = null, fields: Array<any> = []) {
|
|
354
|
+
fields.forEach((f) => {
|
|
355
|
+
builder.add(f);
|
|
356
|
+
})
|
|
291
357
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
console.log("local filters", getFilterValue())
|
|
295
|
-
*/ //merge the filters
|
|
358
|
+
let localFilters = getFilterValue();
|
|
296
359
|
if (filters) {
|
|
297
360
|
localFilters = {
|
|
298
361
|
...localFilters,
|
|
299
362
|
...filters
|
|
300
363
|
}
|
|
301
364
|
}
|
|
302
|
-
|
|
303
|
-
let sort = "";
|
|
304
|
-
if (p.pagination.sortBy) {
|
|
305
|
-
sort = p.pagination.sortBy + ":" + (p.pagination.descending ? "desc" : "asc");
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
|
|
309
365
|
loading.value = true;
|
|
310
|
-
const
|
|
311
|
-
|
|
312
|
-
const allData = await getData(operation, localFilters, sort, offset, limit, builder.get());
|
|
313
|
-
|
|
314
|
-
rows.value = allData.data;
|
|
315
|
-
|
|
316
|
-
//meta
|
|
317
|
-
primaryKey.value = allData.meta.key;
|
|
318
|
-
modelName.value = allData.meta.name;
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
//pagination.value.rowsPerPage = p.pagination.rowsPerPage;
|
|
322
|
-
pagination.value.page = p.pagination.page;
|
|
323
|
-
pagination.value.sortBy = p.pagination.sortBy;
|
|
324
|
-
pagination.value.descending = p.pagination.descending;
|
|
325
|
-
pagination.value.rowsNumber = allData.meta.total;
|
|
326
|
-
|
|
327
|
-
loading.value = false;
|
|
328
|
-
validateData()
|
|
366
|
+
const allData = await getData(operation, localFilters, sort, this.offset, this.limit, builder.get());
|
|
367
|
+
this.setData(allData);
|
|
329
368
|
|
|
330
369
|
}
|
|
331
370
|
}
|
|
332
371
|
|
|
372
|
+
|
|
373
|
+
loading.value = true;
|
|
333
374
|
//emits("request", p);
|
|
334
375
|
emits("request", callback);
|
|
335
376
|
|
|
@@ -430,8 +471,8 @@ const filterFn = (val, update, abort) {
|
|
|
430
471
|
|
|
431
472
|
const isDark = computed(() => {
|
|
432
473
|
return light.theme == "dark";
|
|
433
|
-
|
|
434
474
|
})
|
|
475
|
+
|
|
435
476
|
</script>
|
|
436
477
|
|
|
437
478
|
<template>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export declare const loadSV: (name: string) => () => Promise<{
|
|
2
|
+
label: string;
|
|
3
|
+
value: any;
|
|
4
|
+
}>;
|
|
4
5
|
export declare const getSV: (name: string, value: any) => string;
|
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
import sv from "./sv.mjs";
|
|
2
2
|
import { cache } from "./sv.mjs";
|
|
3
|
-
export const sv_data = [];
|
|
4
3
|
export const loadSV = (name) => {
|
|
5
|
-
|
|
6
|
-
};
|
|
7
|
-
export const download = async () => {
|
|
8
|
-
for (let i = 0; i < sv_data.length; i++) {
|
|
9
|
-
const name = sv_data[i];
|
|
10
|
-
await sv(name);
|
|
11
|
-
}
|
|
4
|
+
return () => sv(name);
|
|
12
5
|
};
|
|
13
6
|
export const getSV = (name, value) => {
|
|
14
7
|
const data = cache[name];
|
package/dist/runtime/lib/sv.d.ts
CHANGED
package/dist/runtime/lib/sv.mjs
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { query } from "@hostlink/light";
|
|
2
2
|
export const cache = {};
|
|
3
|
-
export default
|
|
3
|
+
export default (name) => {
|
|
4
4
|
if (cache[name]) {
|
|
5
5
|
return cache[name];
|
|
6
6
|
}
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
const p = new Promise(async (resolve, reject) => {
|
|
8
|
+
const resp = await query({
|
|
9
|
+
systemValue: {
|
|
10
|
+
__args: {
|
|
11
|
+
name
|
|
12
|
+
}
|
|
11
13
|
}
|
|
12
|
-
}
|
|
14
|
+
});
|
|
15
|
+
cache[name] = resp.systemValue;
|
|
16
|
+
resolve(resp.systemValue);
|
|
13
17
|
});
|
|
14
|
-
|
|
15
|
-
return resp.systemValue;
|
|
18
|
+
return p;
|
|
16
19
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import { getObject, getModelFields } from '../../../';
|
|
2
|
+
import { getObject, getModelFields, q, getModelColumns } from '../../../';
|
|
3
3
|
const obj = await getObject(["user_id", "username", "first_name", "last_name", "email", "phone", "roles", 'status', 'join_date']);
|
|
4
4
|
|
|
5
5
|
</script>
|
|
@@ -11,7 +11,7 @@ const obj = await getObject(["user_id", "username", "first_name", "last_name", "
|
|
|
11
11
|
<l-btn to="update-role" icon="sym_o_people" permission="user.role.add" label="Update role"></l-btn>
|
|
12
12
|
</template>
|
|
13
13
|
|
|
14
|
-
<l-card>
|
|
14
|
+
<l-card class="q-mb-md">
|
|
15
15
|
<l-list v-model="obj" :fields="getModelFields('User', [
|
|
16
16
|
'username',
|
|
17
17
|
'first_name',
|
|
@@ -24,5 +24,41 @@ const obj = await getObject(["user_id", "username", "first_name", "last_name", "
|
|
|
24
24
|
])">
|
|
25
25
|
</l-list>
|
|
26
26
|
</l-card>
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
<l-tabs>
|
|
31
|
+
|
|
32
|
+
<l-tab label="Event log">
|
|
33
|
+
<l-table row-key="eventlog_id" sort-by="eventlog_id:desc"
|
|
34
|
+
:columns="getModelColumns('EventLog', ['eventlog_id', 'class', 'id', 'action', 'created_time'])"
|
|
35
|
+
@request="async (req) => {
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
const a = {
|
|
39
|
+
listUser: {
|
|
40
|
+
__args: {
|
|
41
|
+
filters: {
|
|
42
|
+
user_id: obj.user_id
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
data: {
|
|
46
|
+
__args: {
|
|
47
|
+
limit: 1
|
|
48
|
+
},
|
|
49
|
+
eventLog: req.gql
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
let resp = await q(a);
|
|
55
|
+
req.setData(resp.listUser.data[0].eventLog)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
}" />
|
|
59
|
+
</l-tab>
|
|
60
|
+
|
|
61
|
+
</l-tabs>
|
|
62
|
+
|
|
27
63
|
</l-page>
|
|
28
64
|
</template>
|
|
@@ -38,13 +38,10 @@ export default {
|
|
|
38
38
|
label: "Status",
|
|
39
39
|
searchable: true,
|
|
40
40
|
searchType: "select",
|
|
41
|
-
searchOptions: [
|
|
42
|
-
label: "Active",
|
|
43
|
-
value:
|
|
44
|
-
|
|
45
|
-
label: "Inactive",
|
|
46
|
-
value: 1
|
|
47
|
-
}],
|
|
41
|
+
searchOptions: [
|
|
42
|
+
{ label: "Active", value: 0 },
|
|
43
|
+
{ label: "Inactive", value: 1 }
|
|
44
|
+
],
|
|
48
45
|
format: (value) => {
|
|
49
46
|
return ["Active", "Inactive"][value];
|
|
50
47
|
}
|
package/package.json
CHANGED