@finema/finework-layer 0.2.87 → 0.2.89
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/app/components/PortalApp.vue +151 -58
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.89](https://gitlab.finema.co/finema/finework/finework-frontend-layer/compare/0.2.88...0.2.89) (2025-12-17)
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* update app link rendering based on status ([bfab126](https://gitlab.finema.co/finema/finework/finework-frontend-layer/commit/bfab126f3c552613ebbde82ed93f65b6a3419da0))
|
|
8
|
+
|
|
9
|
+
## [0.2.88](https://gitlab.finema.co/finema/finework/finework-frontend-layer/compare/0.2.87...0.2.88) (2025-12-17)
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* portalapp ([f267603](https://gitlab.finema.co/finema/finework/finework-frontend-layer/commit/f2676038b1aaf443ff5111cacfbf2e348e3f98eb))
|
|
14
|
+
|
|
3
15
|
## [0.2.87](https://gitlab.finema.co/finema/finework/finework-frontend-layer/compare/0.2.86...0.2.87) (2025-12-17)
|
|
4
16
|
|
|
5
17
|
## [0.2.86](https://gitlab.finema.co/finema/finework/finework-frontend-layer/compare/0.2.85...0.2.86) (2025-12-16)
|
|
@@ -25,22 +25,36 @@
|
|
|
25
25
|
Management
|
|
26
26
|
</div>
|
|
27
27
|
|
|
28
|
-
<
|
|
28
|
+
<component
|
|
29
|
+
:is="app.status === StatusPortal.DEVELOPING ? 'div' : NuxtLink"
|
|
29
30
|
v-for="app in managementApps"
|
|
30
31
|
:key="app.name"
|
|
31
|
-
:to="app.to"
|
|
32
|
-
class="flex items-center gap-3 rounded-lg
|
|
32
|
+
:to="app.status !== StatusPortal.DEVELOPING ? app.to : undefined"
|
|
33
|
+
class="relative flex items-center gap-3 rounded-lg px-2.5 py-[15px]"
|
|
34
|
+
:class="app.status === StatusPortal.DEVELOPING
|
|
35
|
+
? 'cursor-not-allowed bg-gray-200 opacity-60'
|
|
36
|
+
: 'bg-gray-100 hover:bg-gray-200'"
|
|
33
37
|
>
|
|
38
|
+
<div
|
|
39
|
+
v-if="app.status === StatusPortal.DEVELOPING"
|
|
40
|
+
class="absolute top-2 right-2 rounded-full bg-orange-100 px-2 py-0.5 text-xs font-semibold text-orange-600"
|
|
41
|
+
>
|
|
42
|
+
กำลังพัฒนา
|
|
43
|
+
</div>
|
|
34
44
|
<img
|
|
35
45
|
:src="app.logo"
|
|
36
46
|
:alt="app.label"
|
|
37
47
|
class="h-[45px] w-[45px] rounded-sm bg-white"
|
|
38
48
|
/>
|
|
39
49
|
<div>
|
|
40
|
-
<div class="text-lg font-bold">
|
|
41
|
-
|
|
50
|
+
<div class="text-lg font-bold">
|
|
51
|
+
{{ app.label }}
|
|
52
|
+
</div>
|
|
53
|
+
<div class="text-sm text-gray-500">
|
|
54
|
+
{{ app.description }}
|
|
55
|
+
</div>
|
|
42
56
|
</div>
|
|
43
|
-
</
|
|
57
|
+
</component>
|
|
44
58
|
</div>
|
|
45
59
|
|
|
46
60
|
<div
|
|
@@ -51,22 +65,38 @@
|
|
|
51
65
|
Finance
|
|
52
66
|
</div>
|
|
53
67
|
|
|
54
|
-
<
|
|
68
|
+
<component
|
|
69
|
+
:is="app.status === StatusPortal.DEVELOPING ? 'div' : NuxtLink"
|
|
55
70
|
v-for="app in financeApps"
|
|
56
71
|
:key="app.name"
|
|
57
|
-
:to="app.to"
|
|
58
|
-
class="flex items-center gap-3 rounded-lg
|
|
72
|
+
:to="app.status !== StatusPortal.DEVELOPING ? app.to : undefined"
|
|
73
|
+
class="relative flex items-center gap-3 rounded-lg px-2.5 py-[15px]"
|
|
74
|
+
:class="app.status === StatusPortal.DEVELOPING
|
|
75
|
+
? 'cursor-not-allowed bg-gray-200 opacity-60'
|
|
76
|
+
: 'bg-gray-100 hover:bg-gray-200'"
|
|
59
77
|
>
|
|
78
|
+
<div
|
|
79
|
+
v-if="app.status === StatusPortal.DEVELOPING"
|
|
80
|
+
class="absolute top-2 right-2 rounded-full bg-orange-100 px-2 py-0.5 text-xs font-semibold text-orange-600"
|
|
81
|
+
>
|
|
82
|
+
กำลังพัฒนา
|
|
83
|
+
</div>
|
|
84
|
+
|
|
60
85
|
<img
|
|
61
86
|
:src="app.logo"
|
|
62
87
|
:alt="app.label"
|
|
63
88
|
class="h-[45px] w-[45px] rounded-sm bg-white"
|
|
64
89
|
/>
|
|
90
|
+
|
|
65
91
|
<div>
|
|
66
|
-
<div class="text-lg font-bold">
|
|
67
|
-
|
|
92
|
+
<div class="text-lg font-bold">
|
|
93
|
+
{{ app.label }}
|
|
94
|
+
</div>
|
|
95
|
+
<div class="text-sm text-gray-500">
|
|
96
|
+
{{ app.description }}
|
|
97
|
+
</div>
|
|
68
98
|
</div>
|
|
69
|
-
</
|
|
99
|
+
</component>
|
|
70
100
|
</div>
|
|
71
101
|
|
|
72
102
|
<div
|
|
@@ -77,22 +107,36 @@
|
|
|
77
107
|
People
|
|
78
108
|
</div>
|
|
79
109
|
|
|
80
|
-
<
|
|
110
|
+
<component
|
|
111
|
+
:is="app.status === StatusPortal.DEVELOPING ? 'div' : NuxtLink"
|
|
81
112
|
v-for="app in peopleApps"
|
|
82
113
|
:key="app.name"
|
|
83
|
-
:to="app.to"
|
|
84
|
-
class="flex items-center gap-3 rounded-lg
|
|
114
|
+
:to="app.status !== StatusPortal.DEVELOPING ? app.to : undefined"
|
|
115
|
+
class="relative flex items-center gap-3 rounded-lg px-2.5 py-[15px]"
|
|
116
|
+
:class="app.status === StatusPortal.DEVELOPING
|
|
117
|
+
? 'cursor-not-allowed bg-gray-200 opacity-60'
|
|
118
|
+
: 'bg-gray-100 hover:bg-gray-200'"
|
|
85
119
|
>
|
|
120
|
+
<div
|
|
121
|
+
v-if="app.status === StatusPortal.DEVELOPING"
|
|
122
|
+
class="absolute top-2 right-2 rounded-full bg-orange-100 px-2 py-0.5 text-xs font-semibold text-orange-600"
|
|
123
|
+
>
|
|
124
|
+
กำลังพัฒนา
|
|
125
|
+
</div>
|
|
86
126
|
<img
|
|
87
127
|
:src="app.logo"
|
|
88
128
|
:alt="app.label"
|
|
89
129
|
class="h-[45px] w-[45px] rounded-sm bg-white"
|
|
90
130
|
/>
|
|
91
131
|
<div>
|
|
92
|
-
<div class="text-lg font-bold">
|
|
93
|
-
|
|
132
|
+
<div class="text-lg font-bold">
|
|
133
|
+
{{ app.label }}
|
|
134
|
+
</div>
|
|
135
|
+
<div class="text-sm text-gray-500">
|
|
136
|
+
{{ app.description }}
|
|
137
|
+
</div>
|
|
94
138
|
</div>
|
|
95
|
-
</
|
|
139
|
+
</component>
|
|
96
140
|
</div>
|
|
97
141
|
|
|
98
142
|
<div
|
|
@@ -103,32 +147,53 @@
|
|
|
103
147
|
Legal
|
|
104
148
|
</div>
|
|
105
149
|
|
|
106
|
-
<
|
|
107
|
-
|
|
150
|
+
<component
|
|
151
|
+
:is="app.status === StatusPortal.DEVELOPING ? 'div' : NuxtLink"
|
|
152
|
+
v-for="app in peopleApps"
|
|
108
153
|
:key="app.name"
|
|
109
|
-
:to="app.to"
|
|
110
|
-
class="flex items-center gap-3 rounded-lg
|
|
154
|
+
:to="app.status !== StatusPortal.DEVELOPING ? app.to : undefined"
|
|
155
|
+
class="relative flex items-center gap-3 rounded-lg px-2.5 py-[15px]"
|
|
156
|
+
:class="app.status === StatusPortal.DEVELOPING
|
|
157
|
+
? 'cursor-not-allowed bg-gray-200 opacity-60'
|
|
158
|
+
: 'bg-gray-100 hover:bg-gray-200'"
|
|
111
159
|
>
|
|
160
|
+
<div
|
|
161
|
+
v-if="app.status === StatusPortal.DEVELOPING"
|
|
162
|
+
class="absolute top-2 right-2 rounded-full bg-orange-100 px-2 py-0.5 text-xs font-semibold text-orange-600"
|
|
163
|
+
>
|
|
164
|
+
กำลังพัฒนา
|
|
165
|
+
</div>
|
|
112
166
|
<img
|
|
113
167
|
:src="app.logo"
|
|
114
168
|
:alt="app.label"
|
|
115
169
|
class="h-[45px] w-[45px] rounded-sm bg-white"
|
|
116
170
|
/>
|
|
117
171
|
<div>
|
|
118
|
-
<div class="text-lg font-bold">
|
|
119
|
-
|
|
172
|
+
<div class="text-lg font-bold">
|
|
173
|
+
{{ app.label }}
|
|
174
|
+
</div>
|
|
175
|
+
<div class="text-sm text-gray-500">
|
|
176
|
+
{{ app.description }}
|
|
177
|
+
</div>
|
|
120
178
|
</div>
|
|
121
|
-
</
|
|
179
|
+
</component>
|
|
122
180
|
</div>
|
|
123
181
|
</div>
|
|
124
182
|
</div>
|
|
125
183
|
</template>
|
|
126
184
|
|
|
127
185
|
<script lang="ts" setup>
|
|
186
|
+
import { resolveComponent } from 'vue'
|
|
187
|
+
|
|
128
188
|
defineProps<{
|
|
129
189
|
isNavbar?: boolean
|
|
130
190
|
}>()
|
|
131
191
|
|
|
192
|
+
const enum StatusPortal {
|
|
193
|
+
ACTIVE = 'active',
|
|
194
|
+
DEVELOPING = 'developing',
|
|
195
|
+
}
|
|
196
|
+
const NuxtLink = resolveComponent('NuxtLink')
|
|
132
197
|
const auth = useAuth()
|
|
133
198
|
const managementApps = computed(() => [
|
|
134
199
|
...(auth.hasPermission(
|
|
@@ -144,20 +209,18 @@ const managementApps = computed(() => [
|
|
|
144
209
|
label: 'PMO',
|
|
145
210
|
description: 'จัดระเบียบและบริหารโครงการของคุณ',
|
|
146
211
|
to: routes.pmo.project.projects.to,
|
|
212
|
+
status: StatusPortal.ACTIVE,
|
|
147
213
|
},
|
|
148
214
|
]
|
|
149
215
|
: []),
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
// },
|
|
159
|
-
// ]
|
|
160
|
-
// : []),
|
|
216
|
+
{
|
|
217
|
+
name: 'Requests',
|
|
218
|
+
logo: '/admin/request-admin.png',
|
|
219
|
+
label: 'Requests',
|
|
220
|
+
description: 'จัดการคำขอ',
|
|
221
|
+
to: '/',
|
|
222
|
+
status: StatusPortal.DEVELOPING,
|
|
223
|
+
},
|
|
161
224
|
...(auth.hasPermission(UserModule.CHECKIN, Permission.ADMIN)
|
|
162
225
|
? [
|
|
163
226
|
{
|
|
@@ -166,6 +229,7 @@ const managementApps = computed(() => [
|
|
|
166
229
|
label: 'Clock-in Report',
|
|
167
230
|
description: 'รายงานการลงเวลา',
|
|
168
231
|
to: routes.adminClockin.checkinDashboard.to,
|
|
232
|
+
status: StatusPortal.ACTIVE,
|
|
169
233
|
},
|
|
170
234
|
]
|
|
171
235
|
: []),
|
|
@@ -178,6 +242,7 @@ const managementApps = computed(() => [
|
|
|
178
242
|
label: 'Timesheet Report',
|
|
179
243
|
description: 'รายงานการบันทึกข้อมูลไทม์ชีท',
|
|
180
244
|
to: routes.adminTimesheet.summaryReport.to,
|
|
245
|
+
status: StatusPortal.ACTIVE,
|
|
181
246
|
},
|
|
182
247
|
]
|
|
183
248
|
: []),
|
|
@@ -189,6 +254,7 @@ const managementApps = computed(() => [
|
|
|
189
254
|
label: 'TODO',
|
|
190
255
|
description: 'ระบบจัดการงานที่ต้องทำ',
|
|
191
256
|
to: routes.todo.dashboard.to,
|
|
257
|
+
status: StatusPortal.ACTIVE,
|
|
192
258
|
},
|
|
193
259
|
]
|
|
194
260
|
: []),
|
|
@@ -196,17 +262,16 @@ const managementApps = computed(() => [
|
|
|
196
262
|
])
|
|
197
263
|
|
|
198
264
|
const financeApps = computed(() => [
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
// : []),
|
|
265
|
+
|
|
266
|
+
{
|
|
267
|
+
name: 'eFactoring',
|
|
268
|
+
logo: '/admin/efactoring.png',
|
|
269
|
+
label: 'eFactoring',
|
|
270
|
+
description: 'การเบิกเงินหมุนเวียนกับธนาคาร',
|
|
271
|
+
to: '/',
|
|
272
|
+
status: StatusPortal.DEVELOPING,
|
|
273
|
+
},
|
|
274
|
+
|
|
210
275
|
...(auth.hasPermission(UserModule.COSTSHEET, Permission.USER, Permission.ADMIN)
|
|
211
276
|
? [
|
|
212
277
|
{
|
|
@@ -215,20 +280,20 @@ const financeApps = computed(() => [
|
|
|
215
280
|
label: 'Cost Sheet',
|
|
216
281
|
description: 'รายรับรายจ่ายงบประมาณโครงการ',
|
|
217
282
|
to: routes.costSheet.overview.to,
|
|
283
|
+
status: StatusPortal.ACTIVE,
|
|
218
284
|
},
|
|
219
285
|
]
|
|
220
286
|
: []),
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
// : []),
|
|
287
|
+
|
|
288
|
+
{
|
|
289
|
+
name: 'Guarantee',
|
|
290
|
+
logo: '/admin/cost-sheet.png',
|
|
291
|
+
label: 'งบค้ำประกัน',
|
|
292
|
+
description: 'การเบิกเงินค้ำซองและค้ำสัญญากับธนาคาร',
|
|
293
|
+
to: '/',
|
|
294
|
+
status: StatusPortal.DEVELOPING,
|
|
295
|
+
},
|
|
296
|
+
|
|
232
297
|
...(auth.hasPermission(UserModule.QUOTATION, Permission.USER, Permission.ADMIN)
|
|
233
298
|
? [
|
|
234
299
|
{
|
|
@@ -237,6 +302,7 @@ const financeApps = computed(() => [
|
|
|
237
302
|
label: 'Quotation',
|
|
238
303
|
description: 'รายรับรายจ่ายงบประมาณโครงการ',
|
|
239
304
|
to: routes.quotation.quotations.home.to,
|
|
305
|
+
status: StatusPortal.ACTIVE,
|
|
240
306
|
},
|
|
241
307
|
]
|
|
242
308
|
: []),
|
|
@@ -251,6 +317,7 @@ const peopleApps = computed(() => [
|
|
|
251
317
|
label: 'Employee',
|
|
252
318
|
description: 'ระบบจัดการข้อมูลพนักงาน',
|
|
253
319
|
to: routes.employee.root.to,
|
|
320
|
+
status: StatusPortal.ACTIVE,
|
|
254
321
|
},
|
|
255
322
|
]
|
|
256
323
|
: []),
|
|
@@ -262,9 +329,34 @@ const peopleApps = computed(() => [
|
|
|
262
329
|
label: 'Newsletter',
|
|
263
330
|
description: 'ระบบจัดการข่าวสาร',
|
|
264
331
|
to: routes.newsletter.announcement.announcements.to,
|
|
332
|
+
status: StatusPortal.ACTIVE,
|
|
265
333
|
},
|
|
266
334
|
]
|
|
267
335
|
: []),
|
|
336
|
+
{
|
|
337
|
+
name: 'Evaluation',
|
|
338
|
+
logo: '/admin/evaluation.png',
|
|
339
|
+
label: 'Evaluation',
|
|
340
|
+
description: 'ระบบจัดการการประเมิน',
|
|
341
|
+
to: '/',
|
|
342
|
+
status: StatusPortal.DEVELOPING,
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
name: 'Recruit',
|
|
346
|
+
logo: '/admin/recruit.png',
|
|
347
|
+
label: 'Recruit',
|
|
348
|
+
description: 'ระบบการสรรหาบุคลากร',
|
|
349
|
+
to: '/',
|
|
350
|
+
status: StatusPortal.DEVELOPING,
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
name: 'Assets',
|
|
354
|
+
logo: '/admin/assets.png',
|
|
355
|
+
label: 'Assets',
|
|
356
|
+
description: 'ระบบจัดการสินทรัพย์',
|
|
357
|
+
to: '/',
|
|
358
|
+
status: StatusPortal.DEVELOPING,
|
|
359
|
+
},
|
|
268
360
|
])
|
|
269
361
|
|
|
270
362
|
const legalApps = computed(() => [
|
|
@@ -276,6 +368,7 @@ const legalApps = computed(() => [
|
|
|
276
368
|
label: 'Contract',
|
|
277
369
|
description: 'สร้างและจัดการสัญญา',
|
|
278
370
|
to: routes.legal.dashboard.to,
|
|
371
|
+
status: StatusPortal.ACTIVE,
|
|
279
372
|
},
|
|
280
373
|
]
|
|
281
374
|
: []),
|