@opengis/admin 0.3.24 → 0.3.25
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/README.md +97 -97
- package/config.js +4 -4
- package/dist/{add-page-CY3jyjng.js → add-page-BI4K8Lzk.js} +1 -1
- package/dist/{admin-interface-B09NhAi-.js → admin-interface-DDP6KpGO.js} +3 -3
- package/dist/{admin-view-obFqHA0_.js → admin-view-C--DkpIG.js} +3 -3
- package/dist/admin.js +1 -1
- package/dist/admin.umd.cjs +47 -47
- package/dist/assets/logo.svg +41 -41
- package/dist/{card-view-CAnhvY0b.js → card-view-CPwz8aJg.js} +1 -1
- package/dist/{edit-page-DOpbSZWg.js → edit-page-BsDJ8lKP.js} +1 -1
- package/dist/{import-file-DAyouRPm.js → import-file-B8gDejaq.js} +5459 -5452
- package/dist/{profile-page-Cm3oX_ZN.js → profile-page-C5UftUwo.js} +1 -1
- package/dist/style.css +1 -1
- package/module/settings/card/admin.accounts.table/index.yml +7 -7
- package/module/settings/card/admin.accounts.table/rules.hbs +18 -18
- package/module/settings/card/admin.accounts.table/users.hbs +13 -13
- package/module/settings/card/admin.roles.table/access.hbs +11 -11
- package/module/settings/card/admin.roles.table/general_info.hbs +9 -9
- package/module/settings/card/admin.roles.table/index.yml +22 -22
- package/module/settings/card/admin.roles.table/users.hbs +12 -12
- package/module/settings/card/admin.routes.table/general_info.hbs +13 -13
- package/module/settings/card/admin.routes.table/groups.hbs +11 -11
- package/module/settings/card/admin.routes.table/index.yml +15 -15
- package/module/settings/card/admin.routes.table/users.hbs +16 -16
- package/module/settings/card/admin.table_properties.table/custom_columns.hbs +22 -22
- package/module/settings/card/admin.table_properties.table/index.yml +12 -12
- package/module/settings/card/admin.table_properties.table/info.hbs +17 -17
- package/module/settings/card/admin.users.table/general_info.hbs +18 -18
- package/module/settings/card/admin.users.table/index.yml +20 -20
- package/module/settings/card/admin.users.table/last_login.hbs +17 -17
- package/module/settings/card/admin.users.table/logs.hbs +16 -16
- package/module/settings/card/admin.users.table/routes.hbs +13 -13
- package/module/settings/card/admin.users.table/user_roles.hbs +35 -35
- package/module/settings/cls/change_type.json +13 -13
- package/module/settings/cls/core.actions.json +17 -17
- package/module/settings/cls/core.column_type.json +14 -14
- package/module/settings/cls/core.scope.json +13 -13
- package/module/settings/cls/properties.site_status.json +13 -13
- package/module/settings/cls/properties.widget_status.json +13 -13
- package/module/settings/cls/users.user_type.json +13 -13
- package/module/settings/cls/yes_no.json +11 -11
- package/module/settings/form/admin.accounts.form.json +13 -13
- package/module/settings/form/admin.custom_column.form.json +55 -55
- package/module/settings/form/admin.properties.form.json +15 -15
- package/module/settings/form/admin.roles.form.json +21 -21
- package/module/settings/form/admin.routes.form.json +25 -25
- package/module/settings/form/admin.rules.form.json +30 -30
- package/module/settings/form/admin.table_properties.form.json +19 -19
- package/module/settings/form/admin.user_properties.form.json +15 -15
- package/module/settings/form/admin.user_roles.form.json +24 -24
- package/module/settings/form/admin.user_roles_card.form.json +13 -13
- package/module/settings/form/admin.users.form.json +177 -177
- package/module/settings/form/admin.users_edit.form.json +145 -145
- package/module/settings/form/context.account_grants.form.json +24 -24
- package/module/settings/form/context.account_users.form.json +12 -12
- package/module/settings/form/user.user_roles.form.json +13 -13
- package/module/settings/interface/admin.properties.json +4 -4
- package/module/settings/interface/admin.roles.json +4 -4
- package/module/settings/interface/admin.routes.json +4 -4
- package/module/settings/interface/admin.users.json +4 -4
- package/module/settings/menu.json +72 -72
- package/module/settings/select/core.routes.sql +1 -1
- package/module/settings/select/core.user_mentioned.sql +1 -1
- package/module/settings/select/core.user_uid.sql +1 -1
- package/module/settings/table/admin.accounts.table.json +49 -49
- package/module/settings/table/admin.custom_column.table.json +100 -100
- package/module/settings/table/admin.properties.table.json +39 -39
- package/module/settings/table/admin.roles.table.json +77 -77
- package/module/settings/table/admin.routes.table.json +73 -73
- package/module/settings/table/admin.rules.table.json +77 -77
- package/module/settings/table/admin.table_properties.table.json +37 -37
- package/module/settings/table/admin.user_properties.table.json +34 -34
- package/module/settings/table/admin.user_roles.table.json +74 -74
- package/module/settings/table/admin.users.table.json +135 -135
- package/module/settings/table/context.account_grants.table.json +88 -88
- package/module/settings/table/context.account_users.table.json +53 -53
- package/module/settings/table/log.table_changes.table.json +100 -100
- package/package.json +102 -102
- package/plugin.js +30 -30
- package/server/helpers/core/badge.js +16 -16
- package/server/helpers/core/buttonHelper.js +21 -21
- package/server/helpers/core/coalesce.js +7 -7
- package/server/helpers/core/select.js +48 -48
- package/server/helpers/core/token.js +18 -18
- package/server/helpers/index.js +40 -40
- package/server/helpers/list/buttonHelper.js +21 -21
- package/server/helpers/list/descriptionList.js +45 -45
- package/server/helpers/list/tableList.js +82 -82
- package/server/helpers/list/utils/button.js +5 -5
- package/server/helpers/list/utils/buttonDel.js +12 -12
- package/server/helpers/list/utils/buttonEdit.js +14 -14
- package/server/helpers/temp/contentList.js +58 -58
- package/server/helpers/temp/ifCond.js +101 -101
- package/server/helpers/utils/button.js +5 -5
- package/server/helpers/utils/buttonAdd.js +6 -6
- package/server/helpers/utils/buttonDel.js +6 -6
- package/server/helpers/utils/buttonEdit.js +5 -5
- package/server/helpers/utils/mdToHTML.js +17 -17
- package/server/helpers/utils/paddingNumber.js +3 -3
- package/server/plugins/access/funcs/getAdminAccess.js +12 -12
- package/server/plugins/access/index.mjs +6 -6
- package/server/plugins/adminHook.js +81 -81
- package/server/plugins/cron.js +10 -10
- package/server/plugins/docs.js +28 -28
- package/server/plugins/hook.js +276 -276
- package/server/plugins/vite.js +77 -77
- package/server/routes/access/controllers/access.group.js +29 -29
- package/server/routes/access/controllers/access.group.post.js +54 -54
- package/server/routes/access/controllers/access.interface.js +33 -33
- package/server/routes/access/index.mjs +11 -11
- package/server/routes/access/schema.mjs +67 -67
- package/server/routes/calendar/controllers/calendar.data.js +125 -125
- package/server/routes/calendar/index.mjs +7 -7
- package/server/routes/calendar/schema.js +21 -21
- package/server/routes/data/controllers/cardData.js +127 -127
- package/server/routes/data/controllers/cardTabData.js +49 -49
- package/server/routes/data/controllers/funcs/getFilterSQL/index.js +92 -92
- package/server/routes/data/controllers/funcs/getFilterSQL/util/formatValue.js +170 -170
- package/server/routes/data/controllers/funcs/getFilterSQL/util/getCustomQuery.js +13 -13
- package/server/routes/data/controllers/funcs/getFilterSQL/util/getFilterQuery.js +64 -64
- package/server/routes/data/controllers/funcs/getFilterSQL/util/getOptimizedQuery.js +12 -12
- package/server/routes/data/controllers/funcs/getFilterSQL/util/getTableSql.js +34 -34
- package/server/routes/data/controllers/tableData.js +31 -31
- package/server/routes/data/controllers/tableDataId.js +27 -27
- package/server/routes/data/controllers/tableFilter.js +9 -9
- package/server/routes/data/controllers/tableInfo.js +112 -112
- package/server/routes/data/controllers/tokenInfo.js +9 -9
- package/server/routes/data/controllers/utils/assignTokens.js +30 -30
- package/server/routes/data/controllers/utils/conditions.js +20 -20
- package/server/routes/data/controllers/utils/getColumns.js +8 -8
- package/server/routes/data/index.mjs +20 -20
- package/server/routes/data/schema.js +54 -54
- package/server/routes/dblist/controllers/readItems.js +20 -20
- package/server/routes/dblist/controllers/setItem.js +22 -22
- package/server/routes/dblist/index.mjs +18 -18
- package/server/routes/dblist/utils/formatData.js +7 -7
- package/server/routes/menu/controllers/getMenu.js +77 -77
- package/server/routes/menu/controllers/interfaces.js +20 -20
- package/server/routes/menu/index.mjs +7 -7
- package/server/routes/notifications/controllers/readNotifications.js +27 -27
- package/server/routes/notifications/controllers/testEmail.js +35 -35
- package/server/routes/notifications/controllers/userNotifications.js +53 -53
- package/server/routes/notifications/funcs/addNotification.js +21 -21
- package/server/routes/notifications/funcs/sendNotification.js +92 -92
- package/server/routes/notifications/hook/onWidgetSet.js +56 -56
- package/server/routes/notifications/index.mjs +26 -26
- package/server/routes/notifications/schema.js +16 -16
- package/server/routes/print/controllers/cardPrint.js +135 -135
- package/server/routes/print/controllers/printTemplate.add.js +37 -37
- package/server/routes/print/controllers/printTemplate.delete.js +29 -29
- package/server/routes/print/controllers/printTemplate.edit.js +42 -42
- package/server/routes/print/controllers/printTemplate.js +67 -67
- package/server/routes/print/controllers/printTemplateList.js +19 -19
- package/server/routes/print/controllers/printTemplatePreview.js +87 -87
- package/server/routes/print/index.mjs +19 -19
- package/server/routes/properties/controllers/admin.properties.get.js +31 -31
- package/server/routes/properties/controllers/table.properties.get.js +120 -120
- package/server/routes/properties/controllers/table.properties.post.js +115 -115
- package/server/routes/properties/controllers/user.properties.get.js +19 -19
- package/server/routes/properties/controllers/user.properties.post.js +10 -10
- package/server/routes/properties/index.mjs +21 -21
- package/server/routes/properties/schema.js +10 -10
- package/server/routes/properties/utils/dataInsert.js +26 -26
- package/server/routes/properties/utils/getColumnMetaData.js +17 -17
- package/server/routes/properties/utils/refreshData.js +128 -128
- package/server/routes/report/controllers/data.js +76 -76
- package/server/routes/report/controllers/list.js +18 -18
- package/server/routes/report/index.mjs +7 -7
- package/server/routes/report/utils/formatValue.js +179 -179
- package/server/routes/report/utils/getFilterQuery.js +67 -67
- package/server/routes/root.mjs +3 -3
- package/server/routes/templates/controllers/getTemplate.js +44 -44
- package/server/routes/templates/index.mjs +16 -16
- package/server/routes/templates/schema.js +8 -8
- package/server/routes/user/controllers/user.cls.id.js +14 -14
- package/server/routes/user/controllers/user.cls.js +72 -72
- package/server/routes/user/controllers/user.cls.post.js +54 -54
- package/server/routes/user/controllers/user.info.js +17 -17
- package/server/routes/user/schema.js +14 -14
- package/server/routes/util/controllers/code.generator.js +89 -89
- package/server/routes/util/index.mjs +5 -5
- package/server/routes/widget/controllers/widget.del.js +63 -63
- package/server/routes/widget/controllers/widget.get.js +125 -125
- package/server/routes/widget/controllers/widget.set.js +84 -84
- package/server/routes/widget/hook/onWidgetSet.js +12 -12
- package/server/routes/widget/index.mjs +16 -16
- package/server/routes/widget/schema.js +12 -12
- package/server/templates/cls/itree.recrzone_category.json +73 -73
- package/server/templates/cls/test.json +9 -9
- package/server/templates/form/admin.profile.form.json +31 -31
- package/server/templates/form/admin.user_cls.data.form.json +49 -49
- package/server/templates/form/admin.user_group_rel.form.json +21 -21
- package/server/templates/form/cp_building.form.json +32 -32
- package/server/templates/form/form-user-pass.json +10 -10
- package/server/templates/form/form-user_group.json +39 -39
- package/server/templates/form/form-users.json +156 -156
- package/server/templates/form/user_group_access.form.json +22 -22
- package/server/templates/pt/card-print.pt.hbs +245 -245
- package/server/templates/select/account_id.json +2 -2
- package/server/templates/table/gis.dataset.table.json +43 -43
- package/server/templates/table/management.user_group.table.json +112 -112
- package/server/templates/table/management.users.table.json +126 -126
- package/utils.js +26 -26
@@ -1,20 +1,20 @@
|
|
1
|
-
import { pgClients } from "@opengis/fastify-table/utils.js";
|
2
|
-
|
3
|
-
const maxLimit = 100;
|
4
|
-
|
5
|
-
export default async function printTemplateList({
|
6
|
-
pg = pgClients.client, query = {},
|
7
|
-
}) {
|
8
|
-
const { page = 1 } = query;
|
9
|
-
|
10
|
-
const limit = Math.min(maxLimit, +(query.limit || 20));
|
11
|
-
|
12
|
-
const offset = page && page > 0 ? (page - 1) * limit : '0';
|
13
|
-
|
14
|
-
const q = `select template_id as id, name, title, route_id as route, type from admin.templates
|
15
|
-
where enabled limit ${limit} offset ${offset}`;
|
16
|
-
|
17
|
-
const { rows = [] } = pg.pk?.['admin.templates'] ? await pg.query(q) : {};
|
18
|
-
|
19
|
-
return { page, limit, rows };
|
1
|
+
import { pgClients } from "@opengis/fastify-table/utils.js";
|
2
|
+
|
3
|
+
const maxLimit = 100;
|
4
|
+
|
5
|
+
export default async function printTemplateList({
|
6
|
+
pg = pgClients.client, query = {},
|
7
|
+
}) {
|
8
|
+
const { page = 1 } = query;
|
9
|
+
|
10
|
+
const limit = Math.min(maxLimit, +(query.limit || 20));
|
11
|
+
|
12
|
+
const offset = page && page > 0 ? (page - 1) * limit : '0';
|
13
|
+
|
14
|
+
const q = `select template_id as id, name, title, route_id as route, type from admin.templates
|
15
|
+
where enabled limit ${limit} offset ${offset}`;
|
16
|
+
|
17
|
+
const { rows = [] } = pg.pk?.['admin.templates'] ? await pg.query(q) : {};
|
18
|
+
|
19
|
+
return { page, limit, rows };
|
20
20
|
}
|
@@ -1,87 +1,87 @@
|
|
1
|
-
import { createHash } from 'node:crypto';
|
2
|
-
|
3
|
-
import { config, getFilterSQL, getTemplate, handlebars, pgClients, getMeta } from '@opengis/fastify-table/utils.js';
|
4
|
-
import { grpc } from '@opengis/fastify-file/utils.js';
|
5
|
-
|
6
|
-
const { htmlToPdf } = grpc();
|
7
|
-
|
8
|
-
export default async function printTemplate(req, reply) {
|
9
|
-
const {
|
10
|
-
pg = pgClients.client,
|
11
|
-
params = {},
|
12
|
-
query = {},
|
13
|
-
} = req;
|
14
|
-
|
15
|
-
if (!params?.name) {
|
16
|
-
return reply.status(404).send('not enough params: name');
|
17
|
-
}
|
18
|
-
|
19
|
-
const { id, name, title, body = '', route } = await pg.query(`select template_id as id, name, title, body, route_id as route from admin.templates where $1 in (template_id,name)`, [params.name])
|
20
|
-
.then(el => el.rows?.[0] || {});
|
21
|
-
|
22
|
-
if (!id) {
|
23
|
-
return reply.status(404).send('template not found');
|
24
|
-
}
|
25
|
-
|
26
|
-
/* -- params.name === document template -- */
|
27
|
-
const format = query.format || (config.debug ? 'html' : 'pdf');
|
28
|
-
|
29
|
-
const hash = createHash('md5')
|
30
|
-
.update([query?.preview, query?.demo, params?.name].join())
|
31
|
-
.digest('hex');
|
32
|
-
|
33
|
-
const headers = format === 'pdf'
|
34
|
-
? { 'Content-Disposition': `inline; filename=${hash}.pdf`, 'Content-Type': 'application/pdf' }
|
35
|
-
: { 'Content-Type': 'text/html; charset=utf-8' };
|
36
|
-
|
37
|
-
if (query?.preview) {
|
38
|
-
const matches = body?.match?.(/{{(?!\!)([^}]*)}}/g) || [];
|
39
|
-
const preview = `<style> #toggle { background: yellow; } </style>`
|
40
|
-
+ matches.reduce((acc, curr) => acc.replace(curr, curr.replace(/{{(?!\!)([^}]*)}}/g, `<div id="toggle">${curr.replace(/{/g, '%7B').replace(/}/g, '%7D')}</div>`)), body);
|
41
|
-
|
42
|
-
const html = await handlebars.compile(preview)({});
|
43
|
-
|
44
|
-
if (format == 'html') {
|
45
|
-
return reply.headers(headers).send(html.replace(/%7B/g, '{').replace(/%7D/g, '}'));
|
46
|
-
}
|
47
|
-
|
48
|
-
const result = await htmlToPdf({ html: html.replace(/%7B/g, '{').replace(/%7D/g, '}') });
|
49
|
-
const buffer = Buffer.from(result.result, 'base64');
|
50
|
-
return reply.headers(headers).send(buffer);
|
51
|
-
}
|
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
|
-
|
60
|
-
if (query?.demo) {
|
61
|
-
const loadTable = await getTemplate('table', alias);
|
62
|
-
const { optimizedSQL } = await getFilterSQL({ pg, table: alias });
|
63
|
-
|
64
|
-
if (!optimizedSQL) {
|
65
|
-
return reply.status(400).send('empty query');
|
66
|
-
}
|
67
|
-
|
68
|
-
const q = `select * from (${optimizedSQL})q where ${loadTable?.query || '1=1'} limit 1`;
|
69
|
-
|
70
|
-
const obj = await pg.query(q).then(el => el.rows?.[0] || {});
|
71
|
-
|
72
|
-
const html = await handlebars.compile(body)(obj);
|
73
|
-
|
74
|
-
if (format == 'html') {
|
75
|
-
return reply.headers(headers).send(html);
|
76
|
-
}
|
77
|
-
|
78
|
-
const result = await htmlToPdf({ html });
|
79
|
-
const buffer = Buffer.from(result.result, 'base64');
|
80
|
-
return reply.headers(headers).send(buffer);
|
81
|
-
}
|
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' }));
|
85
|
-
// for body edit
|
86
|
-
return { name, title, html: body, route, alias, table, columns };
|
87
|
-
}
|
1
|
+
import { createHash } from 'node:crypto';
|
2
|
+
|
3
|
+
import { config, getFilterSQL, getTemplate, handlebars, pgClients, getMeta } from '@opengis/fastify-table/utils.js';
|
4
|
+
import { grpc } from '@opengis/fastify-file/utils.js';
|
5
|
+
|
6
|
+
const { htmlToPdf } = grpc();
|
7
|
+
|
8
|
+
export default async function printTemplate(req, reply) {
|
9
|
+
const {
|
10
|
+
pg = pgClients.client,
|
11
|
+
params = {},
|
12
|
+
query = {},
|
13
|
+
} = req;
|
14
|
+
|
15
|
+
if (!params?.name) {
|
16
|
+
return reply.status(404).send('not enough params: name');
|
17
|
+
}
|
18
|
+
|
19
|
+
const { id, name, title, body = '', route } = await pg.query(`select template_id as id, name, title, body, route_id as route from admin.templates where $1 in (template_id,name)`, [params.name])
|
20
|
+
.then(el => el.rows?.[0] || {});
|
21
|
+
|
22
|
+
if (!id) {
|
23
|
+
return reply.status(404).send('template not found');
|
24
|
+
}
|
25
|
+
|
26
|
+
/* -- params.name === document template -- */
|
27
|
+
const format = query.format || (config.debug ? 'html' : 'pdf');
|
28
|
+
|
29
|
+
const hash = createHash('md5')
|
30
|
+
.update([query?.preview, query?.demo, params?.name].join())
|
31
|
+
.digest('hex');
|
32
|
+
|
33
|
+
const headers = format === 'pdf'
|
34
|
+
? { 'Content-Disposition': `inline; filename=${hash}.pdf`, 'Content-Type': 'application/pdf' }
|
35
|
+
: { 'Content-Type': 'text/html; charset=utf-8' };
|
36
|
+
|
37
|
+
if (query?.preview) {
|
38
|
+
const matches = body?.match?.(/{{(?!\!)([^}]*)}}/g) || [];
|
39
|
+
const preview = `<style> #toggle { background: yellow; } </style>`
|
40
|
+
+ matches.reduce((acc, curr) => acc.replace(curr, curr.replace(/{{(?!\!)([^}]*)}}/g, `<div id="toggle">${curr.replace(/{/g, '%7B').replace(/}/g, '%7D')}</div>`)), body);
|
41
|
+
|
42
|
+
const html = await handlebars.compile(preview)({});
|
43
|
+
|
44
|
+
if (format == 'html') {
|
45
|
+
return reply.headers(headers).send(html.replace(/%7B/g, '{').replace(/%7D/g, '}'));
|
46
|
+
}
|
47
|
+
|
48
|
+
const result = await htmlToPdf({ html: html.replace(/%7B/g, '{').replace(/%7D/g, '}') });
|
49
|
+
const buffer = Buffer.from(result.result, 'base64');
|
50
|
+
return reply.headers(headers).send(buffer);
|
51
|
+
}
|
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
|
+
|
60
|
+
if (query?.demo) {
|
61
|
+
const loadTable = await getTemplate('table', alias);
|
62
|
+
const { optimizedSQL } = await getFilterSQL({ pg, table: alias });
|
63
|
+
|
64
|
+
if (!optimizedSQL) {
|
65
|
+
return reply.status(400).send('empty query');
|
66
|
+
}
|
67
|
+
|
68
|
+
const q = `select * from (${optimizedSQL})q where ${loadTable?.query || '1=1'} limit 1`;
|
69
|
+
|
70
|
+
const obj = await pg.query(q).then(el => el.rows?.[0] || {});
|
71
|
+
|
72
|
+
const html = await handlebars.compile(body)(obj);
|
73
|
+
|
74
|
+
if (format == 'html') {
|
75
|
+
return reply.headers(headers).send(html);
|
76
|
+
}
|
77
|
+
|
78
|
+
const result = await htmlToPdf({ html });
|
79
|
+
const buffer = Buffer.from(result.result, 'base64');
|
80
|
+
return reply.headers(headers).send(buffer);
|
81
|
+
}
|
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' }));
|
85
|
+
// for body edit
|
86
|
+
return { name, title, html: body, route, alias, table, columns };
|
87
|
+
}
|
@@ -1,19 +1,19 @@
|
|
1
|
-
import cardPrint from './controllers/cardPrint.js';
|
2
|
-
import printTemplateAdd from './controllers/printTemplate.add.js';
|
3
|
-
import printTemplateEdit from './controllers/printTemplate.edit.js';
|
4
|
-
import printTemplateDelete from './controllers/printTemplate.delete.js';
|
5
|
-
import printTemplate from './controllers/printTemplate.js';
|
6
|
-
import printTemplatePreview from './controllers/printTemplatePreview.js';
|
7
|
-
import printTemplateList from './controllers/printTemplateList.js';
|
8
|
-
|
9
|
-
const policy = ['user'];
|
10
|
-
|
11
|
-
export default async function route(app) {
|
12
|
-
app.get(`/card-print/:table/:id`, { config: { policy } }, cardPrint);
|
13
|
-
app.get('/print-template/:name/:id', { config: { policy } }, printTemplate);
|
14
|
-
app.get('/print-template/:name', { config: { policy } }, printTemplatePreview);
|
15
|
-
app.get('/print-template', { config: { policy } }, printTemplateList);
|
16
|
-
app.post('/print-template', { config: { policy } }, printTemplateAdd);
|
17
|
-
app.put('/print-template/:id', { config: { policy } }, printTemplateEdit);
|
18
|
-
app.delete('/print-template/:id', { config: { policy } }, printTemplateDelete);
|
19
|
-
}
|
1
|
+
import cardPrint from './controllers/cardPrint.js';
|
2
|
+
import printTemplateAdd from './controllers/printTemplate.add.js';
|
3
|
+
import printTemplateEdit from './controllers/printTemplate.edit.js';
|
4
|
+
import printTemplateDelete from './controllers/printTemplate.delete.js';
|
5
|
+
import printTemplate from './controllers/printTemplate.js';
|
6
|
+
import printTemplatePreview from './controllers/printTemplatePreview.js';
|
7
|
+
import printTemplateList from './controllers/printTemplateList.js';
|
8
|
+
|
9
|
+
const policy = ['user'];
|
10
|
+
|
11
|
+
export default async function route(app) {
|
12
|
+
app.get(`/card-print/:table/:id`, { config: { policy } }, cardPrint);
|
13
|
+
app.get('/print-template/:name/:id', { config: { policy } }, printTemplate);
|
14
|
+
app.get('/print-template/:name', { config: { policy } }, printTemplatePreview);
|
15
|
+
app.get('/print-template', { config: { policy } }, printTemplateList);
|
16
|
+
app.post('/print-template', { config: { policy } }, printTemplateAdd);
|
17
|
+
app.put('/print-template/:id', { config: { policy } }, printTemplateEdit);
|
18
|
+
app.delete('/print-template/:id', { config: { policy } }, printTemplateDelete);
|
19
|
+
}
|
@@ -1,31 +1,31 @@
|
|
1
|
-
const table = 'admin.properties';
|
2
|
-
|
3
|
-
import { pgClients, getTemplatePath, getTemplate } from '@opengis/fastify-table/utils.js';
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
export default async function getSettingsApp({
|
8
|
-
pg = pgClients.client,
|
9
|
-
}) {
|
10
|
-
const time = Date.now();
|
11
|
-
if (!pg.pk?.[table]) {
|
12
|
-
return { message: 'table not found', status: 404 };
|
13
|
-
}
|
14
|
-
|
15
|
-
/*const keyCache = `${pg.options?.database}:settings:${params?.key || 'all'}:${query?.json ? 'json' : 'plain'}:${table}`;
|
16
|
-
const cache = await redis.get(keyCache);
|
17
|
-
|
18
|
-
if (cache && !config?.local) {
|
19
|
-
return JSON.parse(cache);
|
20
|
-
}*/
|
21
|
-
|
22
|
-
const { rows } = await pgClients.client.query("select property_key as key,property_text as val from admin.properties /*where property_key~'^(site|map)'*/");
|
23
|
-
const settings = rows.reduce((p, { key, val }) => { const [k1, k2] = key.split('.'); p[k1] = p[k1] || {}; p[k1][k2] = val; return p }, {});
|
24
|
-
const settings1 = rows.reduce((p, { key, val }) => ({ ...p, [key]: val }), {});
|
25
|
-
|
26
|
-
const forms = await Promise.all(getTemplatePath('setting')
|
27
|
-
.map(async (el) => ({ name: el[0], body: await getTemplate('setting', el[0]) }))
|
28
|
-
);
|
29
|
-
|
30
|
-
return { message: { time: Date.now() - time, forms, settings: settings1 }, status: 200 };
|
31
|
-
}
|
1
|
+
const table = 'admin.properties';
|
2
|
+
|
3
|
+
import { pgClients, getTemplatePath, getTemplate } from '@opengis/fastify-table/utils.js';
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
export default async function getSettingsApp({
|
8
|
+
pg = pgClients.client,
|
9
|
+
}) {
|
10
|
+
const time = Date.now();
|
11
|
+
if (!pg.pk?.[table]) {
|
12
|
+
return { message: 'table not found', status: 404 };
|
13
|
+
}
|
14
|
+
|
15
|
+
/*const keyCache = `${pg.options?.database}:settings:${params?.key || 'all'}:${query?.json ? 'json' : 'plain'}:${table}`;
|
16
|
+
const cache = await redis.get(keyCache);
|
17
|
+
|
18
|
+
if (cache && !config?.local) {
|
19
|
+
return JSON.parse(cache);
|
20
|
+
}*/
|
21
|
+
|
22
|
+
const { rows } = await pgClients.client.query("select property_key as key,property_text as val from admin.properties /*where property_key~'^(site|map)'*/");
|
23
|
+
const settings = rows.reduce((p, { key, val }) => { const [k1, k2] = key.split('.'); p[k1] = p[k1] || {}; p[k1][k2] = val; return p }, {});
|
24
|
+
const settings1 = rows.reduce((p, { key, val }) => ({ ...p, [key]: val }), {});
|
25
|
+
|
26
|
+
const forms = await Promise.all(getTemplatePath('setting')
|
27
|
+
.map(async (el) => ({ name: el[0], body: await getTemplate('setting', el[0]) }))
|
28
|
+
);
|
29
|
+
|
30
|
+
return { message: { time: Date.now() - time, forms, settings: settings1 }, status: 200 };
|
31
|
+
}
|
@@ -1,120 +1,120 @@
|
|
1
|
-
import { pgClients, getMeta, getTemplate } from '@opengis/fastify-table/utils.js';
|
2
|
-
|
3
|
-
import getColumnMetaData from '../utils/getColumnMetaData.js';
|
4
|
-
|
5
|
-
/**
|
6
|
-
*
|
7
|
-
* @method GET
|
8
|
-
* @priority 4
|
9
|
-
* @alias getSettingsTable
|
10
|
-
* @type api
|
11
|
-
* @tag custom
|
12
|
-
|
13
|
-
* @returns {String} message and status
|
14
|
-
*/
|
15
|
-
|
16
|
-
export default async function getSettingsTable({
|
17
|
-
pg = pgClients.client, params = {}, user = {}, query = {},
|
18
|
-
}) {
|
19
|
-
const { table, entity } = params;
|
20
|
-
const { uid } = user;
|
21
|
-
const time = [];
|
22
|
-
|
23
|
-
if (!uid) {
|
24
|
-
return { message: 'access restricted', status: 401 };
|
25
|
-
}
|
26
|
-
|
27
|
-
if (!table) {
|
28
|
-
return { message: 'not enough params: table', status: 400 };
|
29
|
-
}
|
30
|
-
|
31
|
-
const loadTable = await getTemplate('table', table);
|
32
|
-
|
33
|
-
const tableName = loadTable?.table || table;
|
34
|
-
const meta = await getMeta({ pg, table: tableName });
|
35
|
-
const { view, pk } = meta || {};
|
36
|
-
time.push(Date.now());
|
37
|
-
|
38
|
-
if (!pk && !view) {
|
39
|
-
return {
|
40
|
-
message: `table primary key not found: ${tableName}`,
|
41
|
-
status: 400,
|
42
|
-
};
|
43
|
-
}
|
44
|
-
|
45
|
-
const { rows: geometry } = meta?.geom
|
46
|
-
? await pg.queryCache(`select st_geometrytype(${meta?.geom}) as type ,count(*)
|
47
|
-
from ${tableName} group by st_geometrytype(${meta?.geom})`, { table: tableName }) : [];
|
48
|
-
time.push(Date.now());
|
49
|
-
|
50
|
-
const stat = !view ? await getColumnMetaData({ pg, table: tableName }) : {};
|
51
|
-
time.push(Date.now());
|
52
|
-
|
53
|
-
const { total = 0 } = await pg.queryCache(`select count(*) as total from ${tableName}`, { table: tableName })
|
54
|
-
.then(el => el.rows?.[0] || {});
|
55
|
-
time.push(Date.now());
|
56
|
-
|
57
|
-
const { property_json: customColumns = [] } = await pg.query(`select property_json::json from setting.property
|
58
|
-
where property_entity='customColumn' and object_id=$1`, [table]).then(el => el.rows?.[0] || {});
|
59
|
-
|
60
|
-
const { property_json: tableSettingColumns } = await pg.query(`select property_json::json from setting.property
|
61
|
-
where property_entity='column' and object_id=$1`, [table]).then(el => el.rows?.[0] || {});
|
62
|
-
|
63
|
-
const columns = (tableSettingColumns || loadTable?.columns || meta?.columns)?.map((el) => ({ ...el, title: el.title || el.name }))
|
64
|
-
?.filter((value, index, array) => array?.map((el) => el.name).indexOf(value.name) === index); // get unique columns
|
65
|
-
|
66
|
-
const cls = columns?.filter((el) => ['badge', 'select'].includes(el.format) && (el.option || el.data))
|
67
|
-
?.map((el) => (el.option || el.data))
|
68
|
-
?.filter((value, index, array) => array.indexOf(value) === index); // get unique cls
|
69
|
-
|
70
|
-
const { property_json: userFilterList } = await pg.query(`select property_json::json from setting.property
|
71
|
-
where property_entity='filter' and object_id=$1`, [table]).then(el => el.rows?.[0] || {});
|
72
|
-
|
73
|
-
const { property_json: customQuery } = await pg.query(`select json_agg(json_build_object('id',property_id,'name', property_key,
|
74
|
-
'query', property_text, 'disabled', coalesce((property_json::json->>'disabled')::boolean,false) )) as property_json
|
75
|
-
from setting.property where 1=1 and property_entity='customQuery' and object_id=$1`, [table]).then(el => el.rows?.[0] || {});
|
76
|
-
|
77
|
-
time.push(Date.now());
|
78
|
-
|
79
|
-
const debug = user?.user_type?.includes('admin') && query?.debug
|
80
|
-
? {
|
81
|
-
view,
|
82
|
-
tableName,
|
83
|
-
opt,
|
84
|
-
colModel,
|
85
|
-
metaColumns: meta?.columns,
|
86
|
-
columnProperties: tableSettingColumns,
|
87
|
-
}
|
88
|
-
: undefined;
|
89
|
-
|
90
|
-
const res = {
|
91
|
-
message: {
|
92
|
-
time: {
|
93
|
-
geom: time[1] - time[0],
|
94
|
-
stat: time[2] - time[1],
|
95
|
-
count: time[3] - time[2],
|
96
|
-
total: time[4] - time[0],
|
97
|
-
},
|
98
|
-
debug,
|
99
|
-
model: tableName,
|
100
|
-
total,
|
101
|
-
geometry,
|
102
|
-
stat,
|
103
|
-
cls,
|
104
|
-
columns,
|
105
|
-
filters: userFilterList?.length
|
106
|
-
? userFilterList
|
107
|
-
: loadTable?.filters?.map((el) => ({ ...el, title: el.title || el.ua })),
|
108
|
-
customQuery: customQuery?.length ? customQuery : [],
|
109
|
-
customColumns,
|
110
|
-
customFilters: userFilterList || [],
|
111
|
-
},
|
112
|
-
status: 200,
|
113
|
-
};
|
114
|
-
|
115
|
-
if (entity) {
|
116
|
-
return { [entity]: res.message[entity] };
|
117
|
-
}
|
118
|
-
|
119
|
-
return res;
|
120
|
-
};
|
1
|
+
import { pgClients, getMeta, getTemplate } from '@opengis/fastify-table/utils.js';
|
2
|
+
|
3
|
+
import getColumnMetaData from '../utils/getColumnMetaData.js';
|
4
|
+
|
5
|
+
/**
|
6
|
+
*
|
7
|
+
* @method GET
|
8
|
+
* @priority 4
|
9
|
+
* @alias getSettingsTable
|
10
|
+
* @type api
|
11
|
+
* @tag custom
|
12
|
+
|
13
|
+
* @returns {String} message and status
|
14
|
+
*/
|
15
|
+
|
16
|
+
export default async function getSettingsTable({
|
17
|
+
pg = pgClients.client, params = {}, user = {}, query = {},
|
18
|
+
}) {
|
19
|
+
const { table, entity } = params;
|
20
|
+
const { uid } = user;
|
21
|
+
const time = [];
|
22
|
+
|
23
|
+
if (!uid) {
|
24
|
+
return { message: 'access restricted', status: 401 };
|
25
|
+
}
|
26
|
+
|
27
|
+
if (!table) {
|
28
|
+
return { message: 'not enough params: table', status: 400 };
|
29
|
+
}
|
30
|
+
|
31
|
+
const loadTable = await getTemplate('table', table);
|
32
|
+
|
33
|
+
const tableName = loadTable?.table || table;
|
34
|
+
const meta = await getMeta({ pg, table: tableName });
|
35
|
+
const { view, pk } = meta || {};
|
36
|
+
time.push(Date.now());
|
37
|
+
|
38
|
+
if (!pk && !view) {
|
39
|
+
return {
|
40
|
+
message: `table primary key not found: ${tableName}`,
|
41
|
+
status: 400,
|
42
|
+
};
|
43
|
+
}
|
44
|
+
|
45
|
+
const { rows: geometry } = meta?.geom
|
46
|
+
? await pg.queryCache(`select st_geometrytype(${meta?.geom}) as type ,count(*)
|
47
|
+
from ${tableName} group by st_geometrytype(${meta?.geom})`, { table: tableName }) : [];
|
48
|
+
time.push(Date.now());
|
49
|
+
|
50
|
+
const stat = !view ? await getColumnMetaData({ pg, table: tableName }) : {};
|
51
|
+
time.push(Date.now());
|
52
|
+
|
53
|
+
const { total = 0 } = await pg.queryCache(`select count(*) as total from ${tableName}`, { table: tableName })
|
54
|
+
.then(el => el.rows?.[0] || {});
|
55
|
+
time.push(Date.now());
|
56
|
+
|
57
|
+
const { property_json: customColumns = [] } = await pg.query(`select property_json::json from setting.property
|
58
|
+
where property_entity='customColumn' and object_id=$1`, [table]).then(el => el.rows?.[0] || {});
|
59
|
+
|
60
|
+
const { property_json: tableSettingColumns } = await pg.query(`select property_json::json from setting.property
|
61
|
+
where property_entity='column' and object_id=$1`, [table]).then(el => el.rows?.[0] || {});
|
62
|
+
|
63
|
+
const columns = (tableSettingColumns || loadTable?.columns || meta?.columns)?.map((el) => ({ ...el, title: el.title || el.name }))
|
64
|
+
?.filter((value, index, array) => array?.map((el) => el.name).indexOf(value.name) === index); // get unique columns
|
65
|
+
|
66
|
+
const cls = columns?.filter((el) => ['badge', 'select'].includes(el.format) && (el.option || el.data))
|
67
|
+
?.map((el) => (el.option || el.data))
|
68
|
+
?.filter((value, index, array) => array.indexOf(value) === index); // get unique cls
|
69
|
+
|
70
|
+
const { property_json: userFilterList } = await pg.query(`select property_json::json from setting.property
|
71
|
+
where property_entity='filter' and object_id=$1`, [table]).then(el => el.rows?.[0] || {});
|
72
|
+
|
73
|
+
const { property_json: customQuery } = await pg.query(`select json_agg(json_build_object('id',property_id,'name', property_key,
|
74
|
+
'query', property_text, 'disabled', coalesce((property_json::json->>'disabled')::boolean,false) )) as property_json
|
75
|
+
from setting.property where 1=1 and property_entity='customQuery' and object_id=$1`, [table]).then(el => el.rows?.[0] || {});
|
76
|
+
|
77
|
+
time.push(Date.now());
|
78
|
+
|
79
|
+
const debug = user?.user_type?.includes('admin') && query?.debug
|
80
|
+
? {
|
81
|
+
view,
|
82
|
+
tableName,
|
83
|
+
opt,
|
84
|
+
colModel,
|
85
|
+
metaColumns: meta?.columns,
|
86
|
+
columnProperties: tableSettingColumns,
|
87
|
+
}
|
88
|
+
: undefined;
|
89
|
+
|
90
|
+
const res = {
|
91
|
+
message: {
|
92
|
+
time: {
|
93
|
+
geom: time[1] - time[0],
|
94
|
+
stat: time[2] - time[1],
|
95
|
+
count: time[3] - time[2],
|
96
|
+
total: time[4] - time[0],
|
97
|
+
},
|
98
|
+
debug,
|
99
|
+
model: tableName,
|
100
|
+
total,
|
101
|
+
geometry,
|
102
|
+
stat,
|
103
|
+
cls,
|
104
|
+
columns,
|
105
|
+
filters: userFilterList?.length
|
106
|
+
? userFilterList
|
107
|
+
: loadTable?.filters?.map((el) => ({ ...el, title: el.title || el.ua })),
|
108
|
+
customQuery: customQuery?.length ? customQuery : [],
|
109
|
+
customColumns,
|
110
|
+
customFilters: userFilterList || [],
|
111
|
+
},
|
112
|
+
status: 200,
|
113
|
+
};
|
114
|
+
|
115
|
+
if (entity) {
|
116
|
+
return { [entity]: res.message[entity] };
|
117
|
+
}
|
118
|
+
|
119
|
+
return res;
|
120
|
+
};
|