zet-lib 1.3.43 → 1.4.1
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/lib/Model.js +3176 -0
- package/lib/index.js +2 -0
- package/lib/views/index_ejs.txt +9 -0
- package/lib/views/indexcss_ejs.txt +2 -0
- package/lib/views/indexjs_ejs.txt +10 -0
- package/lib/views/router.txt +120 -0
- package/lib/views/view_ejs.txt +9 -0
- package/lib/views/view_layout.ejs +228 -0
- package/lib/views/zview.ejs +460 -0
- package/lib/views/zviewcss.ejs +0 -0
- package/lib/views/zviewjs.ejs +851 -0
- package/lib/zCache.js +174 -170
- package/lib/zViewGenerator.js +1064 -0
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -11,6 +11,7 @@ module.exports = {
|
|
|
11
11
|
io: require('./io'),
|
|
12
12
|
zMail: require('./Mail'),
|
|
13
13
|
moduleLib: require('./moduleLib'),
|
|
14
|
+
Model:require('./Model'),
|
|
14
15
|
zApp: require('./zapp'),
|
|
15
16
|
zAppRouter: require('./zAppRouter'),
|
|
16
17
|
zComponent: require('./zComponent'),
|
|
@@ -18,6 +19,7 @@ module.exports = {
|
|
|
18
19
|
zFunction: require('./zFunction'),
|
|
19
20
|
zMenuRouter: require('./zMenuRouter'),
|
|
20
21
|
zGeneratorRouter: require('./zGeneratorRouter'),
|
|
22
|
+
zViewGenerator:require('./zViewGenerator'),
|
|
21
23
|
zReport: require('./zReport'),
|
|
22
24
|
zRoute: require('./zRoute'),
|
|
23
25
|
zRole: require('./zRole'),
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<div class=""> <%- breadcrumb %>
|
|
2
|
+
<div class="page-header"><h3><%- titleHeader %></h3></div>
|
|
3
|
+
<div class="gridbox">
|
|
4
|
+
<div class="row">
|
|
5
|
+
<div class="float"> <%- dataTable.buttons2 %> </div>
|
|
6
|
+
<div style="padding-top:7px"></div>
|
|
7
|
+
</div> <%- dataTable.table %> </div>
|
|
8
|
+
</div>
|
|
9
|
+
<%- myModal %>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<script src="/js/jquery-sortable.js"></script>
|
|
2
|
+
<%- dataTable.scripts%>
|
|
3
|
+
<script>
|
|
4
|
+
$(".gridadd").remove();
|
|
5
|
+
$(".gridimport").remove();
|
|
6
|
+
$(".gridlock").remove();
|
|
7
|
+
$(".griddeleteall").remove();
|
|
8
|
+
$(".gridlock").remove();
|
|
9
|
+
$(".export-search-raw").remove();
|
|
10
|
+
</script>
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
const router = require('express').Router();
|
|
2
|
+
const csrf = require('csurf');
|
|
3
|
+
const csrfProtection = csrf({cookie: true});
|
|
4
|
+
const {Util, access, connection, moduleLib, zDebug, zRoute, zRole, zDataTable, zForm} = require('zet-lib');
|
|
5
|
+
const MYMODEL = require('./../models/[[[TABLE_NAME]]]');
|
|
6
|
+
|
|
7
|
+
router.get('/', async (req, res) => {
|
|
8
|
+
await zRoute.attributeData(res, MYMODEL);
|
|
9
|
+
let dataTable = new zDataTable(res.locals);
|
|
10
|
+
dataTable.filterMODEL = await zRoute.dataTableFilterSync(req,res, MYMODEL, res.locals.gridFilter);
|
|
11
|
+
const levels = zRole.myLevel(req, res, MYMODEL.table);
|
|
12
|
+
dataTable.levels = levels;
|
|
13
|
+
res.render(`layouts/${layout}`, {
|
|
14
|
+
dataTable: dataTable,
|
|
15
|
+
levels : levels,
|
|
16
|
+
titleHeader: `<strong class="text text-info">${MYMODEL.title}</strong>`,
|
|
17
|
+
breadcrumb : zForm.breadcrumbIndex(),
|
|
18
|
+
myModal : zForm.modal({
|
|
19
|
+
attributeData: res.locals.attributeData,
|
|
20
|
+
visibles: res.locals.visibles,
|
|
21
|
+
invisibles: res.locals.invisibles,
|
|
22
|
+
routeName: MYMODEL.table,
|
|
23
|
+
}, LANGUAGE),
|
|
24
|
+
renderHead: `${MYMODEL.routeName}/indexcss.ejs`,
|
|
25
|
+
renderBody: `${MYMODEL.routeName}/index.ejs`,
|
|
26
|
+
renderEnd: `${MYMODEL.routeName}/indexjs.ejs`
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
router.post('/list', async (req, res) => {
|
|
31
|
+
const data = await zRoute.listData(req, res, MYMODEL, zRole);
|
|
32
|
+
res.json(data);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
router.get('/view/:id', async (req, res) => {
|
|
36
|
+
await zRoute.attributeData(res, MYMODEL);
|
|
37
|
+
const id = req.params.id;
|
|
38
|
+
let data = {};
|
|
39
|
+
let zForms = {};
|
|
40
|
+
try {
|
|
41
|
+
const results = await connection.results({select:zRoute.selectData(MYMODEL),table:MYMODEL.table,where:{id:id}});
|
|
42
|
+
if (results.length == 0) {
|
|
43
|
+
req.session.sessionFlash = Util.flashError(LANGUAGE['data_not_found']);
|
|
44
|
+
return res.redirect('/' + MYMODEL.routeName);
|
|
45
|
+
}
|
|
46
|
+
data = results[0];
|
|
47
|
+
zForms = await zRoute.viewFormsSync(req, res, MYMODEL, data);
|
|
48
|
+
} catch (err){
|
|
49
|
+
zDebug(req, res, err);
|
|
50
|
+
res.send("Err");
|
|
51
|
+
}
|
|
52
|
+
res.render(`layouts/${layout}`, {
|
|
53
|
+
data: data,
|
|
54
|
+
Util:Util,
|
|
55
|
+
zForms:zForms,
|
|
56
|
+
titleHeader: `View : <strong><a href="/${MYMODEL.routeName}">${MYMODEL.title}</a></strong>`,
|
|
57
|
+
breadcrumb : zForm.breadcrumbView(MYMODEL.routeName),
|
|
58
|
+
levels: zRole.myLevel(req, res, MYMODEL.table),
|
|
59
|
+
renderBody: `${MYMODEL.routeName}/view.ejs`
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
router.get('/excel-query', async (req,res) => {
|
|
64
|
+
await zRoute.excelQuery(req, res, MYMODEL);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
router.get('/excel', async (req, res) => {
|
|
68
|
+
const fields = MYMODEL.keysExcel;
|
|
69
|
+
const results = await connection.results({
|
|
70
|
+
table: MYMODEL.table,
|
|
71
|
+
where: {company_id: res.locals.companyId},
|
|
72
|
+
orderBy: ['id', 'DESC']
|
|
73
|
+
});
|
|
74
|
+
await zRoute.excel(req, res, MYMODEL, fields, results);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
router.get('/preview/:token', async (req, res) => {
|
|
79
|
+
let token = req.params.token;
|
|
80
|
+
let data = {}, data2 = {};
|
|
81
|
+
let template = "";
|
|
82
|
+
let footers = "";
|
|
83
|
+
try {
|
|
84
|
+
let results = await connection.results({table: "zapprovals", where: {token: token}});
|
|
85
|
+
if (results.length == 0) {
|
|
86
|
+
req.session.sessionFlash = Util.flashError(LANGUAGE['data_not_found']);
|
|
87
|
+
return res.redirect('/' + MYMODEL.routeName);
|
|
88
|
+
}
|
|
89
|
+
let MYMODEL2 = require("./../models/zapprovals")
|
|
90
|
+
data = await zRoute.viewTable(req, res, MYMODEL2, results[0], true);
|
|
91
|
+
let row = await connection.result({table: results[0].table, where: {id: results[0].id_data}});
|
|
92
|
+
data2 = await zRoute.viewTable(req, res, MYMODEL, row, true);
|
|
93
|
+
template = data.template;
|
|
94
|
+
for (var key in data2) {
|
|
95
|
+
template = Util.replaceAll(template, "{{" + key + "}}", data2[key])
|
|
96
|
+
}
|
|
97
|
+
var details = await connection.results({table: "zapprovals_details", where: {title_id: results[0].id}});
|
|
98
|
+
if (details.length) {
|
|
99
|
+
footers = await zRoute.approversFooter(details);
|
|
100
|
+
}
|
|
101
|
+
} catch (err) {
|
|
102
|
+
zDebug(req, res, err);
|
|
103
|
+
res.send("Err");
|
|
104
|
+
}
|
|
105
|
+
res.render(`layouts/blank`, {
|
|
106
|
+
template: template,
|
|
107
|
+
data: data,
|
|
108
|
+
footers: footers,
|
|
109
|
+
Util: Util,
|
|
110
|
+
details: details,
|
|
111
|
+
renderBody: 'index/zapprovals_preview.ejs'
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
router.post('/grid', access, zRoute.postGrid);
|
|
116
|
+
router.post('/reload', access, zRoute.postGridReload);
|
|
117
|
+
router.post('/chains', access, zRoute.chains);
|
|
118
|
+
router.post('/get_attributes',access, zRoute.getAttributes);
|
|
119
|
+
|
|
120
|
+
module.exports = router;
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
6
|
+
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no" />
|
|
7
|
+
<meta name="usertoken" content="<%- token %>" />
|
|
8
|
+
<meta name="socketUrl" content="<%- socketUrl %>" />
|
|
9
|
+
<meta name="csrf-token" content="<%- csrfToken %>" />
|
|
10
|
+
<title><%- titleApp || 'CRUD GENERATOR' %></title>
|
|
11
|
+
<%- moduleHead %>
|
|
12
|
+
<link rel="stylesheet" href="/css/app.css" />
|
|
13
|
+
<%- renderHead ? include("./../" + renderHead) : headHTML %>
|
|
14
|
+
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" />
|
|
15
|
+
<link href="/mdb/css/bootstrap.min.css" rel="stylesheet" />
|
|
16
|
+
<link rel="stylesheet" href="/css/toastr.min.css" />
|
|
17
|
+
<link rel="stylesheet" href="/js/sortable.css" />
|
|
18
|
+
<link href="/mdb/css/mdb.min.css" rel="stylesheet" />
|
|
19
|
+
<link href="/mdb/css/style.css" rel="stylesheet" />
|
|
20
|
+
<style type="text/css">
|
|
21
|
+
.ide_editor {
|
|
22
|
+
width: 100%;
|
|
23
|
+
height: 400px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.ide_editor_200 {
|
|
27
|
+
width: 100%;
|
|
28
|
+
height: 200px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
#modalpopup {
|
|
32
|
+
display: none;
|
|
33
|
+
position: fixed;
|
|
34
|
+
z-index: 1000;
|
|
35
|
+
top: 0;
|
|
36
|
+
left: 0;
|
|
37
|
+
height: 100%;
|
|
38
|
+
width: 100%;
|
|
39
|
+
opacity: 0.8;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.divbox {
|
|
43
|
+
border: 1px solid green;
|
|
44
|
+
min-height: 100px;
|
|
45
|
+
margin: 30px 1px 30px 1px;
|
|
46
|
+
padding-top: 10px;
|
|
47
|
+
padding-bottom: 5px;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.tab-content {
|
|
51
|
+
width: 100%;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.tab-pane {
|
|
55
|
+
width: 100%;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.divboxlittle {
|
|
59
|
+
border: 1px solid green;
|
|
60
|
+
min-height: 50px;
|
|
61
|
+
width: 100%;
|
|
62
|
+
padding-top: 10px;
|
|
63
|
+
padding-bottom: 5px;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
ol.mydragable li {
|
|
67
|
+
cursor: grabbing;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
body.dragging,
|
|
71
|
+
body.dragging * {
|
|
72
|
+
cursor: move !important;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.dragged {
|
|
76
|
+
position: absolute;
|
|
77
|
+
opacity: 0.5;
|
|
78
|
+
z-index: 2000;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
ol.mydragable li.placeholder {
|
|
82
|
+
position: relative;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
ol.mydragable li.placeholder:before {
|
|
86
|
+
position: absolute;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.icon-floats {
|
|
90
|
+
position: absolute;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.box-border {
|
|
94
|
+
border: 1px solid green;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.icon-floating {
|
|
98
|
+
position: relative;
|
|
99
|
+
top: 40px;
|
|
100
|
+
left: -30px;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.spinner {
|
|
104
|
+
display: flex;
|
|
105
|
+
align-items: center;
|
|
106
|
+
width: 40px;
|
|
107
|
+
height: 40px;
|
|
108
|
+
position: fixed;
|
|
109
|
+
top: 140px;
|
|
110
|
+
left: 140px;
|
|
111
|
+
z-index: 10;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.sortable-list .item {
|
|
115
|
+
list-style: none;
|
|
116
|
+
display: flex;
|
|
117
|
+
cursor: move;
|
|
118
|
+
background: #fff;
|
|
119
|
+
align-items: center;
|
|
120
|
+
border-radius: 5px;
|
|
121
|
+
padding: 10px 13px;
|
|
122
|
+
margin-bottom: 11px;
|
|
123
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.06);
|
|
124
|
+
border: 1px solid #ccc;
|
|
125
|
+
justify-content: space-between;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.divtabs {
|
|
129
|
+
display: flex;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
#divjoinmodules {
|
|
133
|
+
border: 1px solid red;
|
|
134
|
+
min-height: 50px;
|
|
135
|
+
width: 100%;
|
|
136
|
+
padding: 15px;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.joinContainer {
|
|
140
|
+
border: 1px solid yellow;
|
|
141
|
+
min-height: 50px;
|
|
142
|
+
width: 100%;
|
|
143
|
+
padding: 15px;
|
|
144
|
+
}
|
|
145
|
+
</style>
|
|
146
|
+
</head>
|
|
147
|
+
<body class="grey lighten-3">
|
|
148
|
+
<header>
|
|
149
|
+
<nav class="navbar fixed-top navbar-expand-lg navbar-light white scrolling-navbar">
|
|
150
|
+
<div class="container">
|
|
151
|
+
<a class="navbar-brand waves-effect" href="/dashboard"><strong class="blue-text"><%- menuApp %> </strong></a>
|
|
152
|
+
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
|
|
153
|
+
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span
|
|
154
|
+
class="navbar-toggler-icon"></span></button>
|
|
155
|
+
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
|
156
|
+
<ul id="main-navbar" class="nav navbar-nav nav-flex-icons ml-auto ms-auto flex-row" data-loaded="dpl">
|
|
157
|
+
<div id="navbarNotification" class="d-none">
|
|
158
|
+
<div id="navbarNotificationCounter"></div>
|
|
159
|
+
<div id="navbarNotificationContent"></div>
|
|
160
|
+
</div>
|
|
161
|
+
<li class="nav-item me-3 me-lg-0 d-none d-sm-inline-block dropdown">
|
|
162
|
+
<a class="nav-link dropdown-toggle" id="new-mdb-technologies-dropdown" role="button"
|
|
163
|
+
data-toggle="dropdown" aria-expanded="true"><i class="fa fa-cog"></i> Admin</a>
|
|
164
|
+
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="new-mdb-technologies-dropdown">
|
|
165
|
+
<li>
|
|
166
|
+
<h5 class="dropdown-header">Admin Menu</h5>
|
|
167
|
+
</li>
|
|
168
|
+
<li>
|
|
169
|
+
<hr class="dropdown-divider" />
|
|
170
|
+
</li>
|
|
171
|
+
<li>
|
|
172
|
+
<a class="dropdown-item" href="/zgenerator"><span>Generator</span></a>
|
|
173
|
+
</li>
|
|
174
|
+
<li>
|
|
175
|
+
<a class="dropdown-item" href="/zmenu"><span>Menu Generator</span></a>
|
|
176
|
+
</li>
|
|
177
|
+
<li>
|
|
178
|
+
<a class="dropdown-item" href="/zviewgenerator"><span>View Generator</span></a>
|
|
179
|
+
</li>
|
|
180
|
+
<li>
|
|
181
|
+
<a class="dropdown-item" href="/zreports"><span>Report Generator</span></a>
|
|
182
|
+
</li>
|
|
183
|
+
</ul>
|
|
184
|
+
</li>
|
|
185
|
+
<li class="nav-item d-none d-sm-inline-block">
|
|
186
|
+
<a href="#" class="nav-link waves-effect export-file"><i class="fas fa-sign-out-alt"></i> Export</a>
|
|
187
|
+
</li>
|
|
188
|
+
<li class="nav-item d-none d-sm-inline-block">
|
|
189
|
+
<a href="#" data-toggle="modal" data-target="#modal-file" class="nav-link waves-effect"><i
|
|
190
|
+
class="fas fa-syringe"></i> Import</a>
|
|
191
|
+
</li>
|
|
192
|
+
<li><a href="/dashboard" target="_blank"
|
|
193
|
+
class="auth-modal-toggle btn btn-sm btn-primary ripple-surface ms-2 me-1"
|
|
194
|
+
data-auth-modal-tab="sign-in">Dashboard</a></li>
|
|
195
|
+
</ul>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
</nav>
|
|
199
|
+
</header>
|
|
200
|
+
<main class="mt-5 pt-5">
|
|
201
|
+
<div class="container-fluid"><%- renderBody ? include("./../" + renderBody) : bodyHTML %></div>
|
|
202
|
+
</main>
|
|
203
|
+
<footer class="page-footer text-center font-small mdb-color darken-2 mt-4 wow fadeIn">
|
|
204
|
+
<hr class="my-4" />
|
|
205
|
+
<div class="pb-4">
|
|
206
|
+
<a href="https://www.facebook.com/sintret" target="_blank"><i class="fab fa-facebook-f mr-3"></i> </a><a
|
|
207
|
+
href="https://twitter.com/sintret" target="_blank"><i class="fab fa-twitter mr-3"></i> </a><a
|
|
208
|
+
href="https://www.youtube.com/watch?v=sintret" target="_blank"><i class="fab fa-youtube mr-3"></i> </a><a
|
|
209
|
+
href="https://plus.google.com/u/0/b/sintret" target="_blank"><i class="fab fa-google-plus-g mr-3"></i> </a><a
|
|
210
|
+
href="https://dribbble.com/sintret" target="_blank"><i class="fab fa-dribbble mr-3"></i> </a><a
|
|
211
|
+
href="https://pinterest.com/sintret" target="_blank"><i class="fab fa-pinterest mr-3"></i> </a><a
|
|
212
|
+
href="https://github.com/sintret" target="_blank"><i class="fab fa-github mr-3"></i> </a><a
|
|
213
|
+
href="http://codepen.io/sintret/" target="_blank"><i class="fab fa-codepen mr-3"></i></a>
|
|
214
|
+
</div>
|
|
215
|
+
<div class="footer-copyright py-3">©2023 - <%- new Date().getFullYear() %> Copyright: <a href="https://sintret.com"
|
|
216
|
+
target="_blank">App Maker</a></div>
|
|
217
|
+
</footer>
|
|
218
|
+
<div class="spinner" style="display: none"><img src="/assets/tiny/reload.svg" width="62" /></div>
|
|
219
|
+
<script src="/js/jquery-3.7.0.min.js"></script>
|
|
220
|
+
<script type="text/javascript" src="/mdb/js/popper.min.js"></script>
|
|
221
|
+
<script type="text/javascript" src="/mdb/js/bootstrap.min.js"></script>
|
|
222
|
+
<script type="text/javascript" src="/mdb/js/mdb.min.js"></script>
|
|
223
|
+
<script src="/js/toastr.min.js"></script>
|
|
224
|
+
<script src="/js/jquery-sortable.js"></script>
|
|
225
|
+
<script src="/js/formv4.min.js"></script>
|
|
226
|
+
<%- moduleEnd %> <%- renderEnd ? include("./../" + renderEnd) : endHTML %>
|
|
227
|
+
</body>
|
|
228
|
+
</html>
|