jobdone-shared-files 1.0.13 → 1.0.16

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.
Files changed (32) hide show
  1. package/ProjectManagement/projectNavbar.vue +363 -363
  2. package/autocompleteSelect.vue +461 -461
  3. package/common/directives/collapse.js +12 -12
  4. package/common/directives/popovers.js +10 -10
  5. package/common/directives/selectPlaceholder.js +52 -52
  6. package/common/directives/textareaAutoHeight.js +10 -10
  7. package/common/directives/tooltip.js +10 -10
  8. package/common/format.js +26 -26
  9. package/index.js +14 -14
  10. package/lightboxWithOverview.vue +156 -156
  11. package/package.json +19 -19
  12. package/paginate.vue +141 -141
  13. package/style/css/vue-loading-overlay/index.css +40 -40
  14. package/style/scss/Common/Animation.scss +9 -9
  15. package/style/scss/Common/SelectableTable.scss +34 -34
  16. package/style/scss/Common/filepond.scss +31 -31
  17. package/style/scss/Common/thumbnail-group.scss +14 -14
  18. package/style/scss/Layout/LayoutBase.scss +1031 -1031
  19. package/style/scss/Layout/LayoutMobile.scss +206 -206
  20. package/style/scss/Layout/LayoutProject.scss +126 -126
  21. package/style/scss/Layout/LayoutSinglePage.scss +17 -17
  22. package/style/scss/Layout/LayoutTwoColumn.scss +60 -60
  23. package/style/scss/Settings/_Mixins.scss +232 -232
  24. package/style/scss/Settings/_MobileVariables.scss +11 -11
  25. package/style/scss/Settings/_bs-variables-dark.scss +70 -70
  26. package/style/scss/Settings/_bs-variables.scss +1743 -1743
  27. package/style/scss/Settings/_color-mode.scss +122 -122
  28. package/style/scss/Settings/_custom-variables.scss +10 -10
  29. package/tagEditor.vue +249 -249
  30. package/tree.vue +68 -69
  31. package/treeItem.vue +355 -371
  32. package/vueLoadingOverlay.vue +74 -74
@@ -1,364 +1,364 @@
1
- <template>
2
- <div class="bg-gray-000 sticky-top d-print-none">
3
- <nav class="navbar navbar-main navbar-expand-lg border-bottoms py-0" data-bs-theme="dark">
4
- <div class="navbar-placeholder-content px-4 placeholder-glow">
5
- <span class="placeholder w-1rem"></span>
6
- <span class="placeholder w-20rem"></span>
7
- <span class="placeholder w-5rem"></span>
8
- <span class="placeholder w-5rem"></span>
9
- <span class="placeholder w-5rem"></span>
10
- </div>
11
- <div class="navbar-content opacity-0 d-flex align-items-center flex-fill w-100">
12
- <div class="border-end">
13
- <a :href="arrowBackLink" class="btn btn-normal btn-square" title="離開專案"><span class="material-icons">home</span></a>
14
- </div>
15
- <span class="fs-6 mb-0 mx-4 text-nowrap text-project-title text-overflow"><b class="">{{projectInfo?.name}}</b></span>
16
- <!--TODO: 解決 overflow scroll 與 dropdown 衝突-->
17
- <div class="flex-grow-1 text-nowrap">
18
- <div class="d-flex flex-grow-1 border-start">
19
- <nav class="navbar-nav navbar-main navbar-tab navbar-line navbar-line-lg">
20
- <div class="nav-item navbar-line-item btn nav-link border-0 dropdown"
21
- :class="{'active': isActive(null)}">
22
- <a class="dropdown-link" :href="finalRootDomain + '/ProjectManagement/ProjectInfo?id=' + projectId">
23
- 專案資訊
24
- </a>
25
- </div>
26
- <div class="nav-item navbar-line-item btn nav-link border-0 dropdown"
27
- :class="{'active': isActive(navLinkObj.moduleLink)}">
28
- <!-- NOTE 自己的獨立AP 沒有list,目前因為隕石已被GeneralLink取代 -->
29
- <a :href="navLinkObj.url + projectId" class="dropdown-link" v-if="navLinkObj?.moduleLink?.selfIsApp">
30
- <span class="material-icons icon-18 me-2">{{ navLinkObj?.moduleLink?.icon }}</span>
31
- {{ navLinkObj?.moduleLink?.name }}
32
- </a>
33
- <span class="dropdown-link dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false" v-else>
34
- <span class="material-icons icon-18 icon-shine me-1">{{ navLinkObj?.moduleLink?.icon }}</span>
35
- 功能選單
36
- </span>
37
- <ul class="dropdown-menu" :class="{'p-0': navLinkObj?.moduleLink?.apps?.length == 0}">
38
- <li v-if="navLinkObj?.moduleLink?.apps?.length > 0">
39
- <a class="dropdown-item" :href="app.url + '?projectId=' + projectId" v-for="(app, index) in navLinkObj.moduleLink.apps" :key="index">
40
- <span class="material-icons icon-18 align-middle me-2">{{app.icon}}</span>
41
- <span class="align-middle">{{app.name}}</span>
42
- </a>
43
- </li>
44
- </ul>
45
- </div>
46
- <div class="nav-item navbar-line-item btn nav-link border-0 dropdown"
47
- :class="{'active': isActive(item.id)}"
48
- v-for="item in navLinkObj.generalLink">
49
- <a :href="item.url + '?projectId=' + projectId" class="dropdown-link">
50
- <span class="material-icons icon-18 me-2">{{item.icon}}</span>
51
- {{item.name}}
52
- </a>
53
- </div>
54
- </nav>
55
- <nav class="navbar-nav navbar-main navbar-line navbar-line-lg ms-auto">
56
- <div class="nav-item navbar-line-item btn nav-link border-0">
57
- <a href="https://docs.jobdone.cc/" target="_blank">
58
- <span class="align-middle">使用指南</span>
59
- <span class="material-icons icon-18 align-middle icon-help ms-1">help</span>
60
- </a>
61
- </div>
62
- <div class="nav-item navbar-line-item btn nav-link border-0 dropdown">
63
- <span class="dropdown-link dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
64
- <div class="thumbnail-content thumbnail-32 rounded-circle me-2" :style="'background-image: url(' + userPicture + ');'"></div>
65
- {{userId}}
66
- </span>
67
- <ul class="dropdown-menu dropdown-menu-end">
68
- <li>
69
- <a class="dropdown-item" :href="finalRootDomain + '/Profile'">個人資訊</a>
70
- </li>
71
- <li><hr class="dropdown-divider"></li>
72
- <li>
73
- <a class="dropdown-item" :href="logOutLink">登出</a>
74
- </li>
75
- </ul>
76
- </div>
77
- </nav>
78
- </div>
79
- </div>
80
- </div>
81
- </nav>
82
- <div class="info-project bg-primary bg-opacity-25 border-top border-bottom border-primary border-opacity-25 py-2">
83
- <div class="navbar-placeholder-content px-5 placeholder-glow">
84
- <span class="placeholder placeholder-xs w-10rem ms-4"></span>
85
- <span class="placeholder placeholder-xs w-12rem"></span>
86
- <span class="placeholder placeholder-xs w-6rem"></span>
87
- </div>
88
- <div class="navbar-content opacity-0 d-flex align-items-center">
89
- <span class="badge badge-outline-purple me-3">{{ navLinkObj?.moduleLink?.name }}</span>
90
- <small class="d-flex me-4" v-if="projectInfo?.caseNo">
91
- <b class="me-2">案號</b>
92
- <span>{{projectInfo?.caseNo}}</span>
93
- </small>
94
- <small class="d-flex me-4">
95
- <b class="me-2">開工/完工日期</b>
96
- <span>{{formatDate(projectInfo?.beginDT)}} - {{formatDate(projectInfo?.endDT)}}</span>
97
- </small>
98
- <small class="d-flex me-4">
99
- <b class="me-2">核定工期</b>
100
- <span>{{projectInfo?.approvedWorkingPeriod}}天</span>
101
- </small>
102
- <small class="d-flex" v-if="projectInfo?.extendToDT">
103
- <b class="me-2">展延至</b>
104
- <span>{{ formatDate(projectInfo?.extendToDT) }} ({{projectInfo?.extendDays}}天)</span>
105
- </small>
106
- <small class="d-flex ms-auto">
107
- <slot></slot>
108
- </small>
109
- </div>
110
- </div>
111
- </div>
112
- </template>
113
-
114
- <script>
115
- import { formatDate } from '../../../node_modules/jobdone-shared-files/common/format';
116
- import { onMounted, ref, computed, nextTick } from 'vue';
117
- import axios from 'axios';
118
- import '../../bootstrap/js/dist/dropdown.js';
119
-
120
- export default {
121
- props: {
122
- arrowBackLink: {
123
- type: String,
124
- required: true
125
- },
126
- projectId: {
127
- type: String,
128
- required: true
129
- },
130
- projectInfo: {
131
- type: [String, Object],
132
- required: true
133
- },
134
- projectApps: {
135
- type: [String, Object],
136
- required: true
137
- },
138
- activeClientId: {
139
- type: String,
140
- required: false,
141
- },
142
- rootDomain: {
143
- type: String,
144
- required: true
145
- },
146
- userId: {
147
- type: String,
148
- required: true
149
- },
150
- userPicture: {
151
- type: String,
152
- required: true
153
- },
154
- logOutLink: {
155
- type: String,
156
- required: true
157
- }
158
- },
159
- setup(props) {
160
- const projectInfo = ref({});
161
- const navLinkObj = ref({});
162
- const finalRootDomain = computed(() => {
163
- if (props.rootDomain.substr(-1) === "/") {
164
- return props.rootDomain.slice(0, -1);
165
- }
166
- return props.rootDomain;
167
- });
168
-
169
- const isActive = (target) => {
170
- if (target === null) {
171
- // 專案資訊
172
- return target === null && !props.activeClientId;
173
- }
174
- if (typeof target === 'object') {
175
- // 功能選單
176
- return !!props.activeClientId && (target.clientId === props.activeClientId || target.apps.some(x => x.clientId == props.activeClientId))
177
- }
178
- if (!!props.activeClientId && target == props.activeClientId) {
179
- // 功能選單
180
- return true;
181
- }
182
- return false;
183
- }
184
-
185
- onMounted(async () => {
186
- try {
187
- switch (typeof props.projectInfo) {
188
- case 'string':
189
- axios.get(props.projectInfo).then((res) => {
190
- projectInfo.value = res.data;
191
- });
192
- break;
193
- case 'object':
194
- projectInfo.value = props.projectInfo;
195
- break;
196
- default:
197
- projectInfo.value = {
198
- caseNo: '',
199
- name: '',
200
- beginDT: '',
201
- endDT: '',
202
- approvedWorkingPeriod: '',
203
- extendToDT: '',
204
- extendDays: ''
205
- };
206
- break;
207
- }
208
- } catch (e) {
209
- projectInfo.value = {
210
- caseNo: '',
211
- name: '',
212
- beginDT: '',
213
- endDT: '',
214
- approvedWorkingPeriod: '',
215
- extendToDT: '',
216
- extendDays: ''
217
- };
218
- }
219
- try {
220
- switch (typeof props.projectApps) {
221
- case 'string':
222
- axios.get(props.projectApps).then((res) => {
223
- navLinkObj.value = res.data;
224
- });
225
- break;
226
- case 'object':
227
- navLinkObj.value = props.projectApps;
228
- break;
229
- default:
230
- navLinkObj.value = {
231
- "moduleLink": {
232
- "apps": [],
233
- "icon": "edit_document",
234
- "name": "Module",
235
- "url": "",
236
- "mobileUrl": "",
237
- "mobileAppRoute": "",
238
- "clientId": null,
239
- "selfIsApp": false
240
- },
241
- "generalLink": []
242
- }
243
- break;
244
- }
245
- } catch (e) {
246
- navLinkObj.value = {
247
- "moduleLink": {
248
- "apps": [],
249
- "icon": "edit_document",
250
- "name": "Module",
251
- "url": "",
252
- "mobileUrl": "",
253
- "mobileAppRoute": "",
254
- "clientId": null,
255
- "selfIsApp": false
256
- },
257
- "generalLink": []
258
- }
259
- }
260
-
261
-
262
- nextTick(() => {
263
- let navbarElements = document.getElementsByClassName('navbar-content');
264
- Array.from(navbarElements).forEach(function (item) {
265
- item.classList.remove("opacity-0");
266
- });
267
-
268
- let placeholderElements = document.getElementsByClassName('navbar-placeholder-content');
269
- Array.from(placeholderElements).forEach(function (item) {
270
- item.classList.add("opacity-0");
271
- });
272
- });
273
- });
274
-
275
-
276
- return {
277
- formatDate,
278
- projectInfo,
279
- navLinkObj,
280
- finalRootDomain,
281
- isActive
282
- }
283
- }
284
- }
285
- </script>
286
-
287
- <style scoped lang="scss">
288
- @import "../../bootstrap/scss/functions";
289
- @import "../../bootstrap/scss/mixins";
290
- @import "../style/scss/Settings/bs-variables";
291
- @import "../style/scss/Settings/Mixins";
292
-
293
- .navbar-content{
294
- transition: .5s;
295
- }
296
-
297
- .navbar-placeholder-content{
298
- @include position-center();
299
- display: flex;
300
- align-items: center;
301
- gap: 1rem;
302
- mix-blend-mode: color-burn;
303
- pointer-events: none;
304
- }
305
-
306
- .text-project-title {
307
- color: var(--dark-theme-primary);
308
- }
309
-
310
- .navbar[data-bs-theme="dark"] {
311
- --bs-body-color: var(--gray-500);
312
- color: var(--bs-body-color);
313
- }
314
-
315
- .navbar-main {
316
- .navbar-line-item {
317
- --bs-navbar-nav-link-padding-x: 1rem;
318
- }
319
- .dropdown-menu {
320
- max-height: 80vh;
321
- }
322
- }
323
-
324
-
325
- .navbar[data-bs-theme="dark"], .navbar-main {
326
- background-color: var(--gray-900);
327
- }
328
-
329
- .navbar-line-item.active {
330
- background-color: var(--gray-800);
331
- }
332
-
333
- .navbar-tab{
334
- min-height: 60px;
335
- padding-top: 0.75rem;
336
- padding-left: 0.5rem;
337
- .navbar-line-item{
338
- min-height: auto;
339
- }
340
- }
341
-
342
- .navbar-line-item.dropdown .dropdown-menu {
343
- z-index: $zindex-sticky + 1;
344
- }
345
- .navbar-line-item.dropdown .dropdown-toggle[aria-expanded=true]{
346
- color: $white;
347
- }
348
-
349
- .info-project {
350
- position: relative;
351
- padding-left: 60px;
352
- padding-right: 1rem;
353
- }
354
-
355
- .icon-shine{
356
- background: linear-gradient(120deg, #fff 20%, #24BCE7 40%, #e8ecff 45%, #5872ff 60%, #fff 90%);
357
- -webkit-background-clip: text;
358
- color: transparent;
359
- }
360
-
361
- .icon-help{
362
- color: #c8d1ff;
363
- }
1
+ <template>
2
+ <div class="bg-gray-000 sticky-top d-print-none">
3
+ <nav class="navbar navbar-main navbar-expand-lg border-bottoms py-0" data-bs-theme="dark">
4
+ <div class="navbar-placeholder-content px-4 placeholder-glow">
5
+ <span class="placeholder w-1rem"></span>
6
+ <span class="placeholder w-20rem"></span>
7
+ <span class="placeholder w-5rem"></span>
8
+ <span class="placeholder w-5rem"></span>
9
+ <span class="placeholder w-5rem"></span>
10
+ </div>
11
+ <div class="navbar-content opacity-0 d-flex align-items-center flex-fill w-100">
12
+ <div class="border-end">
13
+ <a :href="arrowBackLink" class="btn btn-normal btn-square" title="離開專案"><span class="material-icons">home</span></a>
14
+ </div>
15
+ <span class="fs-6 mb-0 mx-4 text-nowrap text-project-title text-overflow"><b class="">{{projectInfo?.name}}</b></span>
16
+ <!--TODO: 解決 overflow scroll 與 dropdown 衝突-->
17
+ <div class="flex-grow-1 text-nowrap">
18
+ <div class="d-flex flex-grow-1 border-start">
19
+ <nav class="navbar-nav navbar-main navbar-tab navbar-line navbar-line-lg">
20
+ <div class="nav-item navbar-line-item btn nav-link border-0 dropdown"
21
+ :class="{'active': isActive(null)}">
22
+ <a class="dropdown-link" :href="finalRootDomain + '/ProjectManagement/ProjectInfo?id=' + projectId">
23
+ 專案資訊
24
+ </a>
25
+ </div>
26
+ <div class="nav-item navbar-line-item btn nav-link border-0 dropdown"
27
+ :class="{'active': isActive(navLinkObj.moduleLink)}">
28
+ <!-- NOTE 自己的獨立AP 沒有list,目前因為隕石已被GeneralLink取代 -->
29
+ <a :href="navLinkObj.url + projectId" class="dropdown-link" v-if="navLinkObj?.moduleLink?.selfIsApp">
30
+ <span class="material-icons icon-18 me-2">{{ navLinkObj?.moduleLink?.icon }}</span>
31
+ {{ navLinkObj?.moduleLink?.name }}
32
+ </a>
33
+ <span class="dropdown-link dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false" v-else>
34
+ <span class="material-icons icon-18 icon-shine me-1">{{ navLinkObj?.moduleLink?.icon }}</span>
35
+ 功能選單
36
+ </span>
37
+ <ul class="dropdown-menu" :class="{'p-0': navLinkObj?.moduleLink?.apps?.length == 0}">
38
+ <li v-if="navLinkObj?.moduleLink?.apps?.length > 0">
39
+ <a class="dropdown-item" :href="app.url + '?projectId=' + projectId" v-for="(app, index) in navLinkObj.moduleLink.apps" :key="index">
40
+ <span class="material-icons icon-18 align-middle me-2">{{app.icon}}</span>
41
+ <span class="align-middle">{{app.name}}</span>
42
+ </a>
43
+ </li>
44
+ </ul>
45
+ </div>
46
+ <div class="nav-item navbar-line-item btn nav-link border-0 dropdown"
47
+ :class="{'active': isActive(item.id)}"
48
+ v-for="item in navLinkObj.generalLink">
49
+ <a :href="item.url + '?projectId=' + projectId" class="dropdown-link">
50
+ <span class="material-icons icon-18 me-2">{{item.icon}}</span>
51
+ {{item.name}}
52
+ </a>
53
+ </div>
54
+ </nav>
55
+ <nav class="navbar-nav navbar-main navbar-line navbar-line-lg ms-auto">
56
+ <div class="nav-item navbar-line-item btn nav-link border-0">
57
+ <a href="https://docs.jobdone.cc/" target="_blank">
58
+ <span class="align-middle">使用指南</span>
59
+ <span class="material-icons icon-18 align-middle icon-help ms-1">help</span>
60
+ </a>
61
+ </div>
62
+ <div class="nav-item navbar-line-item btn nav-link border-0 dropdown">
63
+ <span class="dropdown-link dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
64
+ <div class="thumbnail-content thumbnail-32 rounded-circle me-2" :style="'background-image: url(' + userPicture + ');'"></div>
65
+ {{userId}}
66
+ </span>
67
+ <ul class="dropdown-menu dropdown-menu-end">
68
+ <li>
69
+ <a class="dropdown-item" :href="finalRootDomain + '/Profile'">個人資訊</a>
70
+ </li>
71
+ <li><hr class="dropdown-divider"></li>
72
+ <li>
73
+ <a class="dropdown-item" :href="logOutLink">登出</a>
74
+ </li>
75
+ </ul>
76
+ </div>
77
+ </nav>
78
+ </div>
79
+ </div>
80
+ </div>
81
+ </nav>
82
+ <div class="info-project bg-primary bg-opacity-25 border-top border-bottom border-primary border-opacity-25 py-2">
83
+ <div class="navbar-placeholder-content px-5 placeholder-glow">
84
+ <span class="placeholder placeholder-xs w-10rem ms-4"></span>
85
+ <span class="placeholder placeholder-xs w-12rem"></span>
86
+ <span class="placeholder placeholder-xs w-6rem"></span>
87
+ </div>
88
+ <div class="navbar-content opacity-0 d-flex align-items-center">
89
+ <span class="badge badge-outline-purple me-3">{{ navLinkObj?.moduleLink?.name }}</span>
90
+ <small class="d-flex me-4" v-if="projectInfo?.caseNo">
91
+ <b class="me-2">案號</b>
92
+ <span>{{projectInfo?.caseNo}}</span>
93
+ </small>
94
+ <small class="d-flex me-4">
95
+ <b class="me-2">開工/完工日期</b>
96
+ <span>{{formatDate(projectInfo?.beginDT)}} - {{formatDate(projectInfo?.endDT)}}</span>
97
+ </small>
98
+ <small class="d-flex me-4">
99
+ <b class="me-2">核定工期</b>
100
+ <span>{{projectInfo?.approvedWorkingPeriod}}天</span>
101
+ </small>
102
+ <small class="d-flex" v-if="projectInfo?.extendToDT">
103
+ <b class="me-2">展延至</b>
104
+ <span>{{ formatDate(projectInfo?.extendToDT) }} ({{projectInfo?.extendDays}}天)</span>
105
+ </small>
106
+ <small class="d-flex ms-auto">
107
+ <slot></slot>
108
+ </small>
109
+ </div>
110
+ </div>
111
+ </div>
112
+ </template>
113
+
114
+ <script>
115
+ import { formatDate } from '../../../node_modules/jobdone-shared-files/common/format';
116
+ import { onMounted, ref, computed, nextTick } from 'vue';
117
+ import axios from 'axios';
118
+ import '../../bootstrap/js/dist/dropdown.js';
119
+
120
+ export default {
121
+ props: {
122
+ arrowBackLink: {
123
+ type: String,
124
+ required: true
125
+ },
126
+ projectId: {
127
+ type: String,
128
+ required: true
129
+ },
130
+ projectInfo: {
131
+ type: [String, Object],
132
+ required: true
133
+ },
134
+ projectApps: {
135
+ type: [String, Object],
136
+ required: true
137
+ },
138
+ activeClientId: {
139
+ type: String,
140
+ required: false,
141
+ },
142
+ rootDomain: {
143
+ type: String,
144
+ required: true
145
+ },
146
+ userId: {
147
+ type: String,
148
+ required: true
149
+ },
150
+ userPicture: {
151
+ type: String,
152
+ required: true
153
+ },
154
+ logOutLink: {
155
+ type: String,
156
+ required: true
157
+ }
158
+ },
159
+ setup(props) {
160
+ const projectInfo = ref({});
161
+ const navLinkObj = ref({});
162
+ const finalRootDomain = computed(() => {
163
+ if (props.rootDomain.substr(-1) === "/") {
164
+ return props.rootDomain.slice(0, -1);
165
+ }
166
+ return props.rootDomain;
167
+ });
168
+
169
+ const isActive = (target) => {
170
+ if (target === null) {
171
+ // 專案資訊
172
+ return target === null && !props.activeClientId;
173
+ }
174
+ if (typeof target === 'object') {
175
+ // 功能選單
176
+ return !!props.activeClientId && (target.clientId === props.activeClientId || target.apps.some(x => x.clientId == props.activeClientId))
177
+ }
178
+ if (!!props.activeClientId && target == props.activeClientId) {
179
+ // 功能選單
180
+ return true;
181
+ }
182
+ return false;
183
+ }
184
+
185
+ onMounted(async () => {
186
+ try {
187
+ switch (typeof props.projectInfo) {
188
+ case 'string':
189
+ axios.get(props.projectInfo).then((res) => {
190
+ projectInfo.value = res.data;
191
+ });
192
+ break;
193
+ case 'object':
194
+ projectInfo.value = props.projectInfo;
195
+ break;
196
+ default:
197
+ projectInfo.value = {
198
+ caseNo: '',
199
+ name: '',
200
+ beginDT: '',
201
+ endDT: '',
202
+ approvedWorkingPeriod: '',
203
+ extendToDT: '',
204
+ extendDays: ''
205
+ };
206
+ break;
207
+ }
208
+ } catch (e) {
209
+ projectInfo.value = {
210
+ caseNo: '',
211
+ name: '',
212
+ beginDT: '',
213
+ endDT: '',
214
+ approvedWorkingPeriod: '',
215
+ extendToDT: '',
216
+ extendDays: ''
217
+ };
218
+ }
219
+ try {
220
+ switch (typeof props.projectApps) {
221
+ case 'string':
222
+ axios.get(props.projectApps).then((res) => {
223
+ navLinkObj.value = res.data;
224
+ });
225
+ break;
226
+ case 'object':
227
+ navLinkObj.value = props.projectApps;
228
+ break;
229
+ default:
230
+ navLinkObj.value = {
231
+ "moduleLink": {
232
+ "apps": [],
233
+ "icon": "edit_document",
234
+ "name": "Module",
235
+ "url": "",
236
+ "mobileUrl": "",
237
+ "mobileAppRoute": "",
238
+ "clientId": null,
239
+ "selfIsApp": false
240
+ },
241
+ "generalLink": []
242
+ }
243
+ break;
244
+ }
245
+ } catch (e) {
246
+ navLinkObj.value = {
247
+ "moduleLink": {
248
+ "apps": [],
249
+ "icon": "edit_document",
250
+ "name": "Module",
251
+ "url": "",
252
+ "mobileUrl": "",
253
+ "mobileAppRoute": "",
254
+ "clientId": null,
255
+ "selfIsApp": false
256
+ },
257
+ "generalLink": []
258
+ }
259
+ }
260
+
261
+
262
+ nextTick(() => {
263
+ let navbarElements = document.getElementsByClassName('navbar-content');
264
+ Array.from(navbarElements).forEach(function (item) {
265
+ item.classList.remove("opacity-0");
266
+ });
267
+
268
+ let placeholderElements = document.getElementsByClassName('navbar-placeholder-content');
269
+ Array.from(placeholderElements).forEach(function (item) {
270
+ item.classList.add("opacity-0");
271
+ });
272
+ });
273
+ });
274
+
275
+
276
+ return {
277
+ formatDate,
278
+ projectInfo,
279
+ navLinkObj,
280
+ finalRootDomain,
281
+ isActive
282
+ }
283
+ }
284
+ }
285
+ </script>
286
+
287
+ <style scoped lang="scss">
288
+ @import "../../bootstrap/scss/functions";
289
+ @import "../../bootstrap/scss/mixins";
290
+ @import "../style/scss/Settings/bs-variables";
291
+ @import "../style/scss/Settings/Mixins";
292
+
293
+ .navbar-content{
294
+ transition: .5s;
295
+ }
296
+
297
+ .navbar-placeholder-content{
298
+ @include position-center();
299
+ display: flex;
300
+ align-items: center;
301
+ gap: 1rem;
302
+ mix-blend-mode: color-burn;
303
+ pointer-events: none;
304
+ }
305
+
306
+ .text-project-title {
307
+ color: var(--dark-theme-primary);
308
+ }
309
+
310
+ .navbar[data-bs-theme="dark"] {
311
+ --bs-body-color: var(--gray-500);
312
+ color: var(--bs-body-color);
313
+ }
314
+
315
+ .navbar-main {
316
+ .navbar-line-item {
317
+ --bs-navbar-nav-link-padding-x: 1rem;
318
+ }
319
+ .dropdown-menu {
320
+ max-height: 80vh;
321
+ }
322
+ }
323
+
324
+
325
+ .navbar[data-bs-theme="dark"], .navbar-main {
326
+ background-color: var(--gray-900);
327
+ }
328
+
329
+ .navbar-line-item.active {
330
+ background-color: var(--gray-800);
331
+ }
332
+
333
+ .navbar-tab{
334
+ min-height: 60px;
335
+ padding-top: 0.75rem;
336
+ padding-left: 0.5rem;
337
+ .navbar-line-item{
338
+ min-height: auto;
339
+ }
340
+ }
341
+
342
+ .navbar-line-item.dropdown .dropdown-menu {
343
+ z-index: $zindex-sticky + 1;
344
+ }
345
+ .navbar-line-item.dropdown .dropdown-toggle[aria-expanded=true]{
346
+ color: $white;
347
+ }
348
+
349
+ .info-project {
350
+ position: relative;
351
+ padding-left: 60px;
352
+ padding-right: 1rem;
353
+ }
354
+
355
+ .icon-shine{
356
+ background: linear-gradient(120deg, #fff 20%, #24BCE7 40%, #e8ecff 45%, #5872ff 60%, #fff 90%);
357
+ -webkit-background-clip: text;
358
+ color: transparent;
359
+ }
360
+
361
+ .icon-help{
362
+ color: #c8d1ff;
363
+ }
364
364
  </style>