@7365admin1/layer-common 1.11.20 → 1.11.21

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.
@@ -1,285 +1,345 @@
1
1
  <template>
2
- <v-row no-gutters>
3
- <v-expansion-panels multiple v-model="openPanels" >
4
-
5
- <!-- SITE SETTINGS -->
6
- <v-expansion-panel color="primary">
7
- <v-expansion-panel-title>
8
- <v-icon class="mr-2">mdi-cog</v-icon>
9
- Site Settings
10
- </v-expansion-panel-title>
11
-
12
- <v-expansion-panel-text>
13
- <v-row no-gutters class="d-flex justify-center">
14
- <v-col cols="12">
15
- <v-row no-gutters>
16
- <v-col cols="12">
17
- <span class="text-h4 font-weight-bold"> Site Settings </span>
18
- </v-col>
19
-
20
- <v-col cols="12">
21
- <v-row no-gutters>
22
- <v-col cols="12" lg="4" class="mt-2">
23
- <NumberSettingField v-model="blocks" title="No. of blocks" type="blocks"
24
- :read-only="!canManageSiteSettings"
25
- :existing-block-number="existingBlockNumber" :site-id="siteId"
26
- :disabled="existingBlockNumber === blocks" @success="refreshSiteData" />
27
- </v-col>
28
- </v-row>
29
- </v-col>
30
-
31
- <v-col cols="12">
32
- <v-row no-gutters>
33
- <v-col cols="12" lg="4" class="mt-2">
34
- <NumberSettingField v-model="guardPosts" title="No. of guard posts"
35
- type="guard_posts" :read-only="!canManageSiteSettings"
36
- :existing-guard-posts-number="existingGuardPostNumber" :site-id="siteId"
37
- :disabled="existingGuardPostNumber === guardPosts"
38
- @success="refreshSiteData" />
39
- </v-col>
40
- </v-row>
41
- </v-col>
42
-
43
- <v-col cols="12">
44
- <v-row no-gutters>
45
- <v-col cols="12" lg="4" class="mt-2">
46
- <v-row no-gutters>
47
- <v-form v-model="gracePeriodValid">
48
- <v-row>
49
- <v-col cols="6">
50
- <InputLabel class="text-capitalize font-weight-bold"
51
- title="Grace Period" required />
52
- <v-text-field v-model="gracePeriod" type="number"
53
- density="comfortable" :readonly="!canManageSiteSettings"
54
- :rules="[requiredRule]" />
55
- </v-col>
56
-
57
- <v-col cols="6">
58
- <v-btn v-if="canManageSiteSettings" color="primary"
59
- class="text-none mt-6" size="large" variant="flat"
60
- :disabled="!gracePeriodValid ||
61
- existingGracePeriodNumber === gracePeriod
62
- " :loading="gracePeriodLoading" text="Save"
63
- @click="handleSaveGracePeriod" />
64
- </v-col>
65
- </v-row>
66
- </v-form>
67
- </v-row>
68
- </v-col>
69
- </v-row>
70
- </v-col>
71
-
72
- </v-row>
73
- </v-col>
74
- </v-row>
75
- </v-expansion-panel-text>
76
- </v-expansion-panel>
77
-
78
- <!-- ANPR CAMERA -->
79
- <v-expansion-panel color="primary">
80
- <v-expansion-panel-title>
81
- <v-icon class="mr-2">mdi-camera</v-icon>
82
- ANPR Camera
83
- </v-expansion-panel-title>
84
-
85
- <v-expansion-panel-text>
86
- <CameraMain :site="siteId" :read-only="!canManageSiteSettings"
87
- :guard-posts="siteData?.metadata?.guardPosts" />
88
- </v-expansion-panel-text>
89
- </v-expansion-panel>
90
-
91
- <!-- CCTV CAMERA -->
92
- <v-expansion-panel color="primary">
93
- <v-expansion-panel-title>
94
- <v-icon class="mr-2">mdi-cctv</v-icon>
95
- CCTV Camera
96
- </v-expansion-panel-title>
97
-
98
- <v-expansion-panel-text>
99
- <CameraMain :site="siteId" type="ip" :read-only="!canManageSiteSettings" />
100
- </v-expansion-panel-text>
101
- </v-expansion-panel>
102
-
103
- <v-expansion-panel color="primary">
104
- <v-expansion-panel-title>
105
- <v-icon class="mr-2">mdi-format-list-numbered</v-icon>
106
- Work Order Settings
107
- </v-expansion-panel-title>
108
-
109
- <v-expansion-panel-text>
110
- <v-text-field v-model="prefix" label="Prefix" :disabled="isLoading || !canManageSiteSettings"
111
- @input="handleInput" />
112
-
113
- <v-select v-model="noOfDigits" :items="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]" label="No. of Digits"
114
- :disabled="isLoading || !canManageSiteSettings" />
115
-
116
- <v-text-field v-model="orderNumberPreview" label="Preview" readonly />
117
-
118
- <v-btn v-if="canManageSiteSettings" class="mt-2" :loading="isLoading" @click="save">
119
- Save
120
- </v-btn>
121
- </v-expansion-panel-text>
122
- </v-expansion-panel>
123
-
124
-
125
- <v-expansion-panel color="primary">
126
- <v-expansion-panel-title>
127
- <v-icon class="mr-2">mdi-truck</v-icon>
128
- Delivery Companies
129
- </v-expansion-panel-title>
130
- <v-expansion-panel-text class="">
131
- <DeliveryCompany :site="siteId" v-model:initial="deliveryCompanies" @refresh-site="refreshSiteData" @update:companiesValue="handleUpdateCompanies"
132
- :read-only="!canManageSiteSettings" />
133
- </v-expansion-panel-text>
134
-
135
- </v-expansion-panel>
136
-
137
- </v-expansion-panels>
138
-
139
- <Snackbar v-model="toast.show" :text="toast.message" :color="toast.color" />
140
- </v-row>
2
+ <v-row no-gutters>
3
+ <v-expansion-panels multiple v-model="openPanels">
4
+ <!-- SITE SETTINGS -->
5
+ <v-expansion-panel color="primary">
6
+ <v-expansion-panel-title>
7
+ <v-icon class="mr-2">mdi-cog</v-icon>
8
+ Site Settings
9
+ </v-expansion-panel-title>
10
+
11
+ <v-expansion-panel-text>
12
+ <v-row no-gutters class="d-flex justify-center">
13
+ <v-col cols="12">
14
+ <v-row no-gutters>
15
+ <v-col cols="12">
16
+ <span class="text-h4 font-weight-bold"> Site Settings </span>
17
+ </v-col>
18
+
19
+ <v-col cols="12">
20
+ <v-row no-gutters>
21
+ <v-col cols="12" lg="4" class="mt-2">
22
+ <NumberSettingField
23
+ v-model="blocks"
24
+ title="No. of blocks"
25
+ type="blocks"
26
+ :read-only="!canManageSiteSettings"
27
+ :existing-block-number="existingBlockNumber"
28
+ :site-id="siteId"
29
+ :disabled="existingBlockNumber === blocks"
30
+ @success="refreshSiteData"
31
+ />
32
+ </v-col>
33
+ </v-row>
34
+ </v-col>
35
+
36
+ <v-col cols="12">
37
+ <v-row no-gutters>
38
+ <v-col cols="12" lg="4" class="mt-2">
39
+ <NumberSettingField
40
+ v-model="guardPosts"
41
+ title="No. of guard posts"
42
+ type="guard_posts"
43
+ :read-only="!canManageSiteSettings"
44
+ :existing-guard-posts-number="existingGuardPostNumber"
45
+ :site-id="siteId"
46
+ :disabled="existingGuardPostNumber === guardPosts"
47
+ @success="refreshSiteData"
48
+ />
49
+ </v-col>
50
+ </v-row>
51
+ </v-col>
52
+
53
+ <v-col cols="12">
54
+ <v-row no-gutters>
55
+ <v-col cols="12" lg="4" class="mt-2">
56
+ <v-row no-gutters>
57
+ <v-form v-model="gracePeriodValid">
58
+ <v-row>
59
+ <v-col cols="6">
60
+ <InputLabel
61
+ class="text-capitalize font-weight-bold"
62
+ title="Grace Period"
63
+ required
64
+ />
65
+ <v-text-field
66
+ v-model="gracePeriod"
67
+ type="number"
68
+ density="comfortable"
69
+ :readonly="!canManageSiteSettings"
70
+ :rules="[requiredRule]"
71
+ />
72
+ </v-col>
73
+
74
+ <v-col cols="6">
75
+ <v-btn
76
+ v-if="canManageSiteSettings"
77
+ color="primary"
78
+ class="text-none mt-6"
79
+ size="large"
80
+ variant="flat"
81
+ :disabled="
82
+ !gracePeriodValid ||
83
+ existingGracePeriodNumber === gracePeriod
84
+ "
85
+ :loading="gracePeriodLoading"
86
+ text="Save"
87
+ @click="handleSaveGracePeriod"
88
+ />
89
+ </v-col>
90
+ </v-row>
91
+ </v-form>
92
+ </v-row>
93
+ </v-col>
94
+ </v-row>
95
+ </v-col>
96
+ </v-row>
97
+ </v-col>
98
+ </v-row>
99
+ </v-expansion-panel-text>
100
+ </v-expansion-panel>
101
+
102
+ <!-- ANPR CAMERA -->
103
+ <v-expansion-panel color="primary">
104
+ <v-expansion-panel-title>
105
+ <v-icon class="mr-2">mdi-camera</v-icon>
106
+ ANPR Camera
107
+ </v-expansion-panel-title>
108
+
109
+ <v-expansion-panel-text>
110
+ <CameraMain
111
+ :site="siteId"
112
+ :read-only="!canManageSiteSettings"
113
+ :guard-posts="siteData?.metadata?.guardPosts"
114
+ />
115
+ </v-expansion-panel-text>
116
+ </v-expansion-panel>
117
+
118
+ <!-- CCTV CAMERA -->
119
+ <v-expansion-panel color="primary">
120
+ <v-expansion-panel-title>
121
+ <v-icon class="mr-2">mdi-cctv</v-icon>
122
+ CCTV Camera
123
+ </v-expansion-panel-title>
124
+
125
+ <v-expansion-panel-text>
126
+ <CameraMain
127
+ :site="siteId"
128
+ type="ip"
129
+ :read-only="!canManageSiteSettings"
130
+ />
131
+ </v-expansion-panel-text>
132
+ </v-expansion-panel>
133
+
134
+ <v-expansion-panel color="primary">
135
+ <v-expansion-panel-title>
136
+ <v-icon class="mr-2">mdi-format-list-numbered</v-icon>
137
+ Work Order Settings
138
+ </v-expansion-panel-title>
139
+
140
+ <v-expansion-panel-text>
141
+ <v-text-field
142
+ v-model="prefix"
143
+ label="Prefix"
144
+ :disabled="isLoading || !canManageSiteSettings"
145
+ @input="handleInput"
146
+ />
147
+
148
+ <v-select
149
+ v-model="noOfDigits"
150
+ :items="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
151
+ label="No. of Digits"
152
+ :disabled="isLoading || !canManageSiteSettings"
153
+ />
154
+
155
+ <v-text-field v-model="orderNumberPreview" label="Preview" readonly />
156
+
157
+ <v-btn
158
+ v-if="canManageSiteSettings"
159
+ class="mt-2"
160
+ :loading="isLoading"
161
+ @click="save"
162
+ >
163
+ Save
164
+ </v-btn>
165
+ </v-expansion-panel-text>
166
+ </v-expansion-panel>
167
+
168
+ <v-expansion-panel color="primary">
169
+ <v-expansion-panel-title>
170
+ <v-icon class="mr-2">mdi-truck</v-icon>
171
+ Delivery Companies
172
+ </v-expansion-panel-title>
173
+ <v-expansion-panel-text class="">
174
+ <DeliveryCompany
175
+ :site="siteId"
176
+ v-model:initial="deliveryCompanies"
177
+ @refresh-site="refreshSiteData"
178
+ @update:companiesValue="handleUpdateCompanies"
179
+ :read-only="!canManageSiteSettings"
180
+ />
181
+ </v-expansion-panel-text>
182
+ </v-expansion-panel>
183
+
184
+ <v-expansion-panel color="primary">
185
+ <v-expansion-panel-title>
186
+ <v-icon class="mr-2">mdi-car</v-icon>
187
+ Resident Visitors
188
+ </v-expansion-panel-title>
189
+ <v-expansion-panel-text>
190
+ <OvernightParkingAvailability :site="siteId" />
191
+ </v-expansion-panel-text>
192
+ </v-expansion-panel>
193
+ </v-expansion-panels>
194
+
195
+ <Snackbar v-model="toast.show" :text="toast.message" :color="toast.color" />
196
+ </v-row>
141
197
  </template>
142
198
 
143
199
  <script setup lang="ts">
144
200
  const props = defineProps({
145
- siteId: { type: String, required: true },
146
- canManageSiteSettings: { type: Boolean, default: false }
147
- })
201
+ siteId: { type: String, required: true },
202
+ canManageSiteSettings: { type: Boolean, default: false },
203
+ });
148
204
 
149
- const openPanels = ref([0]) // default open first
205
+ const openPanels = ref([0]); // default open first
150
206
 
151
- const { getSiteById, updateSitebyId } = useSiteSettings()
152
- const { requiredRule } = useUtils()
153
- const { getFileUrl } = useFile()
154
- const { getWorkOrderSettings, createWorkOrderSettings } = useWorkOrder()
207
+ const { getSiteById, updateSitebyId } = useSiteSettings();
208
+ const { requiredRule } = useUtils();
209
+ const { getFileUrl } = useFile();
210
+ const { getWorkOrderSettings, createWorkOrderSettings } = useWorkOrder();
155
211
 
156
- const blocks = ref(0)
157
- const guardPosts = ref(0)
158
- const gracePeriod = ref(0)
212
+ const blocks = ref(0);
213
+ const guardPosts = ref(0);
214
+ const gracePeriod = ref(0);
159
215
 
160
- const existingBlockNumber = ref(0)
161
- const existingGuardPostNumber = ref(0)
162
- const existingGracePeriodNumber = ref(0)
216
+ const existingBlockNumber = ref(0);
217
+ const existingGuardPostNumber = ref(0);
218
+ const existingGracePeriodNumber = ref(0);
163
219
 
164
- const gracePeriodValid = ref(false)
165
- const gracePeriodLoading = ref(false)
166
- const deliveryCompanies = ref<string[]>([])
220
+ const gracePeriodValid = ref(false);
221
+ const gracePeriodLoading = ref(false);
222
+ const deliveryCompanies = ref<string[]>([]);
167
223
 
168
- const siteLogo = ref<any[]>([])
169
- const uploadedSiteLogo = ref("")
224
+ const siteLogo = ref<any[]>([]);
225
+ const uploadedSiteLogo = ref("");
170
226
 
171
- const prefix = ref("")
172
- const noOfDigits = ref(1)
173
- const isLoading = ref(false)
227
+ const prefix = ref("");
228
+ const noOfDigits = ref(1);
229
+ const isLoading = ref(false);
174
230
 
175
231
  const toast = reactive({
176
- show: false,
177
- message: "",
178
- color: ""
179
- })
232
+ show: false,
233
+ message: "",
234
+ color: "",
235
+ });
180
236
 
181
237
  const { data: siteData, refresh: refreshSiteData } = await useLazyAsyncData(
182
- `site-${props.siteId}`,
183
- () => getSiteById(props.siteId)
184
- )
185
-
186
- watch(siteData, (val: TSite) => {
187
- if (!val) return
188
-
189
- blocks.value = val.metadata?.block || 0
190
- guardPosts.value = val.metadata?.guardPosts || 0
191
- gracePeriod.value = val.metadata?.gracePeriod || 0
192
-
193
- existingBlockNumber.value = blocks.value
194
- existingGuardPostNumber.value = guardPosts.value
195
- existingGracePeriodNumber.value = gracePeriod.value
196
- deliveryCompanies.value = Array.isArray(val.deliveryCompanyList) ? [...val.deliveryCompanyList] : []
197
-
198
- uploadedSiteLogo.value = val.metadata?.incidentLogo || ""
199
- }, { immediate: true })
238
+ `site-${props.siteId}`,
239
+ () => getSiteById(props.siteId)
240
+ );
241
+
242
+ watch(
243
+ siteData,
244
+ (val: TSite) => {
245
+ if (!val) return;
246
+
247
+ blocks.value = val.metadata?.block || 0;
248
+ guardPosts.value = val.metadata?.guardPosts || 0;
249
+ gracePeriod.value = val.metadata?.gracePeriod || 0;
250
+
251
+ existingBlockNumber.value = blocks.value;
252
+ existingGuardPostNumber.value = guardPosts.value;
253
+ existingGracePeriodNumber.value = gracePeriod.value;
254
+ deliveryCompanies.value = Array.isArray(val.deliveryCompanyList)
255
+ ? [...val.deliveryCompanyList]
256
+ : [];
257
+
258
+ uploadedSiteLogo.value = val.metadata?.incidentLogo || "";
259
+ },
260
+ { immediate: true }
261
+ );
200
262
 
201
263
  async function handleSaveGracePeriod() {
202
- gracePeriodLoading.value = true
203
- try {
204
- await updateSitebyId(props.siteId, {
205
- field: "metadata.gracePeriod",
206
- value: gracePeriod.value
207
- })
208
- show("Grace period updated", "success")
209
- refreshSiteData()
210
- } catch (e: any) {
211
- show(e?.data?.message || "Error updating grace period", "error")
212
- } finally {
213
- gracePeriodLoading.value = false
214
- }
264
+ gracePeriodLoading.value = true;
265
+ try {
266
+ await updateSitebyId(props.siteId, {
267
+ field: "metadata.gracePeriod",
268
+ value: gracePeriod.value,
269
+ });
270
+ show("Grace period updated", "success");
271
+ refreshSiteData();
272
+ } catch (e: any) {
273
+ show(e?.data?.message || "Error updating grace period", "error");
274
+ } finally {
275
+ gracePeriodLoading.value = false;
276
+ }
215
277
  }
216
278
 
217
279
  async function handleLogo(action: string) {
218
- try {
219
- await updateSitebyId(props.siteId, {
220
- field: "metadata.incidentLogo",
221
- value: action === "add" ? siteLogo.value[0] : 0
222
- })
223
- show("Logo updated", "success")
224
- refreshSiteData()
225
- } catch {
226
- show("Error updating logo", "error")
227
- } finally {
228
- siteLogo.value = []
229
- }
280
+ try {
281
+ await updateSitebyId(props.siteId, {
282
+ field: "metadata.incidentLogo",
283
+ value: action === "add" ? siteLogo.value[0] : 0,
284
+ });
285
+ show("Logo updated", "success");
286
+ refreshSiteData();
287
+ } catch {
288
+ show("Error updating logo", "error");
289
+ } finally {
290
+ siteLogo.value = [];
291
+ }
230
292
  }
231
293
 
232
294
  const onUploadedLogoPreview = () => {
233
- if (!uploadedSiteLogo.value) return ""
234
- return getFileUrl(uploadedSiteLogo.value)
235
- }
295
+ if (!uploadedSiteLogo.value) return "";
296
+ return getFileUrl(uploadedSiteLogo.value);
297
+ };
236
298
 
237
299
  const { data: workOrderSetting } = await useLazyAsyncData(
238
- `work-${props.siteId}`,
239
- () => getWorkOrderSettings({ site: props.siteId, service: "Security" })
240
- )
300
+ `work-${props.siteId}`,
301
+ () => getWorkOrderSettings({ site: props.siteId, service: "Security" })
302
+ );
241
303
 
242
304
  watchEffect(() => {
243
- if (workOrderSetting.value) {
244
- prefix.value = workOrderSetting.value.prefix
245
- noOfDigits.value = workOrderSetting.value.noOfDigits
246
- }
247
- })
305
+ if (workOrderSetting.value) {
306
+ prefix.value = workOrderSetting.value.prefix;
307
+ noOfDigits.value = workOrderSetting.value.noOfDigits;
308
+ }
309
+ });
248
310
 
249
311
  function handleInput(e: any) {
250
- prefix.value = e.target.value
251
- .replace(/[^A-Z]/g, "")
252
- .toUpperCase()
312
+ prefix.value = e.target.value.replace(/[^A-Z]/g, "").toUpperCase();
253
313
  }
254
314
 
255
315
  function handleUpdateCompanies(value: string[]) {
256
- deliveryCompanies.value = value
316
+ deliveryCompanies.value = value;
257
317
  }
258
318
 
259
319
  const orderNumberPreview = computed(() => {
260
- return `${prefix.value}${"0".repeat(noOfDigits.value - 1)}1`
261
- })
320
+ return `${prefix.value}${"0".repeat(noOfDigits.value - 1)}1`;
321
+ });
262
322
 
263
323
  async function save() {
264
- try {
265
- isLoading.value = true
266
- await createWorkOrderSettings({
267
- site: props.siteId,
268
- service: "Security",
269
- prefix: prefix.value,
270
- noOfDigits: noOfDigits.value
271
- })
272
- show("Saved successfully", "success")
273
- } catch {
274
- show("Error saving", "error")
275
- } finally {
276
- isLoading.value = false
277
- }
324
+ try {
325
+ isLoading.value = true;
326
+ await createWorkOrderSettings({
327
+ site: props.siteId,
328
+ service: "Security",
329
+ prefix: prefix.value,
330
+ noOfDigits: noOfDigits.value,
331
+ });
332
+ show("Saved successfully", "success");
333
+ } catch {
334
+ show("Error saving", "error");
335
+ } finally {
336
+ isLoading.value = false;
337
+ }
278
338
  }
279
339
 
280
340
  function show(message: string, color: string) {
281
- toast.show = true
282
- toast.message = message
283
- toast.color = color
341
+ toast.show = true;
342
+ toast.message = message;
343
+ toast.color = color;
284
344
  }
285
- </script>
345
+ </script>