@opengis/admin 0.2.7 → 0.2.9
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/{IconChevronDown-B3Ry6l2F.js → IconChevronDown-Dm6WTz6T.js} +1 -1
- package/dist/{add-page-Dv6JSPJD.js → add-page-691SOUZb.js} +1 -1
- package/dist/{admin-interface-BWZcS6r_.js → admin-interface-BOJ8_vEA.js} +2 -2
- package/dist/{admin-view-xT8rj54J.js → admin-view-EqjCuhXc.js} +2 -2
- package/dist/admin.js +1 -1
- package/dist/admin.umd.cjs +35 -35
- package/dist/{card-view-DbHBF1Gz.js → card-view-CX7x_aTI.js} +1 -1
- package/dist/edit-page-Boj91vBk.js +128 -0
- package/dist/{import-file-1QgPYOHQ.js → import-file-DtUVr-xP.js} +6 -6
- package/package.json +1 -1
- package/server/helpers/index.js +1 -0
- package/server/plugins/hook.js +6 -0
- package/server/routes/templates/controllers/getTemplate.js +6 -4
- package/dist/edit-page-TnYoAVr7.js +0 -120
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { _ as g, u as x, c as m } from "./import-file-DtUVr-xP.js";
|
|
2
|
+
import { resolveComponent as f, openBlock as p, createElementBlock as y, createElementVNode as l, createBlock as w, createCommentVNode as k } from "vue";
|
|
3
|
+
const v = {
|
|
4
|
+
data() {
|
|
5
|
+
return {
|
|
6
|
+
formValues: {},
|
|
7
|
+
scheme: null,
|
|
8
|
+
table: "",
|
|
9
|
+
token: ""
|
|
10
|
+
};
|
|
11
|
+
},
|
|
12
|
+
mounted() {
|
|
13
|
+
this.getFormScheme();
|
|
14
|
+
},
|
|
15
|
+
methods: {
|
|
16
|
+
flattenMenu(e) {
|
|
17
|
+
const t = [];
|
|
18
|
+
return e.forEach((a) => {
|
|
19
|
+
a.menu ? t.push(...this.flattenMenu(a.menu)) : t.push(a);
|
|
20
|
+
}), t;
|
|
21
|
+
},
|
|
22
|
+
async getFormScheme() {
|
|
23
|
+
var i, n;
|
|
24
|
+
const e = this.flattenMenu(x.value);
|
|
25
|
+
e != null && e.length || this.$router.replace("/404");
|
|
26
|
+
const t = e == null ? void 0 : e.find((s) => {
|
|
27
|
+
var o, r;
|
|
28
|
+
return (s == null ? void 0 : s.path) == ((r = (o = this.$route) == null ? void 0 : o.query) == null ? void 0 : r.table);
|
|
29
|
+
});
|
|
30
|
+
t || this.$router.replace("/404");
|
|
31
|
+
const a = t == null ? void 0 : t.table;
|
|
32
|
+
this.table = a;
|
|
33
|
+
try {
|
|
34
|
+
const {
|
|
35
|
+
data: { form: s }
|
|
36
|
+
} = await m.get(`/api/template/table/${a}`), { data: o } = await m.get(
|
|
37
|
+
`/api/table/${this.table}/${(n = (i = this.$route) == null ? void 0 : i.query) == null ? void 0 : n.id}`
|
|
38
|
+
);
|
|
39
|
+
this.token = (o == null ? void 0 : o.token) || "", this.formValues = o || {};
|
|
40
|
+
const { data: r } = await m.get(`/api/template/form/${s}`);
|
|
41
|
+
this.scheme = (r == null ? void 0 : r.schema) || r;
|
|
42
|
+
} catch {
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
async onlyEditObject() {
|
|
46
|
+
var t, a, i, n, s, o, r, d, u;
|
|
47
|
+
const e = this.$refs.form;
|
|
48
|
+
try {
|
|
49
|
+
await e.doValidation(), await m.put(`/api/table/${this.token}`, this.formValues), await this.$notify({
|
|
50
|
+
title: "Успішно!",
|
|
51
|
+
message: "Об'єкт успішно створено",
|
|
52
|
+
type: "success"
|
|
53
|
+
});
|
|
54
|
+
} catch (c) {
|
|
55
|
+
const b = ((t = c == null ? void 0 : c.response) == null ? void 0 : t.data) || "";
|
|
56
|
+
let h = ((s = (n = (i = (a = Object.entries(e == null ? void 0 : e.formErrors)) == null ? void 0 : a[0]) == null ? void 0 : i[1]) == null ? void 0 : n[0]) == null ? void 0 : s.message) === "Це поле обов'язкове" ? "Заповніть обов'язкові поля" : (u = (d = (r = (o = Object.entries(e == null ? void 0 : e.formErrors)) == null ? void 0 : o[0]) == null ? void 0 : r[1]) == null ? void 0 : d[0]) == null ? void 0 : u.message;
|
|
57
|
+
this.$notify({
|
|
58
|
+
title: "Помилка!",
|
|
59
|
+
message: b || h || "Сталася помилка валідаціі",
|
|
60
|
+
type: "error"
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
async editObjectAndRedirect() {
|
|
65
|
+
var t, a, i, n, s, o, r, d, u;
|
|
66
|
+
const e = this.$refs.form;
|
|
67
|
+
try {
|
|
68
|
+
await e.doValidation(), await m.put(`/api/table/${this.token}`, this.formValues), await this.$router.back(), await this.$notify({
|
|
69
|
+
title: "Успішно!",
|
|
70
|
+
message: "Об'єкт успішно створено",
|
|
71
|
+
type: "success"
|
|
72
|
+
});
|
|
73
|
+
} catch (c) {
|
|
74
|
+
const b = ((t = c == null ? void 0 : c.response) == null ? void 0 : t.data) || "";
|
|
75
|
+
let h = ((s = (n = (i = (a = Object.entries(e == null ? void 0 : e.formErrors)) == null ? void 0 : a[0]) == null ? void 0 : i[1]) == null ? void 0 : n[0]) == null ? void 0 : s.message) === "Це поле обов'язкове" ? "Заповніть обов'язкові поля" : (u = (d = (r = (o = Object.entries(e == null ? void 0 : e.formErrors)) == null ? void 0 : o[0]) == null ? void 0 : r[1]) == null ? void 0 : d[0]) == null ? void 0 : u.message;
|
|
76
|
+
this.$notify({
|
|
77
|
+
title: "Помилка!",
|
|
78
|
+
message: b || h || "Сталася помилка валідаціі",
|
|
79
|
+
type: "error"
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}, V = {
|
|
85
|
+
style: { width: "calc(100vw - 260px)" },
|
|
86
|
+
class: "bg-gray-50"
|
|
87
|
+
}, $ = { class: "h-[76px] mt-[15px] flex items-center justify-between mx-[20px] px-[20px] bg-white border rounded-xl" }, E = { class: "flex items-center gap-[6px]" }, j = {
|
|
88
|
+
style: { height: "calc(100vh - 155px)", width: "calc(100vw - 260px)" },
|
|
89
|
+
class: "bg-gray-50 p-[20px] flex"
|
|
90
|
+
}, O = { class: "bg-white w-full rounded-xl border p-[20px] overflow-auto [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar:horizontal]:h-[8px] [&::-webkit-scrollbar-track]:bg-gray-100 [&::-webkit-scrollbar-thumb]:bg-gray-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500" };
|
|
91
|
+
function _(e, t, a, i, n, s) {
|
|
92
|
+
const o = f("VsForm");
|
|
93
|
+
return p(), y("div", V, [
|
|
94
|
+
l("div", $, [
|
|
95
|
+
t[4] || (t[4] = l("h2", { class: "text-xl font-medium" }, "Редагувати", -1)),
|
|
96
|
+
l("div", E, [
|
|
97
|
+
l("button", {
|
|
98
|
+
onClick: t[0] || (t[0] = (r) => e.$router.back()),
|
|
99
|
+
class: "flex items-center px-3 py-2 text-sm font-medium text-gray-800 duration-300 bg-white border border-gray-100 rounded-lg shadow gap-x-2 focus:outline-none hover:bg-gray-50 hover:border-gray-100"
|
|
100
|
+
}, " Повернутися "),
|
|
101
|
+
l("button", {
|
|
102
|
+
onClick: t[1] || (t[1] = (...r) => s.onlyEditObject && s.onlyEditObject(...r)),
|
|
103
|
+
class: "inline-flex items-center px-3 py-2 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white"
|
|
104
|
+
}, " Зберегти "),
|
|
105
|
+
l("button", {
|
|
106
|
+
onClick: t[2] || (t[2] = (...r) => s.editObjectAndRedirect && s.editObjectAndRedirect(...r)),
|
|
107
|
+
class: "inline-flex items-center px-3 py-2 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white"
|
|
108
|
+
}, " Зберегти і повернутися ")
|
|
109
|
+
])
|
|
110
|
+
]),
|
|
111
|
+
l("div", j, [
|
|
112
|
+
l("div", O, [
|
|
113
|
+
n.scheme ? (p(), w(o, {
|
|
114
|
+
key: 0,
|
|
115
|
+
ref: "form",
|
|
116
|
+
scheme: n.scheme,
|
|
117
|
+
modelValue: n.formValues,
|
|
118
|
+
"onUpdate:modelValue": t[3] || (t[3] = (r) => n.formValues = r),
|
|
119
|
+
class: "p-0 mt-[20px]"
|
|
120
|
+
}, null, 8, ["scheme", "modelValue"])) : k("", !0)
|
|
121
|
+
])
|
|
122
|
+
])
|
|
123
|
+
]);
|
|
124
|
+
}
|
|
125
|
+
const M = /* @__PURE__ */ g(v, [["render", _]]);
|
|
126
|
+
export {
|
|
127
|
+
M as default
|
|
128
|
+
};
|
|
@@ -3594,16 +3594,16 @@ function rD(t) {
|
|
|
3594
3594
|
}
|
|
3595
3595
|
const sD = [
|
|
3596
3596
|
// { name: 'profile', path: '/profile', component: () => import('../components/profile/vs-profile.vue') },
|
|
3597
|
-
{ name: "edit", path: "/edit", component: () => import("./edit-page-
|
|
3598
|
-
{ name: "add", path: "/add", component: () => import("./add-page-
|
|
3597
|
+
{ name: "edit", path: "/edit", component: () => import("./edit-page-Boj91vBk.js") },
|
|
3598
|
+
{ name: "add", path: "/add", component: () => import("./add-page-691SOUZb.js") },
|
|
3599
3599
|
{
|
|
3600
3600
|
name: "card-view",
|
|
3601
3601
|
path: "/card",
|
|
3602
|
-
component: () => import("./card-view-
|
|
3602
|
+
component: () => import("./card-view-CX7x_aTI.js"),
|
|
3603
3603
|
children: [{
|
|
3604
3604
|
name: "table",
|
|
3605
3605
|
path: ":table",
|
|
3606
|
-
component: () => import("./card-view-
|
|
3606
|
+
component: () => import("./card-view-CX7x_aTI.js"),
|
|
3607
3607
|
children: [{ name: "card", path: ":id", component: () => Promise.resolve().then(() => u7) }]
|
|
3608
3608
|
}]
|
|
3609
3609
|
}
|
|
@@ -3657,14 +3657,14 @@ const uD = /* @__PURE__ */ Tt(oD, [["render", cD]]), hD = (t) => {
|
|
|
3657
3657
|
{
|
|
3658
3658
|
path: "/",
|
|
3659
3659
|
name: "home",
|
|
3660
|
-
component: () => import("./admin-view-
|
|
3660
|
+
component: () => import("./admin-view-EqjCuhXc.js"),
|
|
3661
3661
|
children: [
|
|
3662
3662
|
...e,
|
|
3663
3663
|
...t,
|
|
3664
3664
|
// { path: '/', redirect: '/home' },
|
|
3665
3665
|
{
|
|
3666
3666
|
path: "/:catchAll(.*)",
|
|
3667
|
-
component: () => import("./admin-interface-
|
|
3667
|
+
component: () => import("./admin-interface-BOJ8_vEA.js")
|
|
3668
3668
|
}
|
|
3669
3669
|
]
|
|
3670
3670
|
}
|
package/package.json
CHANGED
package/server/helpers/index.js
CHANGED
|
@@ -24,5 +24,6 @@ export default async function route() {
|
|
|
24
24
|
handlebars.registerHelper('badge', badge);
|
|
25
25
|
handlebars.registerHelper('contentList', contentList);
|
|
26
26
|
handlebarsSync.registerHelper('ifCond', ifCond);
|
|
27
|
+
handlebarsSync.registerHelper('button', buttonHelper);
|
|
27
28
|
handlebars.registerHelper('ifCond', ifCond);
|
|
28
29
|
}
|
package/server/plugins/hook.js
CHANGED
|
@@ -13,6 +13,12 @@ export default async function plugin(fastify) {
|
|
|
13
13
|
const user1 = config?.auth?.disable || process.env.NODE_ENV !== 'admin' ? { uid: '1' } : null;
|
|
14
14
|
await initPG(client);
|
|
15
15
|
|
|
16
|
+
addHook('preForm', async ({ form, user }) => {
|
|
17
|
+
if (!user?.uid) return null;
|
|
18
|
+
const opt = await getToken({ mode: 'w', token: form, uid: user.uid, json: 1 });
|
|
19
|
+
return opt;
|
|
20
|
+
});
|
|
21
|
+
|
|
16
22
|
fastify.addHook('onListen', async () => {
|
|
17
23
|
const json = await getMenu({ user: { uid: 1 } });
|
|
18
24
|
// insert interface list to db (user access management)
|
|
@@ -22,17 +22,19 @@ export default async function getTemplateApi(req) {
|
|
|
22
22
|
) {
|
|
23
23
|
return `access restricted ${name}`;
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
if (type === 'form' && user?.uid) {
|
|
26
26
|
const schema = data.schema || data;
|
|
27
27
|
Object.keys(schema || {}).filter((key) => schema?.[key]?.add).map((key) => {
|
|
28
|
+
const { add } = schema[key];
|
|
29
|
+
Object.assign(add, { table: add.table || add.model }); // support old forms w/ model key
|
|
28
30
|
const [token] = setToken({
|
|
29
|
-
ids: [JSON.stringify(
|
|
31
|
+
ids: [JSON.stringify(add)],
|
|
30
32
|
uid: user.uid,
|
|
31
33
|
array: 1,
|
|
32
34
|
});
|
|
33
|
-
Object.assign(schema[key].add, {
|
|
35
|
+
Object.assign(schema[key].add, { token, api: `${config.prefix || '/api'}/table/${token}` });
|
|
34
36
|
});
|
|
35
|
-
}
|
|
37
|
+
}
|
|
36
38
|
await applyHook('afterTemplate', { name, type, data, user });
|
|
37
39
|
if (tokenData.obj) {
|
|
38
40
|
const obj = tokenData.obj.split('#').reduce((p, el) => ({ ...p, [el.split('=')[0]]: el.split('=')[1] }), {})
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { _ as d, u as m, c as n } from "./import-file-1QgPYOHQ.js";
|
|
2
|
-
import { resolveComponent as b, openBlock as u, createElementBlock as h, createElementVNode as a, createBlock as f, createCommentVNode as p } from "vue";
|
|
3
|
-
const g = {
|
|
4
|
-
data() {
|
|
5
|
-
return {
|
|
6
|
-
formValues: {},
|
|
7
|
-
scheme: null,
|
|
8
|
-
table: "",
|
|
9
|
-
token: ""
|
|
10
|
-
};
|
|
11
|
-
},
|
|
12
|
-
mounted() {
|
|
13
|
-
this.getFormScheme();
|
|
14
|
-
},
|
|
15
|
-
methods: {
|
|
16
|
-
flattenMenu(t) {
|
|
17
|
-
const e = [];
|
|
18
|
-
return t.forEach((l) => {
|
|
19
|
-
l.menu ? e.push(...this.flattenMenu(l.menu)) : e.push(l);
|
|
20
|
-
}), e;
|
|
21
|
-
},
|
|
22
|
-
async getFormScheme() {
|
|
23
|
-
var c, i;
|
|
24
|
-
const t = this.flattenMenu(m.value);
|
|
25
|
-
t != null && t.length || this.$router.replace("/404");
|
|
26
|
-
const e = t == null ? void 0 : t.find((o) => {
|
|
27
|
-
var s, r;
|
|
28
|
-
return (o == null ? void 0 : o.path) == ((r = (s = this.$route) == null ? void 0 : s.query) == null ? void 0 : r.table);
|
|
29
|
-
});
|
|
30
|
-
e || this.$router.replace("/404");
|
|
31
|
-
const l = e == null ? void 0 : e.table;
|
|
32
|
-
this.table = l;
|
|
33
|
-
try {
|
|
34
|
-
const {
|
|
35
|
-
data: { form: o }
|
|
36
|
-
} = await n.get(`/api/template/table/${l}`), { data: s } = await n.get(
|
|
37
|
-
`/api/table/${this.table}/${(i = (c = this.$route) == null ? void 0 : c.query) == null ? void 0 : i.id}`
|
|
38
|
-
);
|
|
39
|
-
this.token = (s == null ? void 0 : s.token) || "", this.formValues = s || {};
|
|
40
|
-
const { data: r } = await n.get(`/api/template/form/${o}`);
|
|
41
|
-
this.scheme = (r == null ? void 0 : r.schema) || r;
|
|
42
|
-
} catch {
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
async onlyEditObject() {
|
|
46
|
-
try {
|
|
47
|
-
await this.$refs.form.doValidation(), await n.put(`/api/table/${this.token}`, this.formValues), await this.$notify({
|
|
48
|
-
title: "Успішно!",
|
|
49
|
-
message: "Об'єкт успішно створено",
|
|
50
|
-
type: "success"
|
|
51
|
-
});
|
|
52
|
-
} catch {
|
|
53
|
-
this.$notify({
|
|
54
|
-
title: "Помилка!",
|
|
55
|
-
message: "Сталася помилка",
|
|
56
|
-
type: "error"
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
async editObjectAndRedirect() {
|
|
61
|
-
try {
|
|
62
|
-
await this.$refs.form.doValidation(), await n.put(`/api/table/${this.token}`, this.formValues), await this.$router.back(), await this.$notify({
|
|
63
|
-
title: "Успішно!",
|
|
64
|
-
message: "Об'єкт успішно створено",
|
|
65
|
-
type: "success"
|
|
66
|
-
});
|
|
67
|
-
} catch {
|
|
68
|
-
this.$notify({
|
|
69
|
-
title: "Помилка!",
|
|
70
|
-
message: "Сталася помилка",
|
|
71
|
-
type: "error"
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}, x = {
|
|
77
|
-
style: { width: "calc(100vw - 260px)" },
|
|
78
|
-
class: "bg-gray-50"
|
|
79
|
-
}, y = { class: "h-[76px] mt-[15px] flex items-center justify-between mx-[20px] px-[20px] bg-white border rounded-xl" }, w = { class: "flex items-center gap-[6px]" }, k = {
|
|
80
|
-
style: { height: "calc(100vh - 155px)", width: "calc(100vw - 260px)" },
|
|
81
|
-
class: "bg-gray-50 p-[20px] flex"
|
|
82
|
-
}, v = { class: "bg-white w-full rounded-xl border p-[20px] overflow-auto [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar:horizontal]:h-[8px] [&::-webkit-scrollbar-track]:bg-gray-100 [&::-webkit-scrollbar-thumb]:bg-gray-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500" };
|
|
83
|
-
function V(t, e, l, c, i, o) {
|
|
84
|
-
const s = b("VsForm");
|
|
85
|
-
return u(), h("div", x, [
|
|
86
|
-
a("div", y, [
|
|
87
|
-
e[4] || (e[4] = a("h2", { class: "text-xl font-medium" }, "Редагувати", -1)),
|
|
88
|
-
a("div", w, [
|
|
89
|
-
a("button", {
|
|
90
|
-
onClick: e[0] || (e[0] = (r) => t.$router.back()),
|
|
91
|
-
class: "flex items-center px-3 py-2 text-sm font-medium text-gray-800 duration-300 bg-white border border-gray-100 rounded-lg shadow gap-x-2 focus:outline-none hover:bg-gray-50 hover:border-gray-100"
|
|
92
|
-
}, " Повернутися "),
|
|
93
|
-
a("button", {
|
|
94
|
-
onClick: e[1] || (e[1] = (...r) => o.onlyEditObject && o.onlyEditObject(...r)),
|
|
95
|
-
class: "inline-flex items-center px-3 py-2 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white"
|
|
96
|
-
}, " Зберегти "),
|
|
97
|
-
a("button", {
|
|
98
|
-
onClick: e[2] || (e[2] = (...r) => o.editObjectAndRedirect && o.editObjectAndRedirect(...r)),
|
|
99
|
-
class: "inline-flex items-center px-3 py-2 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white"
|
|
100
|
-
}, " Зберегти і повернутися ")
|
|
101
|
-
])
|
|
102
|
-
]),
|
|
103
|
-
a("div", k, [
|
|
104
|
-
a("div", v, [
|
|
105
|
-
i.scheme ? (u(), f(s, {
|
|
106
|
-
key: 0,
|
|
107
|
-
ref: "form",
|
|
108
|
-
scheme: i.scheme,
|
|
109
|
-
modelValue: i.formValues,
|
|
110
|
-
"onUpdate:modelValue": e[3] || (e[3] = (r) => i.formValues = r),
|
|
111
|
-
class: "p-0 mt-[20px]"
|
|
112
|
-
}, null, 8, ["scheme", "modelValue"])) : p("", !0)
|
|
113
|
-
])
|
|
114
|
-
])
|
|
115
|
-
]);
|
|
116
|
-
}
|
|
117
|
-
const j = /* @__PURE__ */ d(g, [["render", V]]);
|
|
118
|
-
export {
|
|
119
|
-
j as default
|
|
120
|
-
};
|