@neutron.co.id/operasional-interfaces 1.17.31 → 1.17.32
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/build/@office/config.mjs +3 -0
- package/build/@office/models/personalia/submission/SubmissionAction/SubmissionAction.vue +313 -0
- package/build/@office/models/personalia/submission/SubmissionAction/SubmissionActionDecision.vue +189 -0
- package/build/@office/models/personalia/submission/SubmissionAction/index.d.ts +2 -0
- package/build/@office/models/personalia/submission/SubmissionAction/index.mjs +2 -0
- package/build/@office/models/personalia/submission/SubmissionAudit.vue +60 -31
- package/build/@office/models/personalia/submission/SubmissionNoteModal/SubmissionNoteModal.vue +94 -0
- package/build/@office/models/personalia/submission/SubmissionNoteModal/SubmissionNoteViewModal.vue +149 -0
- package/build/@office/models/personalia/submission/SubmissionNoteModal/index.d.ts +1 -0
- package/build/@office/models/personalia/submission/SubmissionNoteModal/index.mjs +1 -0
- package/build/@office/models/personalia/submission/SubmissionStaff.vue +14 -0
- package/build/@office/models/personalia/submission/index.d.ts +2 -0
- package/build/@office/models/personalia/submission/index.mjs +2 -0
- package/build/@package/@office/models/personalia/submission/SubmissionAction/SubmissionAction.vue.d.ts +2 -0
- package/build/@package/@office/models/personalia/submission/SubmissionAction/SubmissionActionDecision.vue.d.ts +2 -0
- package/build/@package/@office/models/personalia/submission/SubmissionAction/index.d.ts +2 -0
- package/build/@package/@office/models/personalia/submission/SubmissionNoteModal/SubmissionNoteModal.vue.d.ts +56 -0
- package/build/@package/@office/models/personalia/submission/SubmissionNoteModal/SubmissionNoteViewModal.vue.d.ts +46 -0
- package/build/@package/@office/models/personalia/submission/SubmissionNoteModal/index.d.ts +1 -0
- package/build/@package/@office/models/personalia/submission/index.d.ts +2 -0
- package/build/mock/index.cjs +1079 -457
- package/build/mock/index.mjs +1081 -459
- package/build/mock/style.css +220 -2
- package/build/module.json +1 -1
- package/build/nuxt.json +1 -1
- package/build/nuxt.mjs +3 -0
- package/package.json +5 -5
package/build/@office/models/personalia/submission/SubmissionNoteModal/SubmissionNoteModal.vue
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { NeonButton, NeonModal, NeonSheet } from '@neon.id/interfaces'
|
|
3
|
+
import { NeonTextarea } from '@neon.id/form'
|
|
4
|
+
import { ref, watch } from 'vue'
|
|
5
|
+
|
|
6
|
+
defineOptions({ name: 'SubmissionNoteModal' })
|
|
7
|
+
|
|
8
|
+
const props = defineProps({
|
|
9
|
+
isActive: {
|
|
10
|
+
type: Boolean,
|
|
11
|
+
default: false,
|
|
12
|
+
},
|
|
13
|
+
submissionId: {
|
|
14
|
+
type: String,
|
|
15
|
+
default: '',
|
|
16
|
+
},
|
|
17
|
+
note: {
|
|
18
|
+
type: String,
|
|
19
|
+
default: '',
|
|
20
|
+
},
|
|
21
|
+
isDisabled: {
|
|
22
|
+
type: Boolean,
|
|
23
|
+
default: false,
|
|
24
|
+
},
|
|
25
|
+
isSaving: {
|
|
26
|
+
type: Boolean,
|
|
27
|
+
default: false,
|
|
28
|
+
},
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
const emit = defineEmits(['close', 'save'])
|
|
32
|
+
|
|
33
|
+
const noteInput = ref(props.note)
|
|
34
|
+
|
|
35
|
+
watch(
|
|
36
|
+
() => props.note,
|
|
37
|
+
(newValue) => {
|
|
38
|
+
noteInput.value = newValue
|
|
39
|
+
},
|
|
40
|
+
)
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<template>
|
|
44
|
+
<NeonModal size="lg" :is-active="isActive" @close="$emit('close')">
|
|
45
|
+
<NeonSheet title="Catatan Pengawas" @close="$emit('close')">
|
|
46
|
+
<div class="submission-note-modal">
|
|
47
|
+
<span class="label">Detail Catatan</span>
|
|
48
|
+
<NeonTextarea
|
|
49
|
+
v-model="noteInput"
|
|
50
|
+
placeholder="Silahkan berikan detail catatan"
|
|
51
|
+
:rows="5"
|
|
52
|
+
:is-disabled="isDisabled"
|
|
53
|
+
is-full
|
|
54
|
+
/>
|
|
55
|
+
<ul class="list-disc pl-5">
|
|
56
|
+
<li>
|
|
57
|
+
<span class="text-sm">
|
|
58
|
+
Catatan ini bersifat privat dan hanya dapat dibaca oleh Anda serta
|
|
59
|
+
pihak penyetuju.
|
|
60
|
+
</span>
|
|
61
|
+
</li>
|
|
62
|
+
</ul>
|
|
63
|
+
</div>
|
|
64
|
+
<template #footer>
|
|
65
|
+
<div class="w-full py-4">
|
|
66
|
+
<NeonButton
|
|
67
|
+
label="Simpan Catatan"
|
|
68
|
+
color="dark"
|
|
69
|
+
display="fill"
|
|
70
|
+
:is-disabled="!noteInput || isSaving || isDisabled"
|
|
71
|
+
:is-loading="isSaving"
|
|
72
|
+
is-full
|
|
73
|
+
@click="emit('save', noteInput)"
|
|
74
|
+
/>
|
|
75
|
+
</div>
|
|
76
|
+
</template>
|
|
77
|
+
</NeonSheet>
|
|
78
|
+
</NeonModal>
|
|
79
|
+
</template>
|
|
80
|
+
|
|
81
|
+
<style scoped>
|
|
82
|
+
.submission-note-modal {
|
|
83
|
+
@apply flex flex-col gap-4;
|
|
84
|
+
|
|
85
|
+
.label {
|
|
86
|
+
@apply text-base font-medium text-black;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
:deep(.neon-sheet-footer) {
|
|
90
|
+
height: 70px !important;
|
|
91
|
+
padding-top: 20px !important;
|
|
92
|
+
padding-bottom: 20px !important;
|
|
93
|
+
}
|
|
94
|
+
</style>
|
package/build/@office/models/personalia/submission/SubmissionNoteModal/SubmissionNoteViewModal.vue
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { NeonIcon, NeonModal, NeonSheet } from '@neon.id/interfaces'
|
|
3
|
+
import { ref, computed, type PropType } from 'vue'
|
|
4
|
+
|
|
5
|
+
defineOptions({ name: 'SubmissionNoteViewModal' })
|
|
6
|
+
|
|
7
|
+
interface SubmissionNoteOwner {
|
|
8
|
+
id: string
|
|
9
|
+
name: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface SubmissionNote {
|
|
13
|
+
id: string
|
|
14
|
+
note: string
|
|
15
|
+
owner: SubmissionNoteOwner
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface StaffNoteGroup {
|
|
19
|
+
staffId: string
|
|
20
|
+
staffName: string
|
|
21
|
+
notes: SubmissionNote[]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const props = defineProps({
|
|
25
|
+
isActive: {
|
|
26
|
+
type: Boolean,
|
|
27
|
+
default: false,
|
|
28
|
+
},
|
|
29
|
+
submissionId: {
|
|
30
|
+
type: String,
|
|
31
|
+
default: '',
|
|
32
|
+
},
|
|
33
|
+
notes: {
|
|
34
|
+
type: Array as PropType<SubmissionNote[]>,
|
|
35
|
+
default: () => [],
|
|
36
|
+
},
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
defineEmits(['close'])
|
|
40
|
+
|
|
41
|
+
const expanded = ref<Record<string, boolean>>({})
|
|
42
|
+
|
|
43
|
+
const groupedNotes = computed<StaffNoteGroup[]>(() => {
|
|
44
|
+
const map = new Map<string, StaffNoteGroup>()
|
|
45
|
+
for (const item of props.notes) {
|
|
46
|
+
const group = map.get(item.owner.id)
|
|
47
|
+
if (group) {
|
|
48
|
+
group.notes.push(item)
|
|
49
|
+
} else {
|
|
50
|
+
map.set(item.owner.id, {
|
|
51
|
+
staffId: item.owner.id,
|
|
52
|
+
staffName: item.owner.name,
|
|
53
|
+
notes: [item],
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return Array.from(map.values())
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
function toggle(staffId: string) {
|
|
61
|
+
expanded.value[staffId] = !expanded.value[staffId]
|
|
62
|
+
}
|
|
63
|
+
</script>
|
|
64
|
+
|
|
65
|
+
<template>
|
|
66
|
+
<NeonModal size="lg" :is-active="isActive" @close="$emit('close')">
|
|
67
|
+
<NeonSheet title="Catatan Pengawas" @close="$emit('close')">
|
|
68
|
+
<div class="submission-note-modal">
|
|
69
|
+
<div v-if="groupedNotes.length" class="note-list">
|
|
70
|
+
<div
|
|
71
|
+
v-for="group in groupedNotes"
|
|
72
|
+
:key="group.staffId"
|
|
73
|
+
class="note-group"
|
|
74
|
+
>
|
|
75
|
+
<button
|
|
76
|
+
type="button"
|
|
77
|
+
class="note-group-header"
|
|
78
|
+
@click="toggle(group.staffId)"
|
|
79
|
+
>
|
|
80
|
+
<span class="staff-name break-words text-left">
|
|
81
|
+
{{ group.staffName }}
|
|
82
|
+
</span>
|
|
83
|
+
<NeonIcon
|
|
84
|
+
:name="expanded[group.staffId] ? 'chevron-up' : 'chevron-down'"
|
|
85
|
+
class="chevron"
|
|
86
|
+
/>
|
|
87
|
+
</button>
|
|
88
|
+
<div v-if="expanded[group.staffId]" class="note-group-body">
|
|
89
|
+
<div
|
|
90
|
+
v-for="item in group.notes"
|
|
91
|
+
:key="item.id"
|
|
92
|
+
class="note-item break-words whitespace-pre-wrap"
|
|
93
|
+
>
|
|
94
|
+
{{ item.note }}
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
<span v-else class="empty">Belum ada catatan.</span>
|
|
100
|
+
<ul class="list-disc pl-5">
|
|
101
|
+
<li>
|
|
102
|
+
<span class="text-sm">
|
|
103
|
+
Seluruh catatan bersifat privat dan hanya dapat diakses oleh pihak
|
|
104
|
+
yang terkait.
|
|
105
|
+
</span>
|
|
106
|
+
</li>
|
|
107
|
+
</ul>
|
|
108
|
+
</div>
|
|
109
|
+
</NeonSheet>
|
|
110
|
+
</NeonModal>
|
|
111
|
+
</template>
|
|
112
|
+
|
|
113
|
+
<style scoped>
|
|
114
|
+
.submission-note-modal {
|
|
115
|
+
@apply flex flex-col gap-4;
|
|
116
|
+
|
|
117
|
+
.note-list {
|
|
118
|
+
@apply flex flex-col gap-2;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.note-group {
|
|
122
|
+
@apply border-b-[1px] border-gray-200 bg-white;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.note-group-header {
|
|
126
|
+
@apply flex w-full items-center justify-between px-4 py-3 text-left;
|
|
127
|
+
|
|
128
|
+
.staff-name {
|
|
129
|
+
@apply text-base font-medium text-black;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.chevron {
|
|
133
|
+
@apply h-4 w-4 text-gray-500;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.note-group-body {
|
|
138
|
+
@apply flex flex-col gap-2 px-4 py-3;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.note-item {
|
|
142
|
+
@apply whitespace-pre-wrap text-sm text-gray-800;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.empty {
|
|
146
|
+
@apply text-sm text-gray-500;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
</style>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as SubmissionNoteModal } from './SubmissionNoteModal.vue';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as SubmissionNoteModal } from "./SubmissionNoteModal.vue";
|
|
@@ -98,6 +98,20 @@
|
|
|
98
98
|
"
|
|
99
99
|
/>
|
|
100
100
|
</NeonFields>
|
|
101
|
+
<NeonField
|
|
102
|
+
v-model="values.deadline"
|
|
103
|
+
v-bind="fields.deadline"
|
|
104
|
+
:is-disabled="
|
|
105
|
+
values.status === 'processed' ||
|
|
106
|
+
values.status === 'waitForAudit' ||
|
|
107
|
+
values.status === 'approved' ||
|
|
108
|
+
values.status === 'raised' ||
|
|
109
|
+
values.status === 'delay' ||
|
|
110
|
+
values.status === 'monitored' ||
|
|
111
|
+
values.status === 'discontinued' ||
|
|
112
|
+
values.status === 'resolved'
|
|
113
|
+
"
|
|
114
|
+
/>
|
|
101
115
|
|
|
102
116
|
<OfficeRelation
|
|
103
117
|
v-model="values"
|
|
@@ -7,3 +7,5 @@ export { default as SubmissionForDecision } from './SubmissionForDecision.vue';
|
|
|
7
7
|
export { default as SubmissionSupervisor } from './SubmissionSupervisor.vue';
|
|
8
8
|
export * from './SubmissionCollection';
|
|
9
9
|
export * from './SubmissionSingle';
|
|
10
|
+
export * from './SubmissionAction';
|
|
11
|
+
export * from './SubmissionNoteModal';
|
|
@@ -7,3 +7,5 @@ export { default as SubmissionForDecision } from "./SubmissionForDecision.vue";
|
|
|
7
7
|
export { default as SubmissionSupervisor } from "./SubmissionSupervisor.vue";
|
|
8
8
|
export * from "./SubmissionCollection/index.mjs";
|
|
9
9
|
export * from "./SubmissionSingle/index.mjs";
|
|
10
|
+
export * from "./SubmissionAction/index.mjs";
|
|
11
|
+
export * from "./SubmissionNoteModal/index.mjs";
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{
|
|
2
|
+
isActive: {
|
|
3
|
+
type: BooleanConstructor;
|
|
4
|
+
default: boolean;
|
|
5
|
+
};
|
|
6
|
+
submissionId: {
|
|
7
|
+
type: StringConstructor;
|
|
8
|
+
default: string;
|
|
9
|
+
};
|
|
10
|
+
note: {
|
|
11
|
+
type: StringConstructor;
|
|
12
|
+
default: string;
|
|
13
|
+
};
|
|
14
|
+
isDisabled: {
|
|
15
|
+
type: BooleanConstructor;
|
|
16
|
+
default: boolean;
|
|
17
|
+
};
|
|
18
|
+
isSaving: {
|
|
19
|
+
type: BooleanConstructor;
|
|
20
|
+
default: boolean;
|
|
21
|
+
};
|
|
22
|
+
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
23
|
+
close: (...args: any[]) => void;
|
|
24
|
+
save: (...args: any[]) => void;
|
|
25
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
26
|
+
isActive: {
|
|
27
|
+
type: BooleanConstructor;
|
|
28
|
+
default: boolean;
|
|
29
|
+
};
|
|
30
|
+
submissionId: {
|
|
31
|
+
type: StringConstructor;
|
|
32
|
+
default: string;
|
|
33
|
+
};
|
|
34
|
+
note: {
|
|
35
|
+
type: StringConstructor;
|
|
36
|
+
default: string;
|
|
37
|
+
};
|
|
38
|
+
isDisabled: {
|
|
39
|
+
type: BooleanConstructor;
|
|
40
|
+
default: boolean;
|
|
41
|
+
};
|
|
42
|
+
isSaving: {
|
|
43
|
+
type: BooleanConstructor;
|
|
44
|
+
default: boolean;
|
|
45
|
+
};
|
|
46
|
+
}>> & {
|
|
47
|
+
onClose?: ((...args: any[]) => any) | undefined;
|
|
48
|
+
onSave?: ((...args: any[]) => any) | undefined;
|
|
49
|
+
}, {
|
|
50
|
+
isDisabled: boolean;
|
|
51
|
+
isActive: boolean;
|
|
52
|
+
note: string;
|
|
53
|
+
submissionId: string;
|
|
54
|
+
isSaving: boolean;
|
|
55
|
+
}, {}>;
|
|
56
|
+
export default _default;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
interface SubmissionNoteOwner {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
interface SubmissionNote {
|
|
7
|
+
id: string;
|
|
8
|
+
note: string;
|
|
9
|
+
owner: SubmissionNoteOwner;
|
|
10
|
+
}
|
|
11
|
+
declare const _default: import("vue").DefineComponent<{
|
|
12
|
+
isActive: {
|
|
13
|
+
type: BooleanConstructor;
|
|
14
|
+
default: boolean;
|
|
15
|
+
};
|
|
16
|
+
submissionId: {
|
|
17
|
+
type: StringConstructor;
|
|
18
|
+
default: string;
|
|
19
|
+
};
|
|
20
|
+
notes: {
|
|
21
|
+
type: PropType<SubmissionNote[]>;
|
|
22
|
+
default: () => never[];
|
|
23
|
+
};
|
|
24
|
+
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
25
|
+
close: (...args: any[]) => void;
|
|
26
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
27
|
+
isActive: {
|
|
28
|
+
type: BooleanConstructor;
|
|
29
|
+
default: boolean;
|
|
30
|
+
};
|
|
31
|
+
submissionId: {
|
|
32
|
+
type: StringConstructor;
|
|
33
|
+
default: string;
|
|
34
|
+
};
|
|
35
|
+
notes: {
|
|
36
|
+
type: PropType<SubmissionNote[]>;
|
|
37
|
+
default: () => never[];
|
|
38
|
+
};
|
|
39
|
+
}>> & {
|
|
40
|
+
onClose?: ((...args: any[]) => any) | undefined;
|
|
41
|
+
}, {
|
|
42
|
+
isActive: boolean;
|
|
43
|
+
notes: SubmissionNote[];
|
|
44
|
+
submissionId: string;
|
|
45
|
+
}, {}>;
|
|
46
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as SubmissionNoteModal } from './SubmissionNoteModal.vue';
|
|
@@ -7,3 +7,5 @@ export { default as SubmissionForDecision } from './SubmissionForDecision.vue';
|
|
|
7
7
|
export { default as SubmissionSupervisor } from './SubmissionSupervisor.vue';
|
|
8
8
|
export * from './SubmissionCollection';
|
|
9
9
|
export * from './SubmissionSingle';
|
|
10
|
+
export * from './SubmissionAction';
|
|
11
|
+
export * from './SubmissionNoteModal';
|