@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 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
- <NuxtLink
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 bg-gray-100 px-2.5 py-[15px]"
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">{{ app.label }}</div>
41
- <div class="text-sm text-gray-500">{{ app.description }}</div>
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
- </NuxtLink>
57
+ </component>
44
58
  </div>
45
59
 
46
60
  <div
@@ -51,22 +65,38 @@
51
65
  Finance
52
66
  </div>
53
67
 
54
- <NuxtLink
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 bg-gray-100 px-2.5 py-[15px]"
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">{{ app.label }}</div>
67
- <div class="text-sm text-gray-500">{{ app.description }}</div>
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
- </NuxtLink>
99
+ </component>
70
100
  </div>
71
101
 
72
102
  <div
@@ -77,22 +107,36 @@
77
107
  People
78
108
  </div>
79
109
 
80
- <NuxtLink
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 bg-gray-100 px-2.5 py-[15px]"
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">{{ app.label }}</div>
93
- <div class="text-sm text-gray-500">{{ app.description }}</div>
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
- </NuxtLink>
139
+ </component>
96
140
  </div>
97
141
 
98
142
  <div
@@ -103,32 +147,53 @@
103
147
  Legal
104
148
  </div>
105
149
 
106
- <NuxtLink
107
- v-for="app in legalApps"
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 bg-gray-100 px-2.5 py-[15px]"
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">{{ app.label }}</div>
119
- <div class="text-sm text-gray-500">{{ app.description }}</div>
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
- </NuxtLink>
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
- // ...(auth.hasPermission(UserModule.REQUEST, Permission.USER)
151
- // ? [
152
- // {
153
- // name: 'request',
154
- // logo: '/admin/request-admin.png',
155
- // label: 'Requests',
156
- // description: 'จัดการคำขอ',
157
- // to: '',
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
- // ...(auth.hasPermission(UserModule.EFACTORING, Permission.USER)
200
- // ? [
201
- // {
202
- // name: 'eFactoring',
203
- // logo: '/admin/efactoring.png',
204
- // label: 'eFactoring',
205
- // description: 'การเบิกเงินหมุนเวียนกับธนาคาร',
206
- // to: routes.costSheet.overview.to,
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
- // ...(auth.hasPermission(UserModule.COSTSHEET, Permission.USER)
222
- // ? [
223
- // {
224
- // name: 'Guarantee',
225
- // logo: '/admin/cost-sheet.png',
226
- // label: 'งบค้ำประกัน',
227
- // description: 'การเบิกเงินค้ำซองและค้ำสัญญากับธนาคาร',
228
- // to: routes.costSheet.overview.to,
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
  : []),
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@finema/finework-layer",
3
3
  "type": "module",
4
- "version": "0.2.87",
4
+ "version": "0.2.89",
5
5
  "main": "./nuxt.config.ts",
6
6
  "scripts": {
7
7
  "dev": "nuxi dev .playground -o",