@7365admin1/layer-common 1.11.19 → 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.
- package/CHANGELOG.md +12 -0
- package/components/AddPassKeyToVisitor.vue +114 -53
- package/components/AreaChecklistHistoryMain.vue +29 -1
- package/components/BulletinBoardView.vue +158 -16
- package/components/CleaningScheduleMain.vue +2 -2
- package/components/Input/DateTimePicker.vue +45 -9
- package/components/OvernightParkingAvailability.vue +291 -155
- package/components/ScanVisitorQRCode.vue +157 -0
- package/components/ScheduleAreaMain.vue +6 -6
- package/components/SiteSettings.vue +303 -243
- package/components/TableMain.vue +72 -21
- package/components/VisitorManagement.vue +656 -234
- package/composables/useFeedback.ts +1 -1
- package/composables/useOrg.ts +16 -0
- package/composables/useSiteSettings.ts +30 -1
- package/package.json +1 -1
- package/plugins/html5-qrcode.client.js +8 -0
- package/types/overnight-parking.d.ts +3 -2
|
@@ -1,285 +1,345 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
</v-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|
-
|
|
146
|
-
|
|
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
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
})
|
|
232
|
+
show: false,
|
|
233
|
+
message: "",
|
|
234
|
+
color: "",
|
|
235
|
+
});
|
|
180
236
|
|
|
181
237
|
const { data: siteData, refresh: refreshSiteData } = await useLazyAsyncData(
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
)
|
|
185
|
-
|
|
186
|
-
watch(
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
295
|
+
if (!uploadedSiteLogo.value) return "";
|
|
296
|
+
return getFileUrl(uploadedSiteLogo.value);
|
|
297
|
+
};
|
|
236
298
|
|
|
237
299
|
const { data: workOrderSetting } = await useLazyAsyncData(
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
)
|
|
300
|
+
`work-${props.siteId}`,
|
|
301
|
+
() => getWorkOrderSettings({ site: props.siteId, service: "Security" })
|
|
302
|
+
);
|
|
241
303
|
|
|
242
304
|
watchEffect(() => {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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
|
-
|
|
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
|
-
|
|
316
|
+
deliveryCompanies.value = value;
|
|
257
317
|
}
|
|
258
318
|
|
|
259
319
|
const orderNumberPreview = computed(() => {
|
|
260
|
-
|
|
261
|
-
})
|
|
320
|
+
return `${prefix.value}${"0".repeat(noOfDigits.value - 1)}1`;
|
|
321
|
+
});
|
|
262
322
|
|
|
263
323
|
async function save() {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
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
|
-
|
|
282
|
-
|
|
283
|
-
|
|
341
|
+
toast.show = true;
|
|
342
|
+
toast.message = message;
|
|
343
|
+
toast.color = color;
|
|
284
344
|
}
|
|
285
|
-
</script>
|
|
345
|
+
</script>
|