51 lines
1.8 KiB
JavaScript
51 lines
1.8 KiB
JavaScript
import { signedGet, isSuccess } from '@/api/client';
|
|
import { dropdownMap } from '@/api/dropdowns';
|
|
|
|
const roles = {
|
|
service: 'ums',
|
|
module: 'roles',
|
|
title: 'Roles',
|
|
baseUrl: '/role',
|
|
listPath: '/roles',
|
|
listFields: [
|
|
{ key: 'actions', title: 'Actions', buttons: ['edit', 'duplicate', 'delete'] },
|
|
{ key: 'name', title: 'Role Name', type: 'text' },
|
|
{ key: 'code', title: 'Role Code', type: 'text' },
|
|
{ key: 'status', title: 'Status', type: 'select' },
|
|
],
|
|
formFields: async () => {
|
|
const [master, hierarchies] = await Promise.all([
|
|
signedGet('ums', 'roles/masterlist'),
|
|
dropdownMap('ums', 'hierarchy', (item) => `${item.name} (${item.code})`),
|
|
]);
|
|
const permissions = {};
|
|
const list = isSuccess(master) ? master.data?.permissions || [] : [];
|
|
list.forEach((permission) => {
|
|
permissions[permission] = permission;
|
|
});
|
|
return [
|
|
{ key: 'name', title: 'Role Name', type: 'text', required: true },
|
|
{ key: 'code', title: 'Role Code', type: 'text', required: true },
|
|
{ key: 'mimik_position', title: 'Mimik Position (Applicable to HO)', type: 'select', values: hierarchies },
|
|
{ key: 'status', title: 'Status', type: 'select', required: true, values: { active: 'Active', disabled: 'Disabled' } },
|
|
{ key: 'permissions', title: 'permissions', type: 'bigmultiselect', required: true, values: permissions, fullwidth: true },
|
|
];
|
|
},
|
|
beforeForm: (item, _mode, context) => {
|
|
const next = {
|
|
...item,
|
|
permissions: Array.isArray(item.permissions)
|
|
? item.permissions.map(String)
|
|
: String(item.permissions || '')
|
|
.split(/[#~,]/)
|
|
.filter(Boolean),
|
|
};
|
|
if (context?.duplicate && next.code && !String(next.code).endsWith('-copy')) {
|
|
next.code = `${next.code}-copy`;
|
|
}
|
|
return next;
|
|
},
|
|
};
|
|
|
|
export default roles;
|