@hostlink/nuxt-light 1.13.6 → 1.14.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.
- package/dist/module.json +5 -1
- package/dist/runtime/components/l-app-main.vue +14 -11
- package/dist/runtime/components/l-bar.vue +21 -0
- package/dist/runtime/components/l-btn.vue +2 -2
- package/dist/runtime/components/l-card.vue +1 -1
- package/dist/runtime/components/l-checkbox.vue +1 -1
- package/dist/runtime/components/l-customizer.vue +21 -7
- package/dist/runtime/components/l-dialog-database-field-add.vue +61 -0
- package/dist/runtime/components/l-editor.vue +1 -1
- package/dist/runtime/components/l-form.vue +21 -5
- package/dist/runtime/components/l-input.vue +1 -1
- package/dist/runtime/components/l-item.vue +1 -1
- package/dist/runtime/components/l-list.vue +1 -1
- package/dist/runtime/components/l-login.vue +54 -72
- package/dist/runtime/components/l-page.vue +16 -2
- package/dist/runtime/components/l-select.vue +1 -1
- package/dist/runtime/components/l-table.vue +2 -1
- package/dist/runtime/components/l-tabs.vue +1 -1
- package/dist/runtime/formkit/Form.vue +22 -9
- package/dist/runtime/index.d.ts +3 -3
- package/dist/runtime/{index.mjs → index.js} +2 -2
- package/dist/runtime/lib/{SystemValue.mjs → SystemValue.js} +2 -2
- package/dist/runtime/lib/defineLightModel.d.ts +1 -1
- package/dist/runtime/lib/{defineLightModel.mjs → defineLightModel.js} +1 -1
- package/dist/runtime/lib/{f.mjs → f.js} +1 -1
- package/dist/runtime/lib/{getApiUrl.mjs → getApiUrl.js} +1 -1
- package/dist/runtime/lib/{getCurrentUser.mjs → getCurrentUser.js} +1 -1
- package/dist/runtime/lib/{getGQLFields.mjs → getGQLFields.js} +1 -1
- package/dist/runtime/lib/{getID.mjs → getID.js} +1 -1
- package/dist/runtime/lib/{getModelColumns.mjs → getModelColumns.js} +1 -1
- package/dist/runtime/lib/{getModelField.mjs → getModelField.js} +1 -1
- package/dist/runtime/lib/{getModelFields.mjs → getModelFields.js} +1 -1
- package/dist/runtime/lib/{getObject.mjs → getObject.js} +2 -2
- package/dist/runtime/lib/index.d.ts +23 -23
- package/dist/runtime/lib/index.js +35 -0
- package/dist/runtime/lib/{list.mjs → list.js} +1 -1
- package/dist/runtime/lib/{listObject.mjs → listObject.js} +1 -1
- package/dist/runtime/lib/{loadObject.mjs → loadObject.js} +1 -1
- package/dist/runtime/lib/{m.mjs → m.js} +1 -1
- package/dist/runtime/lib/model.d.ts +2 -2
- package/dist/runtime/lib/{model.mjs → model.js} +1 -1
- package/dist/runtime/lib/{q.mjs → q.js} +2 -2
- package/dist/runtime/lib/{sv.mjs → sv.js} +1 -1
- package/dist/runtime/pages/System/database/table.vue +125 -6
- package/dist/runtime/pages/System/view_as.vue +12 -8
- package/dist/runtime/pages/User/_user_id/edit.vue +3 -3
- package/dist/runtime/pages/User/index.vue +2 -0
- package/dist/runtime/pages/User/profile.vue +4 -12
- package/dist/runtime/pages/User/setting/open_id.vue +6 -10
- package/dist/runtime/pages/User/setting.vue +1 -1
- package/dist/runtime/plugin.d.ts +2 -2
- package/dist/runtime/{plugin.mjs → plugin.js} +8 -8
- package/dist/types.d.mts +1 -16
- package/dist/types.d.ts +1 -16
- package/package.json +59 -60
- package/dist/runtime/lib/index.mjs +0 -35
- /package/dist/runtime/formkit/{index.mjs → index.js} +0 -0
- /package/dist/runtime/lib/{GQLFieldBuilder.mjs → GQLFieldBuilder.js} +0 -0
- /package/dist/runtime/lib/{api.mjs → api.js} +0 -0
- /package/dist/runtime/lib/{isGranted.mjs → isGranted.js} +0 -0
- /package/dist/runtime/lib/{t.mjs → t.js} +0 -0
- /package/dist/runtime/lib/{tc2sc.mjs → tc2sc.js} +0 -0
- /package/dist/runtime/lib/{toJson.mjs → toJson.js} +0 -0
- /package/dist/runtime/types/{EventLog.mjs → EventLog.js} +0 -0
- /package/dist/runtime/types/{MailLog.mjs → MailLog.js} +0 -0
- /package/dist/runtime/types/{SystemValue.mjs → SystemValue.js} +0 -0
- /package/dist/runtime/types/{User.mjs → User.js} +0 -0
- /package/dist/runtime/types/{UserLog.mjs → UserLog.js} +0 -0
|
@@ -23,10 +23,16 @@ let bordered = true;
|
|
|
23
23
|
if (props.context.bordered !== undefined) {
|
|
24
24
|
bordered = props.context.bordered;
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
|
|
27
|
+
let redirect = true;
|
|
28
|
+
if (props.context.attrs.onSubmitted) {
|
|
29
|
+
redirect = false;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
27
33
|
if (!props.context.onSubmit) {
|
|
28
34
|
props.context.node.props.onSubmit = async function () {
|
|
29
|
-
|
|
35
|
+
|
|
30
36
|
const [module, id_name] = route.name.split("-");
|
|
31
37
|
|
|
32
38
|
|
|
@@ -46,8 +52,9 @@ if (!props.context.onSubmit) {
|
|
|
46
52
|
color: "positive",
|
|
47
53
|
icon: "sym_o_check"
|
|
48
54
|
});
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
if (redirect) {
|
|
56
|
+
router.go(-1);
|
|
57
|
+
}
|
|
51
58
|
}
|
|
52
59
|
} else {
|
|
53
60
|
if (await model(module).add(v)) {
|
|
@@ -56,10 +63,16 @@ if (!props.context.onSubmit) {
|
|
|
56
63
|
color: "positive",
|
|
57
64
|
icon: "sym_o_check"
|
|
58
65
|
});
|
|
59
|
-
|
|
60
|
-
|
|
66
|
+
|
|
67
|
+
if (redirect) {
|
|
68
|
+
router.go(-1);
|
|
69
|
+
}
|
|
61
70
|
}
|
|
62
71
|
}
|
|
72
|
+
//emit submitted event
|
|
73
|
+
if (props.context.attrs.onSubmitted) {
|
|
74
|
+
props.context.attrs.onSubmitted(v);
|
|
75
|
+
}
|
|
63
76
|
} catch (e) {
|
|
64
77
|
quasar.dialog({
|
|
65
78
|
title: "Error",
|
|
@@ -67,7 +80,7 @@ if (!props.context.onSubmit) {
|
|
|
67
80
|
ok: "OK"
|
|
68
81
|
});
|
|
69
82
|
}
|
|
70
|
-
|
|
83
|
+
|
|
71
84
|
}
|
|
72
85
|
|
|
73
86
|
}
|
|
@@ -84,8 +97,8 @@ if (!props.context.onSubmit) {
|
|
|
84
97
|
</q-card-section>
|
|
85
98
|
|
|
86
99
|
<q-card-actions align="right">
|
|
87
|
-
<l-btn icon="sym_o_check" label="Submit" @click="onSubmit"
|
|
88
|
-
:loading="loading"></l-btn>
|
|
100
|
+
<l-btn icon="sym_o_check" :label="context.submitLabel ?? 'Submit'" @click="onSubmit"
|
|
101
|
+
:disabled="!context.state.dirty" :loading="context.state.loading"></l-btn>
|
|
89
102
|
</q-card-actions>
|
|
90
103
|
</l-card>
|
|
91
104
|
</form>
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ declare const app: {
|
|
|
33
33
|
getCompany: () => string;
|
|
34
34
|
setCompanyLogo: (logo: string) => void;
|
|
35
35
|
getCompanyLogo: () => string;
|
|
36
|
-
getVersion: () =>
|
|
36
|
+
getVersion: () => string;
|
|
37
37
|
addError: (error: String) => void;
|
|
38
38
|
getErrors: () => String[];
|
|
39
39
|
removeError: (error: String) => void;
|
|
@@ -82,7 +82,7 @@ export declare const useLight: (options?: {
|
|
|
82
82
|
getCompany: () => string;
|
|
83
83
|
setCompanyLogo: (logo: string) => void;
|
|
84
84
|
getCompanyLogo: () => string;
|
|
85
|
-
getVersion: () =>
|
|
85
|
+
getVersion: () => string;
|
|
86
86
|
addError: (error: String) => void;
|
|
87
87
|
getErrors: () => String[];
|
|
88
88
|
removeError: (error: String) => void;
|
|
@@ -98,4 +98,4 @@ export declare const useLight: (options?: {
|
|
|
98
98
|
isGranted: (right?: string) => boolean;
|
|
99
99
|
setPermissions: (permissions: Array<string>) => void;
|
|
100
100
|
};
|
|
101
|
-
export * from "./lib";
|
|
101
|
+
export * from "./lib.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import packageJson from "../../package.json";
|
|
2
2
|
import { watch, reactive, toRaw } from "vue";
|
|
3
|
-
import { m, q } from "./lib/index.
|
|
3
|
+
import { m, q } from "./lib/index.js";
|
|
4
4
|
const errors = [];
|
|
5
5
|
let styles = {};
|
|
6
6
|
const COLOR_CODE = {
|
|
@@ -207,4 +207,4 @@ export const useLight = (options = {}) => {
|
|
|
207
207
|
}
|
|
208
208
|
return app;
|
|
209
209
|
};
|
|
210
|
-
export * from "./lib/index.
|
|
210
|
+
export * from "./lib/index.js";
|
|
@@ -19,5 +19,5 @@ export interface LightModel {
|
|
|
19
19
|
name: string;
|
|
20
20
|
fields: LightModelFields;
|
|
21
21
|
}
|
|
22
|
-
declare const _default: (model: LightModel) =>
|
|
22
|
+
declare const _default: (model: LightModel) => import("#app").Plugin<Record<string, unknown>> & import("#app").ObjectPlugin<Record<string, unknown>>;
|
|
23
23
|
export default _default;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useRoute } from "vue-router";
|
|
2
|
-
import loadObject from "./loadObject.
|
|
3
|
-
import { default as getModelField } from "./getModelField.
|
|
2
|
+
import loadObject from "./loadObject.js";
|
|
3
|
+
import { default as getModelField } from "./getModelField.js";
|
|
4
4
|
export default async function(fields = []) {
|
|
5
5
|
let route = useRoute();
|
|
6
6
|
if (!route.name) {
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
export { default as api } from "./api";
|
|
2
|
-
export { default as f } from "./f";
|
|
3
|
-
export { default as getApiUrl } from "./getApiUrl";
|
|
4
|
-
export { default as getCurrentUser } from "./getCurrentUser";
|
|
5
|
-
export { default as getObject } from "./getObject";
|
|
6
|
-
export { default as list } from "./list";
|
|
7
|
-
export { default as m } from "./m";
|
|
8
|
-
export { default as q } from "./q";
|
|
9
|
-
export { default as t } from "./t";
|
|
10
|
-
export { default as listObject } from "./listObject";
|
|
11
|
-
export { default as loadObject } from "./loadObject";
|
|
12
|
-
export { default as isGranted } from "./isGranted";
|
|
13
|
-
export { default as GQLFieldBuilder } from "./GQLFieldBuilder";
|
|
14
|
-
export { default as getModelField } from "./getModelField";
|
|
15
|
-
export { default as getModelFields } from "./getModelFields";
|
|
16
|
-
export { default as getModelColumns } from "./getModelColumns";
|
|
17
|
-
export { default as sv } from "./sv";
|
|
18
|
-
export { default as model } from "./model";
|
|
19
|
-
export { default as defineLightModel } from "./defineLightModel";
|
|
20
|
-
export { type LightModelField, type LightModel } from "./defineLightModel";
|
|
1
|
+
export { default as api } from "./api.js";
|
|
2
|
+
export { default as f } from "./f.js";
|
|
3
|
+
export { default as getApiUrl } from "./getApiUrl.js";
|
|
4
|
+
export { default as getCurrentUser } from "./getCurrentUser.js";
|
|
5
|
+
export { default as getObject } from "./getObject.js";
|
|
6
|
+
export { default as list } from "./list.js";
|
|
7
|
+
export { default as m } from "./m.js";
|
|
8
|
+
export { default as q } from "./q.js";
|
|
9
|
+
export { default as t } from "./t.js";
|
|
10
|
+
export { default as listObject } from "./listObject.js";
|
|
11
|
+
export { default as loadObject } from "./loadObject.js";
|
|
12
|
+
export { default as isGranted } from "./isGranted.js";
|
|
13
|
+
export { default as GQLFieldBuilder } from "./GQLFieldBuilder.js";
|
|
14
|
+
export { default as getModelField } from "./getModelField.js";
|
|
15
|
+
export { default as getModelFields } from "./getModelFields.js";
|
|
16
|
+
export { default as getModelColumns } from "./getModelColumns.js";
|
|
17
|
+
export { default as sv } from "./sv.js";
|
|
18
|
+
export { default as model } from "./model.js";
|
|
19
|
+
export { default as defineLightModel } from "./defineLightModel.js";
|
|
20
|
+
export { type LightModelField, type LightModel } from "./defineLightModel.js";
|
|
21
21
|
export declare const notify: (message: string, color?: string) => void;
|
|
22
|
-
export { default as getID } from "./getID";
|
|
23
|
-
export { default as id } from "./getID";
|
|
22
|
+
export { default as getID } from "./getID.js";
|
|
23
|
+
export { default as id } from "./getID.js";
|
|
24
24
|
export declare const getApiBase: () => {};
|
|
25
|
-
export { default as getGQLFields } from "./getGQLFields";
|
|
25
|
+
export { default as getGQLFields } from "./getGQLFields.js";
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useRuntimeConfig } from "nuxt/app";
|
|
2
|
+
import { Notify } from "quasar";
|
|
3
|
+
export { default as api } from "./api.js";
|
|
4
|
+
export { default as f } from "./f.js";
|
|
5
|
+
export { default as getApiUrl } from "./getApiUrl.js";
|
|
6
|
+
export { default as getCurrentUser } from "./getCurrentUser.js";
|
|
7
|
+
export { default as getObject } from "./getObject.js";
|
|
8
|
+
export { default as list } from "./list.js";
|
|
9
|
+
export { default as m } from "./m.js";
|
|
10
|
+
export { default as q } from "./q.js";
|
|
11
|
+
export { default as t } from "./t.js";
|
|
12
|
+
export { default as listObject } from "./listObject.js";
|
|
13
|
+
export { default as loadObject } from "./loadObject.js";
|
|
14
|
+
export { default as isGranted } from "./isGranted.js";
|
|
15
|
+
export { default as GQLFieldBuilder } from "./GQLFieldBuilder.js";
|
|
16
|
+
export { default as getModelField } from "./getModelField.js";
|
|
17
|
+
export { default as getModelFields } from "./getModelFields.js";
|
|
18
|
+
export { default as getModelColumns } from "./getModelColumns.js";
|
|
19
|
+
export { default as sv } from "./sv.js";
|
|
20
|
+
export { default as model } from "./model.js";
|
|
21
|
+
export { default as defineLightModel } from "./defineLightModel.js";
|
|
22
|
+
export const notify = function(message, color = "positive") {
|
|
23
|
+
Notify.create({
|
|
24
|
+
message,
|
|
25
|
+
color,
|
|
26
|
+
position: "top"
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
export { default as getID } from "./getID.js";
|
|
30
|
+
export { default as id } from "./getID.js";
|
|
31
|
+
export const getApiBase = () => {
|
|
32
|
+
const config = useRuntimeConfig();
|
|
33
|
+
return config?.public?.apiBase ?? "/api/";
|
|
34
|
+
};
|
|
35
|
+
export { default as getGQLFields } from "./getGQLFields.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { default as api } from "./api";
|
|
2
|
-
import type { LTableColumn } from "../components/l-table.vue";
|
|
1
|
+
import { default as api } from "./api.js";
|
|
2
|
+
import type { LTableColumn } from "../components/l-table.vue.js";
|
|
3
3
|
interface LModel extends ReturnType<typeof api.model> {
|
|
4
4
|
columns(fields: string[]): Array<LTableColumn>;
|
|
5
5
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import f from "./f.
|
|
1
|
+
import f from "./f.js";
|
|
2
2
|
import { jsonToGraphQLQuery } from "json-to-graphql-query";
|
|
3
3
|
import { toQuery } from "@hostlink/light";
|
|
4
|
-
import { api } from "./index.
|
|
4
|
+
import { api } from "./index.js";
|
|
5
5
|
export default async function(operation, args = null, fields = []) {
|
|
6
6
|
let query;
|
|
7
7
|
if (operation instanceof Object) {
|
|
@@ -1,24 +1,143 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import { api } from '#imports';
|
|
2
|
+
import { api, m } from '#imports';
|
|
3
|
+
import { useQuasar } from 'quasar';
|
|
4
|
+
import { resolveComponent, ref, reactive } from 'vue';
|
|
5
|
+
|
|
6
|
+
const $q = useQuasar();
|
|
3
7
|
|
|
4
8
|
const { system: { database } } = await api.query({
|
|
5
9
|
system: {
|
|
6
10
|
database: {
|
|
7
|
-
table: true
|
|
11
|
+
table: true,
|
|
12
|
+
version: true
|
|
8
13
|
}
|
|
9
14
|
}
|
|
10
15
|
})
|
|
11
16
|
|
|
17
|
+
const tables = ref(database.table);
|
|
18
|
+
|
|
19
|
+
const refresh = async () => {
|
|
20
|
+
const { system: { database } } = await api.query({
|
|
21
|
+
system: {
|
|
22
|
+
database: {
|
|
23
|
+
table: true,
|
|
24
|
+
version: true
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
tables.value = database.table;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
const field_add = resolveComponent('l-dialog-database-field-add');
|
|
33
|
+
const add = async (table) => {
|
|
34
|
+
$q.dialog({
|
|
35
|
+
component: field_add
|
|
36
|
+
}).onOk(async (data) => {
|
|
37
|
+
//data.name
|
|
38
|
+
//data.type
|
|
39
|
+
try {
|
|
40
|
+
const addDatabaseField = await m("addDatabaseField", {
|
|
41
|
+
table,
|
|
42
|
+
field: data.name,
|
|
43
|
+
type: data.type,
|
|
44
|
+
length: data.length,
|
|
45
|
+
default: data.default,
|
|
46
|
+
nullable: data.nullable,
|
|
47
|
+
autoincrement: data.autoincrement
|
|
48
|
+
})
|
|
49
|
+
$q.notify({
|
|
50
|
+
type: 'positive',
|
|
51
|
+
message: addDatabaseField
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
refresh();
|
|
55
|
+
|
|
56
|
+
} catch (e) {
|
|
57
|
+
$q.notify({
|
|
58
|
+
type: 'negative',
|
|
59
|
+
message: e.message
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const selected = reactive({});
|
|
67
|
+
|
|
68
|
+
for (let table of database.table) {
|
|
69
|
+
selected[table.name] = [];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
const removeField = async (table) => {
|
|
74
|
+
//confirmation
|
|
75
|
+
|
|
76
|
+
$q.dialog({
|
|
77
|
+
title: 'Remove field',
|
|
78
|
+
message: 'Are you sure you want to remove the selected fields?',
|
|
79
|
+
ok: 'Yes',
|
|
80
|
+
cancel: 'No'
|
|
81
|
+
}).onOk(async () => {
|
|
12
82
|
|
|
83
|
+
|
|
84
|
+
//map selected fields
|
|
85
|
+
|
|
86
|
+
const fields = selected[table].map(field => field.Field)
|
|
87
|
+
|
|
88
|
+
try {
|
|
89
|
+
const removeDatabaseFields = await m("removeDatabaseFields", {
|
|
90
|
+
table,
|
|
91
|
+
fields: fields
|
|
92
|
+
})
|
|
93
|
+
$q.notify({
|
|
94
|
+
type: 'positive',
|
|
95
|
+
message: removeDatabaseFields
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
selected[table] = [];
|
|
99
|
+
|
|
100
|
+
refresh();
|
|
101
|
+
} catch (e) {
|
|
102
|
+
$q.notify({
|
|
103
|
+
type: 'negative',
|
|
104
|
+
message: e.message
|
|
105
|
+
})
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
}
|
|
13
115
|
</script>
|
|
14
116
|
<template>
|
|
15
|
-
<l-page>
|
|
117
|
+
<l-page gutter="sm">
|
|
118
|
+
<l-card>
|
|
119
|
+
<l-list>
|
|
120
|
+
<l-item label="Version">{{ database.version }}</l-item>
|
|
121
|
+
</l-list>
|
|
122
|
+
</l-card>
|
|
123
|
+
|
|
16
124
|
<q-card flat bordered>
|
|
17
125
|
<q-list class="rounded-borders" separator bordered>
|
|
18
|
-
<q-expansion-item :label="table.name" v-for="table in
|
|
126
|
+
<q-expansion-item :label="table.name" v-for="table in tables" dense>
|
|
127
|
+
<q-toolbar>
|
|
128
|
+
<q-btn icon="sym_o_add" @click="add(table.name)" round flat size="sm">
|
|
129
|
+
<q-tooltip>Add field</q-tooltip>
|
|
130
|
+
</q-btn>
|
|
131
|
+
<q-btn icon="sym_o_delete" @click="removeField(table.name)" round flat size="sm"
|
|
132
|
+
:disable="selected[table.name].length == 0">
|
|
133
|
+
<q-tooltip>Remove field</q-tooltip>
|
|
134
|
+
</q-btn>
|
|
135
|
+
</q-toolbar>
|
|
19
136
|
<div class="q-ma-sm">
|
|
20
|
-
<q-table separator="cell" dense :rows="table.columns"
|
|
21
|
-
hide-pagination flat bordered
|
|
137
|
+
<q-table row-key="Field" separator="cell" dense :rows="table.columns"
|
|
138
|
+
:rows-per-page-options="[0]" hide-pagination flat bordered selection="multiple"
|
|
139
|
+
v-model:selected="selected[table.name]">
|
|
140
|
+
</q-table>
|
|
22
141
|
</div>
|
|
23
142
|
|
|
24
143
|
</q-expansion-item>
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
import { list, m } from '#imports'
|
|
3
3
|
import { useRouter } from "vue-router"
|
|
4
4
|
import { ref, computed } from "vue"
|
|
5
|
-
import {
|
|
5
|
+
import { useQuasar } from 'quasar'
|
|
6
|
+
const $q = useQuasar()
|
|
6
7
|
|
|
7
|
-
let { data: users } = await list("User", null, ["user_id", "username", "name", "roles"]);
|
|
8
|
+
let { data: users } = await list("User", null, ["user_id", "username", "name", "roles", "email"]);
|
|
8
9
|
|
|
9
10
|
let columns = [
|
|
10
11
|
{
|
|
@@ -19,6 +20,12 @@ let columns = [
|
|
|
19
20
|
field: "name",
|
|
20
21
|
align: "left",
|
|
21
22
|
}, {
|
|
23
|
+
name: "email",
|
|
24
|
+
label: "Email",
|
|
25
|
+
align: "left",
|
|
26
|
+
field: "email"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
22
29
|
name: "roles",
|
|
23
30
|
label: "Roles",
|
|
24
31
|
align: "left",
|
|
@@ -30,17 +37,14 @@ let columns = [
|
|
|
30
37
|
}
|
|
31
38
|
]
|
|
32
39
|
|
|
33
|
-
const router = useRouter();
|
|
34
40
|
const onCickView = async (id) => {
|
|
35
41
|
try {
|
|
36
42
|
if (await m("viewAs", { user_id: id })) {
|
|
37
|
-
|
|
38
43
|
//redirect to last path
|
|
39
44
|
window.location.reload();
|
|
40
|
-
|
|
41
45
|
}
|
|
42
46
|
} catch (e) {
|
|
43
|
-
|
|
47
|
+
$q.dialog({
|
|
44
48
|
title: "Error",
|
|
45
49
|
message: e.message,
|
|
46
50
|
color: "negative",
|
|
@@ -62,11 +66,11 @@ const filtered = computed(() => {
|
|
|
62
66
|
</script>
|
|
63
67
|
<template>
|
|
64
68
|
<l-page class="q-gutter-md">
|
|
65
|
-
<q-banner
|
|
69
|
+
<q-banner>
|
|
66
70
|
Use this page to view the system as another user. This is useful for testing permissions.
|
|
67
71
|
</q-banner>
|
|
68
72
|
|
|
69
|
-
<q-table flat :columns="columns" :rows="filtered" :rows-per-page-options="[0]" dense>
|
|
73
|
+
<q-table flat :columns="columns" :rows="filtered" :rows-per-page-options="[0]" dense bordered="">
|
|
70
74
|
<template v-slot:top-right>
|
|
71
75
|
<q-input outlined dense debounce="300" v-model="filter" placeholder="Search" clearable>
|
|
72
76
|
<template v-slot:append>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import { reactive } from 'vue'
|
|
2
|
+
import { reactive, ref } from 'vue'
|
|
3
3
|
import { getObject, q } from '#imports'
|
|
4
4
|
const obj = reactive(await getObject(["username", "first_name", "last_name", "email", "phone",
|
|
5
5
|
"addr1", "addr2", "addr3", "join_date", "expiry_date", "status", "language", "default_page"
|
|
@@ -20,7 +20,6 @@ const languages = tt.app.languages.map((lang) => {
|
|
|
20
20
|
value: lang.value,
|
|
21
21
|
};
|
|
22
22
|
})
|
|
23
|
-
|
|
24
23
|
</script>
|
|
25
24
|
|
|
26
25
|
<template>
|
|
@@ -45,7 +44,8 @@ const languages = tt.app.languages.map((lang) => {
|
|
|
45
44
|
<FormKit type="l-date-picker" label="Join date" name="join_date" validation="required" />
|
|
46
45
|
<FormKit type="l-date-picker" label="Expiry date" name="expiry_date" />
|
|
47
46
|
<FormKit type="l-select" label="Status" name="status" :options="options" validation="required" />
|
|
48
|
-
<FormKit type="l-select" label="Language" name="language" :options="languages"
|
|
47
|
+
<FormKit type="l-select" label="Language" name="language" :options="languages"
|
|
48
|
+
validation="required" />
|
|
49
49
|
<FormKit type="l-input" label="Default page" name="default_page" />
|
|
50
50
|
</l-col>
|
|
51
51
|
</l-row>
|
|
@@ -82,22 +82,14 @@ eventLogCols.forEach(col => {
|
|
|
82
82
|
</l-col>
|
|
83
83
|
|
|
84
84
|
<l-col md="8">
|
|
85
|
-
|
|
86
85
|
<l-tabs>
|
|
87
|
-
<l-tab label="User Log">
|
|
88
|
-
<l-table :rows="my.userLog.data" :columns="userlogColumns"
|
|
89
|
-
:rows-per-page-options="[0]">
|
|
90
|
-
</l-table>
|
|
86
|
+
<l-tab label="User Log" name="user_log">
|
|
87
|
+
<l-table :rows="my.userLog.data" searchable :columns="userlogColumns" hide-pagination />
|
|
91
88
|
</l-tab>
|
|
92
|
-
<l-tab label="Event Log">
|
|
93
|
-
<l-table :rows="my.eventLog.data" :columns="eventLogCols" searchable
|
|
94
|
-
:rows-per-page-options="[0]">
|
|
95
|
-
</l-table>
|
|
89
|
+
<l-tab label="Event Log" name="event_log">
|
|
90
|
+
<l-table :rows="my.eventLog.data" :columns="eventLogCols" searchable hide-pagination />
|
|
96
91
|
</l-tab>
|
|
97
|
-
|
|
98
92
|
</l-tabs>
|
|
99
|
-
|
|
100
|
-
|
|
101
93
|
</l-col>
|
|
102
94
|
</l-row>
|
|
103
95
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import { reactive, onMounted, nextTick } from "vue"
|
|
3
3
|
import { useQuasar } from "quasar";
|
|
4
|
-
import { q, m } from '#imports'
|
|
4
|
+
import { q, m, api } from '#imports'
|
|
5
5
|
const quasar = useQuasar();
|
|
6
6
|
let { app, my } = await q({ app: ['googleClientId'], my: ["gmail"] })
|
|
7
7
|
|
|
@@ -79,16 +79,12 @@ const unlink = async () => {
|
|
|
79
79
|
|
|
80
80
|
<template v-if="app.googleClientId">
|
|
81
81
|
<q-card-section v-if="my.gmail">
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
Your gmail is {{ my.gmail }}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
<div>
|
|
89
|
-
<l-btn label="Unlink" @click="unlink" icon="sym_o_delete"></l-btn>
|
|
90
|
-
</div>
|
|
82
|
+
<p>
|
|
83
|
+
You have already linked your Google account.<br />
|
|
91
84
|
|
|
85
|
+
Your gmail is {{ my.gmail }}
|
|
86
|
+
</p>
|
|
87
|
+
<l-btn label="Unlink" @click="unlink" icon="sym_o_delete"></l-btn>
|
|
92
88
|
</q-card-section>
|
|
93
89
|
|
|
94
90
|
<q-card-section v-else>
|