@things-factory/worklist 10.1.44 → 10.1.47
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/dist-client/bootstrap.js +2 -0
- package/dist-client/bootstrap.js.map +1 -1
- package/dist-client/components/activity-approval-ribon.d.ts +1 -1
- package/dist-client/components/activity-approval-ribon.js +2 -2
- package/dist-client/components/activity-approval-ribon.js.map +1 -1
- package/dist-client/components/activity-fields.d.ts +7 -0
- package/dist-client/components/activity-fields.js +8 -0
- package/dist-client/components/activity-fields.js.map +1 -1
- package/dist-client/components/activity-instance-ribon.d.ts +1 -1
- package/dist-client/components/activity-instance-ribon.js +2 -2
- package/dist-client/components/activity-instance-ribon.js.map +1 -1
- package/dist-client/components/activity-thread-ribon.d.ts +1 -1
- package/dist-client/components/activity-thread-ribon.js +2 -2
- package/dist-client/components/activity-thread-ribon.js.map +1 -1
- package/dist-client/components/activity-thread-timeline.js +3 -4
- package/dist-client/components/activity-thread-timeline.js.map +1 -1
- package/dist-client/components/state-ribon.d.ts +9 -1
- package/dist-client/components/state-ribon.js +43 -34
- package/dist-client/components/state-ribon.js.map +1 -1
- package/dist-client/entity360/person-open-work-section.d.ts +23 -0
- package/dist-client/entity360/person-open-work-section.js +79 -0
- package/dist-client/entity360/person-open-work-section.js.map +1 -0
- package/dist-client/pages/activity-approval/activity-approval-page.js +2 -2
- package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
- package/dist-client/pages/activity-catalog/activity-detail-page.js +2 -2
- package/dist-client/pages/activity-catalog/activity-detail-page.js.map +1 -1
- package/dist-client/pages/activity-instance/activity-instance-view.js +19 -40
- package/dist-client/pages/activity-instance/activity-instance-view.js.map +1 -1
- package/dist-client/pages/activity-thread/activity-thread-page.js +2 -2
- package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
- package/dist-client/pages/activity-thread/activity-thread-view-page.js +2 -2
- package/dist-client/pages/activity-thread/activity-thread-view-page.js.map +1 -1
- package/dist-client/pages/activity-thread/activity-thread-view.js +2 -2
- package/dist-client/pages/activity-thread/activity-thread-view.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/templates/activity-approval-context-template.js +6 -5
- package/dist-client/templates/activity-approval-context-template.js.map +1 -1
- package/dist-client/templates/activity-thread-context-template.js +3 -2
- package/dist-client/templates/activity-thread-context-template.js.map +1 -1
- package/dist-client/tsconfig.chk.tsbuildinfo +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/activity-summary/activity-summary-query.js +6 -53
- package/dist-server/service/activity-summary/activity-summary-query.js.map +1 -1
- package/dist-server/service/activity-summary/index.d.ts +2 -1
- package/dist-server/service/activity-summary/index.js +2 -1
- package/dist-server/service/activity-summary/index.js.map +1 -1
- package/dist-server/service/activity-summary/open-work.d.ts +5 -0
- package/dist-server/service/activity-summary/open-work.js +63 -0
- package/dist-server/service/activity-summary/open-work.js.map +1 -0
- package/dist-server/service/activity-summary/person-open-work.d.ts +17 -0
- package/dist-server/service/activity-summary/person-open-work.js +68 -0
- package/dist-server/service/activity-summary/person-open-work.js.map +1 -0
- package/dist-server/service/index.d.ts +2 -2
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -10
- package/tests/person-open-work.test.ts +91 -0
- package/translations/en.json +3 -11
- package/translations/ja.json +3 -11
- package/translations/ko.json +3 -11
- package/translations/ms.json +3 -11
- package/translations/zh.json +3 -11
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/worklist",
|
|
3
|
-
"version": "10.1.
|
|
3
|
+
"version": "10.1.47",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "dist-client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -33,18 +33,19 @@
|
|
|
33
33
|
"@operato/event-view": "^10.0.0",
|
|
34
34
|
"@operato/graphql": "^10.0.0",
|
|
35
35
|
"@operato/grist-editor": "^10.0.0",
|
|
36
|
+
"@operato/layout": "^10.27.0",
|
|
36
37
|
"@operato/list-state": "^10.15.0",
|
|
37
38
|
"@operato/moment-timezone-es": "^10.0.0",
|
|
38
39
|
"@operato/p13n": "^10.0.0",
|
|
39
40
|
"@operato/popup": "^10.15.0",
|
|
40
|
-
"@things-factory/attachment-base": "^10.1.
|
|
41
|
-
"@things-factory/auth-base": "^10.1.
|
|
42
|
-
"@things-factory/board-service": "^10.1.
|
|
43
|
-
"@things-factory/context-ui": "^10.1.
|
|
44
|
-
"@things-factory/organization": "^10.1.
|
|
45
|
-
"@things-factory/personalization": "^10.1.
|
|
46
|
-
"@things-factory/scheduler-client": "^10.1.
|
|
47
|
-
"@things-factory/shell": "^10.1.
|
|
41
|
+
"@things-factory/attachment-base": "^10.1.47",
|
|
42
|
+
"@things-factory/auth-base": "^10.1.47",
|
|
43
|
+
"@things-factory/board-service": "^10.1.47",
|
|
44
|
+
"@things-factory/context-ui": "^10.1.47",
|
|
45
|
+
"@things-factory/organization": "^10.1.47",
|
|
46
|
+
"@things-factory/personalization": "^10.1.47",
|
|
47
|
+
"@things-factory/scheduler-client": "^10.1.47",
|
|
48
|
+
"@things-factory/shell": "^10.1.47"
|
|
48
49
|
},
|
|
49
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "185f20d7d9a15715a0ee2757a6a8189ec36cfb9d"
|
|
50
51
|
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { join } from 'path'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* What a person holds, asked by someone else - through the real resolvers on sqlite.
|
|
5
|
+
*
|
|
6
|
+
* The person 360 shows a colleague's open work as counts (ADR-0067, the person 360 ruling; ADR-0091
|
|
7
|
+
* keeps the cases themselves to the people on them). The counts must be the same answer that person's
|
|
8
|
+
* own badges give - one rule, `open-work.ts` - and a person who is not a member of this domain gets
|
|
9
|
+
* no answer at all.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const { createSqliteTestDataSource } = require(
|
|
13
|
+
join(__dirname, '..', '..', 'ops-master', 'test', 'support', 'database.cjs')
|
|
14
|
+
)
|
|
15
|
+
const DIST = join(__dirname, '..', 'dist-server')
|
|
16
|
+
const { ActivityInstance } = require(join(DIST, 'service', 'activity-instance', 'activity-instance.js'))
|
|
17
|
+
const { ActivityThread } = require(join(DIST, 'service', 'activity-thread', 'activity-thread.js'))
|
|
18
|
+
const { ActivityApproval } = require(join(DIST, 'service', 'activity-approval', 'activity-approval.js'))
|
|
19
|
+
const { PersonOpenWorkQuery } = require(join(DIST, 'service', 'activity-summary', 'person-open-work.js'))
|
|
20
|
+
const { ActivitySummaryQuery } = require(join(DIST, 'service', 'activity-summary', 'activity-summary-query.js'))
|
|
21
|
+
const shell = require('@things-factory/shell')
|
|
22
|
+
const { User } = require('@things-factory/auth-base')
|
|
23
|
+
|
|
24
|
+
let db: any
|
|
25
|
+
let here: any
|
|
26
|
+
let elsewhere: any
|
|
27
|
+
let viewer: any
|
|
28
|
+
let worker: any
|
|
29
|
+
let stranger: any
|
|
30
|
+
|
|
31
|
+
const asViewer = () => ({ state: { domain: here, user: viewer }, t: (key: string) => key }) as any
|
|
32
|
+
const asWorker = () => ({ state: { domain: here, user: worker }, t: (key: string) => key }) as any
|
|
33
|
+
const openWork = (userId: string) => new PersonOpenWorkQuery().personOpenWork(userId, asViewer())
|
|
34
|
+
|
|
35
|
+
beforeAll(async () => {
|
|
36
|
+
db = createSqliteTestDataSource([ActivityInstance, ActivityThread, ActivityApproval])
|
|
37
|
+
await db.initialize()
|
|
38
|
+
shell.addDataSource('default', db)
|
|
39
|
+
|
|
40
|
+
here = await db.getRepository(shell.Domain).save({ name: 'here', subdomain: 'here' })
|
|
41
|
+
elsewhere = await db.getRepository(shell.Domain).save({ name: 'elsewhere', subdomain: 'elsewhere' })
|
|
42
|
+
|
|
43
|
+
const person = (name: string, domains: any[]) =>
|
|
44
|
+
db.getRepository(User).save({ name, email: `${name}@example.com`, password: 'x', status: 'activated', domains })
|
|
45
|
+
|
|
46
|
+
viewer = await person('viewer', [here])
|
|
47
|
+
worker = await person('worker', [here])
|
|
48
|
+
stranger = await person('stranger', [elsewhere])
|
|
49
|
+
|
|
50
|
+
const aCase = (name: string) =>
|
|
51
|
+
db.getRepository(ActivityInstance).save({ domain: here, name, state: 'issued', issuer: viewer })
|
|
52
|
+
const instance = await aCase('i')
|
|
53
|
+
|
|
54
|
+
/* Two threads the worker holds and one that ended - the ended one is not work. One thread per case and person. */
|
|
55
|
+
for (const state of ['assigned', 'started', 'ended']) {
|
|
56
|
+
await db
|
|
57
|
+
.getRepository(ActivityThread)
|
|
58
|
+
.save({ domain: here, name: state, round: 1, state, assignee: worker, activityInstance: await aCase(state) })
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* One approval waiting on the worker (ActivityApprovalJudgment.Pending is the empty string). */
|
|
62
|
+
const submitted = await db
|
|
63
|
+
.getRepository(ActivityThread)
|
|
64
|
+
.save({ domain: here, name: 's', round: 1, state: 'submitted', activityInstance: instance })
|
|
65
|
+
await db
|
|
66
|
+
.getRepository(ActivityApproval)
|
|
67
|
+
.save({ domain: here, activityThread: submitted, approver: worker, order: 1, round: 1, judgment: '' })
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
afterAll(async () => db?.destroy())
|
|
71
|
+
|
|
72
|
+
it('★ counts what a colleague holds - threads not finished and approvals waiting', async () => {
|
|
73
|
+
const work = await openWork(worker.id)
|
|
74
|
+
expect(work).toEqual({ toDos: 2, approvalsPending: 1 })
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
it("★ gives the same numbers the person's own badges give", async () => {
|
|
78
|
+
const summary = new ActivitySummaryQuery()
|
|
79
|
+
const work = await openWork(worker.id)
|
|
80
|
+
|
|
81
|
+
expect(await summary.numberOfToDos({}, asWorker())).toBe(work.toDos)
|
|
82
|
+
expect(await summary.numberOfApprovalPendings({}, asWorker())).toBe(work.approvalsPending)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
it('★ answers nothing for a person who is not a member of this domain', async () => {
|
|
86
|
+
expect(await openWork(stranger.id)).toBeNull()
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
it('holds zero for a member with nothing, which is not the same as no answer', async () => {
|
|
90
|
+
expect(await openWork(viewer.id)).toEqual({ toDos: 0, approvalsPending: 0 })
|
|
91
|
+
})
|
package/translations/en.json
CHANGED
|
@@ -21,8 +21,6 @@
|
|
|
21
21
|
"button.reject": "reject",
|
|
22
22
|
"button.restart": "restart",
|
|
23
23
|
"button.save-note": "save note",
|
|
24
|
-
"button.schedule-task": "schedule task",
|
|
25
|
-
"button.start": "start",
|
|
26
24
|
"button.submit": "submit",
|
|
27
25
|
"button.unschedule-task": "unschedule task",
|
|
28
26
|
"error.activity not found": "this task template ({activity}) cannot be found.",
|
|
@@ -65,7 +63,6 @@
|
|
|
65
63
|
"field.approval-changed-at": "last change",
|
|
66
64
|
"field.approval-drafter": "submitted by",
|
|
67
65
|
"field.approval-due": "due",
|
|
68
|
-
"field.approval-line": "approval line",
|
|
69
66
|
"field.approval-order": "order",
|
|
70
67
|
"field.approval-owner": "owner",
|
|
71
68
|
"field.approval-subject": "subject",
|
|
@@ -78,11 +75,9 @@
|
|
|
78
75
|
"field.assignees": "assignees",
|
|
79
76
|
"field.comment": "comment",
|
|
80
77
|
"field.covering-tests": "tests",
|
|
81
|
-
"field.created-at": "created at",
|
|
82
78
|
"field.cycle-time": "CT(sec)",
|
|
83
79
|
"field.due-at": "due at",
|
|
84
80
|
"field.due-in": "due in",
|
|
85
|
-
"field.hidden": "hidden",
|
|
86
81
|
"field.inout": "inout",
|
|
87
82
|
"field.input": "input",
|
|
88
83
|
"field.input-key": "input-key",
|
|
@@ -106,7 +101,6 @@
|
|
|
106
101
|
"field.reason": "reason",
|
|
107
102
|
"field.release": "release",
|
|
108
103
|
"field.report-source": "report source",
|
|
109
|
-
"field.report-type": "report type",
|
|
110
104
|
"field.round": "round",
|
|
111
105
|
"field.schedule": "schedule",
|
|
112
106
|
"field.search-keys": "search keys",
|
|
@@ -116,15 +110,12 @@
|
|
|
116
110
|
"field.started-at": "started at",
|
|
117
111
|
"field.starting-type": "starting type",
|
|
118
112
|
"field.status": "status",
|
|
119
|
-
"field.supervisory-role": "supervisory role",
|
|
120
113
|
"field.t-key": "translation key",
|
|
121
114
|
"field.tact-time": "TT(sec)",
|
|
122
|
-
"field.tag": "tag name",
|
|
123
115
|
"field.terminated-at": "terminated at",
|
|
124
116
|
"field.ui-source": "UI source",
|
|
125
117
|
"field.ui-type": "UI type",
|
|
126
118
|
"field.unit": "unit",
|
|
127
|
-
"field.updated-at": "updated at",
|
|
128
119
|
"field.view-source": "view source",
|
|
129
120
|
"field.view-type": "view type",
|
|
130
121
|
"field.what-is-built": "what is built",
|
|
@@ -269,7 +260,6 @@
|
|
|
269
260
|
"text.approval-comment-hint": "you can approve without a comment. to reject, you must write a reason.",
|
|
270
261
|
"text.approval-is-irreversible": "once approved, this cannot be undone.",
|
|
271
262
|
"text.approval-is-reversible": "this can be undone after approval.",
|
|
272
|
-
"text.approval-line-empty": "no approvers",
|
|
273
263
|
"text.approval-line-steps": "{n} steps",
|
|
274
264
|
"text.approval-line-unknown": "could not read the approval line",
|
|
275
265
|
"text.approval-view-not-loaded": "this activity's approval screen could not be loaded.",
|
|
@@ -398,5 +388,7 @@
|
|
|
398
388
|
"title.todo list": "to do",
|
|
399
389
|
"title.work-doors": "approval and assignment forms in this plant",
|
|
400
390
|
"title.work-doors-next": "What to do next",
|
|
401
|
-
"title.worklist dashboard": "worklist dashboard"
|
|
391
|
+
"title.worklist dashboard": "worklist dashboard",
|
|
392
|
+
"title.person-open-work": "open work",
|
|
393
|
+
"text.person-open-work": "to-dos {toDos} · approvals waiting {approvals}"
|
|
402
394
|
}
|
package/translations/ja.json
CHANGED
|
@@ -21,8 +21,6 @@
|
|
|
21
21
|
"button.reject": "差し戻し",
|
|
22
22
|
"button.restart": "再スタート",
|
|
23
23
|
"button.save-note": "メモを保存",
|
|
24
|
-
"button.schedule-task": "タスクをスケジュール",
|
|
25
|
-
"button.start": "スタート",
|
|
26
24
|
"button.submit": "提出",
|
|
27
25
|
"button.unschedule-task": "タスクのスケジュールを解除",
|
|
28
26
|
"error.activity not found": "このタスクテンプレート({activity})が見つかりません。",
|
|
@@ -65,7 +63,6 @@
|
|
|
65
63
|
"field.approval-changed-at": "最終変更",
|
|
66
64
|
"field.approval-drafter": "起案者",
|
|
67
65
|
"field.approval-due": "期限",
|
|
68
|
-
"field.approval-line": "決裁ライン",
|
|
69
66
|
"field.approval-order": "承認順序",
|
|
70
67
|
"field.approval-owner": "担当者",
|
|
71
68
|
"field.approval-subject": "案件",
|
|
@@ -78,11 +75,9 @@
|
|
|
78
75
|
"field.assignees": "譲受人",
|
|
79
76
|
"field.comment": "コメント",
|
|
80
77
|
"field.covering-tests": "テスト",
|
|
81
|
-
"field.created-at": "作成時間",
|
|
82
78
|
"field.cycle-time": "CT(秒)",
|
|
83
79
|
"field.due-at": "満期時間",
|
|
84
80
|
"field.due-in": "残り時間",
|
|
85
|
-
"field.hidden": "隠す",
|
|
86
81
|
"field.inout": "入出力",
|
|
87
82
|
"field.input": "入力値",
|
|
88
83
|
"field.input-key": "入力キー",
|
|
@@ -106,7 +101,6 @@
|
|
|
106
101
|
"field.reason": "理由",
|
|
107
102
|
"field.release": "配布バージョン",
|
|
108
103
|
"field.report-source": "レポート ソース",
|
|
109
|
-
"field.report-type": "レポート タイプ",
|
|
110
104
|
"field.round": "次数",
|
|
111
105
|
"field.schedule": "スケジュール",
|
|
112
106
|
"field.search-keys": "検索キー",
|
|
@@ -116,15 +110,12 @@
|
|
|
116
110
|
"field.started-at": "開始時間",
|
|
117
111
|
"field.starting-type": "開始タイプ",
|
|
118
112
|
"field.status": "状態",
|
|
119
|
-
"field.supervisory-role": "管理者ロール",
|
|
120
113
|
"field.t-key": "翻訳キー",
|
|
121
114
|
"field.tact-time": "TT(秒)",
|
|
122
|
-
"field.tag": "ダグ名",
|
|
123
115
|
"field.terminated-at": "完了時間",
|
|
124
116
|
"field.ui-source": "画面ソース",
|
|
125
117
|
"field.ui-type": "画面タイプ",
|
|
126
118
|
"field.unit": "単位",
|
|
127
|
-
"field.updated-at": "修正時間",
|
|
128
119
|
"field.view-source": "ビュー ソース",
|
|
129
120
|
"field.view-type": "ビュー タイプ",
|
|
130
121
|
"field.what-is-built": "実装済みのもの",
|
|
@@ -269,7 +260,6 @@
|
|
|
269
260
|
"text.approval-comment-hint": "承認は意見なしでもできます。差し戻すには理由を書く必要があります。",
|
|
270
261
|
"text.approval-is-irreversible": "承認すると元に戻せません。",
|
|
271
262
|
"text.approval-is-reversible": "承認後に元に戻せます。",
|
|
272
|
-
"text.approval-line-empty": "決裁者がいません",
|
|
273
263
|
"text.approval-line-steps": "{n}段階",
|
|
274
264
|
"text.approval-line-unknown": "決裁ラインを読めませんでした",
|
|
275
265
|
"text.approval-view-not-loaded": "この業務の承認画面を読み込めませんでした。",
|
|
@@ -398,5 +388,7 @@
|
|
|
398
388
|
"title.todo list": "やること",
|
|
399
389
|
"title.work-doors": "この工場の承認・割当様式",
|
|
400
390
|
"title.work-doors-next": "次にすること",
|
|
401
|
-
"title.worklist dashboard": "ワークリストダッシュボード"
|
|
391
|
+
"title.worklist dashboard": "ワークリストダッシュボード",
|
|
392
|
+
"title.person-open-work": "担当中の作業",
|
|
393
|
+
"text.person-open-work": "作業 {toDos} · 承認待ち {approvals}"
|
|
402
394
|
}
|
package/translations/ko.json
CHANGED
|
@@ -21,8 +21,6 @@
|
|
|
21
21
|
"button.reject": "반려",
|
|
22
22
|
"button.restart": "재시작",
|
|
23
23
|
"button.save-note": "메모 저장",
|
|
24
|
-
"button.schedule-task": "스케쥴 예약",
|
|
25
|
-
"button.start": "시작",
|
|
26
24
|
"button.submit": "제출",
|
|
27
25
|
"button.unschedule-task": "스케쥴 해제",
|
|
28
26
|
"error.activity not found": "이 작업템플릿({activity})을 찾을 수 없습니다.",
|
|
@@ -65,7 +63,6 @@
|
|
|
65
63
|
"field.approval-changed-at": "최근 변경",
|
|
66
64
|
"field.approval-drafter": "기안자",
|
|
67
65
|
"field.approval-due": "기한",
|
|
68
|
-
"field.approval-line": "결재선",
|
|
69
66
|
"field.approval-order": "결재순번",
|
|
70
67
|
"field.approval-owner": "담당자",
|
|
71
68
|
"field.approval-subject": "안건",
|
|
@@ -78,11 +75,9 @@
|
|
|
78
75
|
"field.assignees": "피할당자",
|
|
79
76
|
"field.comment": "코멘트",
|
|
80
77
|
"field.covering-tests": "테스트",
|
|
81
|
-
"field.created-at": "생성 시간",
|
|
82
78
|
"field.cycle-time": "CT(초)",
|
|
83
79
|
"field.due-at": "만기 시간",
|
|
84
80
|
"field.due-in": "잔여 시간",
|
|
85
|
-
"field.hidden": "숨기기",
|
|
86
81
|
"field.inout": "입출력",
|
|
87
82
|
"field.input": "입력값",
|
|
88
83
|
"field.input-key": "입력키",
|
|
@@ -106,7 +101,6 @@
|
|
|
106
101
|
"field.reason": "사유",
|
|
107
102
|
"field.release": "배포버전",
|
|
108
103
|
"field.report-source": "리포트 소스",
|
|
109
|
-
"field.report-type": "리포트 타입",
|
|
110
104
|
"field.round": "차수",
|
|
111
105
|
"field.schedule": "스케줄",
|
|
112
106
|
"field.search-keys": "검색키",
|
|
@@ -116,15 +110,12 @@
|
|
|
116
110
|
"field.started-at": "시작 시간",
|
|
117
111
|
"field.starting-type": "시작 유형",
|
|
118
112
|
"field.status": "상태",
|
|
119
|
-
"field.supervisory-role": "관리자 역할",
|
|
120
113
|
"field.t-key": "번역 키",
|
|
121
114
|
"field.tact-time": "TT(초)",
|
|
122
|
-
"field.tag": "태그이름",
|
|
123
115
|
"field.terminated-at": "완료 시간",
|
|
124
116
|
"field.ui-source": "화면 소스",
|
|
125
117
|
"field.ui-type": "화면 타입",
|
|
126
118
|
"field.unit": "단위",
|
|
127
|
-
"field.updated-at": "수정 시간",
|
|
128
119
|
"field.view-source": "뷰 소스",
|
|
129
120
|
"field.view-type": "뷰 타입",
|
|
130
121
|
"field.what-is-built": "구현된 것",
|
|
@@ -269,7 +260,6 @@
|
|
|
269
260
|
"text.approval-comment-hint": "승인은 의견 없이도 할 수 있습니다. 반려하려면 이유를 적어야 합니다.",
|
|
270
261
|
"text.approval-is-irreversible": "승인하면 되돌릴 수 없습니다.",
|
|
271
262
|
"text.approval-is-reversible": "승인한 뒤에 되돌릴 수 있습니다.",
|
|
272
|
-
"text.approval-line-empty": "결재자가 없습니다",
|
|
273
263
|
"text.approval-line-steps": "{n}단계",
|
|
274
264
|
"text.approval-line-unknown": "결재선을 읽지 못했습니다",
|
|
275
265
|
"text.approval-view-not-loaded": "이 업무의 결재 화면을 불러오지 못했습니다.",
|
|
@@ -398,5 +388,7 @@
|
|
|
398
388
|
"title.todo list": "할 일",
|
|
399
389
|
"title.work-doors": "이 공장의 결재·배정 양식",
|
|
400
390
|
"title.work-doors-next": "다음에 할 일",
|
|
401
|
-
"title.worklist dashboard": "업무실적 대시보드"
|
|
391
|
+
"title.worklist dashboard": "업무실적 대시보드",
|
|
392
|
+
"title.person-open-work": "맡은 일",
|
|
393
|
+
"text.person-open-work": "할 일 {toDos} · 결재 차례 {approvals}"
|
|
402
394
|
}
|
package/translations/ms.json
CHANGED
|
@@ -21,8 +21,6 @@
|
|
|
21
21
|
"button.reject": "tolak",
|
|
22
22
|
"button.restart": "mulai semula",
|
|
23
23
|
"button.save-note": "simpan nota",
|
|
24
|
-
"button.schedule-task": "jadualkan tugas",
|
|
25
|
-
"button.start": "mulakan",
|
|
26
24
|
"button.submit": "hantar",
|
|
27
25
|
"button.unschedule-task": "batalkan jadual tugas",
|
|
28
26
|
"error.activity not found": "Templat tugas ini ({activity}) tidak dijumpai.",
|
|
@@ -65,7 +63,6 @@
|
|
|
65
63
|
"field.approval-changed-at": "perubahan terakhir",
|
|
66
64
|
"field.approval-drafter": "dihantar oleh",
|
|
67
65
|
"field.approval-due": "tarikh akhir",
|
|
68
|
-
"field.approval-line": "barisan kelulusan",
|
|
69
66
|
"field.approval-order": "susunan kelulusan",
|
|
70
67
|
"field.approval-owner": "pemilik",
|
|
71
68
|
"field.approval-subject": "perkara",
|
|
@@ -78,11 +75,9 @@
|
|
|
78
75
|
"field.assignees": "penerima tugasan",
|
|
79
76
|
"field.comment": "komen",
|
|
80
77
|
"field.covering-tests": "ujian",
|
|
81
|
-
"field.created-at": "dicipta pada",
|
|
82
78
|
"field.cycle-time": "CT(detik)",
|
|
83
79
|
"field.due-at": "due pada",
|
|
84
80
|
"field.due-in": "due in",
|
|
85
|
-
"field.hidden": "tersembunyi",
|
|
86
81
|
"field.inout": "masuk/keluar",
|
|
87
82
|
"field.input": "input",
|
|
88
83
|
"field.input-key": "kunci input",
|
|
@@ -106,7 +101,6 @@
|
|
|
106
101
|
"field.reason": "sebab",
|
|
107
102
|
"field.release": "lepas",
|
|
108
103
|
"field.report-source": "sumber laporan",
|
|
109
|
-
"field.report-type": "jenis laporan",
|
|
110
104
|
"field.round": "pusingan",
|
|
111
105
|
"field.schedule": "jadual",
|
|
112
106
|
"field.search-keys": "kunci carian",
|
|
@@ -116,15 +110,12 @@
|
|
|
116
110
|
"field.started-at": "bermula pada",
|
|
117
111
|
"field.starting-type": "jenis mula",
|
|
118
112
|
"field.status": "status",
|
|
119
|
-
"field.supervisory-role": "peranan penyelia",
|
|
120
113
|
"field.t-key": "kunci terjemahan",
|
|
121
114
|
"field.tact-time": "TT(detik)",
|
|
122
|
-
"field.tag": "nama tag",
|
|
123
115
|
"field.terminated-at": "berakhir pada",
|
|
124
116
|
"field.ui-source": "sumber UI",
|
|
125
117
|
"field.ui-type": "jenis UI",
|
|
126
118
|
"field.unit": "unit",
|
|
127
|
-
"field.updated-at": "dikemaskini pada",
|
|
128
119
|
"field.view-source": "sumber pandangan",
|
|
129
120
|
"field.view-type": "jenis pandangan",
|
|
130
121
|
"field.what-is-built": "yang telah dibina",
|
|
@@ -269,7 +260,6 @@
|
|
|
269
260
|
"text.approval-comment-hint": "anda boleh meluluskan tanpa komen. untuk menolak, anda mesti menulis sebab.",
|
|
270
261
|
"text.approval-is-irreversible": "setelah diluluskan, ini tidak boleh dibatalkan.",
|
|
271
262
|
"text.approval-is-reversible": "ini boleh dibatalkan selepas kelulusan.",
|
|
272
|
-
"text.approval-line-empty": "tiada pelulus",
|
|
273
263
|
"text.approval-line-steps": "{n} peringkat",
|
|
274
264
|
"text.approval-line-unknown": "tidak dapat membaca barisan kelulusan",
|
|
275
265
|
"text.approval-view-not-loaded": "skrin kelulusan untuk aktiviti ini tidak dapat dimuatkan.",
|
|
@@ -398,5 +388,7 @@
|
|
|
398
388
|
"title.todo list": "untuk dibuat",
|
|
399
389
|
"title.work-doors": "borang kelulusan dan tugasan di kilang ini",
|
|
400
390
|
"title.work-doors-next": "Apa yang perlu dilakukan",
|
|
401
|
-
"title.worklist dashboard": "papan pemantauan senarai kerja"
|
|
391
|
+
"title.worklist dashboard": "papan pemantauan senarai kerja",
|
|
392
|
+
"title.person-open-work": "kerja terbuka",
|
|
393
|
+
"text.person-open-work": "tugasan {toDos} · kelulusan menunggu {approvals}"
|
|
402
394
|
}
|
package/translations/zh.json
CHANGED
|
@@ -21,8 +21,6 @@
|
|
|
21
21
|
"button.reject": "退回",
|
|
22
22
|
"button.restart": "重新开始",
|
|
23
23
|
"button.save-note": "保存备注",
|
|
24
|
-
"button.schedule-task": "安排任务",
|
|
25
|
-
"button.start": "开始",
|
|
26
24
|
"button.submit": "提交",
|
|
27
25
|
"button.unschedule-task": "取消安排任务",
|
|
28
26
|
"error.activity not found": "未找到此任务模板({activity})。",
|
|
@@ -65,7 +63,6 @@
|
|
|
65
63
|
"field.approval-changed-at": "最近变更",
|
|
66
64
|
"field.approval-drafter": "起草人",
|
|
67
65
|
"field.approval-due": "期限",
|
|
68
|
-
"field.approval-line": "审批线",
|
|
69
66
|
"field.approval-order": "审批顺序",
|
|
70
67
|
"field.approval-owner": "负责人",
|
|
71
68
|
"field.approval-subject": "事项",
|
|
@@ -78,11 +75,9 @@
|
|
|
78
75
|
"field.assignees": "受让人们",
|
|
79
76
|
"field.comment": "评论",
|
|
80
77
|
"field.covering-tests": "测试",
|
|
81
|
-
"field.created-at": "创建于",
|
|
82
78
|
"field.cycle-time": "CT(秒)",
|
|
83
79
|
"field.due-at": "到期时间",
|
|
84
80
|
"field.due-in": "到期于",
|
|
85
|
-
"field.hidden": "隐藏",
|
|
86
81
|
"field.inout": "进出",
|
|
87
82
|
"field.input": "输入值",
|
|
88
83
|
"field.input-key": "输入键",
|
|
@@ -106,7 +101,6 @@
|
|
|
106
101
|
"field.reason": "事由",
|
|
107
102
|
"field.release": "释放",
|
|
108
103
|
"field.report-source": "报告来源",
|
|
109
|
-
"field.report-type": "报告类型",
|
|
110
104
|
"field.round": "轮次",
|
|
111
105
|
"field.schedule": "日程",
|
|
112
106
|
"field.search-keys": "搜索关键字",
|
|
@@ -116,15 +110,12 @@
|
|
|
116
110
|
"field.started-at": "开始于",
|
|
117
111
|
"field.starting-type": "开始类型",
|
|
118
112
|
"field.status": "状态",
|
|
119
|
-
"field.supervisory-role": "监管角色",
|
|
120
113
|
"field.t-key": "翻译键",
|
|
121
114
|
"field.tact-time": "TT(秒)",
|
|
122
|
-
"field.tag": "标签名",
|
|
123
115
|
"field.terminated-at": "终止于",
|
|
124
116
|
"field.ui-source": "UI来源",
|
|
125
117
|
"field.ui-type": "UI类型",
|
|
126
118
|
"field.unit": "单位",
|
|
127
|
-
"field.updated-at": "更新于",
|
|
128
119
|
"field.view-source": "视图来源",
|
|
129
120
|
"field.view-type": "视图类型",
|
|
130
121
|
"field.what-is-built": "已实现的内容",
|
|
@@ -269,7 +260,6 @@
|
|
|
269
260
|
"text.approval-comment-hint": "批准时可以不填意见。驳回时必须填写理由。",
|
|
270
261
|
"text.approval-is-irreversible": "批准后无法撤销。",
|
|
271
262
|
"text.approval-is-reversible": "批准后可以撤销。",
|
|
272
|
-
"text.approval-line-empty": "没有审批人",
|
|
273
263
|
"text.approval-line-steps": "{n} 级",
|
|
274
264
|
"text.approval-line-unknown": "无法读取审批线",
|
|
275
265
|
"text.approval-view-not-loaded": "无法加载此业务的审批界面。",
|
|
@@ -398,5 +388,7 @@
|
|
|
398
388
|
"title.todo list": "待办",
|
|
399
389
|
"title.work-doors": "本工厂的审批与分配表单",
|
|
400
390
|
"title.work-doors-next": "接下来要做的",
|
|
401
|
-
"title.worklist dashboard": "工作清单仪表板"
|
|
391
|
+
"title.worklist dashboard": "工作清单仪表板",
|
|
392
|
+
"title.person-open-work": "待办工作",
|
|
393
|
+
"text.person-open-work": "待办 {toDos} · 待审批 {approvals}"
|
|
402
394
|
}
|