@things-factory/organization 6.1.84 → 6.1.87
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/client/component/department-view.ts +4 -3
- package/client/pages/employee/employee-list-page.ts +122 -50
- package/client/pages/employee/employees-by-department.ts +468 -0
- package/client/route.ts +4 -0
- package/dist-client/component/department-view.js +8 -8
- package/dist-client/component/department-view.js.map +1 -1
- package/dist-client/pages/employee/employee-list-page.js +120 -48
- package/dist-client/pages/employee/employee-list-page.js.map +1 -1
- package/dist-client/pages/employee/employees-by-department.d.ts +38 -0
- package/dist-client/pages/employee/employees-by-department.js +464 -0
- package/dist-client/pages/employee/employees-by-department.js.map +1 -0
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +3 -0
- package/dist-client/route.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/employee/employee-history.js +36 -0
- package/dist-server/service/employee/employee-history.js.map +1 -1
- package/dist-server/service/employee/employee-query.js +1 -1
- package/dist-server/service/employee/employee-query.js.map +1 -1
- package/dist-server/service/employee/employee-type.js +40 -0
- package/dist-server/service/employee/employee-type.js.map +1 -1
- package/dist-server/service/employee/employee.js +21 -1
- package/dist-server/service/employee/employee.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/server/service/employee/employee-history.ts +31 -1
- package/server/service/employee/employee-query.ts +2 -2
- package/server/service/employee/employee-type.ts +30 -0
- package/server/service/employee/employee.ts +17 -1
- package/things-factory.config.js +1 -0
- package/translations/en.json +6 -1
- package/translations/ja.json +6 -1
- package/translations/ko.json +6 -1
- package/translations/ms.json +6 -1
- package/translations/zh.json +6 -1
|
@@ -6,6 +6,7 @@ import { customElement, property, query, state } from 'lit/decorators.js'
|
|
|
6
6
|
import { ScopedElementsMixin } from '@open-wc/scoped-elements'
|
|
7
7
|
import { i18next, localize } from '@operato/i18n'
|
|
8
8
|
import { ScrollbarStyles } from '@operato/styles'
|
|
9
|
+
import { getCodeByName } from '@things-factory/code-base'
|
|
9
10
|
|
|
10
11
|
@customElement('department-view')
|
|
11
12
|
export class DepartmentView extends localize(i18next)(ScopedElementsMixin(LitElement)) {
|
|
@@ -72,14 +73,14 @@ export class DepartmentView extends localize(i18next)(ScopedElementsMixin(LitEle
|
|
|
72
73
|
name: 'active',
|
|
73
74
|
label: 'active'
|
|
74
75
|
},
|
|
75
|
-
{
|
|
76
|
+
/*{
|
|
76
77
|
type: 'select',
|
|
77
78
|
name: 'state',
|
|
78
79
|
label: 'state',
|
|
79
80
|
property: {
|
|
80
|
-
options: ['', 'STATUS_A', 'STATUS_B']
|
|
81
|
+
options: ['', 'STATUS_A', 'STATUS_B']
|
|
81
82
|
}
|
|
82
|
-
}
|
|
83
|
+
},*/
|
|
83
84
|
{
|
|
84
85
|
type: 'image',
|
|
85
86
|
name: 'picture',
|
|
@@ -124,6 +124,7 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
|
|
|
124
124
|
|
|
125
125
|
async pageInitialized(lifecycle: any) {
|
|
126
126
|
this.gristConfig = {
|
|
127
|
+
pagination: { pages : [50, 100, 200] },
|
|
127
128
|
list: {
|
|
128
129
|
thumbnail: 'profile',
|
|
129
130
|
fields: ['controlNo', 'name'],
|
|
@@ -157,7 +158,7 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
|
|
|
157
158
|
},
|
|
158
159
|
filter: 'search',
|
|
159
160
|
sortable: true,
|
|
160
|
-
width:
|
|
161
|
+
width: 105
|
|
161
162
|
},
|
|
162
163
|
{
|
|
163
164
|
type: 'string',
|
|
@@ -168,7 +169,18 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
|
|
|
168
169
|
},
|
|
169
170
|
filter: 'search',
|
|
170
171
|
sortable: true,
|
|
171
|
-
width:
|
|
172
|
+
width: 100
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
type: 'string',
|
|
176
|
+
name: 'alias',
|
|
177
|
+
header: i18next.t('label.alias'),
|
|
178
|
+
record: {
|
|
179
|
+
editable: true
|
|
180
|
+
},
|
|
181
|
+
filter: 'search',
|
|
182
|
+
sortable: true,
|
|
183
|
+
width: 110
|
|
172
184
|
},
|
|
173
185
|
{
|
|
174
186
|
type: 'resource-object',
|
|
@@ -190,23 +202,20 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
|
|
|
190
202
|
}
|
|
191
203
|
},
|
|
192
204
|
sortable: true,
|
|
193
|
-
|
|
205
|
+
filter: false,
|
|
206
|
+
width: 100
|
|
194
207
|
},
|
|
195
208
|
{
|
|
196
|
-
type: '
|
|
209
|
+
type: 'code',
|
|
197
210
|
name: 'type',
|
|
198
211
|
header: i18next.t('field.type'),
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
]
|
|
207
|
-
},
|
|
208
|
-
filter: 'search',
|
|
209
|
-
width: 200
|
|
212
|
+
width: 115,
|
|
213
|
+
sortable: false,
|
|
214
|
+
filter: false,
|
|
215
|
+
record: {
|
|
216
|
+
editable: true,
|
|
217
|
+
codeName: 'EMPLOYEE_TYPE'
|
|
218
|
+
}
|
|
210
219
|
},
|
|
211
220
|
{
|
|
212
221
|
type: 'department-object',
|
|
@@ -216,7 +225,8 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
|
|
|
216
225
|
editable: true
|
|
217
226
|
},
|
|
218
227
|
sortable: true,
|
|
219
|
-
|
|
228
|
+
filter: false,
|
|
229
|
+
width: 130
|
|
220
230
|
},
|
|
221
231
|
{
|
|
222
232
|
type: 'resource-object',
|
|
@@ -227,86 +237,141 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
|
|
|
227
237
|
options: {
|
|
228
238
|
title: i18next.t('title.employee list'),
|
|
229
239
|
queryName: 'employees',
|
|
230
|
-
|
|
240
|
+
pagination: { pages : [100, 200, 500] },
|
|
241
|
+
basicArgs: {
|
|
242
|
+
filters: [{
|
|
243
|
+
name: 'active', operator: 'eq', value: true
|
|
244
|
+
}]
|
|
245
|
+
},
|
|
246
|
+
list: { fields: ['controlNo', 'name', 'alias', 'hiredOn', 'active'] },
|
|
247
|
+
select: [
|
|
231
248
|
{ name: 'id', hidden: true },
|
|
232
|
-
{ name: 'controlNo', header: { renderer: () => i18next.t('field.control-no') }, filter: 'search' },
|
|
233
|
-
{ name: 'name', header: { renderer: () => i18next.t('field.name') }, filter: 'search' },
|
|
234
|
-
{ name: '
|
|
249
|
+
{ type: 'string', name: 'controlNo', header: { renderer: () => i18next.t('field.control-no') }, width: 130, filter: 'search', sortable: true },
|
|
250
|
+
{ type: 'string', name: 'name', header: { renderer: () => i18next.t('field.name') }, width: 150, filter: 'search' },
|
|
251
|
+
{ type: 'string', name: 'alias', header: { renderer: () => i18next.t('label.alias') }, width: 150, filter: 'search' },
|
|
252
|
+
{ type: 'string', name: 'hiredOn', header: { renderer: () => i18next.t('field.hired-on'), width: 100 } },
|
|
253
|
+
{
|
|
254
|
+
type: 'checkbox',
|
|
255
|
+
name: 'active',
|
|
256
|
+
label: true,
|
|
257
|
+
header: i18next.t('field.active'),
|
|
258
|
+
record: {
|
|
259
|
+
align: 'center',
|
|
260
|
+
editable: true
|
|
261
|
+
},
|
|
262
|
+
sortable: true,
|
|
263
|
+
width: 85
|
|
264
|
+
}
|
|
235
265
|
],
|
|
236
|
-
list: { fields: ['control-no', 'name', 'email'] },
|
|
237
266
|
valueField: 'id',
|
|
238
267
|
nameField: 'name',
|
|
239
268
|
descriptionField: 'controlNo'
|
|
240
269
|
}
|
|
241
270
|
},
|
|
242
271
|
sortable: true,
|
|
243
|
-
width:
|
|
272
|
+
width: 120
|
|
244
273
|
},
|
|
245
274
|
{
|
|
246
275
|
type: 'string',
|
|
247
276
|
name: 'email',
|
|
248
277
|
header: i18next.t('field.email'),
|
|
278
|
+
width: 200,
|
|
249
279
|
record: {
|
|
250
|
-
editable: false
|
|
280
|
+
editable: false,
|
|
281
|
+
renderer: function (value, column, record, rowIndex, field) {
|
|
282
|
+
return record.contact ? record.contact.email : ''
|
|
283
|
+
}
|
|
251
284
|
},
|
|
252
|
-
sortable: true
|
|
253
|
-
width: 200
|
|
285
|
+
sortable: true
|
|
254
286
|
},
|
|
255
287
|
{
|
|
256
288
|
type: 'string',
|
|
257
289
|
name: 'phone',
|
|
258
290
|
header: i18next.t('field.phone'),
|
|
291
|
+
width: 110,
|
|
259
292
|
record: {
|
|
260
|
-
editable: false
|
|
293
|
+
editable: false,
|
|
294
|
+
renderer: function (value, column, record, rowIndex, field) {
|
|
295
|
+
return record.contact ? record.contact.phone : ''
|
|
296
|
+
}
|
|
261
297
|
},
|
|
262
|
-
sortable: true
|
|
263
|
-
|
|
298
|
+
sortable: true
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
type: 'code',
|
|
302
|
+
name: 'jobResponsibility',
|
|
303
|
+
header: i18next.t('label.job-responsibility'),
|
|
304
|
+
width: 100,
|
|
305
|
+
record: {
|
|
306
|
+
editable: true,
|
|
307
|
+
codeName: 'JOB_RESPONSIBILITY'
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
type: 'code',
|
|
312
|
+
name: 'jobPosition',
|
|
313
|
+
header: i18next.t('label.job-position'),
|
|
314
|
+
width: 100,
|
|
315
|
+
record: {
|
|
316
|
+
editable: true,
|
|
317
|
+
codeName: 'JOB_POSITION'
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
type: 'date',
|
|
322
|
+
name: 'hiredOn',
|
|
323
|
+
header: i18next.t('field.hired-on'),
|
|
324
|
+
width: 100,
|
|
325
|
+
record: {
|
|
326
|
+
editable: true
|
|
327
|
+
},
|
|
328
|
+
sortable: true
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
type: 'date',
|
|
332
|
+
name: 'retiredAt',
|
|
333
|
+
header: i18next.t('label.retired-at'),
|
|
334
|
+
width: 100,
|
|
335
|
+
record: {
|
|
336
|
+
editable: true
|
|
337
|
+
}
|
|
264
338
|
},
|
|
265
339
|
{
|
|
266
340
|
type: 'checkbox',
|
|
267
341
|
name: 'active',
|
|
268
342
|
label: true,
|
|
269
343
|
header: i18next.t('field.active'),
|
|
344
|
+
width: 85,
|
|
270
345
|
record: {
|
|
346
|
+
align: 'center',
|
|
271
347
|
editable: true
|
|
272
348
|
},
|
|
273
349
|
filter: true,
|
|
274
|
-
sortable: true
|
|
275
|
-
width: 60
|
|
350
|
+
sortable: true
|
|
276
351
|
},
|
|
277
352
|
{
|
|
278
353
|
type: 'string',
|
|
279
354
|
name: 'note',
|
|
280
355
|
header: i18next.t('field.note'),
|
|
356
|
+
width: 200,
|
|
281
357
|
record: {
|
|
282
358
|
editable: true
|
|
283
359
|
},
|
|
284
|
-
filter: 'search'
|
|
285
|
-
width: 200
|
|
286
|
-
},
|
|
287
|
-
{
|
|
288
|
-
type: 'date',
|
|
289
|
-
name: 'hiredOn',
|
|
290
|
-
header: i18next.t('field.hired-on'),
|
|
291
|
-
record: {
|
|
292
|
-
editable: true
|
|
293
|
-
},
|
|
294
|
-
sortable: true,
|
|
295
|
-
width: 150
|
|
360
|
+
filter: 'search'
|
|
296
361
|
},
|
|
297
362
|
{
|
|
298
363
|
type: 'resource-object',
|
|
299
364
|
name: 'updater',
|
|
300
365
|
header: i18next.t('field.updater'),
|
|
301
|
-
|
|
302
|
-
|
|
366
|
+
width: 90,
|
|
367
|
+
sortable: false
|
|
303
368
|
},
|
|
304
369
|
{
|
|
305
370
|
type: 'datetime',
|
|
306
371
|
name: 'updatedAt',
|
|
307
372
|
header: i18next.t('field.updated_at'),
|
|
308
|
-
|
|
309
|
-
|
|
373
|
+
width: 180,
|
|
374
|
+
sortable: true
|
|
310
375
|
},
|
|
311
376
|
{
|
|
312
377
|
type: 'image',
|
|
@@ -330,7 +395,7 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
|
|
|
330
395
|
},
|
|
331
396
|
sorters: [
|
|
332
397
|
{
|
|
333
|
-
name: '
|
|
398
|
+
name: 'controlNo'
|
|
334
399
|
}
|
|
335
400
|
]
|
|
336
401
|
}
|
|
@@ -351,9 +416,13 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
|
|
|
351
416
|
id
|
|
352
417
|
controlNo
|
|
353
418
|
name
|
|
419
|
+
alias
|
|
354
420
|
type
|
|
421
|
+
jobResponsibility
|
|
422
|
+
jobPosition
|
|
355
423
|
active
|
|
356
424
|
email
|
|
425
|
+
phone
|
|
357
426
|
user {
|
|
358
427
|
id
|
|
359
428
|
name
|
|
@@ -368,11 +437,14 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
|
|
|
368
437
|
name
|
|
369
438
|
controlNo
|
|
370
439
|
}
|
|
371
|
-
phone
|
|
372
440
|
note
|
|
373
441
|
hiredOn
|
|
442
|
+
retiredAt
|
|
374
443
|
contact {
|
|
375
444
|
id
|
|
445
|
+
email
|
|
446
|
+
phone
|
|
447
|
+
address
|
|
376
448
|
}
|
|
377
449
|
profile {
|
|
378
450
|
left
|
|
@@ -465,7 +537,7 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
|
|
|
465
537
|
|
|
466
538
|
async exportHandler() {
|
|
467
539
|
const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records
|
|
468
|
-
const targetFieldSet = new Set(['id', 'controlNo', 'name', '
|
|
540
|
+
const targetFieldSet = new Set(['id', 'controlNo', 'name', 'alias', 'type', 'hiredOn', 'retiredAt', 'active', 'note'])
|
|
469
541
|
|
|
470
542
|
return exportTargets.map(employee => {
|
|
471
543
|
let tempObj = {}
|
|
@@ -512,10 +584,10 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
|
|
|
512
584
|
id
|
|
513
585
|
name
|
|
514
586
|
company
|
|
587
|
+
department
|
|
515
588
|
email
|
|
516
589
|
phone
|
|
517
590
|
address
|
|
518
|
-
department
|
|
519
591
|
note
|
|
520
592
|
items {
|
|
521
593
|
type
|