@7365admin1/layer-common 4.2.5-staging.272 → 4.2.5
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/CHANGELOG.md +19 -4
- package/components/AddPassKeyToVisitor.vue +1 -0
- package/components/AttendanceCheckInOutDialog.vue +1 -0
- package/components/AttendanceMain.vue +1 -0
- package/components/BtnUploadFile.vue +3 -1
- package/components/BuildingForm.vue +1 -0
- package/components/BuildingUnitFormEdit.vue +1 -0
- package/components/BulletinBoardManagement.vue +1 -1
- package/components/CameraForm.vue +1 -0
- package/components/CameraMain.vue +1 -0
- package/components/Carousel.vue +1 -0
- package/components/Chat/Information.vue +1 -1
- package/components/Chat/Message.vue +1 -2
- package/components/DrawImage.vue +1 -0
- package/components/Facility/BookingSetup.vue +2 -1
- package/components/FeedbackDetail.vue +2 -1
- package/components/FeedbackMain.vue +2 -0
- package/components/Input/File.vue +6 -1
- package/components/PasswordConfirmation.vue +1 -1
- package/components/ScanVisitorQRCode.vue +2 -0
- package/components/ServiceProviderMain.vue +2 -0
- package/components/SiteSettings.vue +2 -0
- package/components/VisitorForm.vue +18 -2
- package/components/VisitorManagement.vue +1 -1
- package/components/VisitorPassKeyQRScanner.vue +1 -0
- package/components/WorkOrder/Detail.vue +2 -1
- package/components/WorkOrder/Main.vue +1 -1
- package/composables/useComment.ts +1 -1
- package/composables/useKey.ts +3 -0
- package/composables/usePassKey.ts +1 -0
- package/composables/useRole.ts +1 -1
- package/composables/useUploadFiles.ts +1 -1
- package/composables/useUtils.ts +2 -1
- package/composables/useVerification.ts +1 -0
- package/composables/useWebUsb.ts +10 -0
- package/middleware/01.auth.ts +1 -0
- package/middleware/02.org.ts +2 -0
- package/package.json +1 -1
- package/plugins/vuetify.ts +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @iservice365/layer-common
|
|
2
2
|
|
|
3
|
+
## 4.2.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7a6cc0f: Vehicle form: name a block/level/unit the picker cannot offer, instead of showing its id.
|
|
8
|
+
|
|
9
|
+
The Season Pass edit dialog fetches its record with a plain findOne, so block,
|
|
10
|
+
level and unit arrive as raw ids. The vehicle LIST already resolves those names
|
|
11
|
+
server-side, so the list row's names are handed down to the dialog. A value that
|
|
12
|
+
is no longer selectable now reads "Tower Ten (no longer selectable)"; a value no
|
|
13
|
+
name exists for reads a plain sentence and logs the id for support. A Mongo id
|
|
14
|
+
is never rendered. The stored value is untouched.
|
|
15
|
+
|
|
16
|
+
- bc4355f: Vehicle form: closing the "Matching Records" picker with the header X no longer clears a Unit the user had already chosen. Block / Level / Unit no longer render a raw Mongo ObjectId when the id is not in the site's list — a deleted building unit now says so instead. Also removes a stray `console.log` from the bulletin board form that shipped to the browser on every render.
|
|
17
|
+
|
|
3
18
|
## 4.2.4
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
|
@@ -492,11 +507,11 @@
|
|
|
492
507
|
`utils/console-tier.ts` + `composables/useConsoleTier.ts` mirror the server's
|
|
493
508
|
own rule from two endpoints the console already calls, unprojected:
|
|
494
509
|
|
|
495
|
-
|
|
496
|
-
|
|
510
|
+
GET /api/members/user/:user/app/admin the Seven365 staff membership
|
|
511
|
+
GET /api/roles/id/:role that membership's role document
|
|
497
512
|
|
|
498
|
-
|
|
499
|
-
|
|
513
|
+
owner = member.type === "admin" && role.type === "admin" && role.default === true
|
|
514
|
+
staff = member.type === "admin" && role.type === "admin"
|
|
500
515
|
|
|
501
516
|
`role.default` is the marker because it is the only property of a platform
|
|
502
517
|
staff role no API caller can set - `role.controller.ts` validates create and
|
|
@@ -104,8 +104,10 @@ async function uploadAttachment(e: Event) {
|
|
|
104
104
|
value.value = res.id as string;
|
|
105
105
|
await emit("upload", res);
|
|
106
106
|
} catch (error) {
|
|
107
|
-
console.
|
|
107
|
+
console.log(error);
|
|
108
108
|
}
|
|
109
|
+
} else {
|
|
110
|
+
console.log("No file selected");
|
|
109
111
|
}
|
|
110
112
|
loading.value = false;
|
|
111
113
|
}
|
|
@@ -414,6 +414,7 @@ async function submit() {
|
|
|
414
414
|
|
|
415
415
|
if (prop.mode === "edit") {
|
|
416
416
|
|
|
417
|
+
console.log('Updating building with levels:', building.value.levels);
|
|
417
418
|
|
|
418
419
|
if (JSON.stringify(initialBuildingLevels.value) !== JSON.stringify(building.value.levels)) {
|
|
419
420
|
await batchUpdateLevels(building.value.levels as { _id: string; name: string }[]);
|
|
@@ -535,6 +535,7 @@ async function submit() {
|
|
|
535
535
|
const handleUpdateOwner = async ({ person, isOwner }: { person: TPeople; isOwner: boolean }) => {
|
|
536
536
|
const owners = peopleItems.value.filter(p => p.isOwner)
|
|
537
537
|
message.value = ""
|
|
538
|
+
// console.log('Updating owner status for', person._id, 'to', isOwner)
|
|
538
539
|
|
|
539
540
|
const userId = person._id ?? null;
|
|
540
541
|
|
|
@@ -304,7 +304,7 @@ async function handleProceedDeleteAnnouncement() {
|
|
|
304
304
|
}
|
|
305
305
|
} catch (error: any) {
|
|
306
306
|
const errorMessage = error?.response?._data?.message;
|
|
307
|
-
console.
|
|
307
|
+
console.log("[ERROR]", error);
|
|
308
308
|
showMessage(
|
|
309
309
|
errorMessage || "Something went wrong. Please try again later.",
|
|
310
310
|
"error"
|
|
@@ -288,6 +288,7 @@ camera.value.site = prop.site;
|
|
|
288
288
|
if (prop.mode === "edit") {
|
|
289
289
|
camera.value = JSON.parse(JSON.stringify(prop.camera));
|
|
290
290
|
}
|
|
291
|
+
console.log("prop.camera", prop?.camera);
|
|
291
292
|
camera.value.site = prop.site;
|
|
292
293
|
camera.value.type = prop.type;
|
|
293
294
|
camera.value.category =
|
package/components/Carousel.vue
CHANGED
|
@@ -305,6 +305,7 @@ watchEffect(async (onCleanup) => {
|
|
|
305
305
|
isConverting.value = false;
|
|
306
306
|
// Replace the entire array at once to avoid "doubling" or partial updates
|
|
307
307
|
mediaItems.value = newMediaItems;
|
|
308
|
+
console.log("watchEffect mediaItems updated:", mediaItems.value);
|
|
308
309
|
}
|
|
309
310
|
});
|
|
310
311
|
|
|
@@ -154,9 +154,8 @@ const quickChatOptions = [
|
|
|
154
154
|
"We are here to help.",
|
|
155
155
|
];
|
|
156
156
|
|
|
157
|
-
// Placeholder: choosing a quick-chat option is not wired to anything yet.
|
|
158
157
|
const selectQuickChat = (msg: string) => {
|
|
159
|
-
|
|
158
|
+
console.log("Quick Chat Selected:", msg);
|
|
160
159
|
};
|
|
161
160
|
</script>
|
|
162
161
|
|
package/components/DrawImage.vue
CHANGED
|
@@ -939,7 +939,7 @@ const upsertChecklist = () => {
|
|
|
939
939
|
} else if (Array.isArray(facility.value.securityCheckList)) {
|
|
940
940
|
facility.value.securityCheckList.push(newItem);
|
|
941
941
|
} else {
|
|
942
|
-
console.
|
|
942
|
+
console.log("Error in adding security checklist");
|
|
943
943
|
}
|
|
944
944
|
} else {
|
|
945
945
|
isEditing.value = false;
|
|
@@ -981,6 +981,7 @@ const confirmRemarks = () => {
|
|
|
981
981
|
};
|
|
982
982
|
|
|
983
983
|
const deleteChecklist = (index: string) => {
|
|
984
|
+
console.log("delete checklist", index);
|
|
984
985
|
selectedIndex.value = index;
|
|
985
986
|
isDeleteItem.value = true;
|
|
986
987
|
};
|
|
@@ -330,6 +330,7 @@ async function handleCompletionFileAdded(file: File) {
|
|
|
330
330
|
// }
|
|
331
331
|
// }
|
|
332
332
|
|
|
333
|
+
console.log("completionAttachments.value", completionAttachments.value);
|
|
333
334
|
} catch (error) {
|
|
334
335
|
console.error("Error uploading completion file:", error);
|
|
335
336
|
showMessage("Failed to upload file", "error");
|
|
@@ -346,7 +347,7 @@ async function handleCompletionFileDeleted(value: string) {
|
|
|
346
347
|
(file) => file !== value
|
|
347
348
|
);
|
|
348
349
|
} catch (error) {
|
|
349
|
-
console.
|
|
350
|
+
console.log(error);
|
|
350
351
|
showMessage("Failed to delete file", "error");
|
|
351
352
|
}
|
|
352
353
|
}
|
|
@@ -927,6 +927,7 @@ const { addFile, deleteFile: _deleteFile } = useFile();
|
|
|
927
927
|
// (file) => file !== value
|
|
928
928
|
// );
|
|
929
929
|
// } catch (error) {
|
|
930
|
+
// console.log(error);
|
|
930
931
|
// showMessage("Failed to delete file", "error");
|
|
931
932
|
// }
|
|
932
933
|
// }
|
|
@@ -942,6 +943,7 @@ const categories = computed(() =>
|
|
|
942
943
|
);
|
|
943
944
|
|
|
944
945
|
function tableRowClickHandler(_: any, data: any) {
|
|
946
|
+
// console.log(data.item);
|
|
945
947
|
selectedFeedback.value = data.item;
|
|
946
948
|
dialogPreview.value = true;
|
|
947
949
|
}
|
|
@@ -168,6 +168,10 @@ function selectAttachment() {
|
|
|
168
168
|
|
|
169
169
|
function onFileChange() {
|
|
170
170
|
if (files.value.length) {
|
|
171
|
+
console.log(
|
|
172
|
+
"onFileChange triggered with files:",
|
|
173
|
+
files.value.map((f) => f.name)
|
|
174
|
+
);
|
|
171
175
|
|
|
172
176
|
const maxFiles = props.maxFiles || 5;
|
|
173
177
|
if (files.value.length > maxFiles) {
|
|
@@ -177,6 +181,7 @@ function onFileChange() {
|
|
|
177
181
|
}
|
|
178
182
|
|
|
179
183
|
files.value.forEach((file) => {
|
|
184
|
+
console.log(`Emitting 'add' event for file: ${file.name}`);
|
|
180
185
|
// For each file, we'll also need to store its original name
|
|
181
186
|
// This will be associated with the file URL in the parent component
|
|
182
187
|
emit("add", file);
|
|
@@ -187,7 +192,7 @@ function onFileChange() {
|
|
|
187
192
|
}
|
|
188
193
|
|
|
189
194
|
function onImageError(file: string) {
|
|
190
|
-
console.
|
|
195
|
+
console.log(`Image error for file: ${file}`);
|
|
191
196
|
emit("errored", file);
|
|
192
197
|
}
|
|
193
198
|
|
|
@@ -97,7 +97,7 @@ async function handleConfirm() {
|
|
|
97
97
|
|
|
98
98
|
} catch (err: any) {
|
|
99
99
|
const errMessage = err?.response?._data?.message || 'Something went wrong. Please try again.';
|
|
100
|
-
console.
|
|
100
|
+
console.log('[ERROR]', err)
|
|
101
101
|
errorMessage.value = errMessage;
|
|
102
102
|
} finally {
|
|
103
103
|
processingPassword.value = false;
|
|
@@ -77,6 +77,8 @@ const showNotFoundMessage = ref<boolean>(false);
|
|
|
77
77
|
const errorMessage = ref<string>("");
|
|
78
78
|
|
|
79
79
|
const handleScanVisitorQRCode = async () => {
|
|
80
|
+
console.log("startScanner cameraFacingMode", cameraFacingMode.value);
|
|
81
|
+
console.log("STARTING QR Code Scanner...");
|
|
80
82
|
if (html5QrCodeInstance.value) return;
|
|
81
83
|
const config = { fps: 10, qrbox: { width: 250, height: 250 } };
|
|
82
84
|
html5QrCodeInstance.value = new $Html5Qrcode("reader");
|
|
@@ -929,6 +929,7 @@ if (!user?._id) return;
|
|
|
929
929
|
siteId: props.siteId,
|
|
930
930
|
});
|
|
931
931
|
|
|
932
|
+
console.log("serviceProviders", serviceProviders);
|
|
932
933
|
|
|
933
934
|
if (serviceProviders?.length) {
|
|
934
935
|
messageServiceProvider.value =
|
|
@@ -979,6 +980,7 @@ const canSubmitInvite = computed(() => {
|
|
|
979
980
|
watch(
|
|
980
981
|
() => serviceProviderInvite.value.email,
|
|
981
982
|
async (value) => {
|
|
983
|
+
console.log("typing:", value);
|
|
982
984
|
await checkExistingAccount(value);
|
|
983
985
|
}
|
|
984
986
|
);
|
|
@@ -410,6 +410,7 @@ await useLazyAsyncData(`anpr-settings-${props.siteId}`, async () => {
|
|
|
410
410
|
site: props.siteId,
|
|
411
411
|
userType: "site",
|
|
412
412
|
});
|
|
413
|
+
console.log("data", data);
|
|
413
414
|
if (typeof data?.ANPRSwitches == "object") {
|
|
414
415
|
ANPRSwitches.value = data?.ANPRSwitches;
|
|
415
416
|
}
|
|
@@ -430,6 +431,7 @@ const saveANPRSettings = async () => {
|
|
|
430
431
|
updatedBy: props.createdBy,
|
|
431
432
|
userType: "site",
|
|
432
433
|
};
|
|
434
|
+
console.log("saveANPRSettings data:", data);
|
|
433
435
|
await createUpdateANPRSettings(data);
|
|
434
436
|
show("Saved successfully", "success");
|
|
435
437
|
} catch (error) {
|
|
@@ -1397,7 +1397,7 @@ async function proceedNonCheckedOutCheckout(visitorId: string) {
|
|
|
1397
1397
|
}
|
|
1398
1398
|
} catch (error: any) {
|
|
1399
1399
|
const checkoutErrorMessage = error?.response?._data?.message;
|
|
1400
|
-
console.
|
|
1400
|
+
console.log("[ERROR]", error);
|
|
1401
1401
|
errorMessage.value =
|
|
1402
1402
|
checkoutErrorMessage || "An error occurred while checking out the vehicle.";
|
|
1403
1403
|
} finally {
|
|
@@ -1425,7 +1425,7 @@ async function handleNfcReturnCheckout() {
|
|
|
1425
1425
|
}
|
|
1426
1426
|
} catch (error: any) {
|
|
1427
1427
|
const checkoutErrorMessage = error?.response?._data?.message;
|
|
1428
|
-
console.
|
|
1428
|
+
console.log("[ERROR]", error);
|
|
1429
1429
|
errorMessage.value =
|
|
1430
1430
|
checkoutErrorMessage || "An error occurred while returning the NFC card.";
|
|
1431
1431
|
} finally {
|
|
@@ -2085,6 +2085,12 @@ async function submit(options: { skipNonCheckedOutCheck?: boolean } = {}) {
|
|
|
2085
2085
|
);
|
|
2086
2086
|
continue;
|
|
2087
2087
|
}
|
|
2088
|
+
console.log(
|
|
2089
|
+
"[QR Print] Sending to printer — accessLevel:",
|
|
2090
|
+
qrCode.accessLevel,
|
|
2091
|
+
"liftLevel:",
|
|
2092
|
+
qrCode.liftAccessLevel
|
|
2093
|
+
);
|
|
2088
2094
|
const printResult = await testConnection(
|
|
2089
2095
|
vendorId,
|
|
2090
2096
|
productId,
|
|
@@ -2095,6 +2101,12 @@ async function submit(options: { skipNonCheckedOutCheck?: boolean } = {}) {
|
|
|
2095
2101
|
companyName,
|
|
2096
2102
|
address
|
|
2097
2103
|
);
|
|
2104
|
+
console.log(
|
|
2105
|
+
"[QR Print] Print result for card",
|
|
2106
|
+
qrCode._id,
|
|
2107
|
+
":",
|
|
2108
|
+
printResult
|
|
2109
|
+
);
|
|
2098
2110
|
}
|
|
2099
2111
|
}
|
|
2100
2112
|
}
|
|
@@ -2383,6 +2395,10 @@ onMounted(() => {
|
|
|
2383
2395
|
currentAutofillSource.value = null;
|
|
2384
2396
|
|
|
2385
2397
|
if (prop.mode === "register" && prop.visitorData) {
|
|
2398
|
+
console.log(
|
|
2399
|
+
"Register mode, prefill visitor data",
|
|
2400
|
+
prop.visitorData?.plateNumber
|
|
2401
|
+
);
|
|
2386
2402
|
visitor.plateNumber = prop.visitorData?.plateNumber || "";
|
|
2387
2403
|
}
|
|
2388
2404
|
});
|
|
@@ -2370,7 +2370,7 @@ async function proceedCheckout() {
|
|
|
2370
2370
|
}
|
|
2371
2371
|
} catch (error: any) {
|
|
2372
2372
|
const errorMessage = error?.response?._data?.message;
|
|
2373
|
-
console.
|
|
2373
|
+
console.log("[ERROR]", error);
|
|
2374
2374
|
showMessage(
|
|
2375
2375
|
errorMessage || "Something went wrong. Please try again later.",
|
|
2376
2376
|
"error"
|
|
@@ -72,6 +72,7 @@ const handleScanVisitorQRCode = async () => {
|
|
|
72
72
|
async (qrCodeMessage: string) => {
|
|
73
73
|
showNotFoundMessage.value = false;
|
|
74
74
|
scannedValue.value = qrCodeMessage;
|
|
75
|
+
console.log(`QR Code scanned: ${qrCodeMessage}`);
|
|
75
76
|
setTimeout(() => {
|
|
76
77
|
closeDialog();
|
|
77
78
|
}, 100);
|
|
@@ -199,7 +199,7 @@ async function deleteFile(value: string) {
|
|
|
199
199
|
(file) => file !== value
|
|
200
200
|
);
|
|
201
201
|
} catch (error) {
|
|
202
|
-
console.
|
|
202
|
+
console.log(error);
|
|
203
203
|
showMessage("Failed to delete file", "error");
|
|
204
204
|
}
|
|
205
205
|
}
|
|
@@ -227,6 +227,7 @@ async function submitWorkOrder() {
|
|
|
227
227
|
let res: Record<string, any> = {};
|
|
228
228
|
|
|
229
229
|
if (isEditMode.value) {
|
|
230
|
+
console.log("updating...");
|
|
230
231
|
res = await updateWorkOrder(workOrder.value._id as string, payload);
|
|
231
232
|
} else {
|
|
232
233
|
res = await createWorkOrder(payload);
|
|
@@ -114,7 +114,7 @@ export default function useComment() {
|
|
|
114
114
|
const seenBy = await updateSeenBy(updateSeenIds, currentUser.value?._id);
|
|
115
115
|
}
|
|
116
116
|
} catch (error) {
|
|
117
|
-
console.
|
|
117
|
+
console.log("error :", error);
|
|
118
118
|
} finally {
|
|
119
119
|
isCommentsLoaded.value = false;
|
|
120
120
|
}
|
package/composables/useKey.ts
CHANGED
|
@@ -129,6 +129,7 @@ export default function useKey() {
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
function setKey(data?: TKeyLog) {
|
|
132
|
+
console.log("data", data);
|
|
132
133
|
keyLog.value = data || new MKeyLog();
|
|
133
134
|
}
|
|
134
135
|
|
|
@@ -328,6 +329,7 @@ export default function useKey() {
|
|
|
328
329
|
},
|
|
329
330
|
});
|
|
330
331
|
keyList.value = response;
|
|
332
|
+
console.log("keyList", keyList.value);
|
|
331
333
|
return response;
|
|
332
334
|
}
|
|
333
335
|
|
|
@@ -349,6 +351,7 @@ export default function useKey() {
|
|
|
349
351
|
},
|
|
350
352
|
});
|
|
351
353
|
keyList.value = response;
|
|
354
|
+
console.log("keyList", keyList.value);
|
|
352
355
|
return response;
|
|
353
356
|
}
|
|
354
357
|
return {
|
package/composables/useRole.ts
CHANGED
|
@@ -69,7 +69,7 @@ export default function useUploadFiles() {
|
|
|
69
69
|
results.push(fileId); // Collect the file ID
|
|
70
70
|
files.value = [];
|
|
71
71
|
} catch (e) {
|
|
72
|
-
console.
|
|
72
|
+
console.log("Error occurred while attaching images.", e);
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
|
package/composables/useUtils.ts
CHANGED
|
@@ -407,6 +407,7 @@ export default function useUtils() {
|
|
|
407
407
|
const desiredDurationInSeconds = 24 * 60 * 60;
|
|
408
408
|
const remainingTimeInSeconds =
|
|
409
409
|
desiredDurationInSeconds - differenceInSeconds;
|
|
410
|
+
console.log(remainingTimeInSeconds);
|
|
410
411
|
return remainingTimeInSeconds;
|
|
411
412
|
}
|
|
412
413
|
|
|
@@ -496,7 +497,7 @@ export default function useUtils() {
|
|
|
496
497
|
const response = await fetch(url, { method: "GET" });
|
|
497
498
|
return response.blob();
|
|
498
499
|
} catch (error: any) {
|
|
499
|
-
console.
|
|
500
|
+
console.log(error);
|
|
500
501
|
}
|
|
501
502
|
}
|
|
502
503
|
|
package/composables/useWebUsb.ts
CHANGED
|
@@ -191,15 +191,19 @@ export default function useWebUsb() {
|
|
|
191
191
|
}
|
|
192
192
|
try {
|
|
193
193
|
let devices = await navigator.usb.getDevices();
|
|
194
|
+
console.log("[WebUSB] Available devices:", devices.map((d: USBDevice) => `${d.vendorId}:${d.productId}`));
|
|
194
195
|
let device = devices.find(
|
|
195
196
|
(d: USBDevice) => d.vendorId === vendorId && d.productId === productId,
|
|
196
197
|
);
|
|
197
198
|
if (!device) {
|
|
199
|
+
console.log("[WebUSB] Device not in granted list, requesting permission for", vendorId, productId);
|
|
198
200
|
device = await navigator.usb.requestDevice({
|
|
199
201
|
filters: [{ vendorId, productId }],
|
|
200
202
|
});
|
|
201
203
|
}
|
|
204
|
+
console.log("[WebUSB] Opening device:", device.vendorId, device.productId);
|
|
202
205
|
await preparePrinterDevice(device);
|
|
206
|
+
console.log("[WebUSB] Device opened and interface claimed.");
|
|
203
207
|
return device;
|
|
204
208
|
} catch (error: unknown) {
|
|
205
209
|
console.error("Error connecting to USB device:", error);
|
|
@@ -507,7 +511,9 @@ export default function useWebUsb() {
|
|
|
507
511
|
qrSubText?: string,
|
|
508
512
|
) => {
|
|
509
513
|
try {
|
|
514
|
+
console.log("[WebUSB] printQrCode start — doorLevel:", doorLevel, "liftLevel:", liftLevel, "company:", companyName, "address:", address);
|
|
510
515
|
const { endpointNumber } = getPrinterConnection(device);
|
|
516
|
+
console.log("[WebUSB] Using endpoint:", endpointNumber);
|
|
511
517
|
|
|
512
518
|
const canvas = await createReceiptLayout(
|
|
513
519
|
urlImage,
|
|
@@ -518,12 +524,16 @@ export default function useWebUsb() {
|
|
|
518
524
|
qrHeader,
|
|
519
525
|
qrSubText,
|
|
520
526
|
);
|
|
527
|
+
console.log("[WebUSB] Canvas created:", canvas.width, "x", canvas.height);
|
|
521
528
|
const rasterData = canvasToRaster(canvas);
|
|
529
|
+
console.log("[WebUSB] Raster data size:", rasterData.byteLength, "bytes");
|
|
522
530
|
|
|
523
531
|
await device.transferOut(endpointNumber, rasterData.buffer);
|
|
532
|
+
console.log("[WebUSB] Raster data sent.");
|
|
524
533
|
|
|
525
534
|
const CUT = new Uint8Array([0x1d, 0x56, 0x41, 0x10]);
|
|
526
535
|
await device.transferOut(endpointNumber, CUT.buffer);
|
|
536
|
+
console.log("[WebUSB] Cut command sent.");
|
|
527
537
|
|
|
528
538
|
return { success: true, message: "QR print sent successfully" };
|
|
529
539
|
} catch (error: unknown) {
|
package/middleware/01.auth.ts
CHANGED
package/middleware/02.org.ts
CHANGED
|
@@ -9,8 +9,10 @@ export default defineNuxtRouteMiddleware(async (to, from) => {
|
|
|
9
9
|
|
|
10
10
|
const { organization, org } = to.params;
|
|
11
11
|
|
|
12
|
+
// console.log('org-aut-middleware running', hexSchema.safeParse(organization).success)
|
|
12
13
|
|
|
13
14
|
if (!hexSchema.safeParse(organization || org).success) {
|
|
15
|
+
console.log('[02.org] middleware run')
|
|
14
16
|
return navigateTo(
|
|
15
17
|
{ name: "require-organization-membership" },
|
|
16
18
|
{ replace: true }
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@7365admin1/layer-common",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "4.2.5
|
|
5
|
+
"version": "4.2.5",
|
|
6
6
|
"author": "7365admin1",
|
|
7
7
|
"main": "./nuxt.config.ts",
|
|
8
8
|
"//files": "What a consumer extending this layer actually loads. Without this npm ships the whole working tree - the changesets, the CI workflows, the render harness in tools/ and any scratch directory that happened to exist at publish time. Nuxt resolves a layer by directory, so every runtime directory below has to stay listed; adding a new top-level runtime directory means adding it here too.",
|
package/plugins/vuetify.ts
CHANGED
|
@@ -234,7 +234,9 @@ export default defineNuxtPlugin((app) => {
|
|
|
234
234
|
// hiddenTabs: ['upload'],
|
|
235
235
|
divider: true,
|
|
236
236
|
// upload(file: File) {
|
|
237
|
+
// console.log("file :>> ", file);
|
|
237
238
|
// const url = URL.createObjectURL(file);
|
|
239
|
+
// console.log("mock upload api :>> ", url);
|
|
238
240
|
// return Promise.resolve(url);
|
|
239
241
|
// },
|
|
240
242
|
upload(file: File) {
|