slimsdk 0.1.55 → 0.2.0
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 +1 -1
- package/dist/desktop/index.d.ts +13 -12
- package/dist/desktop/index.js +1228 -1967
- package/dist/desktop/index.js.map +1 -1
- package/dist/index-3POan8Vl.d.ts +94 -0
- package/dist/index-B4158M0u.d.ts +21 -0
- package/dist/index-BAQxKstM.d.ts +8 -0
- package/dist/index-BMqjxP9I.d.ts +11 -0
- package/dist/index-CD53Vh6h.d.ts +31 -0
- package/dist/index-CoYHkkyT.d.ts +14 -0
- package/dist/index-D5CUpF9v.d.ts +10 -0
- package/dist/index-DBhzpIiB.d.ts +32 -0
- package/dist/index-DCw_tM-R.d.ts +28 -0
- package/dist/{index-kr8P3eEW.d.ts → index-DWqF-tKY.d.ts} +7 -9
- package/dist/index-DzKPF0ja.d.ts +14 -0
- package/dist/index-jVam7Sxi.d.ts +15 -0
- package/dist/index-uQOR5bdy.d.ts +20 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +1 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/mobile/index.d.ts +13 -12
- package/dist/mobile/index.js +299 -808
- package/dist/mobile/index.js.map +1 -1
- package/dist/mod/button/index.d.ts +1 -1
- package/dist/mod/button/index.js +2 -2
- package/dist/mod/button/index.js.map +1 -1
- package/dist/mod/config/index.d.ts +52 -0
- package/dist/mod/{global → config}/index.js +45 -41
- package/dist/mod/config/index.js.map +1 -0
- package/dist/mod/cover/index.d.ts +1 -1
- package/dist/mod/cover/index.js +3 -3
- package/dist/mod/cover/index.js.map +1 -1
- package/dist/mod/dialog/index.d.ts +1 -1
- package/dist/mod/dialog/index.js +13 -13
- package/dist/mod/dialog/index.js.map +1 -1
- package/dist/mod/drawer/index.d.ts +1 -1
- package/dist/mod/drawer/index.js +8 -8
- package/dist/mod/drawer/index.js.map +1 -1
- package/dist/mod/drop/index.d.ts +1 -1
- package/dist/mod/drop/index.js +15 -15
- package/dist/mod/drop/index.js.map +1 -1
- package/dist/mod/hwlink/index.d.ts +2 -2
- package/dist/mod/hwlink/index.js +44 -656
- package/dist/mod/hwlink/index.js.map +1 -1
- package/dist/mod/index.d.ts +7 -7
- package/dist/mod/index.js +61 -59
- package/dist/mod/index.js.map +1 -1
- package/dist/mod/modal/index.d.ts +1 -1
- package/dist/mod/modal/index.js +12 -12
- package/dist/mod/modal/index.js.map +1 -1
- package/dist/mod/tabs/index.d.ts +1 -1
- package/dist/mod/tabs/index.js +8 -6
- package/dist/mod/tabs/index.js.map +1 -1
- package/dist/page/desktop/index.d.ts +3 -3
- package/dist/page/desktop/index.js +228 -801
- package/dist/page/desktop/index.js.map +1 -1
- package/dist/page/index.d.ts +7 -7
- package/dist/page/index.js +12 -12
- package/dist/page/index.js.map +1 -1
- package/dist/page/mobile/index.d.ts +2 -2
- package/dist/page/mobile/index.js +14 -14
- package/dist/page/mobile/index.js.map +1 -1
- package/dist/worker/hubworker.js +1 -1
- package/dist/worker/hubworker.js.map +1 -1
- package/package.json +6 -6
- package/dist/index-B2HHS23A.d.ts +0 -20
- package/dist/index-BQcJsVJ-.d.ts +0 -10
- package/dist/index-Bf_lg-oZ.d.ts +0 -339
- package/dist/index-ChdqOPJq.d.ts +0 -15
- package/dist/index-CzsSwSvp.d.ts +0 -21
- package/dist/index-D3tu8t6p.d.ts +0 -28
- package/dist/index-DQt71MNx.d.ts +0 -31
- package/dist/index-DZdXvqxA.d.ts +0 -10
- package/dist/index-DcvauYN8.d.ts +0 -14
- package/dist/index-Pd7FTiEW.d.ts +0 -32
- package/dist/index-QRbamarh.d.ts +0 -8
- package/dist/mod/global/index.d.ts +0 -57
- package/dist/mod/global/index.js.map +0 -1
|
@@ -1,5 +1,156 @@
|
|
|
1
|
-
// src/
|
|
1
|
+
// src/config/global.ts
|
|
2
2
|
var app = document.querySelector("#app");
|
|
3
|
+
|
|
4
|
+
// src/config/index.ts
|
|
5
|
+
var cfg = {
|
|
6
|
+
UNIX_TIME: 0,
|
|
7
|
+
app: {
|
|
8
|
+
UUID: "",
|
|
9
|
+
NAME: "",
|
|
10
|
+
SECRET: "",
|
|
11
|
+
VERSION: "",
|
|
12
|
+
RELEASE: "",
|
|
13
|
+
CALLBACK: ""
|
|
14
|
+
},
|
|
15
|
+
api: {
|
|
16
|
+
URL: "",
|
|
17
|
+
TOKEN: ""
|
|
18
|
+
},
|
|
19
|
+
hub: {
|
|
20
|
+
LOGIN: "https://wkrh.info/oauth/v1/authorize",
|
|
21
|
+
OAUTH: "https://wkrh.info:8850/oauth/v1",
|
|
22
|
+
API: "https://wkrh.info:8850/api/v1",
|
|
23
|
+
WSS: "wss://wkrh.info:8855/ws",
|
|
24
|
+
UUID: ""
|
|
25
|
+
},
|
|
26
|
+
hwl: {
|
|
27
|
+
HOST: "ws://localhost:8844/ws",
|
|
28
|
+
FILE: "https://wkrh.info/app/hwlink/hwlink_setup.exe"
|
|
29
|
+
},
|
|
30
|
+
user: {
|
|
31
|
+
sub: 0,
|
|
32
|
+
name: "",
|
|
33
|
+
utyp: "",
|
|
34
|
+
unit: "",
|
|
35
|
+
unit_id: 0,
|
|
36
|
+
role_id: 0,
|
|
37
|
+
metadata: {
|
|
38
|
+
emp_type: "",
|
|
39
|
+
emp_level: "",
|
|
40
|
+
position: ""
|
|
41
|
+
},
|
|
42
|
+
picture: ""
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// src/mod/dialog/index.ts
|
|
47
|
+
var app2 = document.querySelector("#app");
|
|
48
|
+
var confirm = (message, params) => new Promise((resolve) => {
|
|
49
|
+
if (!app2) return;
|
|
50
|
+
const doc = params && params?.target ? params.target : app2;
|
|
51
|
+
const color = params && params?.color ? params.color : "green";
|
|
52
|
+
const dialog = document.createElement("div");
|
|
53
|
+
dialog.className = "overlay slim-dialog";
|
|
54
|
+
dialog.innerHTML = /*html*/
|
|
55
|
+
`
|
|
56
|
+
<div class="confirm ${color}">
|
|
57
|
+
<div class="header">
|
|
58
|
+
<i class="icon solid"></i> Slim Confirm
|
|
59
|
+
</div>
|
|
60
|
+
<div class="message">${message}</div>
|
|
61
|
+
<div class="footer">
|
|
62
|
+
<button class="lg gray left" id="btn-no">
|
|
63
|
+
<i></i>\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01
|
|
64
|
+
</button>
|
|
65
|
+
<button class="lg ${color} right" id="btn-yes">
|
|
66
|
+
<i></i>\u0E15\u0E01\u0E25\u0E07
|
|
67
|
+
</button>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
`;
|
|
71
|
+
doc.appendChild(dialog);
|
|
72
|
+
dialog.querySelector("#btn-yes").focus();
|
|
73
|
+
dialog.querySelector("#btn-yes").onclick = () => {
|
|
74
|
+
dialog.remove();
|
|
75
|
+
resolve(true);
|
|
76
|
+
};
|
|
77
|
+
dialog.querySelector("#btn-no").onclick = () => {
|
|
78
|
+
dialog.remove();
|
|
79
|
+
resolve(false);
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// src/lib/utility.ts
|
|
84
|
+
var winPopup = (width, height, name, url) => {
|
|
85
|
+
const left = (screen.width - width) / 2;
|
|
86
|
+
const top = (screen.height - height) / 2;
|
|
87
|
+
let opt = `width=${width}, height=${height},`;
|
|
88
|
+
opt += `left=${left}, top=${top}`;
|
|
89
|
+
return window.open(url, name, opt);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
// src/mod/built-in/button/index.ts
|
|
93
|
+
var loading = (btn, state = false) => {
|
|
94
|
+
if (state) {
|
|
95
|
+
btn.querySelector(".btn-loader")?.remove();
|
|
96
|
+
btn.style.color = "transparent";
|
|
97
|
+
btn.style.position = "relative";
|
|
98
|
+
btn.style.pointerEvents = "none";
|
|
99
|
+
const loader = document.createElement("div");
|
|
100
|
+
loader.className = "btn-loader";
|
|
101
|
+
loader.innerHTML = `<div class="spinner s22"></div>`;
|
|
102
|
+
btn.appendChild(loader);
|
|
103
|
+
} else {
|
|
104
|
+
btn.querySelector(".btn-loader")?.remove();
|
|
105
|
+
btn.style.color = "";
|
|
106
|
+
btn.style.position = "";
|
|
107
|
+
btn.style.pointerEvents = "";
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
// src/mod/drop/index.ts
|
|
112
|
+
var menu = (drop) => {
|
|
113
|
+
const dropBtn = drop.querySelector(".drop-btn");
|
|
114
|
+
const content = drop.querySelector(".drop-content");
|
|
115
|
+
if (!dropBtn || !content) return;
|
|
116
|
+
setBtnEvent(dropBtn, content);
|
|
117
|
+
};
|
|
118
|
+
var setBtnEvent = (btn, content) => {
|
|
119
|
+
btn.onclick = () => {
|
|
120
|
+
if (content.style.display == "block") {
|
|
121
|
+
content.style.animation = "fade-out 0.4s forwards";
|
|
122
|
+
content.onanimationend = () => {
|
|
123
|
+
content.style.animation = "";
|
|
124
|
+
content.style.display = "";
|
|
125
|
+
};
|
|
126
|
+
} else {
|
|
127
|
+
clear();
|
|
128
|
+
content.style.animation = "fade-in 0.4s forwards";
|
|
129
|
+
content.style.display = "block";
|
|
130
|
+
content.onanimationend = () => {
|
|
131
|
+
content.style.animation = "";
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
var clear = () => {
|
|
137
|
+
const drop = document.querySelectorAll(".drop-content");
|
|
138
|
+
drop.forEach((el) => {
|
|
139
|
+
if (el.style.display == "block") {
|
|
140
|
+
el.style.animation = "fade-out 0.4s forwards";
|
|
141
|
+
el.onanimationend = () => {
|
|
142
|
+
el.style.animation = "";
|
|
143
|
+
el.style.display = "";
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
window.addEventListener("click", (e) => {
|
|
149
|
+
if (!e.target.matches(".drop-btn")) clear();
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
// src/page/index.ts
|
|
153
|
+
var app3 = document.querySelector("#app");
|
|
3
154
|
var pageSpin = (
|
|
4
155
|
/*html*/
|
|
5
156
|
`
|
|
@@ -11,26 +162,26 @@ var pageSpin = (
|
|
|
11
162
|
`
|
|
12
163
|
);
|
|
13
164
|
var smallSpin = `<div class="spinner s32"></div>`;
|
|
14
|
-
var
|
|
15
|
-
if (!
|
|
16
|
-
if (!
|
|
165
|
+
var loading2 = (size = "default") => {
|
|
166
|
+
if (!app3) return;
|
|
167
|
+
if (!app3.querySelector("#page-loader")) {
|
|
17
168
|
const loader = document.createElement("div");
|
|
18
169
|
loader.id = "page-loader";
|
|
19
170
|
loader.className = "overlay center";
|
|
20
171
|
loader.innerHTML = size == "default" ? pageSpin : smallSpin;
|
|
21
|
-
|
|
172
|
+
app3.appendChild(loader);
|
|
22
173
|
}
|
|
23
|
-
const content =
|
|
174
|
+
const content = app3.querySelector("#app-content");
|
|
24
175
|
if (content) content.style.display = "none";
|
|
25
176
|
};
|
|
26
|
-
var
|
|
177
|
+
var ready = (delay = 400) => {
|
|
27
178
|
new Promise((r) => setTimeout(r, delay)).then(() => {
|
|
28
179
|
clearLoader(true);
|
|
29
180
|
});
|
|
30
181
|
};
|
|
31
|
-
var
|
|
182
|
+
var error = (err) => {
|
|
32
183
|
clearLoader(false);
|
|
33
|
-
if (!
|
|
184
|
+
if (!app3) return;
|
|
34
185
|
const box = document.createElement("div");
|
|
35
186
|
box.className = "page-error";
|
|
36
187
|
box.innerHTML = /*html*/
|
|
@@ -39,12 +190,12 @@ var Error = (err) => {
|
|
|
39
190
|
<div class="topic">✦ \u0E40\u0E01\u0E34\u0E14\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14 ✦</div>
|
|
40
191
|
<div class="text">${err}</div>
|
|
41
192
|
`;
|
|
42
|
-
|
|
193
|
+
app3.prepend(box);
|
|
43
194
|
throw err;
|
|
44
195
|
};
|
|
45
|
-
var
|
|
46
|
-
if (!
|
|
47
|
-
|
|
196
|
+
var notFound = () => {
|
|
197
|
+
if (!app3) return;
|
|
198
|
+
app3.innerHTML = /*html*/
|
|
48
199
|
`
|
|
49
200
|
<div class="page-not-found">
|
|
50
201
|
<h1>4<i class="fas fa-ghost"></i>4</h1>
|
|
@@ -53,11 +204,11 @@ var NotFound = () => {
|
|
|
53
204
|
</div>
|
|
54
205
|
`;
|
|
55
206
|
};
|
|
56
|
-
var
|
|
207
|
+
var fullLoad = () => {
|
|
57
208
|
clearNavbar();
|
|
58
|
-
if (!
|
|
59
|
-
|
|
60
|
-
|
|
209
|
+
if (!app3) return;
|
|
210
|
+
app3.classList.add("full-page");
|
|
211
|
+
app3.innerHTML = /*html*/
|
|
61
212
|
`
|
|
62
213
|
<div class="page-full-load">
|
|
63
214
|
<div class="spinner"></div>
|
|
@@ -65,11 +216,11 @@ var FullLoad = () => {
|
|
|
65
216
|
</div>
|
|
66
217
|
`;
|
|
67
218
|
};
|
|
68
|
-
var
|
|
219
|
+
var inform = (params) => {
|
|
69
220
|
clearNavbar();
|
|
70
|
-
if (!
|
|
71
|
-
|
|
72
|
-
|
|
221
|
+
if (!app3) return;
|
|
222
|
+
app3.classList.add("full-page");
|
|
223
|
+
app3.innerHTML = /*html*/
|
|
73
224
|
`
|
|
74
225
|
<div class="page-inform ${params.color}">
|
|
75
226
|
<div class="icon solid">${params.icon}</div>
|
|
@@ -79,7 +230,7 @@ var Inform = (params) => {
|
|
|
79
230
|
</button>
|
|
80
231
|
</div>
|
|
81
232
|
`;
|
|
82
|
-
const btn =
|
|
233
|
+
const btn = app3.querySelector("button");
|
|
83
234
|
btn.onclick = () => window.location.replace(params.btnUrl);
|
|
84
235
|
};
|
|
85
236
|
var clearNavbar = () => {
|
|
@@ -89,342 +240,19 @@ var clearNavbar = () => {
|
|
|
89
240
|
if (topbar) topbar.remove();
|
|
90
241
|
if (tabbar) tabbar.remove();
|
|
91
242
|
if (sidebar) sidebar.remove();
|
|
92
|
-
if (
|
|
243
|
+
if (app3) app3.className = "";
|
|
93
244
|
};
|
|
94
245
|
var clearLoader = (showContent) => {
|
|
95
|
-
if (!
|
|
96
|
-
const loader =
|
|
246
|
+
if (!app3) return;
|
|
247
|
+
const loader = app3.querySelector("#page-loader");
|
|
97
248
|
if (loader) {
|
|
98
249
|
loader.style.animation = "fade-out 0.4s forwards";
|
|
99
250
|
loader.onanimationend = () => loader.remove();
|
|
100
251
|
}
|
|
101
|
-
const content =
|
|
252
|
+
const content = app3.querySelector("#app-content");
|
|
102
253
|
if (content) content.style.display = showContent ? "block" : "none";
|
|
103
254
|
};
|
|
104
255
|
|
|
105
|
-
// src/mod/global.ts
|
|
106
|
-
var gbvar = {
|
|
107
|
-
UNIX_TIME: 0,
|
|
108
|
-
app: {
|
|
109
|
-
UUID: "",
|
|
110
|
-
NAME: "",
|
|
111
|
-
VERSION: "",
|
|
112
|
-
RELEASE: ""
|
|
113
|
-
},
|
|
114
|
-
api: {
|
|
115
|
-
URL: "",
|
|
116
|
-
TOKEN: ""
|
|
117
|
-
},
|
|
118
|
-
hub: {
|
|
119
|
-
LOGIN: "https://wkrh.info/oauth/v1/authorize",
|
|
120
|
-
OAUTH: "https://wkrh.info:8850/oauth/v1",
|
|
121
|
-
API: "https://wkrh.info:8850/api/v1",
|
|
122
|
-
WSS: "wss://wkrh.info:8855/ws",
|
|
123
|
-
UUID: ""
|
|
124
|
-
},
|
|
125
|
-
hwl: {
|
|
126
|
-
HOST: "ws://localhost:8844/ws",
|
|
127
|
-
FILE: "https://wkrh.info/app/hwlink/hwlink_setup.exe"
|
|
128
|
-
},
|
|
129
|
-
user: {
|
|
130
|
-
ACCT: 0,
|
|
131
|
-
ACTYPE: 0,
|
|
132
|
-
ACROLE: 0,
|
|
133
|
-
ACNAME: "",
|
|
134
|
-
PICTURE: "",
|
|
135
|
-
AGCY: 0,
|
|
136
|
-
DVSN: 0,
|
|
137
|
-
SECT: 0,
|
|
138
|
-
DEPT: "0,0",
|
|
139
|
-
AGCY_NAME: "",
|
|
140
|
-
DVSN_NAME: "",
|
|
141
|
-
SECT_NAME: ""
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
var app2 = document.querySelector("#app");
|
|
145
|
-
|
|
146
|
-
// src/mod/built-in/cover/index.ts
|
|
147
|
-
var Loading2 = (cover, state = false, align = "top", hide = true) => {
|
|
148
|
-
const inner = cover.querySelectorAll("*");
|
|
149
|
-
if (state) {
|
|
150
|
-
cover.querySelector(".cover-loader")?.remove();
|
|
151
|
-
cover.style.position = "relative";
|
|
152
|
-
if (hide) inner.forEach((el) => el.style.visibility = "hidden");
|
|
153
|
-
const loader = document.createElement("div");
|
|
154
|
-
loader.className = `cover-loader ${align}`;
|
|
155
|
-
loader.innerHTML = `<div class="spinner s28"></div>`;
|
|
156
|
-
cover.appendChild(loader);
|
|
157
|
-
} else {
|
|
158
|
-
new Promise((r) => setTimeout(r, 400)).then(() => {
|
|
159
|
-
cover.querySelector(".cover-loader")?.remove();
|
|
160
|
-
cover.style.position = "";
|
|
161
|
-
inner.forEach((el) => el.style.visibility = "");
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
// src/mod/modal/index.ts
|
|
167
|
-
var app3 = document.querySelector("#app");
|
|
168
|
-
var tmpBtnSave = (
|
|
169
|
-
/* html */
|
|
170
|
-
`
|
|
171
|
-
<button class="solid green" type="submit">
|
|
172
|
-
<i></i>\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01
|
|
173
|
-
</button>
|
|
174
|
-
`
|
|
175
|
-
);
|
|
176
|
-
var tmpBtnCancel = (
|
|
177
|
-
/* html */
|
|
178
|
-
`
|
|
179
|
-
<button class="solid gray" type="button" id="btn-cancel">
|
|
180
|
-
<i></i>\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01
|
|
181
|
-
</button>
|
|
182
|
-
`
|
|
183
|
-
);
|
|
184
|
-
var tmpBtnClose = (
|
|
185
|
-
/* html */
|
|
186
|
-
`
|
|
187
|
-
<button class="solid blue" type="button" id="btn-close">
|
|
188
|
-
<i></i>\u0E1B\u0E34\u0E14\u0E2B\u0E19\u0E49\u0E32
|
|
189
|
-
</button>
|
|
190
|
-
`
|
|
191
|
-
);
|
|
192
|
-
var Create = (params) => {
|
|
193
|
-
const icon = params.icon ? params.icon : "";
|
|
194
|
-
const title = params.title ? params.title : "Modal Title";
|
|
195
|
-
const body = params.body ? params.body : "Modal Body";
|
|
196
|
-
const width = params.width ? params.width : "100%";
|
|
197
|
-
const align = params.button?.align ? params.button?.align : "";
|
|
198
|
-
const doc = params.target ? params.target : app3;
|
|
199
|
-
let button = "";
|
|
200
|
-
if (params.button?.cancel) button += tmpBtnCancel;
|
|
201
|
-
if (params.button?.close) button += tmpBtnClose;
|
|
202
|
-
if (params.button?.save) button += tmpBtnSave;
|
|
203
|
-
const modal = document.createElement("div");
|
|
204
|
-
modal.className = "overlay slim-modal";
|
|
205
|
-
modal.innerHTML = /*html*/
|
|
206
|
-
`
|
|
207
|
-
<form>
|
|
208
|
-
<div class="content" style="width: ${width};">
|
|
209
|
-
<div class="header">
|
|
210
|
-
<i class="icon pad">${icon}</i>${title}
|
|
211
|
-
<button id="btn-exit" type="button"
|
|
212
|
-
class="icon"></button>
|
|
213
|
-
</div>
|
|
214
|
-
<div class="body">${body}</div>
|
|
215
|
-
<div class="footer ${align}">${button}</div>
|
|
216
|
-
<div class="loader">
|
|
217
|
-
<div class="spinner s28"></div>
|
|
218
|
-
</div>
|
|
219
|
-
</div>
|
|
220
|
-
</form>
|
|
221
|
-
`;
|
|
222
|
-
if (!doc) return modal;
|
|
223
|
-
doc.appendChild(modal);
|
|
224
|
-
if (width == "auto") {
|
|
225
|
-
const content2 = modal.querySelector(".content");
|
|
226
|
-
if (content2) content2.style.maxWidth = `450px`;
|
|
227
|
-
}
|
|
228
|
-
window.location.hash = "modal";
|
|
229
|
-
const content = modal.querySelector(".content");
|
|
230
|
-
content.classList.add("modal-in");
|
|
231
|
-
modal.classList.add("overlay-in");
|
|
232
|
-
content.addEventListener("animationend", () => {
|
|
233
|
-
if (content.classList.contains("modal-in")) {
|
|
234
|
-
content.classList.remove("modal-in");
|
|
235
|
-
modal.classList.remove("overlay-in");
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
const hashChange = () => {
|
|
239
|
-
const hash = window.location.hash.replaceAll("#", "");
|
|
240
|
-
if (hash != "modal") done();
|
|
241
|
-
};
|
|
242
|
-
const done = () => {
|
|
243
|
-
destroy(modal);
|
|
244
|
-
if (window.location.hash == "#modal") history.back();
|
|
245
|
-
window.removeEventListener("hashchange", hashChange);
|
|
246
|
-
};
|
|
247
|
-
window.addEventListener("hashchange", hashChange);
|
|
248
|
-
const btnExit = modal.querySelector("#btn-exit");
|
|
249
|
-
const btnCancel = modal.querySelector("#btn-cancel");
|
|
250
|
-
const btnClose = modal.querySelector("#btn-close");
|
|
251
|
-
if (btnExit) {
|
|
252
|
-
btnExit.focus();
|
|
253
|
-
btnExit.onclick = done;
|
|
254
|
-
}
|
|
255
|
-
if (btnCancel) btnCancel.onclick = done;
|
|
256
|
-
if (btnClose) btnClose.onclick = done;
|
|
257
|
-
return modal;
|
|
258
|
-
};
|
|
259
|
-
var Close = (modal) => new Promise((resolve) => {
|
|
260
|
-
modal.querySelector("#btn-exit").click();
|
|
261
|
-
const content = modal.querySelector(".content");
|
|
262
|
-
content.addEventListener("animationend", () => resolve());
|
|
263
|
-
});
|
|
264
|
-
var destroy = (modal) => {
|
|
265
|
-
const content = modal.querySelector(".content");
|
|
266
|
-
content.classList.add("modal-out");
|
|
267
|
-
modal.classList.add("overlay-out");
|
|
268
|
-
content.addEventListener("animationend", () => {
|
|
269
|
-
if (content.classList.contains("modal-out")) {
|
|
270
|
-
modal.style.display = "none";
|
|
271
|
-
modal.remove();
|
|
272
|
-
}
|
|
273
|
-
});
|
|
274
|
-
};
|
|
275
|
-
var Loading3 = (modal) => {
|
|
276
|
-
const body = modal.querySelector(".body");
|
|
277
|
-
const loader = modal.querySelector(".loader");
|
|
278
|
-
if (body) body.style.visibility = "hidden";
|
|
279
|
-
if (loader) loader.style.display = "flex";
|
|
280
|
-
};
|
|
281
|
-
var Ready2 = (modal) => {
|
|
282
|
-
const body = modal.querySelector(".body");
|
|
283
|
-
const loader = modal.querySelector(".loader");
|
|
284
|
-
if (body) body.style.visibility = "visible";
|
|
285
|
-
if (loader) loader.style.display = "none";
|
|
286
|
-
};
|
|
287
|
-
var Hidden = (modal) => {
|
|
288
|
-
modal.style.display = "none";
|
|
289
|
-
};
|
|
290
|
-
var Visible = (modal) => {
|
|
291
|
-
modal.style.display = "block";
|
|
292
|
-
};
|
|
293
|
-
|
|
294
|
-
// src/mod/dialog/index.ts
|
|
295
|
-
var app4 = document.querySelector("#app");
|
|
296
|
-
var Confirm = (message, params) => new Promise((resolve) => {
|
|
297
|
-
if (!app4) return;
|
|
298
|
-
const doc = params && params?.target ? params.target : app4;
|
|
299
|
-
const color = params && params?.color ? params.color : "green";
|
|
300
|
-
const dialog = document.createElement("div");
|
|
301
|
-
dialog.className = "overlay slim-dialog";
|
|
302
|
-
dialog.innerHTML = /*html*/
|
|
303
|
-
`
|
|
304
|
-
<div class="confirm ${color}">
|
|
305
|
-
<div class="header">
|
|
306
|
-
<i class="icon solid"></i> Slim Confirm
|
|
307
|
-
</div>
|
|
308
|
-
<div class="message">${message}</div>
|
|
309
|
-
<div class="footer">
|
|
310
|
-
<button class="lg gray left" id="btn-no">
|
|
311
|
-
<i></i>\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01
|
|
312
|
-
</button>
|
|
313
|
-
<button class="lg ${color} right" id="btn-yes">
|
|
314
|
-
<i></i>\u0E15\u0E01\u0E25\u0E07
|
|
315
|
-
</button>
|
|
316
|
-
</div>
|
|
317
|
-
</div>
|
|
318
|
-
`;
|
|
319
|
-
doc.appendChild(dialog);
|
|
320
|
-
dialog.querySelector("#btn-yes").focus();
|
|
321
|
-
dialog.querySelector("#btn-yes").onclick = () => {
|
|
322
|
-
dialog.remove();
|
|
323
|
-
resolve(true);
|
|
324
|
-
};
|
|
325
|
-
dialog.querySelector("#btn-no").onclick = () => {
|
|
326
|
-
dialog.remove();
|
|
327
|
-
resolve(false);
|
|
328
|
-
};
|
|
329
|
-
});
|
|
330
|
-
var Alert = (message, params) => new Promise((resolve) => {
|
|
331
|
-
if (!app4) return;
|
|
332
|
-
const doc = params && params?.target ? params.target : app4;
|
|
333
|
-
const type = params && params?.type ? params.type : "success";
|
|
334
|
-
let color = "";
|
|
335
|
-
let icon = "";
|
|
336
|
-
if (type == "success") {
|
|
337
|
-
color = "green";
|
|
338
|
-
icon = "";
|
|
339
|
-
}
|
|
340
|
-
if (type == "failure") {
|
|
341
|
-
color = "red";
|
|
342
|
-
icon = "";
|
|
343
|
-
}
|
|
344
|
-
if (type == "warning") {
|
|
345
|
-
color = "orange";
|
|
346
|
-
icon = "";
|
|
347
|
-
}
|
|
348
|
-
if (type == "info") {
|
|
349
|
-
color = "blue";
|
|
350
|
-
icon = "";
|
|
351
|
-
}
|
|
352
|
-
const dialog = document.createElement("div");
|
|
353
|
-
dialog.className = "overlay slim-dialog";
|
|
354
|
-
dialog.innerHTML = /*html*/
|
|
355
|
-
`
|
|
356
|
-
<div class="alert ${color}">
|
|
357
|
-
<div class="icon solid">${icon}</div>
|
|
358
|
-
<div class="message">${message}</div>
|
|
359
|
-
<div class="footer">
|
|
360
|
-
<button class="lg ${color}" id="btn-yes">\u0E15\u0E01\u0E25\u0E07</button>
|
|
361
|
-
</div>
|
|
362
|
-
</div>
|
|
363
|
-
`;
|
|
364
|
-
doc.appendChild(dialog);
|
|
365
|
-
dialog.querySelector("#btn-yes").focus();
|
|
366
|
-
dialog.querySelector("#btn-yes").onclick = () => {
|
|
367
|
-
dialog.remove();
|
|
368
|
-
resolve();
|
|
369
|
-
};
|
|
370
|
-
});
|
|
371
|
-
var Toast = (message, params) => new Promise((resolve) => {
|
|
372
|
-
if (!app4) return;
|
|
373
|
-
const doc = params && params?.target ? params.target : app4;
|
|
374
|
-
const type = params && params?.type ? params.type : "success";
|
|
375
|
-
let color = "";
|
|
376
|
-
let icon = "";
|
|
377
|
-
if (type == "success") {
|
|
378
|
-
color = "green";
|
|
379
|
-
icon = "";
|
|
380
|
-
}
|
|
381
|
-
if (type == "failure") {
|
|
382
|
-
color = "red";
|
|
383
|
-
icon = "";
|
|
384
|
-
}
|
|
385
|
-
if (type == "warning") {
|
|
386
|
-
color = "orange";
|
|
387
|
-
icon = "";
|
|
388
|
-
}
|
|
389
|
-
if (type == "info") {
|
|
390
|
-
color = "blue";
|
|
391
|
-
icon = "";
|
|
392
|
-
}
|
|
393
|
-
const toast = document.createElement("div");
|
|
394
|
-
toast.className = `slim-toast ${color}`;
|
|
395
|
-
toast.innerHTML = /*html*/
|
|
396
|
-
`
|
|
397
|
-
<i class="icon">${icon}</i>
|
|
398
|
-
<span class="text">${message}</span>
|
|
399
|
-
`;
|
|
400
|
-
doc.appendChild(toast);
|
|
401
|
-
toast.classList.add("show");
|
|
402
|
-
let count = 0;
|
|
403
|
-
toast.onanimationend = () => {
|
|
404
|
-
count++;
|
|
405
|
-
if (count == 2) {
|
|
406
|
-
toast.remove();
|
|
407
|
-
resolve();
|
|
408
|
-
}
|
|
409
|
-
};
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
// src/lib/utility.ts
|
|
413
|
-
var winPopup = (width, height, name, url) => {
|
|
414
|
-
const left = (screen.width - width) / 2;
|
|
415
|
-
const top = (screen.height - height) / 2;
|
|
416
|
-
let opt = `width=${width}, height=${height},`;
|
|
417
|
-
opt += `left=${left}, top=${top}`;
|
|
418
|
-
return window.open(url, name, opt);
|
|
419
|
-
};
|
|
420
|
-
var strCheck = (str) => {
|
|
421
|
-
let out = String(str);
|
|
422
|
-
out = out.replaceAll("'", "\\'");
|
|
423
|
-
out = out.replaceAll('"', '\\"');
|
|
424
|
-
out = out.trim();
|
|
425
|
-
return out;
|
|
426
|
-
};
|
|
427
|
-
|
|
428
256
|
// src/svchub/hwlink/template.ts
|
|
429
257
|
var template = (
|
|
430
258
|
/*html*/
|
|
@@ -452,19 +280,19 @@ var template = (
|
|
|
452
280
|
<div id="device">
|
|
453
281
|
<div class="box-tb">
|
|
454
282
|
<div class="topic">\u0E2B\u0E19\u0E48\u0E27\u0E22\u0E07\u0E32\u0E19</div>
|
|
455
|
-
<div class="text" id="
|
|
283
|
+
<div class="text" id="">:</div>
|
|
456
284
|
</div>
|
|
457
285
|
<div class="box-tb">
|
|
458
286
|
<div class="topic">\u0E01\u0E25\u0E38\u0E48\u0E21\u0E07\u0E32\u0E19</div>
|
|
459
|
-
<div class="text" id="
|
|
287
|
+
<div class="text" id="">:</div>
|
|
460
288
|
</div>
|
|
461
289
|
<div class="box-tb">
|
|
462
290
|
<div class="topic">\u0E0A\u0E37\u0E48\u0E2D\u0E2D\u0E38\u0E1B\u0E01\u0E23\u0E13\u0E4C</div>
|
|
463
|
-
<div class="text" id="
|
|
291
|
+
<div class="text" id="">:</div>
|
|
464
292
|
</div>
|
|
465
293
|
<div class="box-tb">
|
|
466
294
|
<div class="topic">\u0E40\u0E25\u0E02\u0E17\u0E23\u0E31\u0E1E\u0E22\u0E4C\u0E2A\u0E34\u0E19</div>
|
|
467
|
-
<div class="text" id="
|
|
295
|
+
<div class="text" id="">:</div>
|
|
468
296
|
</div>
|
|
469
297
|
<button id="btn-edit" class="circle sm blue"
|
|
470
298
|
shadow="true"></button>
|
|
@@ -534,351 +362,26 @@ var template = (
|
|
|
534
362
|
</style>
|
|
535
363
|
`
|
|
536
364
|
);
|
|
537
|
-
var frmDevice = (
|
|
538
|
-
/*html*/
|
|
539
|
-
`
|
|
540
|
-
<div id="frm-device" class="cover grid">
|
|
541
|
-
<div class="input-box span">
|
|
542
|
-
<select id="inp-agcy" required></select>
|
|
543
|
-
<div class="label">\u0E2B\u0E19\u0E48\u0E27\u0E22\u0E07\u0E32\u0E19 *</div>
|
|
544
|
-
</div>
|
|
545
|
-
<div class="input-box span">
|
|
546
|
-
<select id="inp-dept"></select>
|
|
547
|
-
<div class="label">\u0E01\u0E25\u0E38\u0E48\u0E21\u0E07\u0E32\u0E19/\u0E2A\u0E48\u0E27\u0E19\u0E07\u0E32\u0E19</div>
|
|
548
|
-
</div>
|
|
549
|
-
<div class="input-box span">
|
|
550
|
-
<input type="text" id="inp-name" maxlength="100" required>
|
|
551
|
-
<div class="label">\u0E0A\u0E37\u0E48\u0E2D\u0E2D\u0E38\u0E1B\u0E01\u0E23\u0E13\u0E4C *</div>
|
|
552
|
-
</div>
|
|
553
|
-
</div>
|
|
554
|
-
<style>
|
|
555
|
-
#frm-device {
|
|
556
|
-
gap: 5px;
|
|
557
|
-
}
|
|
558
|
-
#frm-device .dvsn {
|
|
559
|
-
font-weight: 600;
|
|
560
|
-
}
|
|
561
|
-
#frm-device .sect {
|
|
562
|
-
font-style: italic;
|
|
563
|
-
}
|
|
564
|
-
</style>
|
|
565
|
-
`
|
|
566
|
-
);
|
|
567
|
-
|
|
568
|
-
// src/svchub/api/agency/agcy.ts
|
|
569
|
-
var Read = (agcy) => new Promise((resolve, reject) => {
|
|
570
|
-
let url = `/agcy`;
|
|
571
|
-
if (agcy) url = `/agcy/${agcy}`;
|
|
572
|
-
fetch(gbvar.hub.API + url, {
|
|
573
|
-
method: "GET",
|
|
574
|
-
headers: gbvar.api.HEADERS
|
|
575
|
-
}).then((resp) => {
|
|
576
|
-
if (!resp.ok) throw resp;
|
|
577
|
-
return resp.json();
|
|
578
|
-
}).then((json) => {
|
|
579
|
-
resolve(json);
|
|
580
|
-
}).catch((err) => reject(err));
|
|
581
|
-
});
|
|
582
|
-
var Set = async (elm) => {
|
|
583
|
-
elm.innerHTML = '<option value="">- \u0E40\u0E25\u0E37\u0E2D\u0E01 -</option>';
|
|
584
|
-
await Read().then((resp) => {
|
|
585
|
-
const data = resp.data;
|
|
586
|
-
for (const val of data) {
|
|
587
|
-
const name = val.short ? val.short : val.name;
|
|
588
|
-
const opt = document.createElement("option");
|
|
589
|
-
opt.value = `${val.id}`;
|
|
590
|
-
opt.text = name;
|
|
591
|
-
elm.appendChild(opt);
|
|
592
|
-
}
|
|
593
|
-
}).catch((err) => console.error(err));
|
|
594
|
-
};
|
|
595
|
-
|
|
596
|
-
// src/svchub/api/agency/dept.ts
|
|
597
|
-
var Read2 = (agcy) => new Promise((resolve, reject) => {
|
|
598
|
-
const url = `/agcy/${agcy}/dept`;
|
|
599
|
-
fetch(gbvar.hub.API + url, {
|
|
600
|
-
method: "GET",
|
|
601
|
-
headers: gbvar.api.HEADERS
|
|
602
|
-
}).then((resp) => {
|
|
603
|
-
if (!resp.ok) throw resp;
|
|
604
|
-
return resp.json();
|
|
605
|
-
}).then((json) => {
|
|
606
|
-
resolve(json);
|
|
607
|
-
}).catch((err) => reject(err));
|
|
608
|
-
});
|
|
609
|
-
var Set2 = async (agcy, elm) => {
|
|
610
|
-
elm.innerHTML = '<option value="">- \u0E40\u0E25\u0E37\u0E2D\u0E01 -</option>';
|
|
611
|
-
await Read2(agcy).then((resp) => {
|
|
612
|
-
const data = resp.data;
|
|
613
|
-
for (const val of data) {
|
|
614
|
-
const opt = document.createElement("option");
|
|
615
|
-
opt.value = `${val.dvsn},${val.sect}`;
|
|
616
|
-
if (val.sect == 0) {
|
|
617
|
-
opt.text = `${val.name}`;
|
|
618
|
-
opt.style.fontWeight = "600";
|
|
619
|
-
} else {
|
|
620
|
-
opt.text = `- ${val.name}`;
|
|
621
|
-
opt.style.fontStyle = "italic";
|
|
622
|
-
}
|
|
623
|
-
elm.appendChild(opt);
|
|
624
|
-
}
|
|
625
|
-
}).catch((err) => console.error(err));
|
|
626
|
-
};
|
|
627
|
-
|
|
628
|
-
// src/svchub/api/account/index.ts
|
|
629
|
-
var Read3 = (agcy, acct, params) => new Promise((resolve, reject) => {
|
|
630
|
-
const status = params && params.status ? params.status : 1;
|
|
631
|
-
let query = `?status=${status}`;
|
|
632
|
-
if (params) {
|
|
633
|
-
const dvsn = params.dvsn ? params.dvsn : 0;
|
|
634
|
-
const sect = params.sect ? params.sect : 0;
|
|
635
|
-
const actype = params.actype ? params.actype : 0;
|
|
636
|
-
const acrole = params.acrole ? params.acrole : 0;
|
|
637
|
-
if (dvsn) query += `&dvsn=${dvsn}`;
|
|
638
|
-
if (sect) query += `§=${sect}`;
|
|
639
|
-
if (actype) query += `&actype=${actype}`;
|
|
640
|
-
if (acrole) query += `&acrole=${acrole}`;
|
|
641
|
-
}
|
|
642
|
-
let url = `/agcy/${agcy}/acct${query}`;
|
|
643
|
-
if (acct) url = `/agcy/${agcy}/acct/${acct}`;
|
|
644
|
-
fetch(gbvar.hub.API + url, {
|
|
645
|
-
method: "GET",
|
|
646
|
-
headers: gbvar.api.HEADERS
|
|
647
|
-
}).then((resp) => {
|
|
648
|
-
if (!resp.ok) throw resp;
|
|
649
|
-
return resp.json();
|
|
650
|
-
}).then((json) => {
|
|
651
|
-
resolve(json);
|
|
652
|
-
}).catch((err) => reject(err));
|
|
653
|
-
});
|
|
654
|
-
var Create2 = (agcy, params) => new Promise((resolve, reject) => {
|
|
655
|
-
const url = `/agcy/${agcy}/acct`;
|
|
656
|
-
fetch(gbvar.hub.API + url, {
|
|
657
|
-
method: "POST",
|
|
658
|
-
headers: gbvar.api.HEADERS,
|
|
659
|
-
body: JSON.stringify(params)
|
|
660
|
-
}).then((resp) => {
|
|
661
|
-
if (!resp.ok) throw resp;
|
|
662
|
-
return resp.json();
|
|
663
|
-
}).then((json) => {
|
|
664
|
-
resolve(json);
|
|
665
|
-
}).catch((err) => reject(err));
|
|
666
|
-
});
|
|
667
|
-
var Update = (agcy, acct, params) => new Promise((resolve, reject) => {
|
|
668
|
-
const url = `/agcy/${agcy}/acct/${acct}`;
|
|
669
|
-
fetch(gbvar.hub.API + url, {
|
|
670
|
-
method: "PUT",
|
|
671
|
-
headers: gbvar.api.HEADERS,
|
|
672
|
-
body: JSON.stringify(params)
|
|
673
|
-
}).then((resp) => {
|
|
674
|
-
if (!resp.ok) throw resp;
|
|
675
|
-
return resp.json();
|
|
676
|
-
}).then((json) => {
|
|
677
|
-
resolve(json);
|
|
678
|
-
}).catch((err) => reject(err));
|
|
679
|
-
});
|
|
680
|
-
|
|
681
|
-
// src/svchub/hwlink/device.ts
|
|
682
|
-
var Create3 = (csid) => new Promise((resolve, reject) => {
|
|
683
|
-
const modal = Create({
|
|
684
|
-
title: "\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E04\u0E2D\u0E21\u0E1E\u0E34\u0E27\u0E40\u0E15\u0E2D\u0E23\u0E4C",
|
|
685
|
-
icon: "",
|
|
686
|
-
width: "400px",
|
|
687
|
-
body: frmDevice,
|
|
688
|
-
button: { save: true, cancel: true }
|
|
689
|
-
});
|
|
690
|
-
const inpAgcy = modal.querySelector("#inp-agcy");
|
|
691
|
-
const inpDept = modal.querySelector("#inp-dept");
|
|
692
|
-
const inpName = modal.querySelector("#inp-name");
|
|
693
|
-
inpAgcy.onchange = () => {
|
|
694
|
-
Set2(Number(inpAgcy.value), inpDept);
|
|
695
|
-
};
|
|
696
|
-
(async () => {
|
|
697
|
-
await Set(inpAgcy);
|
|
698
|
-
await Set2(Number(inpAgcy.value), inpDept);
|
|
699
|
-
Ready2(modal);
|
|
700
|
-
})();
|
|
701
|
-
const form = modal.querySelector("form");
|
|
702
|
-
if (form) form.onsubmit = async (e) => {
|
|
703
|
-
e.preventDefault();
|
|
704
|
-
Hidden(modal);
|
|
705
|
-
const res = await Confirm("\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19.! \u0E01\u0E32\u0E23\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25");
|
|
706
|
-
Visible(modal);
|
|
707
|
-
if (res) {
|
|
708
|
-
Loading3(modal);
|
|
709
|
-
const newAgcy = Number(inpAgcy.value);
|
|
710
|
-
const [dvsn, sect] = inpDept.value.split(",");
|
|
711
|
-
const params = {
|
|
712
|
-
agcy: newAgcy,
|
|
713
|
-
dvsn: dvsn ? Number(dvsn) : 0,
|
|
714
|
-
sect: sect ? Number(sect) : 0,
|
|
715
|
-
actype: 2,
|
|
716
|
-
// อุปกรณ์
|
|
717
|
-
acrole: 8,
|
|
718
|
-
// คอมพิวเตอร์
|
|
719
|
-
acuuid: strCheck(csid),
|
|
720
|
-
profile: {
|
|
721
|
-
dvtype: 1,
|
|
722
|
-
// คอมพิวเตอร์
|
|
723
|
-
name: strCheck(inpName.value)
|
|
724
|
-
}
|
|
725
|
-
};
|
|
726
|
-
await Create2(newAgcy, params).then(() => {
|
|
727
|
-
Close(modal);
|
|
728
|
-
Toast("\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 \u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08.!", { type: "success" });
|
|
729
|
-
resolve();
|
|
730
|
-
}).catch((err) => {
|
|
731
|
-
Close(modal);
|
|
732
|
-
Alert("\u0E40\u0E01\u0E34\u0E14\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14...!", { type: "failure" });
|
|
733
|
-
reject(err);
|
|
734
|
-
});
|
|
735
|
-
}
|
|
736
|
-
};
|
|
737
|
-
});
|
|
738
|
-
var Update2 = (agcy, acct, csid) => new Promise((resolve, reject) => {
|
|
739
|
-
const modal = Create({
|
|
740
|
-
title: "\u0E41\u0E01\u0E49\u0E44\u0E02\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14",
|
|
741
|
-
icon: "",
|
|
742
|
-
width: "400px",
|
|
743
|
-
body: frmDevice,
|
|
744
|
-
button: { save: true, cancel: true }
|
|
745
|
-
});
|
|
746
|
-
const inpAgcy = modal.querySelector("#inp-agcy");
|
|
747
|
-
const inpDept = modal.querySelector("#inp-dept");
|
|
748
|
-
const inpName = modal.querySelector("#inp-name");
|
|
749
|
-
inpAgcy.onchange = () => {
|
|
750
|
-
Set2(Number(inpAgcy.value), inpDept);
|
|
751
|
-
};
|
|
752
|
-
(async () => {
|
|
753
|
-
await Read3(agcy, acct).then(async (resp) => {
|
|
754
|
-
const data = resp.data;
|
|
755
|
-
const profile = data.profile;
|
|
756
|
-
await Set(inpAgcy);
|
|
757
|
-
await Set2(data.agcy, inpDept);
|
|
758
|
-
inpAgcy.value = String(data.agcy);
|
|
759
|
-
inpDept.value = data.dvsn ? `${data.dvsn},${data.sect}` : "";
|
|
760
|
-
inpName.value = profile.name;
|
|
761
|
-
}).catch((err) => console.error(err));
|
|
762
|
-
Ready2(modal);
|
|
763
|
-
})();
|
|
764
|
-
const form = modal.querySelector("form");
|
|
765
|
-
if (form) form.onsubmit = async (e) => {
|
|
766
|
-
e.preventDefault();
|
|
767
|
-
Hidden(modal);
|
|
768
|
-
const res = await Confirm("\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19.! \u0E01\u0E32\u0E23\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25");
|
|
769
|
-
Visible(modal);
|
|
770
|
-
if (res) {
|
|
771
|
-
Loading3(modal);
|
|
772
|
-
const newAgcy = Number(inpAgcy.value);
|
|
773
|
-
const [dvsn, sect] = inpDept.value.split(",");
|
|
774
|
-
const params = {
|
|
775
|
-
agcy: newAgcy,
|
|
776
|
-
dvsn: dvsn ? Number(dvsn) : 0,
|
|
777
|
-
sect: sect ? Number(sect) : 0,
|
|
778
|
-
actype: 2,
|
|
779
|
-
// อุปกรณ์
|
|
780
|
-
acrole: 8,
|
|
781
|
-
// คอมพิวเตอร์
|
|
782
|
-
acuuid: strCheck(csid),
|
|
783
|
-
profile: {
|
|
784
|
-
dvtype: 1,
|
|
785
|
-
// คอมพิวเตอร์
|
|
786
|
-
name: strCheck(inpName.value)
|
|
787
|
-
}
|
|
788
|
-
};
|
|
789
|
-
await Update(agcy, acct, params).then(() => {
|
|
790
|
-
Close(modal);
|
|
791
|
-
Toast("\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 \u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08.!", { type: "success" });
|
|
792
|
-
resolve();
|
|
793
|
-
}).catch((err) => {
|
|
794
|
-
Close(modal);
|
|
795
|
-
Alert("\u0E40\u0E01\u0E34\u0E14\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14...!", { type: "failure" });
|
|
796
|
-
reject(err);
|
|
797
|
-
});
|
|
798
|
-
}
|
|
799
|
-
};
|
|
800
|
-
});
|
|
801
|
-
var PwdChk = () => new Promise((resolve) => {
|
|
802
|
-
const modal = Create({
|
|
803
|
-
title: "\u0E01\u0E23\u0E2D\u0E01\u0E23\u0E2B\u0E31\u0E2A\u0E1C\u0E48\u0E32\u0E19",
|
|
804
|
-
icon: "",
|
|
805
|
-
width: "230px",
|
|
806
|
-
body: (
|
|
807
|
-
/*html*/
|
|
808
|
-
`
|
|
809
|
-
<div class="cover">
|
|
810
|
-
<input type="password" id="inp-pass"
|
|
811
|
-
value="admin@wkr" style="width: 100%;">
|
|
812
|
-
</div>
|
|
813
|
-
`
|
|
814
|
-
),
|
|
815
|
-
button: { save: true, cancel: true, align: "center" }
|
|
816
|
-
});
|
|
817
|
-
Ready2(modal);
|
|
818
|
-
const inpPass = modal.querySelector("#inp-pass");
|
|
819
|
-
inpPass?.focus();
|
|
820
|
-
const form = modal.querySelector("form");
|
|
821
|
-
if (form) form.onsubmit = async (e) => {
|
|
822
|
-
e.preventDefault();
|
|
823
|
-
const pass = inpPass?.value?.trim();
|
|
824
|
-
if (pass === "admin@wkr") {
|
|
825
|
-
await Close(modal);
|
|
826
|
-
resolve(true);
|
|
827
|
-
} else {
|
|
828
|
-
await Alert("\u0E23\u0E2B\u0E31\u0E2A\u0E1C\u0E48\u0E32\u0E19.! \u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07", { type: "failure" });
|
|
829
|
-
inpPass?.focus();
|
|
830
|
-
}
|
|
831
|
-
};
|
|
832
|
-
});
|
|
833
365
|
|
|
834
366
|
// src/svchub/hwlink/index.ts
|
|
835
|
-
var
|
|
836
|
-
var AGCY;
|
|
837
|
-
var ACCT;
|
|
838
|
-
var CSID;
|
|
367
|
+
var app4 = document.querySelector("#app");
|
|
839
368
|
var isREADY;
|
|
840
369
|
var WSSVC;
|
|
841
|
-
var
|
|
842
|
-
|
|
843
|
-
if (!app5) return;
|
|
370
|
+
var hwLink = () => {
|
|
371
|
+
if (!app4) return;
|
|
844
372
|
const content = document.createElement("div");
|
|
845
373
|
content.id = "app-content";
|
|
846
374
|
content.innerHTML = template;
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
boxDv = app5.querySelector("#device");
|
|
850
|
-
const btnEdit = app5.querySelector("#btn-edit");
|
|
851
|
-
if (btnEdit) btnEdit.onclick = async () => {
|
|
852
|
-
if (await PwdChk()) {
|
|
853
|
-
if (AGCY > 0 && ACCT > 0 && CSID != "") {
|
|
854
|
-
Update2(AGCY, ACCT, CSID).then(() => {
|
|
855
|
-
Loading2(boxDv, true);
|
|
856
|
-
WSSVC.send('{"head": "KEYRST"}');
|
|
857
|
-
}).catch((err) => console.error(err));
|
|
858
|
-
} else {
|
|
859
|
-
Create3(CSID).then(() => {
|
|
860
|
-
Loading2(boxDv, true);
|
|
861
|
-
WSSVC.send('{"head": "KEYRST"}');
|
|
862
|
-
}).catch((err) => console.error(err));
|
|
863
|
-
}
|
|
864
|
-
}
|
|
865
|
-
};
|
|
866
|
-
Loading();
|
|
867
|
-
AGCY = 0;
|
|
868
|
-
ACCT = 0;
|
|
869
|
-
CSID = "";
|
|
375
|
+
app4.classList.add("full-page");
|
|
376
|
+
app4.appendChild(content);
|
|
870
377
|
isREADY = false;
|
|
871
|
-
|
|
872
|
-
const btn = app5.querySelectorAll("button");
|
|
873
|
-
btn.forEach((elm) => elm.style.display = "none");
|
|
874
|
-
}
|
|
378
|
+
loading2();
|
|
875
379
|
wsSvc();
|
|
876
380
|
};
|
|
877
381
|
var wsSvc = () => {
|
|
878
|
-
WSSVC = new WebSocket(
|
|
382
|
+
WSSVC = new WebSocket(cfg.hwl.HOST);
|
|
879
383
|
WSSVC.onopen = () => {
|
|
880
384
|
hwinfo();
|
|
881
|
-
dvinfo();
|
|
882
385
|
T_hwinfo = setInterval(hwinfo, 1e3 * 10);
|
|
883
386
|
};
|
|
884
387
|
WSSVC.onclose = () => {
|
|
@@ -889,30 +392,26 @@ var wsSvc = () => {
|
|
|
889
392
|
const resp = JSON.parse(e.data);
|
|
890
393
|
const head = resp.head ? resp.head : "";
|
|
891
394
|
const data = resp.data ? resp.data : "";
|
|
892
|
-
if (head == "CSUUID")
|
|
893
|
-
if (head == "HWINFO") setHwInfo(data);
|
|
894
|
-
if (head == "DVINFO") {
|
|
395
|
+
if (head == "CSUUID") {
|
|
895
396
|
if (!isREADY) {
|
|
896
397
|
isREADY = true;
|
|
897
|
-
|
|
398
|
+
ready();
|
|
898
399
|
}
|
|
899
|
-
setDvInfo(data);
|
|
900
|
-
Loading2(boxDv, false);
|
|
901
400
|
}
|
|
401
|
+
if (head == "HWINFO") setHwInfo(data);
|
|
902
402
|
};
|
|
903
403
|
let T_hwinfo;
|
|
904
404
|
const hwinfo = () => WSSVC.send('{"head": "HWINFO"}');
|
|
905
|
-
const dvinfo = () => WSSVC.send('{"head": "DVINFO"}');
|
|
906
405
|
};
|
|
907
406
|
var setHwInfo = (data) => {
|
|
908
|
-
if (!
|
|
407
|
+
if (!app4) return;
|
|
909
408
|
const svc = data.svc;
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
409
|
+
app4.querySelector("#hwlink").innerText = `: ${svc.hwlink}`;
|
|
410
|
+
app4.querySelector("#autoup").innerText = `: ${svc.autoup}`;
|
|
411
|
+
app4.querySelector("#csuuid").innerText = `: ${data.csuuid}`;
|
|
913
412
|
const cpu = data.cpu;
|
|
914
413
|
const mem = data.mem;
|
|
915
|
-
const hwinfo =
|
|
414
|
+
const hwinfo = app4.querySelector("#hwinfo");
|
|
916
415
|
const uptime = Number(data.uptime);
|
|
917
416
|
const hh = Math.floor(uptime / 3600);
|
|
918
417
|
const mm = Math.floor(uptime % 3600 / 60);
|
|
@@ -922,86 +421,14 @@ var setHwInfo = (data) => {
|
|
|
922
421
|
hwinfo.querySelector("#host").innerText = `: ${data.hostname}`;
|
|
923
422
|
hwinfo.querySelector("#os").innerText = `: ${data.platform}`;
|
|
924
423
|
hwinfo.querySelector("#cpu").innerText = `: ${cpu.model}`;
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
};
|
|
928
|
-
var setDvInfo = (data) => {
|
|
929
|
-
if (!app5 || !data.acct || Number(data.acct) == 0) return;
|
|
930
|
-
AGCY = Number(data.agcy);
|
|
931
|
-
ACCT = Number(data.acct);
|
|
932
|
-
let dept = data.dvsn_name;
|
|
933
|
-
if (Number(data.sect) > 0) {
|
|
934
|
-
dept += ` - ${data.sect_name}`;
|
|
935
|
-
}
|
|
936
|
-
app5.querySelector("#agcy").innerText = `: ${data.agcy_name}`;
|
|
937
|
-
app5.querySelector("#dept").innerText = `: ${dept}`;
|
|
938
|
-
app5.querySelector("#dname").innerText = `: ${data.acname}`;
|
|
424
|
+
app4.querySelector("#mem").innerText = `: ${mem_text}`;
|
|
425
|
+
app4.querySelector("#uptime").innerText = `: ${hh} h ${mm} m`;
|
|
939
426
|
};
|
|
940
427
|
|
|
941
|
-
// src/mod/built-in/button/index.ts
|
|
942
|
-
var Loading4 = (btn, state = false) => {
|
|
943
|
-
if (state) {
|
|
944
|
-
btn.querySelector(".btn-loader")?.remove();
|
|
945
|
-
btn.style.color = "transparent";
|
|
946
|
-
btn.style.position = "relative";
|
|
947
|
-
btn.style.pointerEvents = "none";
|
|
948
|
-
const loader = document.createElement("div");
|
|
949
|
-
loader.className = "btn-loader";
|
|
950
|
-
loader.innerHTML = `<div class="spinner s22"></div>`;
|
|
951
|
-
btn.appendChild(loader);
|
|
952
|
-
} else {
|
|
953
|
-
btn.querySelector(".btn-loader")?.remove();
|
|
954
|
-
btn.style.color = "";
|
|
955
|
-
btn.style.position = "";
|
|
956
|
-
btn.style.pointerEvents = "";
|
|
957
|
-
}
|
|
958
|
-
};
|
|
959
|
-
|
|
960
|
-
// src/mod/drop/index.ts
|
|
961
|
-
var Menu = (drop) => {
|
|
962
|
-
const dropBtn = drop.querySelector(".drop-btn");
|
|
963
|
-
const content = drop.querySelector(".drop-content");
|
|
964
|
-
if (!dropBtn || !content) return;
|
|
965
|
-
setBtnEvent(dropBtn, content);
|
|
966
|
-
};
|
|
967
|
-
var setBtnEvent = (btn, content) => {
|
|
968
|
-
btn.onclick = () => {
|
|
969
|
-
if (content.style.display == "block") {
|
|
970
|
-
content.style.animation = "fade-out 0.4s forwards";
|
|
971
|
-
content.onanimationend = () => {
|
|
972
|
-
content.style.animation = "";
|
|
973
|
-
content.style.display = "";
|
|
974
|
-
};
|
|
975
|
-
} else {
|
|
976
|
-
Clear();
|
|
977
|
-
content.style.animation = "fade-in 0.4s forwards";
|
|
978
|
-
content.style.display = "block";
|
|
979
|
-
content.onanimationend = () => {
|
|
980
|
-
content.style.animation = "";
|
|
981
|
-
};
|
|
982
|
-
}
|
|
983
|
-
};
|
|
984
|
-
};
|
|
985
|
-
var Clear = () => {
|
|
986
|
-
const drop = document.querySelectorAll(".drop-content");
|
|
987
|
-
drop.forEach((el) => {
|
|
988
|
-
if (el.style.display == "block") {
|
|
989
|
-
el.style.animation = "fade-out 0.4s forwards";
|
|
990
|
-
el.onanimationend = () => {
|
|
991
|
-
el.style.animation = "";
|
|
992
|
-
el.style.display = "";
|
|
993
|
-
};
|
|
994
|
-
}
|
|
995
|
-
});
|
|
996
|
-
};
|
|
997
|
-
window.addEventListener("click", (e) => {
|
|
998
|
-
if (!e.target.matches(".drop-btn")) Clear();
|
|
999
|
-
});
|
|
1000
|
-
|
|
1001
428
|
// src/page/desktop/index.ts
|
|
1002
|
-
var
|
|
1003
|
-
var
|
|
1004
|
-
if (!
|
|
429
|
+
var app5 = document.querySelector("#app");
|
|
430
|
+
var create = (params) => {
|
|
431
|
+
if (!app5) return false;
|
|
1005
432
|
const uri = params.uri ? params.uri : "";
|
|
1006
433
|
const size = params.size ? params.size : "";
|
|
1007
434
|
const topbar = params.topbar ? params.topbar : "";
|
|
@@ -1010,13 +437,13 @@ var Create4 = (params) => {
|
|
|
1010
437
|
const content = document.createElement("div");
|
|
1011
438
|
content.id = "app-content";
|
|
1012
439
|
content.innerHTML = template2;
|
|
1013
|
-
|
|
440
|
+
app5.appendChild(content);
|
|
1014
441
|
let newNav = false;
|
|
1015
442
|
if (size == "full") {
|
|
1016
|
-
|
|
443
|
+
app5.classList.add("full-page");
|
|
1017
444
|
navRemove();
|
|
1018
445
|
} else {
|
|
1019
|
-
|
|
446
|
+
app5.classList.remove("full-page");
|
|
1020
447
|
if (!document.querySelector("#topbar")) {
|
|
1021
448
|
navCreate({ topbar, sidebar });
|
|
1022
449
|
newNav = true;
|
|
@@ -1044,9 +471,9 @@ var navCreate = (params) => {
|
|
|
1044
471
|
setScreen();
|
|
1045
472
|
window.addEventListener("resize", setScreen);
|
|
1046
473
|
const dropUser = topbar.querySelector("#drop-user");
|
|
1047
|
-
if (dropUser)
|
|
474
|
+
if (dropUser) menu(dropUser);
|
|
1048
475
|
const logout = () => {
|
|
1049
|
-
|
|
476
|
+
confirm("\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19..! \u0E01\u0E32\u0E23\u0E2D\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E23\u0E30\u0E1A\u0E1A").then((res) => {
|
|
1050
477
|
if (res) window.location.replace("/logout");
|
|
1051
478
|
});
|
|
1052
479
|
};
|
|
@@ -1072,18 +499,18 @@ var navActive = (uri) => {
|
|
|
1072
499
|
if (!btn.disabled && uri == path) {
|
|
1073
500
|
btn.classList.add("active");
|
|
1074
501
|
if (btn.classList.contains("grp-btn")) {
|
|
1075
|
-
const
|
|
502
|
+
const menu2 = btn.parentNode?.querySelector(".submenu");
|
|
1076
503
|
const grpBtn = btn.parentNode?.querySelector(".grp-btn");
|
|
1077
|
-
if (
|
|
1078
|
-
|
|
504
|
+
if (menu2 && grpBtn) {
|
|
505
|
+
menu2.style.maxHeight = "400px";
|
|
1079
506
|
grpBtn.classList.add("bar");
|
|
1080
507
|
}
|
|
1081
508
|
}
|
|
1082
509
|
if (btn.classList.contains("sub-btn")) {
|
|
1083
|
-
const
|
|
1084
|
-
const grpBtn =
|
|
1085
|
-
if (
|
|
1086
|
-
|
|
510
|
+
const menu2 = btn.parentNode;
|
|
511
|
+
const grpBtn = menu2.parentNode?.querySelector(".grp-btn");
|
|
512
|
+
if (menu2 && grpBtn && menu2.classList.contains("submenu")) {
|
|
513
|
+
menu2.style.maxHeight = "400px";
|
|
1087
514
|
grpBtn.classList.add("active");
|
|
1088
515
|
grpBtn.classList.remove("bar");
|
|
1089
516
|
}
|
|
@@ -1118,7 +545,7 @@ var navMenu = (state) => {
|
|
|
1118
545
|
sidebar.classList.remove("menu-out");
|
|
1119
546
|
}
|
|
1120
547
|
};
|
|
1121
|
-
var
|
|
548
|
+
var clear2 = () => {
|
|
1122
549
|
const sidebar = document.querySelector("#sidebar");
|
|
1123
550
|
if (!sidebar) return;
|
|
1124
551
|
const scWidth = window.innerWidth ? window.innerWidth : screen.width;
|
|
@@ -1129,7 +556,7 @@ var Clear2 = () => {
|
|
|
1129
556
|
}
|
|
1130
557
|
};
|
|
1131
558
|
window.addEventListener("click", (e) => {
|
|
1132
|
-
if (!e.target.matches("#nav-menu"))
|
|
559
|
+
if (!e.target.matches("#nav-menu")) clear2();
|
|
1133
560
|
});
|
|
1134
561
|
var navHwLink = () => {
|
|
1135
562
|
const btnHwl = document.querySelector("#nav-hwlink");
|
|
@@ -1138,8 +565,8 @@ var navHwLink = () => {
|
|
|
1138
565
|
if (agent.indexOf("win") != -1) {
|
|
1139
566
|
btnHwl.style.display = "block";
|
|
1140
567
|
btnHwl.onclick = () => {
|
|
1141
|
-
|
|
1142
|
-
const ws = new WebSocket(
|
|
568
|
+
loading(btnHwl, true);
|
|
569
|
+
const ws = new WebSocket(cfg.hwl.HOST);
|
|
1143
570
|
ws.onerror = () => {
|
|
1144
571
|
download();
|
|
1145
572
|
done();
|
|
@@ -1150,14 +577,14 @@ var navHwLink = () => {
|
|
|
1150
577
|
done();
|
|
1151
578
|
};
|
|
1152
579
|
const done = () => {
|
|
1153
|
-
|
|
580
|
+
loading(btnHwl, false);
|
|
1154
581
|
};
|
|
1155
582
|
};
|
|
1156
583
|
} else {
|
|
1157
584
|
btnHwl.style.display = "none";
|
|
1158
585
|
}
|
|
1159
586
|
const download = () => {
|
|
1160
|
-
const url =
|
|
587
|
+
const url = cfg.hwl.FILE;
|
|
1161
588
|
const link = document.createElement("a");
|
|
1162
589
|
link.href = url;
|
|
1163
590
|
link.download = String(url.split("/").pop());
|
|
@@ -1184,14 +611,14 @@ var onlineStatus = () => {
|
|
|
1184
611
|
window.addEventListener("online", onlineStatus);
|
|
1185
612
|
window.addEventListener("offline", onlineStatus);
|
|
1186
613
|
export {
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
614
|
+
clear2 as clear,
|
|
615
|
+
create,
|
|
616
|
+
error,
|
|
617
|
+
fullLoad,
|
|
618
|
+
hwLink,
|
|
619
|
+
inform,
|
|
620
|
+
loading2 as loading,
|
|
621
|
+
notFound,
|
|
622
|
+
ready
|
|
1196
623
|
};
|
|
1197
624
|
//# sourceMappingURL=index.js.map
|