@opengis/admin 0.3.24 → 0.3.26

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 (202) hide show
  1. package/README.md +97 -97
  2. package/config.js +4 -4
  3. package/dist/{add-page-CY3jyjng.js → add-page-B3H-0GBH.js} +25 -20
  4. package/dist/{admin-interface-B09NhAi-.js → admin-interface-CpMI-QOq.js} +502 -481
  5. package/dist/{admin-view-obFqHA0_.js → admin-view-BuCmto5A.js} +8 -8
  6. package/dist/admin.js +1 -1
  7. package/dist/admin.umd.cjs +76 -76
  8. package/dist/assets/logo.svg +41 -41
  9. package/dist/{card-view-CAnhvY0b.js → card-view-C4EvhyJT.js} +3 -3
  10. package/dist/edit-page-Bk2BoWiz.js +145 -0
  11. package/dist/{import-file-DAyouRPm.js → import-file-DoPKjOx2.js} +21832 -21926
  12. package/dist/{profile-page-Cm3oX_ZN.js → profile-page-D2CDkSuS.js} +5 -5
  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/buttonDel.js +12 -12
  90. package/server/helpers/list/utils/buttonEdit.js +14 -14
  91. package/server/helpers/temp/contentList.js +58 -58
  92. package/server/helpers/temp/ifCond.js +101 -101
  93. package/server/helpers/utils/button.js +5 -5
  94. package/server/helpers/utils/buttonAdd.js +6 -6
  95. package/server/helpers/utils/buttonDel.js +6 -6
  96. package/server/helpers/utils/buttonEdit.js +5 -5
  97. package/server/helpers/utils/mdToHTML.js +17 -17
  98. package/server/helpers/utils/paddingNumber.js +3 -3
  99. package/server/plugins/access/funcs/getAdminAccess.js +12 -12
  100. package/server/plugins/access/index.mjs +6 -6
  101. package/server/plugins/adminHook.js +81 -81
  102. package/server/plugins/cron.js +10 -10
  103. package/server/plugins/docs.js +28 -28
  104. package/server/plugins/hook.js +276 -276
  105. package/server/plugins/vite.js +77 -77
  106. package/server/routes/access/controllers/access.group.js +29 -29
  107. package/server/routes/access/controllers/access.group.post.js +54 -54
  108. package/server/routes/access/controllers/access.interface.js +33 -33
  109. package/server/routes/access/index.mjs +11 -11
  110. package/server/routes/access/schema.mjs +67 -67
  111. package/server/routes/calendar/controllers/calendar.data.js +125 -125
  112. package/server/routes/calendar/index.mjs +7 -7
  113. package/server/routes/calendar/schema.js +21 -21
  114. package/server/routes/data/controllers/cardData.js +127 -127
  115. package/server/routes/data/controllers/cardTabData.js +49 -49
  116. package/server/routes/data/controllers/funcs/getFilterSQL/index.js +92 -92
  117. package/server/routes/data/controllers/funcs/getFilterSQL/util/formatValue.js +170 -170
  118. package/server/routes/data/controllers/funcs/getFilterSQL/util/getCustomQuery.js +13 -13
  119. package/server/routes/data/controllers/funcs/getFilterSQL/util/getFilterQuery.js +64 -64
  120. package/server/routes/data/controllers/funcs/getFilterSQL/util/getOptimizedQuery.js +12 -12
  121. package/server/routes/data/controllers/funcs/getFilterSQL/util/getTableSql.js +34 -34
  122. package/server/routes/data/controllers/tableData.js +31 -31
  123. package/server/routes/data/controllers/tableDataId.js +27 -27
  124. package/server/routes/data/controllers/tableFilter.js +9 -9
  125. package/server/routes/data/controllers/tableInfo.js +112 -112
  126. package/server/routes/data/controllers/tokenInfo.js +9 -9
  127. package/server/routes/data/controllers/utils/assignTokens.js +30 -30
  128. package/server/routes/data/controllers/utils/getColumns.js +8 -8
  129. package/server/routes/data/index.mjs +20 -20
  130. package/server/routes/data/schema.js +54 -54
  131. package/server/routes/dblist/controllers/readItems.js +20 -20
  132. package/server/routes/dblist/controllers/setItem.js +22 -22
  133. package/server/routes/dblist/index.mjs +18 -18
  134. package/server/routes/dblist/utils/formatData.js +7 -7
  135. package/server/routes/menu/controllers/getMenu.js +77 -77
  136. package/server/routes/menu/controllers/interfaces.js +20 -20
  137. package/server/routes/menu/index.mjs +7 -7
  138. package/server/routes/notifications/controllers/readNotifications.js +27 -27
  139. package/server/routes/notifications/controllers/testEmail.js +35 -35
  140. package/server/routes/notifications/controllers/userNotifications.js +53 -53
  141. package/server/routes/notifications/funcs/addNotification.js +21 -21
  142. package/server/routes/notifications/funcs/sendNotification.js +92 -92
  143. package/server/routes/notifications/hook/onWidgetSet.js +56 -56
  144. package/server/routes/notifications/index.mjs +26 -26
  145. package/server/routes/notifications/schema.js +16 -16
  146. package/server/routes/print/controllers/cardPrint.js +135 -135
  147. package/server/routes/print/controllers/printTemplate.add.js +37 -37
  148. package/server/routes/print/controllers/printTemplate.delete.js +29 -29
  149. package/server/routes/print/controllers/printTemplate.edit.js +42 -42
  150. package/server/routes/print/controllers/printTemplate.js +67 -67
  151. package/server/routes/print/controllers/printTemplateList.js +19 -19
  152. package/server/routes/print/controllers/printTemplatePreview.js +87 -87
  153. package/server/routes/print/index.mjs +19 -19
  154. package/server/routes/properties/controllers/admin.properties.get.js +31 -31
  155. package/server/routes/properties/controllers/table.properties.get.js +120 -120
  156. package/server/routes/properties/controllers/table.properties.post.js +115 -115
  157. package/server/routes/properties/controllers/user.properties.get.js +19 -19
  158. package/server/routes/properties/controllers/user.properties.post.js +10 -10
  159. package/server/routes/properties/index.mjs +21 -21
  160. package/server/routes/properties/schema.js +10 -10
  161. package/server/routes/properties/utils/dataInsert.js +26 -26
  162. package/server/routes/properties/utils/getColumnMetaData.js +17 -17
  163. package/server/routes/properties/utils/refreshData.js +128 -128
  164. package/server/routes/report/controllers/data.js +76 -76
  165. package/server/routes/report/controllers/list.js +18 -18
  166. package/server/routes/report/index.mjs +7 -7
  167. package/server/routes/report/utils/formatValue.js +179 -179
  168. package/server/routes/report/utils/getFilterQuery.js +67 -67
  169. package/server/routes/root.mjs +3 -3
  170. package/server/routes/templates/controllers/getTemplate.js +44 -44
  171. package/server/routes/templates/index.mjs +16 -16
  172. package/server/routes/templates/schema.js +8 -8
  173. package/server/routes/user/controllers/user.cls.id.js +14 -14
  174. package/server/routes/user/controllers/user.cls.js +72 -72
  175. package/server/routes/user/controllers/user.cls.post.js +54 -54
  176. package/server/routes/user/controllers/user.info.js +17 -17
  177. package/server/routes/user/schema.js +14 -14
  178. package/server/routes/util/controllers/code.generator.js +89 -89
  179. package/server/routes/util/index.mjs +5 -5
  180. package/server/routes/widget/controllers/widget.del.js +63 -63
  181. package/server/routes/widget/controllers/widget.get.js +125 -125
  182. package/server/routes/widget/controllers/widget.set.js +84 -84
  183. package/server/routes/widget/hook/onWidgetSet.js +12 -12
  184. package/server/routes/widget/index.mjs +16 -16
  185. package/server/routes/widget/schema.js +12 -12
  186. package/server/templates/cls/itree.recrzone_category.json +73 -73
  187. package/server/templates/cls/test.json +9 -9
  188. package/server/templates/form/admin.profile.form.json +31 -31
  189. package/server/templates/form/admin.user_cls.data.form.json +49 -49
  190. package/server/templates/form/admin.user_group_rel.form.json +21 -21
  191. package/server/templates/form/cp_building.form.json +32 -32
  192. package/server/templates/form/form-user-pass.json +10 -10
  193. package/server/templates/form/form-user_group.json +39 -39
  194. package/server/templates/form/form-users.json +156 -156
  195. package/server/templates/form/user_group_access.form.json +22 -22
  196. package/server/templates/pt/card-print.pt.hbs +245 -245
  197. package/server/templates/select/account_id.json +2 -2
  198. package/server/templates/table/gis.dataset.table.json +43 -43
  199. package/server/templates/table/management.user_group.table.json +112 -112
  200. package/server/templates/table/management.users.table.json +126 -126
  201. package/utils.js +26 -26
  202. package/dist/edit-page-DOpbSZWg.js +0 -140
@@ -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
+ };