diff --git a/app/components/app/installation-position/entry-form.vue b/app/components/app/installation-position/entry-form.vue new file mode 100644 index 00000000..da4782c0 --- /dev/null +++ b/app/components/app/installation-position/entry-form.vue @@ -0,0 +1,192 @@ + + + diff --git a/app/components/app/installation-position/list.cfg.ts b/app/components/app/installation-position/list.cfg.ts new file mode 100644 index 00000000..cc153cc5 --- /dev/null +++ b/app/components/app/installation-position/list.cfg.ts @@ -0,0 +1,65 @@ +import type { Config, RecComponent } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' +import type { DivisionPosition } from '~/models/division-position' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {}, { width: 50 }], + + headers: [ + [ + { label: 'Kode Posisi' }, + { label: 'Nama Posisi' }, + { label: 'Nama Divisi ' }, + { label: 'Karyawan' }, + { label: 'Status Kepala' }, + { label: '' }, + ], + ], + + keys: ['code', 'name', 'division', 'employee', 'head', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + division: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.division?.name || '-' + }, + employee: (rec: unknown): unknown => { + const recX = rec as DivisionPosition + const fullName = [recX.employee?.person.frontTitle, recX.employee?.person.name, recX.employee?.person.endTitle] + .filter(Boolean) + .join(' ') + .trim() + + return fullName || '-' + }, + head: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.headStatus ? 'Ya' : 'Tidak' + }, + }, + + components: { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + props: { + size: 'sm', + }, + } + return res + }, + }, + + htmls: {}, +} diff --git a/app/components/app/installation-position/list.vue b/app/components/app/installation-position/list.vue new file mode 100644 index 00000000..6ad7dd81 --- /dev/null +++ b/app/components/app/installation-position/list.vue @@ -0,0 +1,39 @@ + + + diff --git a/app/components/app/specialist-position/entry-form.vue b/app/components/app/specialist-position/entry-form.vue new file mode 100644 index 00000000..da4782c0 --- /dev/null +++ b/app/components/app/specialist-position/entry-form.vue @@ -0,0 +1,192 @@ + + + diff --git a/app/components/app/specialist-position/list.cfg.ts b/app/components/app/specialist-position/list.cfg.ts new file mode 100644 index 00000000..cc153cc5 --- /dev/null +++ b/app/components/app/specialist-position/list.cfg.ts @@ -0,0 +1,65 @@ +import type { Config, RecComponent } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' +import type { DivisionPosition } from '~/models/division-position' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {}, { width: 50 }], + + headers: [ + [ + { label: 'Kode Posisi' }, + { label: 'Nama Posisi' }, + { label: 'Nama Divisi ' }, + { label: 'Karyawan' }, + { label: 'Status Kepala' }, + { label: '' }, + ], + ], + + keys: ['code', 'name', 'division', 'employee', 'head', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + division: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.division?.name || '-' + }, + employee: (rec: unknown): unknown => { + const recX = rec as DivisionPosition + const fullName = [recX.employee?.person.frontTitle, recX.employee?.person.name, recX.employee?.person.endTitle] + .filter(Boolean) + .join(' ') + .trim() + + return fullName || '-' + }, + head: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.headStatus ? 'Ya' : 'Tidak' + }, + }, + + components: { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + props: { + size: 'sm', + }, + } + return res + }, + }, + + htmls: {}, +} diff --git a/app/components/app/specialist-position/list.vue b/app/components/app/specialist-position/list.vue new file mode 100644 index 00000000..6ad7dd81 --- /dev/null +++ b/app/components/app/specialist-position/list.vue @@ -0,0 +1,39 @@ + + + diff --git a/app/components/app/subspecialist-position/entry-form.vue b/app/components/app/subspecialist-position/entry-form.vue new file mode 100644 index 00000000..da4782c0 --- /dev/null +++ b/app/components/app/subspecialist-position/entry-form.vue @@ -0,0 +1,192 @@ + + + diff --git a/app/components/app/subspecialist-position/list.cfg.ts b/app/components/app/subspecialist-position/list.cfg.ts new file mode 100644 index 00000000..cc153cc5 --- /dev/null +++ b/app/components/app/subspecialist-position/list.cfg.ts @@ -0,0 +1,65 @@ +import type { Config, RecComponent } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' +import type { DivisionPosition } from '~/models/division-position' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {}, { width: 50 }], + + headers: [ + [ + { label: 'Kode Posisi' }, + { label: 'Nama Posisi' }, + { label: 'Nama Divisi ' }, + { label: 'Karyawan' }, + { label: 'Status Kepala' }, + { label: '' }, + ], + ], + + keys: ['code', 'name', 'division', 'employee', 'head', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + division: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.division?.name || '-' + }, + employee: (rec: unknown): unknown => { + const recX = rec as DivisionPosition + const fullName = [recX.employee?.person.frontTitle, recX.employee?.person.name, recX.employee?.person.endTitle] + .filter(Boolean) + .join(' ') + .trim() + + return fullName || '-' + }, + head: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.headStatus ? 'Ya' : 'Tidak' + }, + }, + + components: { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + props: { + size: 'sm', + }, + } + return res + }, + }, + + htmls: {}, +} diff --git a/app/components/app/subspecialist-position/list.vue b/app/components/app/subspecialist-position/list.vue new file mode 100644 index 00000000..6ad7dd81 --- /dev/null +++ b/app/components/app/subspecialist-position/list.vue @@ -0,0 +1,39 @@ + + + diff --git a/app/components/app/unit-position/entry-form.vue b/app/components/app/unit-position/entry-form.vue new file mode 100644 index 00000000..da4782c0 --- /dev/null +++ b/app/components/app/unit-position/entry-form.vue @@ -0,0 +1,192 @@ + + + diff --git a/app/components/app/unit-position/list.cfg.ts b/app/components/app/unit-position/list.cfg.ts new file mode 100644 index 00000000..cc153cc5 --- /dev/null +++ b/app/components/app/unit-position/list.cfg.ts @@ -0,0 +1,65 @@ +import type { Config, RecComponent } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' +import type { DivisionPosition } from '~/models/division-position' + +type SmallDetailDto = any + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {}, { width: 50 }], + + headers: [ + [ + { label: 'Kode Posisi' }, + { label: 'Nama Posisi' }, + { label: 'Nama Divisi ' }, + { label: 'Karyawan' }, + { label: 'Status Kepala' }, + { label: '' }, + ], + ], + + keys: ['code', 'name', 'division', 'employee', 'head', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + division: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.division?.name || '-' + }, + employee: (rec: unknown): unknown => { + const recX = rec as DivisionPosition + const fullName = [recX.employee?.person.frontTitle, recX.employee?.person.name, recX.employee?.person.endTitle] + .filter(Boolean) + .join(' ') + .trim() + + return fullName || '-' + }, + head: (rec: unknown): unknown => { + const recX = rec as SmallDetailDto + return recX.headStatus ? 'Ya' : 'Tidak' + }, + }, + + components: { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + props: { + size: 'sm', + }, + } + return res + }, + }, + + htmls: {}, +} diff --git a/app/components/app/unit-position/list.vue b/app/components/app/unit-position/list.vue new file mode 100644 index 00000000..6ad7dd81 --- /dev/null +++ b/app/components/app/unit-position/list.vue @@ -0,0 +1,39 @@ + + + diff --git a/app/components/content/division-position/list.vue b/app/components/content/division-position/list.vue index 8fafd960..4fa8605d 100644 --- a/app/components/content/division-position/list.vue +++ b/app/components/content/division-position/list.vue @@ -62,7 +62,7 @@ const { }) const headerPrep: HeaderPrep = { - title: 'Divisi Position', + title: 'Divisi - Posisi', icon: 'i-lucide-box', refSearchNav: { placeholder: 'Cari (min. 3 karakter)...', diff --git a/app/components/content/installation-position/list.vue b/app/components/content/installation-position/list.vue new file mode 100644 index 00000000..68870570 --- /dev/null +++ b/app/components/content/installation-position/list.vue @@ -0,0 +1,196 @@ + + + diff --git a/app/components/content/specialist-position/list.vue b/app/components/content/specialist-position/list.vue new file mode 100644 index 00000000..d55abea1 --- /dev/null +++ b/app/components/content/specialist-position/list.vue @@ -0,0 +1,197 @@ + + + diff --git a/app/components/content/subspecialist-position/list.vue b/app/components/content/subspecialist-position/list.vue new file mode 100644 index 00000000..6ff2c2be --- /dev/null +++ b/app/components/content/subspecialist-position/list.vue @@ -0,0 +1,197 @@ + + + diff --git a/app/components/content/unit-position/list.vue b/app/components/content/unit-position/list.vue new file mode 100644 index 00000000..95a5568d --- /dev/null +++ b/app/components/content/unit-position/list.vue @@ -0,0 +1,197 @@ + + + diff --git a/app/pages/(features)/org-src/installation-position/index.vue b/app/pages/(features)/org-src/installation-position/index.vue new file mode 100644 index 00000000..0b525098 --- /dev/null +++ b/app/pages/(features)/org-src/installation-position/index.vue @@ -0,0 +1,42 @@ + + + diff --git a/app/pages/(features)/org-src/specialist-position/index.vue b/app/pages/(features)/org-src/specialist-position/index.vue new file mode 100644 index 00000000..a2e29428 --- /dev/null +++ b/app/pages/(features)/org-src/specialist-position/index.vue @@ -0,0 +1,42 @@ + + + diff --git a/app/pages/(features)/org-src/subspecialist-position/index.vue b/app/pages/(features)/org-src/subspecialist-position/index.vue new file mode 100644 index 00000000..650ae9ee --- /dev/null +++ b/app/pages/(features)/org-src/subspecialist-position/index.vue @@ -0,0 +1,42 @@ + + + diff --git a/app/pages/(features)/org-src/unit-position/index.vue b/app/pages/(features)/org-src/unit-position/index.vue new file mode 100644 index 00000000..5395ea8e --- /dev/null +++ b/app/pages/(features)/org-src/unit-position/index.vue @@ -0,0 +1,42 @@ + + + diff --git a/public/side-menu-items/sys.json b/public/side-menu-items/sys.json index 941c9a35..b69127e7 100644 --- a/public/side-menu-items/sys.json +++ b/public/side-menu-items/sys.json @@ -321,24 +321,40 @@ "link": "/org-src/division" }, { - "title": "Divisi Position", + "title": "Divisi - Posisi", "link": "/org-src/division-position" }, { "title": "Instalasi", "link": "/org-src/installation" }, + { + "title": "Instalasi - Posisi", + "link": "/org-src/installation-position" + }, { "title": "Unit", "link": "/org-src/unit" }, + { + "title": "Unit - Posisi", + "link": "/org-src/unit-position" + }, { "title": "Spesialis", "link": "/org-src/specialist" }, + { + "title": "Spesialis - Posisi", + "link": "/org-src/specialist-position" + }, { "title": "Sub Spesialis", "link": "/org-src/subspecialist" + }, + { + "title": "Sub Spesialis - Posisi", + "link": "/org-src/subspecialist-position" } ] },