jobdone-shared-files 1.1.23 → 1.1.25

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.
@@ -162,7 +162,7 @@
162
162
  <script setup>
163
163
  import { ref, reactive, computed, nextTick, onMounted, onBeforeUnmount } from 'vue';
164
164
  import { modalShow, modalHide } from "./common/ModalSetup.js";
165
- import Loading from './common/vueLoadingOverlay.vue';
165
+ import Loading from "./vueLoadingOverlay.vue";
166
166
  import flatPickr from "vue-flatpickr-component";
167
167
  import { MandarinTraditional } from "flatpickr/dist/l10n/zh-tw";
168
168
  import VueEasyLightbox from 'vue-easy-lightbox';
@@ -194,7 +194,7 @@ let scrollObserver = null;
194
194
  const dateConfig = {
195
195
  altFormat: "Y-m-d",
196
196
  dateFormat: "Y-m-d",
197
- disableMobile: "true",
197
+ disableMobile: true,
198
198
  mode: "range",
199
199
  locale: MandarinTraditional,
200
200
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jobdone-shared-files",
3
- "version": "1.1.23",
3
+ "version": "1.1.25",
4
4
  "description": "Shared JS and SCSS for Jobdone Enterprise.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -1,3 +1,5 @@
1
+ @import "flatpickr/dist/flatpickr.css";
2
+
1
3
  .modal-daily-multimedia-images-selector {
2
4
  .modal-title {
3
5
  display: flex;
@@ -258,9 +260,11 @@
258
260
  }
259
261
  }
260
262
  }
261
- .multimedia-list-preview{
263
+
264
+ .multimedia-list-preview {
262
265
  padding: 0 1rem;
263
266
  }
267
+
264
268
  .the-month-content {
265
269
  margin-bottom: 2rem;
266
270
 
@@ -338,5 +342,4 @@
338
342
  }
339
343
 
340
344
  }
341
- }
342
-
345
+ }
@@ -0,0 +1,345 @@
1
+ @import "flatpickr/dist/flatpickr.css";
2
+
3
+ .modal-daily-multimedia-images-selector {
4
+ .modal-title {
5
+ display: flex;
6
+ align-items: center;
7
+ gap: 0.5rem;
8
+
9
+ &::before {
10
+ content: "photo_camera";
11
+ display: block;
12
+ color: var(--bs-primary);
13
+ font-size: 1.25rem;
14
+ line-height: 1.25rem;
15
+ font-family: "Material Icons";
16
+ }
17
+ }
18
+
19
+ .filter-container {
20
+ flex: 1;
21
+ gap: .25rem;
22
+ display: grid;
23
+ grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
24
+
25
+ .filter-item {
26
+ flex: 1;
27
+ }
28
+
29
+ .form-label-content {
30
+ display: flex;
31
+ align-items: center;
32
+ gap: .5rem;
33
+ margin-bottom: .5rem;
34
+ }
35
+
36
+ .form-label {
37
+ font-size: .875rem;
38
+ color: var(--gray-500);
39
+ margin: 0
40
+ }
41
+
42
+ .btn-clear-item {
43
+ display: inline-flex;
44
+ align-items: center;
45
+ font-size: .875rem;
46
+ padding: 0;
47
+ background-color: transparent;
48
+ border: 0;
49
+ color: var(--red-500);
50
+ vertical-align: middle;
51
+ gap: .25rem;
52
+
53
+ &::before {
54
+ font-family: "Material Icons";
55
+ content: "close";
56
+ }
57
+
58
+ &::after {
59
+ content: "清除";
60
+ }
61
+ }
62
+ }
63
+
64
+
65
+
66
+ .media-item {
67
+ display: flex;
68
+ justify-content: flex-end;
69
+ flex-direction: column;
70
+ position: relative;
71
+ padding: 0;
72
+
73
+ .media-item-header {
74
+ margin-bottom: 0.25rem;
75
+ font-size: 0.875rem;
76
+ display: grid;
77
+ grid-template-columns: 3px auto 1fr;
78
+ gap: 0.5rem;
79
+ line-height: 1.25rem;
80
+ color: var(--gray-800);
81
+ padding-top: 0.5rem;
82
+ padding-bottom: 0.5rem;
83
+ margin-bottom: auto;
84
+
85
+ &::before {
86
+ display: block;
87
+ content: " ";
88
+ width: 3px;
89
+ background-color: var(--bs-primary);
90
+ border-radius: 99px;
91
+ }
92
+ }
93
+
94
+ .media-item-body {
95
+ position: relative;
96
+ padding: 0;
97
+ transition: 0.1s ease-out;
98
+
99
+ &:has(.multimedia-is-selected) {
100
+ border: 3px solid rgba(var(--bs-primary-rgb), 0.8);
101
+ border-radius: calc(var(--bs-border-radius) + 3px);
102
+ background-color: #fff;
103
+ transform: scale(0.95);
104
+
105
+ .multimedia-preview-content {
106
+ transform: scale(0.95);
107
+ }
108
+ }
109
+ }
110
+
111
+ .multimedia-select-content {
112
+ position: absolute;
113
+ width: 100%;
114
+ width: -webkit-fill-available;
115
+
116
+ .select-control {
117
+ border: 0;
118
+ background-color: transparent;
119
+ top: 0;
120
+ right: 0;
121
+ padding: 0.5rem;
122
+ z-index: 10;
123
+ margin: 0;
124
+ position: absolute;
125
+ user-select: none;
126
+ transition: opacity 0.2s ease-out;
127
+
128
+ &::before {
129
+ content: "check";
130
+ display: block;
131
+ position: absolute;
132
+ margin: auto;
133
+ color: #fff;
134
+ font-size: 1rem;
135
+ line-height: 1rem;
136
+ opacity: 0.5;
137
+ font-family: "Material Icons";
138
+ z-index: 10;
139
+ width: 1rem;
140
+ height: 1rem;
141
+ left: calc(50% - 0.5rem);
142
+ top: calc(50% - 0.5rem);
143
+ transform: translateY(-1px);
144
+ transition: opacity 0.2s ease-out;
145
+ }
146
+
147
+ &::after {
148
+ opacity: 0.8;
149
+ border: 2px solid;
150
+ border-color: #ffffff85;
151
+ content: " ";
152
+ display: block;
153
+ width: 1.75rem;
154
+ height: 1.75rem;
155
+ background-color: rgba(0, 0, 0, 0.2);
156
+ border-radius: var(--bs-border-radius);
157
+ backdrop-filter: blur(2px);
158
+ transition: 0.2s ease-out;
159
+ }
160
+
161
+ &:hover {
162
+ cursor: pointer;
163
+
164
+ &::before {
165
+ opacity: 1;
166
+ }
167
+ }
168
+
169
+ &.multimedia-is-selected {
170
+ opacity: 1;
171
+
172
+ &::before {
173
+ opacity: 1;
174
+ }
175
+
176
+ &::after {
177
+ opacity: 1;
178
+ background-color: var(--bs-primary);
179
+ border-color: #fff;
180
+ }
181
+ }
182
+ }
183
+ }
184
+
185
+ .multimedia-preview-content {
186
+ position: relative;
187
+ display: block;
188
+ border: 0;
189
+ background-color: var(--purple-100);
190
+ width: 100%;
191
+ padding-top: 100%;
192
+ overflow: hidden;
193
+ border-radius: var(--bs-border-radius);
194
+
195
+ img {
196
+ transition: 0.3s ease-out;
197
+ border-radius: var(--bs-border-radius);
198
+ width: 100%;
199
+ height: 100%;
200
+ object-fit: cover;
201
+ position: absolute;
202
+ top: 0;
203
+ left: 0;
204
+ }
205
+ }
206
+
207
+ &:hover {
208
+ cursor: pointer;
209
+
210
+ img {
211
+ transform: scale(1.05);
212
+ }
213
+ }
214
+ }
215
+
216
+ .records-preview-table {
217
+ table-layout: fixed;
218
+
219
+ thead {
220
+ position: sticky;
221
+ top: 0;
222
+ z-index: 20;
223
+ }
224
+
225
+ .date-grid {
226
+ text-align: center;
227
+ vertical-align: middle;
228
+ width: 8rem;
229
+ border-right: 1px solid var(--gray-300);
230
+ }
231
+
232
+ .records-photos {
233
+ display: flex;
234
+ flex-wrap: wrap;
235
+ gap: 0.5rem;
236
+ padding: .75rem 1rem;
237
+ background: var(--gray-100);
238
+ border-radius: var(--bs-border-radius);
239
+
240
+ .media-item {
241
+ background-color: #fff;
242
+ border-radius: var(--bs-border-radius);
243
+ border: 3px solid #fff;
244
+ width: 5rem;
245
+
246
+ .select-control {
247
+ // 觸控區域調整,兼具勾選便利性和預覽操作的流暢性
248
+ padding: 0.25rem 0.25rem 0.5rem 0.5rem;
249
+
250
+ &::before {
251
+ left: calc(50% - 0.4rem);
252
+ top: calc(50% - 0.6rem);
253
+
254
+ }
255
+ }
256
+
257
+ &:has(.multimedia-is-selected) {
258
+ border-radius: var(--bs-border-radius-xl);
259
+ }
260
+ }
261
+ }
262
+ }
263
+
264
+ .multimedia-list-preview {
265
+ padding: 0 1rem;
266
+ }
267
+
268
+ .the-month-content {
269
+ margin-bottom: 2rem;
270
+
271
+ .the-month-content-header {
272
+ font-size: 1.25rem;
273
+ border-bottom: 1px solid var(--gray-300);
274
+ padding-top: 0.75rem;
275
+ padding-bottom: 0.5rem;
276
+ margin-bottom: 0.5rem;
277
+ position: sticky;
278
+ top: 0;
279
+ backdrop-filter: blur(2px);
280
+ background: rgba(255, 255, 255, 0.85);
281
+ z-index: 10;
282
+ }
283
+
284
+ .the-month-content-body {
285
+ display: grid;
286
+ gap: 0.25rem;
287
+ grid-template-columns: repeat(auto-fill, minmax(8.6rem, 1fr));
288
+ }
289
+
290
+ }
291
+
292
+ .selected-preview-bar {
293
+ display: flex;
294
+ flex-direction: column;
295
+ border-top: 1px solid var(--gray-300);
296
+ background-color: var(--gray-100);
297
+ max-height: 25vh;
298
+ overflow: hidden;
299
+ flex-shrink: 0;
300
+
301
+ >* {
302
+ padding: 0.5rem 1rem;
303
+ }
304
+
305
+ .selected-preview-header {
306
+ border-bottom: 1px solid var(--gray-300);
307
+ font-size: 0.875rem;
308
+ color: var(--gray-600);
309
+ flex-shrink: 0;
310
+ }
311
+
312
+ .selected-preview-body {
313
+ overflow: auto;
314
+ background: var(--gray-400);
315
+ }
316
+
317
+ .selected-preview-list {
318
+ display: flex;
319
+ flex-wrap: wrap;
320
+ gap: 0.25rem;
321
+
322
+ .media-item {
323
+ height: 6rem;
324
+ width: 6rem;
325
+ overflow: hidden;
326
+ }
327
+
328
+ .media-item-body {
329
+ position: relative;
330
+ padding: 0;
331
+ transition: 0.1s ease-out;
332
+
333
+ &:has(.multimedia-is-selected) {
334
+ transform: scale(1);
335
+ border: 3px solid #fff;
336
+
337
+ .multimedia-preview-content {
338
+ transform: scale(1);
339
+ }
340
+ }
341
+ }
342
+ }
343
+
344
+ }
345
+ }