@opengis/admin 0.2.131 → 0.2.132
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/add-page-DQ70Si9f.js +104 -0
- package/dist/{admin-interface-CFR2WRun.js → admin-interface-CgXFerXl.js} +348 -323
- package/dist/{admin-view-CE-4P8V-.js → admin-view-t-gzhVnl.js} +231 -291
- package/dist/admin.js +1 -1
- package/dist/admin.umd.cjs +82 -82
- package/dist/{card-view-BbBU9cWN.js → card-view-Dtf6Ap9G.js} +1 -1
- package/dist/edit-page-BWRXfML4.js +125 -0
- package/dist/{import-file-C1vBdCEv.js → import-file-CztGvKRc.js} +25610 -26789
- package/dist/style.css +1 -1
- package/package.json +5 -5
- package/server/helpers/list/utils/button.js +5 -5
- package/server/routes/data/controllers/utils/conditions.js +20 -20
- package/server/routes/menu/controllers/getMenu.js +11 -3
- package/server/routes/menu/controllers/interfaces.js +19 -0
- package/server/routes/menu/index.mjs +2 -0
- package/server/routes/print/controllers/printTemplate.js +4 -3
- package/server/routes/print/controllers/printTemplatePreview.js +15 -9
- package/server/routes/properties/utils/refreshData.js +4 -4
- package/dist/add-page-B5Yx_gil.js +0 -119
- package/dist/edit-page-D3q9Dp_D.js +0 -138
- package/dist/profile-page-CVV-ZW1M.js +0 -78
- package/dist/user-B_2kh6ic.js +0 -5
- package/module/settings/setting/test.json +0 -6
@@ -1,21 +1,21 @@
|
|
1
|
-
function onCheck(rule, data) {
|
2
|
-
const val = data[rule[0]];
|
3
|
-
// console.log(val, rule[1], rule[2])
|
4
|
-
if (rule[1] === '==') return val === rule[2];
|
5
|
-
if (rule[1] === '!=') return val !== rule[2];
|
6
|
-
if (rule[1] === 'in' && rule[2].split) return rule[2].split(',').includes(val);
|
7
|
-
if (rule[1] === 'in' && rule[2].includes) return rule[2].includes(val);
|
8
|
-
|
9
|
-
if (rule[1] === 'not in' && rule[2].split) return !rule[2].split(',').includes(val);
|
10
|
-
if (rule[1] === 'not in' && rule[2].includes) return !rule[2].includes(val);
|
11
|
-
|
12
|
-
if (rule[1] === '>') return val > rule[2];
|
13
|
-
if (rule[1] === '<') return val < rule[2];
|
14
|
-
}
|
15
|
-
export default function conditions(rules, data) {
|
16
|
-
if (!rules?.length) return true;
|
17
|
-
const result = Array.isArray(rules[0]) ? !rules.filter(el => !onCheck(el, data)).length : onCheck(rules, data)
|
18
|
-
// console.log(rules, result)
|
19
|
-
return result;
|
20
|
-
|
1
|
+
function onCheck(rule, data) {
|
2
|
+
const val = data[rule[0]];
|
3
|
+
// console.log(val, rule[1], rule[2])
|
4
|
+
if (rule[1] === '==') return val === rule[2];
|
5
|
+
if (rule[1] === '!=') return val !== rule[2];
|
6
|
+
if (rule[1] === 'in' && rule[2].split) return rule[2].split(',').includes(val);
|
7
|
+
if (rule[1] === 'in' && rule[2].includes) return rule[2].includes(val);
|
8
|
+
|
9
|
+
if (rule[1] === 'not in' && rule[2].split) return !rule[2].split(',').includes(val);
|
10
|
+
if (rule[1] === 'not in' && rule[2].includes) return !rule[2].includes(val);
|
11
|
+
|
12
|
+
if (rule[1] === '>') return val > rule[2];
|
13
|
+
if (rule[1] === '<') return val < rule[2];
|
14
|
+
}
|
15
|
+
export default function conditions(rules, data) {
|
16
|
+
if (!rules?.length) return true;
|
17
|
+
const result = Array.isArray(rules[0]) ? !rules.filter(el => !onCheck(el, data)).length : onCheck(rules, data)
|
18
|
+
// console.log(rules, result)
|
19
|
+
return result;
|
20
|
+
|
21
21
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
import { join } from 'path';
|
3
|
-
import { userTemplateDir,
|
3
|
+
import { userTemplateDir, pgClients, applyHook, config } from '@opengis/fastify-table/utils.js';
|
4
4
|
|
5
5
|
import { existsSync, readdirSync, readFileSync } from 'fs';
|
6
6
|
const menuCache = [];
|
@@ -30,11 +30,17 @@ async function readMenu() {
|
|
30
30
|
return menus;
|
31
31
|
}
|
32
32
|
export default async function adminMenu({ user = {}, session, pg = pgClients.client }) {
|
33
|
+
const time = Date.now();
|
33
34
|
if (!user.uid) return { status: 403, message: 'access restricted' }
|
34
35
|
|
35
36
|
const menus = isProduction && menuCache.length ? menuCache : await readMenu();
|
36
37
|
|
38
|
+
const { rows } = await pgClients.client.query(`select property_key as key,property_text as val from admin.properties where property_key~'^(${config.settingKeys || 'site|map|admin'})'`);
|
39
|
+
const settings = rows.reduce((p, { key, val }) => { const [k1, k2] = key.split('.'); p[k1] = p[k1] || {}; p[k1][k2] = val; return p }, {});
|
37
40
|
// update user access
|
41
|
+
const { user_name, sur_name, father_name, email, phone, uid } = user;
|
42
|
+
const result = { settings, user: { uid, user_name, sur_name, father_name, email, phone } };
|
43
|
+
await applyHook('userMenu', result);
|
38
44
|
|
39
45
|
if (session && user?.uid && !user.user_type?.includes?.('admin') && !user.type?.includes?.('admin') && pg.pk['admin.role_access']) {
|
40
46
|
const { type, gl = [], routes = [] } = await pg.query(`select user_type as type, b.gl,routes from admin.users a
|
@@ -54,13 +60,15 @@ export default async function adminMenu({ user = {}, session, pg = pgClients.cli
|
|
54
60
|
session?.set?.('passport', { user });
|
55
61
|
if (type === 'admin') return menus;
|
56
62
|
const userMenus = menus.map(el => (el.menu ? { ...el, menu: el.menu.filter(item => routes?.includes(item.path)) } : el))
|
57
|
-
|
63
|
+
const menus = userMenus.filter(el => el.menu?.length || routes?.includes(el.path));
|
64
|
+
return { time: Date.now() - time, menus, ...result }
|
58
65
|
// .filter((el, idx, arr) => arr.map((el) => el?.ua || el?.en || el?.name).indexOf(el?.ua || el?.en || el?.name) === idx)
|
59
66
|
}
|
60
67
|
|
61
68
|
// skip dupes?
|
62
69
|
// .filter((el, idx, arr) => arr.map((el) => el?.ua || el?.en || el?.name).indexOf(el?.ua || el?.en || el?.name) === idx)
|
63
|
-
|
70
|
+
|
71
|
+
return { time: Date.now() - time, menus, ...result };
|
64
72
|
|
65
73
|
|
66
74
|
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { pgClients } from '@opengis/fastify-table/utils.js';
|
2
|
+
|
3
|
+
export default async function adminMenu({ pg = pgClients.client }) {
|
4
|
+
const { rows = [] } = await pg.query(`select route_id, alias, table_name, title, enabled from admin.routes`);
|
5
|
+
|
6
|
+
const interfaces = rows
|
7
|
+
.filter((el, idx, arr) => el.table_name && arr.findIndex(item => item.route_id === el.route_id) === idx)
|
8
|
+
.filter(el => pg.pk?.[el.table_name || ''])
|
9
|
+
.filter(el => !['log.', 'admin.', 'setting.'].find(item => el.table_name.startsWith(item) ))
|
10
|
+
.map(el => ({
|
11
|
+
title: el.title,
|
12
|
+
alias: el.alias,
|
13
|
+
table: el.table_name,
|
14
|
+
route: el.route_id,
|
15
|
+
enabled: el.enabled,
|
16
|
+
}));
|
17
|
+
|
18
|
+
return interfaces;
|
19
|
+
}
|
@@ -1,5 +1,7 @@
|
|
1
1
|
import getMenu from './controllers/getMenu.js';
|
2
|
+
import interfaces from './controllers/interfaces.js';
|
2
3
|
|
3
4
|
export default async function (fastify, opts) {
|
4
5
|
fastify.get(`/user-menu`, getMenu);
|
6
|
+
fastify.get(`/interfaces`, { config: { policy: ['admin'] } }, interfaces);
|
5
7
|
}
|
@@ -48,13 +48,14 @@ export default async function printTemplate(req, reply) {
|
|
48
48
|
const loadTable = await getTemplate('table', table);
|
49
49
|
const { optimizedSQL } = await getFilterSQL({ table, pg });
|
50
50
|
|
51
|
-
const where = `${loadTable?.key || pg.pk?.[loadTable?.table || table]}
|
51
|
+
const where = `${loadTable?.key || pg.pk?.[loadTable?.table || table]}=any($1::text[])`;
|
52
52
|
|
53
53
|
const q = `select * from (${optimizedSQL})q where ${loadTable?.query || '1=1'} and ${where}`;
|
54
54
|
|
55
|
-
const
|
55
|
+
const { rows = [] } = await pg.query(q, [params.id.split(',')]);
|
56
56
|
|
57
|
-
const
|
57
|
+
const htmls = await Promise.all(rows.map(async (row) => handlebars.compile(body)(row)));
|
58
|
+
const html = htmls.join('<p style="page-break-after: always;"> </p>');
|
58
59
|
|
59
60
|
if (format == 'html') {
|
60
61
|
return reply.headers(headers).send(html);
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { createHash } from 'node:crypto';
|
2
2
|
|
3
|
-
import { config, getFilterSQL, getTemplate, handlebars, pgClients } from '@opengis/fastify-table/utils.js';
|
3
|
+
import { config, getFilterSQL, getTemplate, handlebars, pgClients, getMeta } from '@opengis/fastify-table/utils.js';
|
4
4
|
import { grpc } from '@opengis/fastify-file/utils.js';
|
5
5
|
|
6
6
|
const { htmlToPdf } = grpc();
|
@@ -50,17 +50,21 @@ export default async function printTemplate(req, reply) {
|
|
50
50
|
return reply.headers(headers).send(buffer);
|
51
51
|
}
|
52
52
|
|
53
|
+
const { alias, table } = await pg.query(`select alias, table_name as table from admin.routes where route_id=$1`, [route])
|
54
|
+
.then(el => el.rows?.[0] || {});
|
55
|
+
|
56
|
+
if (!alias || !table) {
|
57
|
+
return reply.status(404).send('route table not found');
|
58
|
+
}
|
59
|
+
|
53
60
|
if (query?.demo) {
|
54
|
-
const
|
55
|
-
|
61
|
+
const loadTable = await getTemplate('table', alias);
|
62
|
+
const { optimizedSQL } = await getFilterSQL({ pg, table: alias });
|
56
63
|
|
57
|
-
if (!
|
58
|
-
return reply.status(
|
64
|
+
if (!optimizedSQL) {
|
65
|
+
return reply.status(400).send('empty query');
|
59
66
|
}
|
60
67
|
|
61
|
-
const loadTable = await getTemplate('table', table);
|
62
|
-
const { optimizedSQL } = await getFilterSQL({ table, pg });
|
63
|
-
|
64
68
|
const q = `select * from (${optimizedSQL})q where ${loadTable?.query || '1=1'} limit 1`;
|
65
69
|
|
66
70
|
const obj = await pg.query(q).then(el => el.rows?.[0] || {});
|
@@ -76,6 +80,8 @@ export default async function printTemplate(req, reply) {
|
|
76
80
|
return reply.headers(headers).send(buffer);
|
77
81
|
}
|
78
82
|
|
83
|
+
const meta = await getMeta({ pg, table });
|
84
|
+
const columns = meta.columns?.map(el => ({ name: el.name, title: el.title, type: pg.pgType[el.dataTypeID] || 'text' }));
|
79
85
|
// for body edit
|
80
|
-
return { name, title, html: body, route };
|
86
|
+
return { name, title, html: body, route, alias, table, columns };
|
81
87
|
}
|
@@ -6,7 +6,7 @@ function prepareResult(res) {
|
|
6
6
|
const arr = (res.rows || (Array.isArray(res) ? res : Object.values(res || {})));
|
7
7
|
return {
|
8
8
|
command: 'INSERT',
|
9
|
-
count: arr.filter((el) => el.command === 'INSERT')
|
9
|
+
count: res?.rowCount || arr.filter((el) => el.command === 'INSERT')
|
10
10
|
?.map((el) => ({ result: 'success', count: el.rowCount }))
|
11
11
|
?.reduce((acc, curr) => acc + curr.count, 0),
|
12
12
|
};
|
@@ -37,13 +37,13 @@ export default async function refreshData({
|
|
37
37
|
data?.forEach((el) => Object.assign(el, { id: el.id || randomUUID() }));
|
38
38
|
await client.query('delete from setting.property where object_id=$1 and property_entity=$2', [table, entity]);
|
39
39
|
|
40
|
-
const res = dataInsert({
|
40
|
+
const res = await dataInsert({
|
41
41
|
pg: client,
|
42
42
|
table: 'setting.property',
|
43
43
|
data: {
|
44
44
|
property_entity: entity,
|
45
45
|
object_id: table,
|
46
|
-
property_json: JSON.stringify(data)?.replace(/'/g, "''")
|
46
|
+
property_json: JSON.stringify(data), // ?.replace(/'+/g, "'")?.replace(/'/g, "''")
|
47
47
|
},
|
48
48
|
uid,
|
49
49
|
});
|
@@ -103,7 +103,7 @@ export default async function refreshData({
|
|
103
103
|
await client.query('delete from setting.custom_field where $1 in (tablename, object_id)', [table]);
|
104
104
|
await client.query('delete from setting.property where object_id=$1 and property_entity=$2', [table, entity]);
|
105
105
|
|
106
|
-
const data2 = JSON.stringify(data1?.filter((value, index, array) => array.indexOf(value) === index))?.replace(/'/g, "''")
|
106
|
+
const data2 = JSON.stringify(data1?.filter((value, index, array) => array.indexOf(value) === index)); // ?.replace(/'+/g, "'")?.replace(/'/g, "''")
|
107
107
|
const res = await dataInsert({
|
108
108
|
pg: client,
|
109
109
|
table: 'setting.property',
|
@@ -1,119 +0,0 @@
|
|
1
|
-
import { _ as h, u as p, e as u } from "./import-file-C1vBdCEv.js";
|
2
|
-
import { resolveComponent as d, openBlock as b, createElementBlock as g, createElementVNode as n, createBlock as f, normalizeStyle as x, createCommentVNode as w } from "vue";
|
3
|
-
const y = {
|
4
|
-
data() {
|
5
|
-
return {
|
6
|
-
formValues: {},
|
7
|
-
scheme: null,
|
8
|
-
table: "",
|
9
|
-
token: "",
|
10
|
-
api: "",
|
11
|
-
style: null
|
12
|
-
};
|
13
|
-
},
|
14
|
-
mounted() {
|
15
|
-
this.getFormScheme();
|
16
|
-
},
|
17
|
-
methods: {
|
18
|
-
flattenMenu(t) {
|
19
|
-
const e = [];
|
20
|
-
return t.forEach((o) => {
|
21
|
-
o.menu ? e.push(...this.flattenMenu(o.menu)) : e.push(o);
|
22
|
-
}), e;
|
23
|
-
},
|
24
|
-
async getFormScheme() {
|
25
|
-
var i, a;
|
26
|
-
const t = this.flattenMenu(p.value);
|
27
|
-
t != null && t.length || this.$router.replace("/404");
|
28
|
-
const e = t == null ? void 0 : t.find((r) => {
|
29
|
-
var s, l;
|
30
|
-
return (r == null ? void 0 : r.path) == ((l = (s = this.$route) == null ? void 0 : s.query) == null ? void 0 : l.table);
|
31
|
-
});
|
32
|
-
e || this.$router.replace("/404");
|
33
|
-
const o = e == null ? void 0 : e.table;
|
34
|
-
this.table = o;
|
35
|
-
try {
|
36
|
-
const r = await u.get(`/api/table-data/${o}`), { data: s } = await u.get(
|
37
|
-
`/api/template/form/${(i = r == null ? void 0 : r.data) == null ? void 0 : i.form}`
|
38
|
-
);
|
39
|
-
this.scheme = (s == null ? void 0 : s.schema) || s, this.style = (s == null ? void 0 : s.style) || null, this.api = (s == null ? void 0 : s.api) || "", this.token = (a = r == null ? void 0 : r.data) == null ? void 0 : a.addToken;
|
40
|
-
} catch {
|
41
|
-
}
|
42
|
-
},
|
43
|
-
getGroupedErrorNotification(t, e) {
|
44
|
-
debugger;
|
45
|
-
if (!t || !e) return "";
|
46
|
-
const o = {};
|
47
|
-
return Object.entries(t).forEach(([a, r]) => {
|
48
|
-
var l;
|
49
|
-
const s = ((l = e[a]) == null ? void 0 : l.ua) || a;
|
50
|
-
r.forEach((m) => {
|
51
|
-
const c = m.message;
|
52
|
-
o[c] || (o[c] = []), o[c].push(`"${s}"`);
|
53
|
-
});
|
54
|
-
}), Object.entries(o).map(([a, r]) => `<b>${a}:</b> ${r.join(", ")}`).join("<br>") || "Сталася помилка валідації";
|
55
|
-
},
|
56
|
-
async createObject() {
|
57
|
-
var e;
|
58
|
-
const t = this.$refs.form;
|
59
|
-
try {
|
60
|
-
await t.doValidation(), await u.post(
|
61
|
-
this.api || `/api/table/${this.token}`,
|
62
|
-
this.formValues
|
63
|
-
), await this.$router.back(), await this.$notify({
|
64
|
-
title: "Успішно!",
|
65
|
-
message: "Об'єкт успішно створено",
|
66
|
-
type: "success"
|
67
|
-
});
|
68
|
-
} catch (o) {
|
69
|
-
const i = this.getGroupedErrorNotification(
|
70
|
-
t == null ? void 0 : t.formErrors,
|
71
|
-
t == null ? void 0 : t.scheme
|
72
|
-
);
|
73
|
-
this.$notify({
|
74
|
-
title: "Помилка!",
|
75
|
-
message: ((e = o == null ? void 0 : o.response) == null ? void 0 : e.data) || i,
|
76
|
-
type: "error"
|
77
|
-
});
|
78
|
-
}
|
79
|
-
}
|
80
|
-
}
|
81
|
-
}, k = { class: "bg-gray-50 lg:w-[calc(100vw-260px)] w-[100vw]" }, v = { class: "h-[76px] mt-[15px] flex items-center justify-between mx-[20px] px-[20px] bg-white border rounded-xl" }, V = { class: "flex items-center gap-[6px]" }, _ = {
|
82
|
-
style: { height: "calc(100vh - 165px)" },
|
83
|
-
class: "bg-gray-50 p-[20px] flex lg:w-[calc(100vw-260px)] w-[100vw]"
|
84
|
-
}, $ = { 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" };
|
85
|
-
function j(t, e, o, i, a, r) {
|
86
|
-
const s = d("VsForm");
|
87
|
-
return b(), g("div", k, [
|
88
|
-
n("div", v, [
|
89
|
-
e[3] || (e[3] = n("h2", { class: "text-xl font-medium" }, "Створити", -1)),
|
90
|
-
n("div", V, [
|
91
|
-
n("button", {
|
92
|
-
onClick: e[0] || (e[0] = (l) => t.$router.back()),
|
93
|
-
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"
|
94
|
-
}, " Скасувати "),
|
95
|
-
n("button", {
|
96
|
-
onClick: e[1] || (e[1] = (...l) => r.createObject && r.createObject(...l)),
|
97
|
-
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"
|
98
|
-
}, " Зберегти ")
|
99
|
-
])
|
100
|
-
]),
|
101
|
-
n("div", _, [
|
102
|
-
n("div", $, [
|
103
|
-
a.scheme ? (b(), f(s, {
|
104
|
-
key: 0,
|
105
|
-
ref: "form",
|
106
|
-
scheme: a.scheme,
|
107
|
-
style: x(a.style),
|
108
|
-
modelValue: a.formValues,
|
109
|
-
"onUpdate:modelValue": e[2] || (e[2] = (l) => a.formValues = l),
|
110
|
-
class: "p-0 mt-[20px]"
|
111
|
-
}, null, 8, ["scheme", "style", "modelValue"])) : w("", !0)
|
112
|
-
])
|
113
|
-
])
|
114
|
-
]);
|
115
|
-
}
|
116
|
-
const O = /* @__PURE__ */ h(y, [["render", j]]);
|
117
|
-
export {
|
118
|
-
O as default
|
119
|
-
};
|
@@ -1,138 +0,0 @@
|
|
1
|
-
import { _ as g, u as f, e as m } from "./import-file-C1vBdCEv.js";
|
2
|
-
import { resolveComponent as y, openBlock as h, createElementBlock as x, createElementVNode as c, createBlock as w, normalizeStyle as k, createCommentVNode as v } from "vue";
|
3
|
-
const $ = {
|
4
|
-
data() {
|
5
|
-
return {
|
6
|
-
formValues: {},
|
7
|
-
scheme: null,
|
8
|
-
table: "",
|
9
|
-
token: "",
|
10
|
-
style: null
|
11
|
-
};
|
12
|
-
},
|
13
|
-
mounted() {
|
14
|
-
this.getFormScheme();
|
15
|
-
},
|
16
|
-
methods: {
|
17
|
-
flattenMenu(e) {
|
18
|
-
const t = [];
|
19
|
-
return e.forEach((r) => {
|
20
|
-
r.menu ? t.push(...this.flattenMenu(r.menu)) : t.push(r);
|
21
|
-
}), t;
|
22
|
-
},
|
23
|
-
async getFormScheme() {
|
24
|
-
var i, o;
|
25
|
-
const e = this.flattenMenu(f.value);
|
26
|
-
e != null && e.length || this.$router.replace("/404");
|
27
|
-
const t = e == null ? void 0 : e.find((a) => {
|
28
|
-
var n, s;
|
29
|
-
return (a == null ? void 0 : a.path) == ((s = (n = this.$route) == null ? void 0 : n.query) == null ? void 0 : s.table);
|
30
|
-
});
|
31
|
-
t || this.$router.replace("/404");
|
32
|
-
const r = t == null ? void 0 : t.table;
|
33
|
-
this.table = r;
|
34
|
-
try {
|
35
|
-
const {
|
36
|
-
data: { form: a }
|
37
|
-
} = await m.get(`/api/template/table/${r}`), { data: n } = await m.get(
|
38
|
-
`/api/table/${this.table}/${(o = (i = this.$route) == null ? void 0 : i.query) == null ? void 0 : o.id}`
|
39
|
-
);
|
40
|
-
this.token = (n == null ? void 0 : n.token) || "", this.formValues = n || {};
|
41
|
-
const { data: s } = await m.get(`/api/template/form/${a}`);
|
42
|
-
this.scheme = (s == null ? void 0 : s.schema) || s, this.style = (s == null ? void 0 : s.style) || null;
|
43
|
-
} catch {
|
44
|
-
}
|
45
|
-
},
|
46
|
-
async onlyEditObject() {
|
47
|
-
var t, r, i, o, a, n, s, l, u;
|
48
|
-
const e = this.$refs.form;
|
49
|
-
try {
|
50
|
-
await e.doValidation(), await m.put(`/api/table/${this.token}`, this.formValues), await this.$notify({
|
51
|
-
title: "Успішно!",
|
52
|
-
message: "Об'єкт успішно створено",
|
53
|
-
type: "success"
|
54
|
-
});
|
55
|
-
} catch (b) {
|
56
|
-
const d = ((t = b == null ? void 0 : b.response) == null ? void 0 : t.data) || "";
|
57
|
-
let p = ((a = (o = (i = (r = Object.entries(e == null ? void 0 : e.formErrors)) == null ? void 0 : r[0]) == null ? void 0 : i[1]) == null ? void 0 : o[0]) == null ? void 0 : a.message) === "Це поле обов'язкове" ? "Заповніть обов'язкові поля" : (u = (l = (s = (n = Object.entries(e == null ? void 0 : e.formErrors)) == null ? void 0 : n[0]) == null ? void 0 : s[1]) == null ? void 0 : l[0]) == null ? void 0 : u.message;
|
58
|
-
this.$notify({
|
59
|
-
title: "Помилка!",
|
60
|
-
message: d || p || "Сталася помилка валідаціі",
|
61
|
-
type: "error"
|
62
|
-
});
|
63
|
-
}
|
64
|
-
},
|
65
|
-
getGroupedErrorNotification(e, t) {
|
66
|
-
if (!e || !t) return "";
|
67
|
-
const r = {};
|
68
|
-
return Object.entries(e).forEach(([o, a]) => {
|
69
|
-
var s;
|
70
|
-
const n = ((s = t[o]) == null ? void 0 : s.ua) || o;
|
71
|
-
a.forEach((l) => {
|
72
|
-
const u = l.message;
|
73
|
-
r[u] || (r[u] = []), r[u].push(`"${n}"`);
|
74
|
-
});
|
75
|
-
}), Object.entries(r).map(([o, a]) => `<b>${o}:</b> ${a.join(", ")}`).join("<br>") || "Сталася помилка валідації";
|
76
|
-
},
|
77
|
-
async editObjectAndRedirect() {
|
78
|
-
const e = this.$refs.form;
|
79
|
-
try {
|
80
|
-
await e.doValidation(), await m.put(`/api/table/${this.token}`, this.formValues), await this.$router.back(), await this.$notify({
|
81
|
-
title: "Успішно!",
|
82
|
-
message: "Об'єкт успішно створено",
|
83
|
-
type: "success"
|
84
|
-
});
|
85
|
-
} catch {
|
86
|
-
const r = this.getGroupedErrorNotification(
|
87
|
-
e == null ? void 0 : e.formErrors,
|
88
|
-
e == null ? void 0 : e.scheme
|
89
|
-
);
|
90
|
-
this.$notify({
|
91
|
-
title: "Помилка!",
|
92
|
-
message: r,
|
93
|
-
type: "error"
|
94
|
-
});
|
95
|
-
}
|
96
|
-
}
|
97
|
-
}
|
98
|
-
}, V = { class: "bg-gray-50 lg:w-[calc(100vw-260px)] w-[100vw]" }, _ = { class: "h-[76px] mt-[15px] flex items-center justify-between mx-[20px] px-[20px] bg-white border rounded-xl" }, j = { class: "flex items-center gap-[6px]" }, E = {
|
99
|
-
style: { height: "calc(100vh - 155px)" },
|
100
|
-
class: "bg-gray-50 p-[20px] flex lg:w-[calc(100vw-260px)] w-[100vw]"
|
101
|
-
}, 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" };
|
102
|
-
function M(e, t, r, i, o, a) {
|
103
|
-
var s;
|
104
|
-
const n = y("VsForm");
|
105
|
-
return h(), x("div", V, [
|
106
|
-
c("div", _, [
|
107
|
-
t[3] || (t[3] = c("h2", { class: "text-xl font-medium" }, "Редагувати", -1)),
|
108
|
-
c("div", j, [
|
109
|
-
c("button", {
|
110
|
-
onClick: t[0] || (t[0] = (l) => e.$router.back()),
|
111
|
-
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"
|
112
|
-
}, " Скасувати "),
|
113
|
-
c("button", {
|
114
|
-
onClick: t[1] || (t[1] = (...l) => a.editObjectAndRedirect && a.editObjectAndRedirect(...l)),
|
115
|
-
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"
|
116
|
-
}, " Зберегти ")
|
117
|
-
])
|
118
|
-
]),
|
119
|
-
c("div", E, [
|
120
|
-
c("div", O, [
|
121
|
-
o.scheme ? (h(), w(n, {
|
122
|
-
key: 0,
|
123
|
-
ref: "form",
|
124
|
-
scheme: o.scheme,
|
125
|
-
columns: (s = o.style) == null ? void 0 : s.columns,
|
126
|
-
style: k(o.style),
|
127
|
-
modelValue: o.formValues,
|
128
|
-
"onUpdate:modelValue": t[2] || (t[2] = (l) => o.formValues = l),
|
129
|
-
class: "p-0 mt-[20px]"
|
130
|
-
}, null, 8, ["scheme", "columns", "style", "modelValue"])) : v("", !0)
|
131
|
-
])
|
132
|
-
])
|
133
|
-
]);
|
134
|
-
}
|
135
|
-
const N = /* @__PURE__ */ g($, [["render", M]]);
|
136
|
-
export {
|
137
|
-
N as default
|
138
|
-
};
|
@@ -1,78 +0,0 @@
|
|
1
|
-
import { _ as n, e as m } from "./import-file-C1vBdCEv.js";
|
2
|
-
import { u as p } from "./user-B_2kh6ic.js";
|
3
|
-
import { resolveComponent as d, openBlock as u, createElementBlock as f, createElementVNode as o, createBlock as h, createCommentVNode as b } from "vue";
|
4
|
-
const x = {
|
5
|
-
data() {
|
6
|
-
return {
|
7
|
-
formScheme: null,
|
8
|
-
formValues: {}
|
9
|
-
};
|
10
|
-
},
|
11
|
-
mounted() {
|
12
|
-
this.getFormScheme();
|
13
|
-
},
|
14
|
-
computed: {
|
15
|
-
userData() {
|
16
|
-
return p.value;
|
17
|
-
}
|
18
|
-
},
|
19
|
-
methods: {
|
20
|
-
async updateUser() {
|
21
|
-
var r;
|
22
|
-
try {
|
23
|
-
await m.put(`/user/${(r = this.userData.user) == null ? void 0 : r.uid}`, this.formValues), await this.$notify({
|
24
|
-
title: "Успішно!",
|
25
|
-
message: "Дані успішно оновлені",
|
26
|
-
type: "success"
|
27
|
-
});
|
28
|
-
} catch {
|
29
|
-
this.$notify({
|
30
|
-
title: "Помилка!",
|
31
|
-
message: "Сталася помилка",
|
32
|
-
type: "error"
|
33
|
-
});
|
34
|
-
}
|
35
|
-
},
|
36
|
-
async getFormScheme() {
|
37
|
-
var r, t, a, l;
|
38
|
-
try {
|
39
|
-
const { data: e } = await m.get(
|
40
|
-
"/api/template/form/admin.profile.form"
|
41
|
-
);
|
42
|
-
console.log(this.userData);
|
43
|
-
for (const s in e == null ? void 0 : e.schema)
|
44
|
-
(t = (r = this.userData) == null ? void 0 : r.user) != null && t[s] && (this.formValues[s] = (l = (a = this.userData) == null ? void 0 : a.user) == null ? void 0 : l[s]);
|
45
|
-
this.formScheme = e.schema;
|
46
|
-
} catch (e) {
|
47
|
-
console.error(e);
|
48
|
-
}
|
49
|
-
}
|
50
|
-
}
|
51
|
-
}, g = { class: "flex justify-center pt-[20px] pb-[20px] pl-[20px] h-[calc(100vh-58px)]" }, k = { class: "bg-white rounded-xl border p-[20px]" }, y = { class: "flex-1 overflow-auto [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-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" }, w = { class: "flex" };
|
52
|
-
function _(r, t, a, l, e, s) {
|
53
|
-
const i = d("VsForm");
|
54
|
-
return u(), f("div", g, [
|
55
|
-
o("div", k, [
|
56
|
-
t[2] || (t[2] = o("h2", { class: "mb-[20px] text-center" }, "Профіль", -1)),
|
57
|
-
o("div", y, [
|
58
|
-
e.formScheme ? (u(), h(i, {
|
59
|
-
key: 0,
|
60
|
-
scheme: e.formScheme,
|
61
|
-
modelValue: e.formValues,
|
62
|
-
"onUpdate:modelValue": t[0] || (t[0] = (c) => e.formValues = c),
|
63
|
-
class: "pb-0"
|
64
|
-
}, null, 8, ["scheme", "modelValue"])) : b("", !0),
|
65
|
-
o("div", w, [
|
66
|
-
o("button", {
|
67
|
-
onClick: t[1] || (t[1] = (...c) => s.updateUser && s.updateUser(...c)),
|
68
|
-
class: "ml-auto text-[18px] bg-blue-500 text-white px-[8px] py-[4px] rounded hover:bg-blue-700 duration-300"
|
69
|
-
}, " Зберегти ")
|
70
|
-
])
|
71
|
-
])
|
72
|
-
])
|
73
|
-
]);
|
74
|
-
}
|
75
|
-
const D = /* @__PURE__ */ n(x, [["render", _]]);
|
76
|
-
export {
|
77
|
-
D as default
|
78
|
-
};
|
package/dist/user-B_2kh6ic.js
DELETED