@7365admin1/layer-common 1.11.36 → 1.11.38
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 +12 -0
- package/components/ClientMain.vue +210 -101
- package/components/InvitationClientForm.vue +40 -22
- package/components/ScheduleTaskForm.vue +168 -18
- package/components/ScheduleTaskMain.vue +10 -4
- package/components/VehicleForm.vue +83 -50
- package/components/VehicleManagement.vue +67 -27
- package/components/VisitorManagement.vue +4 -4
- package/composables/useCustomerSite.ts +11 -0
- package/composables/useMember.ts +16 -0
- package/composables/useUser.ts +26 -1
- package/composables/useWorkOrder.ts +13 -7
- package/package.json +1 -1
- package/types/org.d.ts +1 -0
|
@@ -37,10 +37,15 @@
|
|
|
37
37
|
</v-dialog>
|
|
38
38
|
|
|
39
39
|
<v-dialog v-model="dialog.createVehicle" v-if="vehicleType" width="450" persistent>
|
|
40
|
-
<VehicleForm :type="vehicleType" mode="
|
|
40
|
+
<VehicleForm :type="vehicleType" :mode="mode" :vehicle-data="selectedVehicleObject" :plate-number-id="selectedPlateNumberId" @back="handleBackToSelection"
|
|
41
41
|
@done="handleAddVehicleComplete" :org="org" :site="props.site" @close:all="handleCloseAll" />
|
|
42
42
|
</v-dialog>
|
|
43
43
|
|
|
44
|
+
<v-dialog v-model="dialog.updateVehicle" v-if="vehicleType" width="450" persistent>
|
|
45
|
+
<VehicleForm :type="vehicleType" :mode="mode" :vehicle-data="selectedPlateNumberObject" :plate-number-id="selectedPlateNumberId" @back="handleBackToSelection"
|
|
46
|
+
@done="handleAddVehicleComplete" :org="org" :site="props.site" @close:all="handleCloseAll" @close="handleCloseAll" />
|
|
47
|
+
</v-dialog>
|
|
48
|
+
|
|
44
49
|
<!-- <v-dialog v-model="dialog.updateVehicle" v-if="vehicleType" width="450" persistent>
|
|
45
50
|
<VehicleForm :type="vehicleType" mode="edit" :vehicle-data="selectedVehicleObject"
|
|
46
51
|
@back="dialog.updateVehicle = false" @close="dialog.updateVehicle = false" @done="handleUpdateVehicleComplete"
|
|
@@ -58,7 +63,7 @@
|
|
|
58
63
|
<span class="d-flex ga-3 align-center"><strong>{{ label }}:</strong></span>
|
|
59
64
|
<!-- <PlateNumberDisplay :plate-numbers="selectedVehicleObject[key]" show-all :default-value="selectedVehicleObject.plateNumber" /> -->
|
|
60
65
|
<v-col cols="12">
|
|
61
|
-
<v-card flat outlined class="pa-2" border="sm black">
|
|
66
|
+
<v-card flat outlined class="pa-2" border="sm black" :loading="loadingPlateNumberDetails">
|
|
62
67
|
<v-data-table :items="selectedVehicleObject[key]" :headers="plateHeaders" hide-default-footer>
|
|
63
68
|
<template #item.status="{ value }">
|
|
64
69
|
<v-chip :color="formatVehicleStatus(value).color" size="x-small" dark>
|
|
@@ -66,22 +71,33 @@
|
|
|
66
71
|
</v-chip>
|
|
67
72
|
</template>
|
|
68
73
|
<template #item.action="{ item: plateNumberItem, value }">
|
|
69
|
-
<v-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
v-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
74
|
+
<v-menu>
|
|
75
|
+
<template #activator="{ props: menuProps }">
|
|
76
|
+
<v-btn icon="mdi-dots-vertical" v-bind="menuProps" flat size="x-small" />
|
|
77
|
+
</template>
|
|
78
|
+
<v-list density="compact">
|
|
79
|
+
<v-list-item v-if="(plateNumberItem as TPlateNumber)?.status == 'active'"
|
|
80
|
+
title="Edit Vehicle" prepend-icon="mdi-pencil" @click="handleEditVehicleAction(plateNumberItem as TPlateNumber)" />
|
|
81
|
+
<v-list-item
|
|
82
|
+
v-if="props.app === 'property_management_agency' && (plateNumberItem as TPlateNumber)?.status == 'pending'"
|
|
83
|
+
title="Approve" prepend-icon="mdi-check-circle" base-color="success"
|
|
84
|
+
@click="handleApproveVehicle(plateNumberItem as TPlateNumber)" />
|
|
85
|
+
<v-list-item v-if="(plateNumberItem as TPlateNumber)?.status == 'deleted'" title="Restore"
|
|
86
|
+
prepend-icon="mdi-restore" base-color="orange"
|
|
87
|
+
@click="handleRestoreVehicle(plateNumberItem as TPlateNumber)" />
|
|
88
|
+
<v-list-item
|
|
89
|
+
v-if="((plateNumberItem as TPlateNumber)?.type === 'whitelist' || (plateNumberItem as TPlateNumber)?.type === 'blocklist') && plateNumberItem?.status == 'active'"
|
|
90
|
+
:title="(plateNumberItem as TPlateNumber)?.type === 'blocklist' ? 'Whitelist' : 'Blocklist'"
|
|
91
|
+
prepend-icon="mdi-swap-horizontal"
|
|
92
|
+
:base-color="(plateNumberItem as TPlateNumber)?.type === 'blocklist' ? 'primary' : 'red'"
|
|
93
|
+
@click="handleUpdateType(plateNumberItem as TPlateNumber)" />
|
|
94
|
+
|
|
95
|
+
<v-list-item
|
|
96
|
+
v-if="canDeleteVehicle && (plateNumberItem as TPlateNumber)?.status == 'active'"
|
|
97
|
+
title="Delete" prepend-icon="mdi-delete" base-color="error"
|
|
98
|
+
@click="handleDeleteVehicleAction(plateNumberItem as TPlateNumber)" />
|
|
99
|
+
</v-list>
|
|
100
|
+
</v-menu>
|
|
85
101
|
</template>
|
|
86
102
|
</v-data-table>
|
|
87
103
|
<v-btn text="Add Vehicle Number" class="mt-6 text-capitalize" prepend-icon="mdi-plus"
|
|
@@ -94,7 +110,7 @@
|
|
|
94
110
|
<v-col v-else-if="selectedVehicleObject[key]" cols="12">
|
|
95
111
|
<span class="d-flex ga-3 align-center"><strong>{{ label }}:</strong> {{ formatValues(key,
|
|
96
112
|
selectedVehicleObject[key])
|
|
97
|
-
|
|
113
|
+
}}</span>
|
|
98
114
|
</v-col>
|
|
99
115
|
</template>
|
|
100
116
|
</v-row>
|
|
@@ -168,26 +184,30 @@ const plateHeaders = [
|
|
|
168
184
|
|
|
169
185
|
|
|
170
186
|
const { formatCamelCaseToWords, formatDate, debounce } = useUtils();
|
|
171
|
-
const { getVehicles, deleteVehicle, formatVehicleStatus, approveVehicle, updateVehicle } = useVehicle();
|
|
187
|
+
const { getVehicles, deleteVehicle, formatVehicleStatus, approveVehicle, updateVehicle, getVehicleById } = useVehicle();
|
|
172
188
|
|
|
173
189
|
const items = ref<Array<Record<string, any>>>([]);
|
|
174
190
|
const page = ref(1);
|
|
175
191
|
const pages = ref(0);
|
|
176
192
|
const pageRange = ref("-- - -- of --");
|
|
177
193
|
|
|
194
|
+
const mode = ref<"add" | "edit">("add");
|
|
195
|
+
|
|
178
196
|
const searchInput = ref("")
|
|
179
197
|
|
|
180
198
|
const loading = ref(false);
|
|
199
|
+
const loadingPlateNumberDetails = ref(false);
|
|
181
200
|
const deletingVehicle = ref(false);
|
|
182
201
|
const approvingVehicle = ref(false);
|
|
183
202
|
const restoringVehicle = ref(false);
|
|
184
203
|
const updatingType = ref(false);
|
|
185
204
|
|
|
186
205
|
const selectedVehicleId = ref<string | null>(null)
|
|
187
|
-
const vehicleType = ref<TVehicleType | null>(null);
|
|
206
|
+
const vehicleType = ref<TVehicleType | 'seasonpass' | null>(null);
|
|
188
207
|
const vehicleTypeFilter = ref<TVehicleType | null>(null);
|
|
189
208
|
|
|
190
209
|
const selectedPlateNumberObject = ref<TPlateNumber | null>(null);
|
|
210
|
+
const selectedPlateNumberId = ref<string | null>(null); // individual plate number
|
|
191
211
|
|
|
192
212
|
const message = ref("");
|
|
193
213
|
const messageColor = ref("");
|
|
@@ -255,6 +275,8 @@ const handleCloseAll = () => {
|
|
|
255
275
|
dialog.createVehicle = false;
|
|
256
276
|
dialog.updateVehicle = false;
|
|
257
277
|
dialog.showSelection = false;
|
|
278
|
+
dialog.updateVehicleType = false;
|
|
279
|
+
mode.value = "add";
|
|
258
280
|
vehicleType.value = null;
|
|
259
281
|
}
|
|
260
282
|
|
|
@@ -294,12 +316,29 @@ function addNewPlateNumbers() {
|
|
|
294
316
|
dialog.showSelection = true;
|
|
295
317
|
}
|
|
296
318
|
|
|
297
|
-
function handleEditVehicleAction() {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
319
|
+
async function handleEditVehicleAction(item: TPlateNumber) {
|
|
320
|
+
|
|
321
|
+
selectedPlateNumberId.value = item?._id as string;
|
|
322
|
+
|
|
323
|
+
try {
|
|
324
|
+
loadingPlateNumberDetails.value = true;
|
|
325
|
+
const res = await getVehicleById(selectedPlateNumberId.value as string)
|
|
326
|
+
if(res?.seasonPassType){
|
|
327
|
+
vehicleType.value = "seasonpass";
|
|
328
|
+
} else {
|
|
329
|
+
vehicleType.value = item?.type || null;
|
|
330
|
+
}
|
|
331
|
+
selectedPlateNumberObject.value = res || null;
|
|
332
|
+
dialog.showMoreActions = false;
|
|
333
|
+
mode.value = "edit";
|
|
334
|
+
dialog.updateVehicle = true;
|
|
335
|
+
|
|
336
|
+
} catch (error) {
|
|
337
|
+
console.error("Error fetching vehicle details:", error);
|
|
338
|
+
} finally {
|
|
339
|
+
loadingPlateNumberDetails.value = false;
|
|
340
|
+
}
|
|
341
|
+
|
|
303
342
|
}
|
|
304
343
|
|
|
305
344
|
function handleDeleteVehicleAction(item: TPlateNumber) {
|
|
@@ -354,6 +393,7 @@ function handleUpdatePage(newPageNum: number) {
|
|
|
354
393
|
}
|
|
355
394
|
|
|
356
395
|
function handleAddVehicleClick() {
|
|
396
|
+
mode.value = "add";
|
|
357
397
|
dialog.showSelection = true;
|
|
358
398
|
selectedVehicleId.value = null;
|
|
359
399
|
}
|
|
@@ -1331,10 +1331,10 @@ const {
|
|
|
1331
1331
|
params.status = activeTab.value;
|
|
1332
1332
|
}
|
|
1333
1333
|
|
|
1334
|
-
if (activeTab.value !== "registered") {
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
}
|
|
1334
|
+
// if (activeTab.value !== "registered") {
|
|
1335
|
+
// delete params.type;
|
|
1336
|
+
// delete params.checkedOut;
|
|
1337
|
+
// }
|
|
1338
1338
|
|
|
1339
1339
|
return await getVisitors(params);
|
|
1340
1340
|
},
|
|
@@ -15,6 +15,7 @@ export default function useCustomerSite() {
|
|
|
15
15
|
);
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
|
|
18
19
|
async function getAll({
|
|
19
20
|
page = 1,
|
|
20
21
|
search = "",
|
|
@@ -47,10 +48,20 @@ export default function useCustomerSite() {
|
|
|
47
48
|
);
|
|
48
49
|
}
|
|
49
50
|
|
|
51
|
+
function getCustomerSites (org: string) {
|
|
52
|
+
return useNuxtApp().$api<Record<string, any>>(
|
|
53
|
+
`/api/customer-sites?page=1&search=&limit=10&sort=&order=asc&status=active&org=${org}`,
|
|
54
|
+
{
|
|
55
|
+
method: 'GET'
|
|
56
|
+
}
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
|
|
50
60
|
return {
|
|
51
61
|
add,
|
|
52
62
|
getAll,
|
|
53
63
|
addViaInvite,
|
|
54
64
|
getBySiteAsServiceProvider,
|
|
65
|
+
getCustomerSites
|
|
55
66
|
};
|
|
56
67
|
}
|
package/composables/useMember.ts
CHANGED
|
@@ -93,6 +93,21 @@ export default function useMember() {
|
|
|
93
93
|
}
|
|
94
94
|
);
|
|
95
95
|
}
|
|
96
|
+
|
|
97
|
+
function createMemberDirect(payload: {
|
|
98
|
+
userId: string;
|
|
99
|
+
orgId: string;
|
|
100
|
+
roleId: string;
|
|
101
|
+
app: string;
|
|
102
|
+
siteId?: string;
|
|
103
|
+
siteName?:string;
|
|
104
|
+
}) {
|
|
105
|
+
return useNuxtApp().$api<TMember>('/api/members/direct', {
|
|
106
|
+
method: 'POST',
|
|
107
|
+
body: payload,
|
|
108
|
+
})
|
|
109
|
+
}
|
|
110
|
+
|
|
96
111
|
return {
|
|
97
112
|
members,
|
|
98
113
|
member,
|
|
@@ -107,5 +122,6 @@ export default function useMember() {
|
|
|
107
122
|
getByUserIdType,
|
|
108
123
|
updateMemberStatus,
|
|
109
124
|
updateMemberRole,
|
|
125
|
+
createMemberDirect
|
|
110
126
|
};
|
|
111
127
|
}
|
package/composables/useUser.ts
CHANGED
|
@@ -14,6 +14,30 @@ export default function useUser() {
|
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
function inviteUserClient({
|
|
18
|
+
email = '',
|
|
19
|
+
app = '',
|
|
20
|
+
role = '',
|
|
21
|
+
name = '',
|
|
22
|
+
org = '',
|
|
23
|
+
site = '',
|
|
24
|
+
siteName = ''
|
|
25
|
+
} = {}) {
|
|
26
|
+
return useNuxtApp().$api<Record<string, any>>('/api/auth/invite/user', {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
body: {
|
|
29
|
+
email,
|
|
30
|
+
app,
|
|
31
|
+
role,
|
|
32
|
+
name,
|
|
33
|
+
org,
|
|
34
|
+
...(site && { siteId: site }),
|
|
35
|
+
...(siteName && { siteName })
|
|
36
|
+
}
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
|
|
17
41
|
function updateName(name = "") {
|
|
18
42
|
return useNuxtApp().$api<Record<string, any>>("/api/users/name", {
|
|
19
43
|
method: "PUT",
|
|
@@ -127,6 +151,7 @@ export default function useUser() {
|
|
|
127
151
|
createUserByInvite,
|
|
128
152
|
getById,
|
|
129
153
|
createUserByVerification,
|
|
130
|
-
getUserByEmail
|
|
154
|
+
getUserByEmail,
|
|
155
|
+
inviteUserClient
|
|
131
156
|
};
|
|
132
157
|
}
|
|
@@ -137,15 +137,21 @@ export default function useWorkOrder() {
|
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
function deleteWorkOrder(id: string) {
|
|
140
|
-
return useNuxtApp().$api<Record<string, any>>(
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
method: "PUT",
|
|
144
|
-
// query: { id },
|
|
145
|
-
}
|
|
146
|
-
);
|
|
140
|
+
return useNuxtApp().$api<Record<string, any>>(`/api/work-orders/${id}`, {
|
|
141
|
+
method: "DELETE",
|
|
142
|
+
});
|
|
147
143
|
}
|
|
148
144
|
|
|
145
|
+
// function deleteWorkOrder(id: string) {
|
|
146
|
+
// return useNuxtApp().$api<Record<string, any>>(
|
|
147
|
+
// `/api/work-orders/deleted/work-order/${id}`,
|
|
148
|
+
// {
|
|
149
|
+
// method: "PUT",
|
|
150
|
+
// // query: { id },
|
|
151
|
+
// }
|
|
152
|
+
// );
|
|
153
|
+
// }
|
|
154
|
+
|
|
149
155
|
function getWorkOrderSettings(_workOrderSettings: Record<string, any>) {
|
|
150
156
|
return useNuxtApp().$api<Record<string, any>>(
|
|
151
157
|
"/api/work-order-settings/get-by-site",
|
package/package.json
CHANGED