@neutron.co.id/operasional-interfaces 1.17.31 → 1.17.33
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 +322 -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 +1083 -457
- package/build/mock/index.mjs +1085 -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 +7 -7
package/build/@office/config.mjs
CHANGED
|
@@ -100,6 +100,9 @@ export const config = OfficeInterfaces.define({
|
|
|
100
100
|
"SubmissionSupervisor",
|
|
101
101
|
"SubmissionWaitingDecision",
|
|
102
102
|
"SubmissionForDecision",
|
|
103
|
+
"SubmissionAction",
|
|
104
|
+
"SubmissionActionDecision",
|
|
105
|
+
"SubmissionNoteModal",
|
|
103
106
|
// Submission Type
|
|
104
107
|
"SubmissionTypeCollection",
|
|
105
108
|
"SubmissionTypeSingle",
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useSingle } from '@neon.id/context'
|
|
3
|
+
import {
|
|
4
|
+
NeonButton,
|
|
5
|
+
NeonLabel,
|
|
6
|
+
NeonModal,
|
|
7
|
+
NeonModalDialog,
|
|
8
|
+
useToastStore,
|
|
9
|
+
} from '@neon.id/interfaces'
|
|
10
|
+
import type {
|
|
11
|
+
TPersonaliaSubmissionModel,
|
|
12
|
+
Schema,
|
|
13
|
+
} from '@neutron.co.id/personalia-models'
|
|
14
|
+
import { computed, onMounted, ref, watch } from 'vue'
|
|
15
|
+
import { ofetch } from 'ofetch'
|
|
16
|
+
import SubmissionNoteModal from '../SubmissionNoteModal/SubmissionNoteModal.vue'
|
|
17
|
+
import SubmissionNoteViewModal from '../SubmissionNoteModal/SubmissionNoteViewModal.vue'
|
|
18
|
+
import { apiUrl, useOperasional } from '../../../../common'
|
|
19
|
+
|
|
20
|
+
defineOptions({ name: 'SubmissionAction' })
|
|
21
|
+
|
|
22
|
+
const { isNew, values, id, isLoading } = useSingle<
|
|
23
|
+
Schema.Submission,
|
|
24
|
+
TPersonaliaSubmissionModel
|
|
25
|
+
>()
|
|
26
|
+
|
|
27
|
+
const toast = useToastStore()
|
|
28
|
+
|
|
29
|
+
const staff = useOperasional()
|
|
30
|
+
const isDirector = computed(() => {
|
|
31
|
+
const staffRoles = staff.staff.value?.user?.roles?.map((item) => item.handle)
|
|
32
|
+
if (
|
|
33
|
+
staffRoles?.includes('neu:pengambilKeputusan') ||
|
|
34
|
+
staffRoles?.includes('neu:pimpinan')
|
|
35
|
+
) {
|
|
36
|
+
return true
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return false
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
const actions = {
|
|
43
|
+
prepared: {
|
|
44
|
+
iconLeft: 'pen-line',
|
|
45
|
+
label: 'Disiapkan',
|
|
46
|
+
color: 'base',
|
|
47
|
+
},
|
|
48
|
+
raised: {
|
|
49
|
+
iconLeft: 'arrow-up-from-line',
|
|
50
|
+
label: 'Dinaikkan',
|
|
51
|
+
color: 'dark',
|
|
52
|
+
},
|
|
53
|
+
waitForAudit: {
|
|
54
|
+
label: 'Menunggu Pengawas Lain',
|
|
55
|
+
color: '#57452fff',
|
|
56
|
+
iconLeft: 'hourglass',
|
|
57
|
+
},
|
|
58
|
+
processed: {
|
|
59
|
+
iconLeft: 'spinner',
|
|
60
|
+
label: 'Diproses',
|
|
61
|
+
color: 'warning',
|
|
62
|
+
},
|
|
63
|
+
delay: {
|
|
64
|
+
iconLeft: 'circle-stop',
|
|
65
|
+
label: 'Ditunda',
|
|
66
|
+
color: 'danger',
|
|
67
|
+
},
|
|
68
|
+
approved: {
|
|
69
|
+
iconLeft: 'list-check',
|
|
70
|
+
label: 'Disetujui',
|
|
71
|
+
color: 'success',
|
|
72
|
+
},
|
|
73
|
+
monitored: {
|
|
74
|
+
iconLeft: 'binoculars',
|
|
75
|
+
label: 'Dipantau',
|
|
76
|
+
color: 'info',
|
|
77
|
+
},
|
|
78
|
+
discontinued: {
|
|
79
|
+
iconLeft: 'ban',
|
|
80
|
+
label: 'Dihentikan',
|
|
81
|
+
color: 'danger',
|
|
82
|
+
},
|
|
83
|
+
resolved: {
|
|
84
|
+
iconLeft: 'file-check',
|
|
85
|
+
label: 'Diselesaikan',
|
|
86
|
+
color: 'success',
|
|
87
|
+
},
|
|
88
|
+
} as Record<string, any>
|
|
89
|
+
|
|
90
|
+
const status = computed(() => {
|
|
91
|
+
let statusVal = actions[values.value?.status || '']
|
|
92
|
+
if (
|
|
93
|
+
values.value.status === 'waitForAudit' &&
|
|
94
|
+
values.value.yetProcessStaffIds?.includes(staff.staff.value?.id || '')
|
|
95
|
+
) {
|
|
96
|
+
statusVal = actions['raised']
|
|
97
|
+
}
|
|
98
|
+
return statusVal
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
const isModalOpen = ref(false)
|
|
102
|
+
const isGetLoading = ref(false)
|
|
103
|
+
const isViewModalOpen = ref(false)
|
|
104
|
+
|
|
105
|
+
const officeAppUrl = computed(() => {
|
|
106
|
+
const url = apiUrl()
|
|
107
|
+
return url.action
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
interface SubmissionNoteOwner {
|
|
111
|
+
id: string
|
|
112
|
+
name: string
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
interface SubmissionNote {
|
|
116
|
+
id: string
|
|
117
|
+
note: string
|
|
118
|
+
owner: SubmissionNoteOwner
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const submissionNote = ref('')
|
|
122
|
+
const submissionNotes = ref<SubmissionNote[]>([])
|
|
123
|
+
const isSaving = ref(false)
|
|
124
|
+
|
|
125
|
+
async function getSubmissionNote() {
|
|
126
|
+
if (!values.value?.id) return
|
|
127
|
+
isGetLoading.value = true
|
|
128
|
+
const result = await ofetch(`${officeAppUrl.value}/getSubmissionNotes`, {
|
|
129
|
+
method: 'POST',
|
|
130
|
+
headers: {
|
|
131
|
+
'X-Neon-Key': 'YE96OWDFNY',
|
|
132
|
+
},
|
|
133
|
+
body: {
|
|
134
|
+
submissionId: values.value?.id,
|
|
135
|
+
ownerId: staff.staff.value?.id,
|
|
136
|
+
},
|
|
137
|
+
})
|
|
138
|
+
submissionNote.value = result?.data?.[0]?.note ?? ''
|
|
139
|
+
isGetLoading.value = false
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async function getSubmissionNotes() {
|
|
143
|
+
if (!values.value?.id) return
|
|
144
|
+
isGetLoading.value = true
|
|
145
|
+
const result = await ofetch(`${officeAppUrl.value}/getSubmissionNotes`, {
|
|
146
|
+
method: 'POST',
|
|
147
|
+
headers: {
|
|
148
|
+
'X-Neon-Key': 'YE96OWDFNY',
|
|
149
|
+
},
|
|
150
|
+
body: {
|
|
151
|
+
submissionId: values.value?.id,
|
|
152
|
+
},
|
|
153
|
+
})
|
|
154
|
+
submissionNotes.value = result?.data ?? []
|
|
155
|
+
isGetLoading.value = false
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
async function createNote(note: string) {
|
|
159
|
+
if (!note || !values.value?.id) {
|
|
160
|
+
console.warn('note or submissionId is empty')
|
|
161
|
+
return
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
isSaving.value = true
|
|
165
|
+
|
|
166
|
+
try {
|
|
167
|
+
const result = await ofetch(`${officeAppUrl.value}/createSubmissionNote`, {
|
|
168
|
+
method: 'POST',
|
|
169
|
+
headers: {
|
|
170
|
+
'X-Neon-Key': 'YE96OWDFNY',
|
|
171
|
+
},
|
|
172
|
+
body: {
|
|
173
|
+
submissionId: values.value.id,
|
|
174
|
+
ownerId: staff.staff.value?.id,
|
|
175
|
+
note,
|
|
176
|
+
},
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
if (result.state === 'createSubmissionNoteSuccess') {
|
|
180
|
+
toast.push({
|
|
181
|
+
id: 'create:note',
|
|
182
|
+
content: 'Successfully created note.',
|
|
183
|
+
color: 'success',
|
|
184
|
+
duration: 5000,
|
|
185
|
+
})
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
submissionNote.value = note
|
|
189
|
+
} catch (err: any) {
|
|
190
|
+
const errorMessage = err?.data?.message
|
|
191
|
+
toast.push({
|
|
192
|
+
id: 'create:note',
|
|
193
|
+
content: errorMessage || 'Failed to create note.',
|
|
194
|
+
color: 'danger',
|
|
195
|
+
duration: 5000,
|
|
196
|
+
})
|
|
197
|
+
} finally {
|
|
198
|
+
isSaving.value = false
|
|
199
|
+
isModalOpen.value = false
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
watch(isModalOpen, async (newValue) => {
|
|
204
|
+
if (newValue) {
|
|
205
|
+
await getSubmissionNote()
|
|
206
|
+
}
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
watch(isViewModalOpen, async (newValue) => {
|
|
210
|
+
if (newValue) {
|
|
211
|
+
await getSubmissionNotes()
|
|
212
|
+
}
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
const hasFetched = ref(false)
|
|
216
|
+
|
|
217
|
+
watch(
|
|
218
|
+
[isLoading, id],
|
|
219
|
+
async ([loading, idVal]) => {
|
|
220
|
+
if (!loading && idVal != null && !hasFetched.value) {
|
|
221
|
+
hasFetched.value = true
|
|
222
|
+
await getSubmissionNote()
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
{ immediate: true },
|
|
226
|
+
)
|
|
227
|
+
</script>
|
|
228
|
+
|
|
229
|
+
<template>
|
|
230
|
+
<div class="submission-single-actions">
|
|
231
|
+
<NeonLabel
|
|
232
|
+
:text="status?.label"
|
|
233
|
+
:color="status?.color"
|
|
234
|
+
:icon="status?.iconLeft"
|
|
235
|
+
:is-loading="isGetLoading && isLoading"
|
|
236
|
+
is-rounded
|
|
237
|
+
/>
|
|
238
|
+
|
|
239
|
+
<div class="uji-problem-import">
|
|
240
|
+
<NeonButton
|
|
241
|
+
v-if="!isDirector"
|
|
242
|
+
:label="
|
|
243
|
+
submissionNote !== ''
|
|
244
|
+
? 'Lihat atau Edit Catatan Pengawas'
|
|
245
|
+
: 'Tambah Catatan Pengawas'
|
|
246
|
+
"
|
|
247
|
+
size="xs"
|
|
248
|
+
display="fill"
|
|
249
|
+
color="danger"
|
|
250
|
+
is-rounded
|
|
251
|
+
is-squared-mobile
|
|
252
|
+
:is-loading="isGetLoading"
|
|
253
|
+
@click="isModalOpen = true"
|
|
254
|
+
/>
|
|
255
|
+
<NeonButton
|
|
256
|
+
v-if="isDirector"
|
|
257
|
+
label="Lihat Catatan dari Pengawas"
|
|
258
|
+
size="xs"
|
|
259
|
+
display="outline"
|
|
260
|
+
is-rounded
|
|
261
|
+
is-squared-mobile
|
|
262
|
+
:is-loading="isGetLoading"
|
|
263
|
+
@click="isViewModalOpen = true"
|
|
264
|
+
/>
|
|
265
|
+
</div>
|
|
266
|
+
|
|
267
|
+
<SubmissionNoteModal
|
|
268
|
+
:is-active="isModalOpen"
|
|
269
|
+
:submission-id="values?.id || ''"
|
|
270
|
+
:note="submissionNote"
|
|
271
|
+
:is-saving="isSaving"
|
|
272
|
+
:is-disabled="
|
|
273
|
+
values.status === 'processed' ||
|
|
274
|
+
values.status === 'waitForAudit' ||
|
|
275
|
+
values.status === 'approved' ||
|
|
276
|
+
values.status === 'delay' ||
|
|
277
|
+
values.status === 'monitored' ||
|
|
278
|
+
values.status === 'discontinued' ||
|
|
279
|
+
values.status === 'resolved' ||
|
|
280
|
+
isLoading ||
|
|
281
|
+
isGetLoading
|
|
282
|
+
"
|
|
283
|
+
@save="createNote"
|
|
284
|
+
@close="isModalOpen = false"
|
|
285
|
+
/>
|
|
286
|
+
<SubmissionNoteViewModal
|
|
287
|
+
:is-active="isViewModalOpen"
|
|
288
|
+
:submission-id="values?.id || ''"
|
|
289
|
+
:notes="submissionNotes"
|
|
290
|
+
@close="isViewModalOpen = false"
|
|
291
|
+
/>
|
|
292
|
+
</div>
|
|
293
|
+
</template>
|
|
294
|
+
|
|
295
|
+
<style scoped>
|
|
296
|
+
.submission-single-actions {
|
|
297
|
+
@apply flex flex-row items-center space-x-1 mr-1;
|
|
298
|
+
|
|
299
|
+
.publication {
|
|
300
|
+
@apply flex items-center;
|
|
301
|
+
@apply rounded-xl;
|
|
302
|
+
|
|
303
|
+
.neon-label {
|
|
304
|
+
@apply pointer-events-none rounded-none;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.neon-label:first-child {
|
|
308
|
+
@apply rounded-l-xl;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
.neon-label:last-child {
|
|
312
|
+
@apply rounded-r-xl;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
</style>
|
|
317
|
+
|
|
318
|
+
<style>
|
|
319
|
+
.neon-modal-problem-importer {
|
|
320
|
+
@apply p-4;
|
|
321
|
+
}
|
|
322
|
+
</style>
|
package/build/@office/models/personalia/submission/SubmissionAction/SubmissionActionDecision.vue
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useSingle } from '@neon.id/context'
|
|
3
|
+
import { NeonButton } from '@neon.id/interfaces'
|
|
4
|
+
import type {
|
|
5
|
+
TPersonaliaSubmissionModel,
|
|
6
|
+
Schema,
|
|
7
|
+
} from '@neutron.co.id/personalia-models'
|
|
8
|
+
import { computed, onMounted, ref, watch } from 'vue'
|
|
9
|
+
import { ofetch } from 'ofetch'
|
|
10
|
+
import SubmissionNoteViewModal from '../SubmissionNoteModal/SubmissionNoteViewModal.vue'
|
|
11
|
+
import { apiUrl, useOperasional } from '../../../../common'
|
|
12
|
+
import { useRoute } from 'vue-router'
|
|
13
|
+
|
|
14
|
+
defineOptions({ name: 'SubmissionActionDecision' })
|
|
15
|
+
|
|
16
|
+
const { isNew, id, values, isChanged, isLoading, executeOne, syncOne } =
|
|
17
|
+
useSingle<Schema.Submission, TPersonaliaSubmissionModel>()
|
|
18
|
+
const { staff } = useOperasional()
|
|
19
|
+
const route = useRoute()
|
|
20
|
+
|
|
21
|
+
interface SubmissionNoteOwner {
|
|
22
|
+
id: string
|
|
23
|
+
name: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface SubmissionNote {
|
|
27
|
+
id: string
|
|
28
|
+
note: string
|
|
29
|
+
owner: SubmissionNoteOwner
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const submissionNotes = ref<SubmissionNote[]>([])
|
|
33
|
+
|
|
34
|
+
const isDelayDisabled = computed(() => {
|
|
35
|
+
return (
|
|
36
|
+
isNew.value ||
|
|
37
|
+
isChanged.value ||
|
|
38
|
+
values.value.status === 'prepared' ||
|
|
39
|
+
values.value.status === 'raised' ||
|
|
40
|
+
(values.value.delayStaffIds?.includes(staff.value?.id || '') ?? false)
|
|
41
|
+
)
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
const isApproveDisabled = computed(() => {
|
|
45
|
+
return (
|
|
46
|
+
isNew.value ||
|
|
47
|
+
isChanged.value ||
|
|
48
|
+
values.value.status === 'prepared' ||
|
|
49
|
+
values.value.status === 'raised' ||
|
|
50
|
+
(values.value.agreedStaffIds?.includes(staff.value?.id || '') ?? false)
|
|
51
|
+
)
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
const isViewModalOpen = ref(false)
|
|
55
|
+
|
|
56
|
+
const officeAppUrl = computed(() => {
|
|
57
|
+
const url = apiUrl()
|
|
58
|
+
return url.action
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
async function getSubmissionNotes() {
|
|
62
|
+
if (!values.value?.id && !id) return
|
|
63
|
+
const result = await ofetch(`${officeAppUrl.value}/getSubmissionNotes`, {
|
|
64
|
+
method: 'POST',
|
|
65
|
+
headers: {
|
|
66
|
+
'X-Neon-Key': 'YE96OWDFNY',
|
|
67
|
+
},
|
|
68
|
+
body: {
|
|
69
|
+
submissionId: values.value?.id || id,
|
|
70
|
+
},
|
|
71
|
+
})
|
|
72
|
+
submissionNotes.value = result?.data ?? []
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
watch(isViewModalOpen, async (newValue) => {
|
|
76
|
+
if (newValue) {
|
|
77
|
+
await getSubmissionNotes()
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
const goBack = () => {
|
|
82
|
+
window.location.reload()
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const syncDelay = async () => {
|
|
86
|
+
await executeOne('delaySubmission', {
|
|
87
|
+
submissionId: id.value,
|
|
88
|
+
staffId: staff.value?.id,
|
|
89
|
+
})
|
|
90
|
+
await syncOne()
|
|
91
|
+
goBack()
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const syncApproved = async () => {
|
|
95
|
+
await executeOne('approvedSubmission', {
|
|
96
|
+
submissionId: id.value,
|
|
97
|
+
staffId: staff.value?.id,
|
|
98
|
+
})
|
|
99
|
+
await syncOne()
|
|
100
|
+
goBack()
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const hasFetched = ref(false)
|
|
104
|
+
|
|
105
|
+
watch(
|
|
106
|
+
[isLoading, id],
|
|
107
|
+
async ([loading, idVal]) => {
|
|
108
|
+
if (!loading && idVal != null && !hasFetched.value) {
|
|
109
|
+
hasFetched.value = true
|
|
110
|
+
await getSubmissionNotes()
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
{ immediate: true },
|
|
114
|
+
)
|
|
115
|
+
</script>
|
|
116
|
+
|
|
117
|
+
<template>
|
|
118
|
+
<div class="submission-single-actions">
|
|
119
|
+
<NeonButton
|
|
120
|
+
label="Disetujui"
|
|
121
|
+
size="xs"
|
|
122
|
+
display="outline"
|
|
123
|
+
color="success"
|
|
124
|
+
icon-left="list-check"
|
|
125
|
+
is-rounded
|
|
126
|
+
:is-loading="isLoading"
|
|
127
|
+
:is-disabled="isApproveDisabled"
|
|
128
|
+
@click="syncApproved"
|
|
129
|
+
/>
|
|
130
|
+
<NeonButton
|
|
131
|
+
label="Ditunda"
|
|
132
|
+
size="xs"
|
|
133
|
+
display="outline"
|
|
134
|
+
color="danger"
|
|
135
|
+
icon-left="circle-stop"
|
|
136
|
+
is-rounded
|
|
137
|
+
:is-loading="isLoading"
|
|
138
|
+
:is-disabled="isDelayDisabled"
|
|
139
|
+
@click="syncDelay"
|
|
140
|
+
/>
|
|
141
|
+
<NeonButton
|
|
142
|
+
label="Lihat Catatan dari Pengawas"
|
|
143
|
+
size="xs"
|
|
144
|
+
display="outline"
|
|
145
|
+
color="danger"
|
|
146
|
+
is-rounded
|
|
147
|
+
is-squared-mobile
|
|
148
|
+
:is-disabled="submissionNotes.length === 0"
|
|
149
|
+
:is-loading="isLoading"
|
|
150
|
+
@click="isViewModalOpen = true"
|
|
151
|
+
/>
|
|
152
|
+
|
|
153
|
+
<SubmissionNoteViewModal
|
|
154
|
+
:is-active="isViewModalOpen"
|
|
155
|
+
:submission-id="values?.id || ''"
|
|
156
|
+
:notes="submissionNotes"
|
|
157
|
+
@close="isViewModalOpen = false"
|
|
158
|
+
/>
|
|
159
|
+
</div>
|
|
160
|
+
</template>
|
|
161
|
+
|
|
162
|
+
<style scoped>
|
|
163
|
+
.submission-single-actions {
|
|
164
|
+
@apply flex flex-row items-center space-x-1 mr-1;
|
|
165
|
+
|
|
166
|
+
.publication {
|
|
167
|
+
@apply flex items-center;
|
|
168
|
+
@apply rounded-xl;
|
|
169
|
+
|
|
170
|
+
.neon-label {
|
|
171
|
+
@apply pointer-events-none rounded-none;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.neon-label:first-child {
|
|
175
|
+
@apply rounded-l-xl;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.neon-label:last-child {
|
|
179
|
+
@apply rounded-r-xl;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
</style>
|
|
184
|
+
|
|
185
|
+
<style>
|
|
186
|
+
.neon-modal-problem-importer {
|
|
187
|
+
@apply p-4;
|
|
188
|
+
}
|
|
189
|
+
</style>
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
isNew ||
|
|
24
24
|
isChanged ||
|
|
25
25
|
values.status === 'prepared' ||
|
|
26
|
+
values.status === 'waitForAudit' ||
|
|
26
27
|
values.status === 'raised' ||
|
|
27
28
|
values.status === 'processed' ||
|
|
28
29
|
values.status === 'delay' ||
|
|
@@ -46,6 +47,7 @@
|
|
|
46
47
|
isNew ||
|
|
47
48
|
isChanged ||
|
|
48
49
|
values.status === 'prepared' ||
|
|
50
|
+
values.status === 'waitForAudit' ||
|
|
49
51
|
values.status === 'raised' ||
|
|
50
52
|
values.status === 'processed' ||
|
|
51
53
|
values.status === 'delay' ||
|
|
@@ -69,6 +71,7 @@
|
|
|
69
71
|
isNew ||
|
|
70
72
|
isChanged ||
|
|
71
73
|
values.status === 'prepared' ||
|
|
74
|
+
values.status === 'waitForAudit' ||
|
|
72
75
|
values.status === 'raised' ||
|
|
73
76
|
values.status === 'processed' ||
|
|
74
77
|
values.status === 'delay' ||
|
|
@@ -136,6 +139,7 @@
|
|
|
136
139
|
:is-disabled="
|
|
137
140
|
values.status === 'processed' ||
|
|
138
141
|
values.status === 'approved' ||
|
|
142
|
+
values.status === 'waitForAudit' ||
|
|
139
143
|
values.status === 'raised' ||
|
|
140
144
|
values.status === 'delay' ||
|
|
141
145
|
values.status === 'monitored' ||
|
|
@@ -150,6 +154,7 @@
|
|
|
150
154
|
:is-disabled="
|
|
151
155
|
values.status === 'processed' ||
|
|
152
156
|
values.status === 'approved' ||
|
|
157
|
+
values.status === 'waitForAudit' ||
|
|
153
158
|
values.status === 'raised' ||
|
|
154
159
|
values.status === 'delay' ||
|
|
155
160
|
values.status === 'monitored' ||
|
|
@@ -158,27 +163,59 @@
|
|
|
158
163
|
"
|
|
159
164
|
/>
|
|
160
165
|
|
|
161
|
-
<
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
166
|
+
<NeonFields md="grid-cols-3">
|
|
167
|
+
<OfficeRelation
|
|
168
|
+
v-model="values"
|
|
169
|
+
:field="fields.branches"
|
|
170
|
+
:query="Query.define(branchOptions)"
|
|
171
|
+
:is-disabled="
|
|
172
|
+
values.status === 'processed' ||
|
|
173
|
+
values.status === 'waitForAudit' ||
|
|
174
|
+
values.status === 'approved' ||
|
|
175
|
+
values.status === 'raised' ||
|
|
176
|
+
values.status === 'delay' ||
|
|
177
|
+
values.status === 'monitored' ||
|
|
178
|
+
values.status === 'discontinued' ||
|
|
179
|
+
values.status === 'resolved'
|
|
180
|
+
"
|
|
181
|
+
/>
|
|
175
182
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
183
|
+
<OfficeRelation
|
|
184
|
+
v-model="values"
|
|
185
|
+
:field="fields.type"
|
|
186
|
+
:query="Query.define(typeOptions)"
|
|
187
|
+
:is-disabled="
|
|
188
|
+
values.status === 'processed' ||
|
|
189
|
+
values.status === 'waitForAudit' ||
|
|
190
|
+
values.status === 'approved' ||
|
|
191
|
+
values.status === 'raised' ||
|
|
192
|
+
values.status === 'delay' ||
|
|
193
|
+
values.status === 'monitored' ||
|
|
194
|
+
values.status === 'discontinued' ||
|
|
195
|
+
values.status === 'resolved'
|
|
196
|
+
"
|
|
197
|
+
/>
|
|
198
|
+
<OfficeRelation
|
|
199
|
+
v-model="values"
|
|
200
|
+
:field="fields.department"
|
|
201
|
+
:is-disabled="
|
|
202
|
+
values.status === 'raised' ||
|
|
203
|
+
values.status === 'processed' ||
|
|
204
|
+
values.status === 'waitForAudit' ||
|
|
205
|
+
values.status === 'delay' ||
|
|
206
|
+
values.status === 'approved' ||
|
|
207
|
+
values.status === 'monitored' ||
|
|
208
|
+
values.status === 'discontinued' ||
|
|
209
|
+
values.status === 'resolved'
|
|
210
|
+
"
|
|
211
|
+
/>
|
|
212
|
+
</NeonFields>
|
|
213
|
+
<NeonField
|
|
214
|
+
v-model="values.deadline"
|
|
215
|
+
v-bind="fields.deadline"
|
|
180
216
|
:is-disabled="
|
|
181
217
|
values.status === 'processed' ||
|
|
218
|
+
values.status === 'waitForAudit' ||
|
|
182
219
|
values.status === 'approved' ||
|
|
183
220
|
values.status === 'raised' ||
|
|
184
221
|
values.status === 'delay' ||
|
|
@@ -187,19 +224,6 @@
|
|
|
187
224
|
values.status === 'resolved'
|
|
188
225
|
"
|
|
189
226
|
/>
|
|
190
|
-
<OfficeRelation
|
|
191
|
-
v-model="values"
|
|
192
|
-
:field="fields.department"
|
|
193
|
-
:is-disabled="
|
|
194
|
-
values.status === 'raised' ||
|
|
195
|
-
values.status === 'processed' ||
|
|
196
|
-
values.status === 'delay' ||
|
|
197
|
-
values.status === 'approved' ||
|
|
198
|
-
values.status === 'monitored' ||
|
|
199
|
-
values.status === 'discontinued' ||
|
|
200
|
-
values.status === 'resolved'
|
|
201
|
-
"
|
|
202
|
-
/>
|
|
203
227
|
|
|
204
228
|
<div class="flex items-right">
|
|
205
229
|
<div class="flex-grow">
|
|
@@ -218,6 +242,7 @@
|
|
|
218
242
|
:query="Query.define(submissionStaffOptions)"
|
|
219
243
|
:is-disabled="
|
|
220
244
|
values.status === 'processed' ||
|
|
245
|
+
values.status === 'waitForAudit' ||
|
|
221
246
|
values.status === 'approved' ||
|
|
222
247
|
values.status === 'raised' ||
|
|
223
248
|
values.status === 'delay' ||
|
|
@@ -253,6 +278,7 @@
|
|
|
253
278
|
:query="Query.define(roleStaffOptions)"
|
|
254
279
|
:is-disabled="
|
|
255
280
|
values.status === 'processed' ||
|
|
281
|
+
values.status === 'waitForAudit' ||
|
|
256
282
|
values.status === 'approved' ||
|
|
257
283
|
values.status === 'delay' ||
|
|
258
284
|
values.status === 'monitored' ||
|
|
@@ -287,6 +313,7 @@
|
|
|
287
313
|
:query="Query.define(roleDecideStaffOptions)"
|
|
288
314
|
:is-disabled="
|
|
289
315
|
values.status === 'processed' ||
|
|
316
|
+
values.status === 'waitForAudit' ||
|
|
290
317
|
values.status === 'approved' ||
|
|
291
318
|
values.status === 'raised' ||
|
|
292
319
|
values.status === 'delay' ||
|
|
@@ -349,6 +376,7 @@
|
|
|
349
376
|
v-bind="fields.workingHours"
|
|
350
377
|
:is-disabled="
|
|
351
378
|
values.status === 'processed' ||
|
|
379
|
+
values.status === 'waitForAudit' ||
|
|
352
380
|
values.status === 'approved' ||
|
|
353
381
|
values.status === 'raised' ||
|
|
354
382
|
values.status === 'delay' ||
|
|
@@ -412,6 +440,7 @@
|
|
|
412
440
|
toolbar="side"
|
|
413
441
|
:is-readonly="
|
|
414
442
|
values.status === 'processed' ||
|
|
443
|
+
values.status === 'waitForAudit' ||
|
|
415
444
|
values.status === 'approved' ||
|
|
416
445
|
values.status === 'monitored' ||
|
|
417
446
|
values.status === 'discontinued' ||
|