@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.
Files changed (203) hide show
  1. package/README.md +97 -97
  2. package/config.js +4 -4
  3. package/dist/{add-page-CY3jyjng.js → add-page-BI4K8Lzk.js} +1 -1
  4. package/dist/{admin-interface-B09NhAi-.js → admin-interface-DDP6KpGO.js} +3 -3
  5. package/dist/{admin-view-obFqHA0_.js → admin-view-C--DkpIG.js} +3 -3
  6. package/dist/admin.js +1 -1
  7. package/dist/admin.umd.cjs +47 -47
  8. package/dist/assets/logo.svg +41 -41
  9. package/dist/{card-view-CAnhvY0b.js → card-view-CPwz8aJg.js} +1 -1
  10. package/dist/{edit-page-DOpbSZWg.js → edit-page-BsDJ8lKP.js} +1 -1
  11. package/dist/{import-file-DAyouRPm.js → import-file-B8gDejaq.js} +5459 -5452
  12. package/dist/{profile-page-Cm3oX_ZN.js → profile-page-C5UftUwo.js} +1 -1
  13. package/dist/style.css +1 -1
  14. package/module/settings/card/admin.accounts.table/index.yml +7 -7
  15. package/module/settings/card/admin.accounts.table/rules.hbs +18 -18
  16. package/module/settings/card/admin.accounts.table/users.hbs +13 -13
  17. package/module/settings/card/admin.roles.table/access.hbs +11 -11
  18. package/module/settings/card/admin.roles.table/general_info.hbs +9 -9
  19. package/module/settings/card/admin.roles.table/index.yml +22 -22
  20. package/module/settings/card/admin.roles.table/users.hbs +12 -12
  21. package/module/settings/card/admin.routes.table/general_info.hbs +13 -13
  22. package/module/settings/card/admin.routes.table/groups.hbs +11 -11
  23. package/module/settings/card/admin.routes.table/index.yml +15 -15
  24. package/module/settings/card/admin.routes.table/users.hbs +16 -16
  25. package/module/settings/card/admin.table_properties.table/custom_columns.hbs +22 -22
  26. package/module/settings/card/admin.table_properties.table/index.yml +12 -12
  27. package/module/settings/card/admin.table_properties.table/info.hbs +17 -17
  28. package/module/settings/card/admin.users.table/general_info.hbs +18 -18
  29. package/module/settings/card/admin.users.table/index.yml +20 -20
  30. package/module/settings/card/admin.users.table/last_login.hbs +17 -17
  31. package/module/settings/card/admin.users.table/logs.hbs +16 -16
  32. package/module/settings/card/admin.users.table/routes.hbs +13 -13
  33. package/module/settings/card/admin.users.table/user_roles.hbs +35 -35
  34. package/module/settings/cls/change_type.json +13 -13
  35. package/module/settings/cls/core.actions.json +17 -17
  36. package/module/settings/cls/core.column_type.json +14 -14
  37. package/module/settings/cls/core.scope.json +13 -13
  38. package/module/settings/cls/properties.site_status.json +13 -13
  39. package/module/settings/cls/properties.widget_status.json +13 -13
  40. package/module/settings/cls/users.user_type.json +13 -13
  41. package/module/settings/cls/yes_no.json +11 -11
  42. package/module/settings/form/admin.accounts.form.json +13 -13
  43. package/module/settings/form/admin.custom_column.form.json +55 -55
  44. package/module/settings/form/admin.properties.form.json +15 -15
  45. package/module/settings/form/admin.roles.form.json +21 -21
  46. package/module/settings/form/admin.routes.form.json +25 -25
  47. package/module/settings/form/admin.rules.form.json +30 -30
  48. package/module/settings/form/admin.table_properties.form.json +19 -19
  49. package/module/settings/form/admin.user_properties.form.json +15 -15
  50. package/module/settings/form/admin.user_roles.form.json +24 -24
  51. package/module/settings/form/admin.user_roles_card.form.json +13 -13
  52. package/module/settings/form/admin.users.form.json +177 -177
  53. package/module/settings/form/admin.users_edit.form.json +145 -145
  54. package/module/settings/form/context.account_grants.form.json +24 -24
  55. package/module/settings/form/context.account_users.form.json +12 -12
  56. package/module/settings/form/user.user_roles.form.json +13 -13
  57. package/module/settings/interface/admin.properties.json +4 -4
  58. package/module/settings/interface/admin.roles.json +4 -4
  59. package/module/settings/interface/admin.routes.json +4 -4
  60. package/module/settings/interface/admin.users.json +4 -4
  61. package/module/settings/menu.json +72 -72
  62. package/module/settings/select/core.routes.sql +1 -1
  63. package/module/settings/select/core.user_mentioned.sql +1 -1
  64. package/module/settings/select/core.user_uid.sql +1 -1
  65. package/module/settings/table/admin.accounts.table.json +49 -49
  66. package/module/settings/table/admin.custom_column.table.json +100 -100
  67. package/module/settings/table/admin.properties.table.json +39 -39
  68. package/module/settings/table/admin.roles.table.json +77 -77
  69. package/module/settings/table/admin.routes.table.json +73 -73
  70. package/module/settings/table/admin.rules.table.json +77 -77
  71. package/module/settings/table/admin.table_properties.table.json +37 -37
  72. package/module/settings/table/admin.user_properties.table.json +34 -34
  73. package/module/settings/table/admin.user_roles.table.json +74 -74
  74. package/module/settings/table/admin.users.table.json +135 -135
  75. package/module/settings/table/context.account_grants.table.json +88 -88
  76. package/module/settings/table/context.account_users.table.json +53 -53
  77. package/module/settings/table/log.table_changes.table.json +100 -100
  78. package/package.json +102 -102
  79. package/plugin.js +30 -30
  80. package/server/helpers/core/badge.js +16 -16
  81. package/server/helpers/core/buttonHelper.js +21 -21
  82. package/server/helpers/core/coalesce.js +7 -7
  83. package/server/helpers/core/select.js +48 -48
  84. package/server/helpers/core/token.js +18 -18
  85. package/server/helpers/index.js +40 -40
  86. package/server/helpers/list/buttonHelper.js +21 -21
  87. package/server/helpers/list/descriptionList.js +45 -45
  88. package/server/helpers/list/tableList.js +82 -82
  89. package/server/helpers/list/utils/button.js +5 -5
  90. package/server/helpers/list/utils/buttonDel.js +12 -12
  91. package/server/helpers/list/utils/buttonEdit.js +14 -14
  92. package/server/helpers/temp/contentList.js +58 -58
  93. package/server/helpers/temp/ifCond.js +101 -101
  94. package/server/helpers/utils/button.js +5 -5
  95. package/server/helpers/utils/buttonAdd.js +6 -6
  96. package/server/helpers/utils/buttonDel.js +6 -6
  97. package/server/helpers/utils/buttonEdit.js +5 -5
  98. package/server/helpers/utils/mdToHTML.js +17 -17
  99. package/server/helpers/utils/paddingNumber.js +3 -3
  100. package/server/plugins/access/funcs/getAdminAccess.js +12 -12
  101. package/server/plugins/access/index.mjs +6 -6
  102. package/server/plugins/adminHook.js +81 -81
  103. package/server/plugins/cron.js +10 -10
  104. package/server/plugins/docs.js +28 -28
  105. package/server/plugins/hook.js +276 -276
  106. package/server/plugins/vite.js +77 -77
  107. package/server/routes/access/controllers/access.group.js +29 -29
  108. package/server/routes/access/controllers/access.group.post.js +54 -54
  109. package/server/routes/access/controllers/access.interface.js +33 -33
  110. package/server/routes/access/index.mjs +11 -11
  111. package/server/routes/access/schema.mjs +67 -67
  112. package/server/routes/calendar/controllers/calendar.data.js +125 -125
  113. package/server/routes/calendar/index.mjs +7 -7
  114. package/server/routes/calendar/schema.js +21 -21
  115. package/server/routes/data/controllers/cardData.js +127 -127
  116. package/server/routes/data/controllers/cardTabData.js +49 -49
  117. package/server/routes/data/controllers/funcs/getFilterSQL/index.js +92 -92
  118. package/server/routes/data/controllers/funcs/getFilterSQL/util/formatValue.js +170 -170
  119. package/server/routes/data/controllers/funcs/getFilterSQL/util/getCustomQuery.js +13 -13
  120. package/server/routes/data/controllers/funcs/getFilterSQL/util/getFilterQuery.js +64 -64
  121. package/server/routes/data/controllers/funcs/getFilterSQL/util/getOptimizedQuery.js +12 -12
  122. package/server/routes/data/controllers/funcs/getFilterSQL/util/getTableSql.js +34 -34
  123. package/server/routes/data/controllers/tableData.js +31 -31
  124. package/server/routes/data/controllers/tableDataId.js +27 -27
  125. package/server/routes/data/controllers/tableFilter.js +9 -9
  126. package/server/routes/data/controllers/tableInfo.js +112 -112
  127. package/server/routes/data/controllers/tokenInfo.js +9 -9
  128. package/server/routes/data/controllers/utils/assignTokens.js +30 -30
  129. package/server/routes/data/controllers/utils/conditions.js +20 -20
  130. package/server/routes/data/controllers/utils/getColumns.js +8 -8
  131. package/server/routes/data/index.mjs +20 -20
  132. package/server/routes/data/schema.js +54 -54
  133. package/server/routes/dblist/controllers/readItems.js +20 -20
  134. package/server/routes/dblist/controllers/setItem.js +22 -22
  135. package/server/routes/dblist/index.mjs +18 -18
  136. package/server/routes/dblist/utils/formatData.js +7 -7
  137. package/server/routes/menu/controllers/getMenu.js +77 -77
  138. package/server/routes/menu/controllers/interfaces.js +20 -20
  139. package/server/routes/menu/index.mjs +7 -7
  140. package/server/routes/notifications/controllers/readNotifications.js +27 -27
  141. package/server/routes/notifications/controllers/testEmail.js +35 -35
  142. package/server/routes/notifications/controllers/userNotifications.js +53 -53
  143. package/server/routes/notifications/funcs/addNotification.js +21 -21
  144. package/server/routes/notifications/funcs/sendNotification.js +92 -92
  145. package/server/routes/notifications/hook/onWidgetSet.js +56 -56
  146. package/server/routes/notifications/index.mjs +26 -26
  147. package/server/routes/notifications/schema.js +16 -16
  148. package/server/routes/print/controllers/cardPrint.js +135 -135
  149. package/server/routes/print/controllers/printTemplate.add.js +37 -37
  150. package/server/routes/print/controllers/printTemplate.delete.js +29 -29
  151. package/server/routes/print/controllers/printTemplate.edit.js +42 -42
  152. package/server/routes/print/controllers/printTemplate.js +67 -67
  153. package/server/routes/print/controllers/printTemplateList.js +19 -19
  154. package/server/routes/print/controllers/printTemplatePreview.js +87 -87
  155. package/server/routes/print/index.mjs +19 -19
  156. package/server/routes/properties/controllers/admin.properties.get.js +31 -31
  157. package/server/routes/properties/controllers/table.properties.get.js +120 -120
  158. package/server/routes/properties/controllers/table.properties.post.js +115 -115
  159. package/server/routes/properties/controllers/user.properties.get.js +19 -19
  160. package/server/routes/properties/controllers/user.properties.post.js +10 -10
  161. package/server/routes/properties/index.mjs +21 -21
  162. package/server/routes/properties/schema.js +10 -10
  163. package/server/routes/properties/utils/dataInsert.js +26 -26
  164. package/server/routes/properties/utils/getColumnMetaData.js +17 -17
  165. package/server/routes/properties/utils/refreshData.js +128 -128
  166. package/server/routes/report/controllers/data.js +76 -76
  167. package/server/routes/report/controllers/list.js +18 -18
  168. package/server/routes/report/index.mjs +7 -7
  169. package/server/routes/report/utils/formatValue.js +179 -179
  170. package/server/routes/report/utils/getFilterQuery.js +67 -67
  171. package/server/routes/root.mjs +3 -3
  172. package/server/routes/templates/controllers/getTemplate.js +44 -44
  173. package/server/routes/templates/index.mjs +16 -16
  174. package/server/routes/templates/schema.js +8 -8
  175. package/server/routes/user/controllers/user.cls.id.js +14 -14
  176. package/server/routes/user/controllers/user.cls.js +72 -72
  177. package/server/routes/user/controllers/user.cls.post.js +54 -54
  178. package/server/routes/user/controllers/user.info.js +17 -17
  179. package/server/routes/user/schema.js +14 -14
  180. package/server/routes/util/controllers/code.generator.js +89 -89
  181. package/server/routes/util/index.mjs +5 -5
  182. package/server/routes/widget/controllers/widget.del.js +63 -63
  183. package/server/routes/widget/controllers/widget.get.js +125 -125
  184. package/server/routes/widget/controllers/widget.set.js +84 -84
  185. package/server/routes/widget/hook/onWidgetSet.js +12 -12
  186. package/server/routes/widget/index.mjs +16 -16
  187. package/server/routes/widget/schema.js +12 -12
  188. package/server/templates/cls/itree.recrzone_category.json +73 -73
  189. package/server/templates/cls/test.json +9 -9
  190. package/server/templates/form/admin.profile.form.json +31 -31
  191. package/server/templates/form/admin.user_cls.data.form.json +49 -49
  192. package/server/templates/form/admin.user_group_rel.form.json +21 -21
  193. package/server/templates/form/cp_building.form.json +32 -32
  194. package/server/templates/form/form-user-pass.json +10 -10
  195. package/server/templates/form/form-user_group.json +39 -39
  196. package/server/templates/form/form-users.json +156 -156
  197. package/server/templates/form/user_group_access.form.json +22 -22
  198. package/server/templates/pt/card-print.pt.hbs +245 -245
  199. package/server/templates/select/account_id.json +2 -2
  200. package/server/templates/table/gis.dataset.table.json +43 -43
  201. package/server/templates/table/management.user_group.table.json +112 -112
  202. package/server/templates/table/management.users.table.json +126 -126
  203. 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
+ };