update build admin

This commit is contained in:
nkhangg 2025-03-17 11:03:26 +07:00
parent d819ea9850
commit 6cf2cd4de4
9 changed files with 134 additions and 62 deletions

View File

@ -0,0 +1,109 @@
import { generateNestParams, handleError, handleSuccess } from '.';
import axios from '../lib/axios';
import { IAdmin } from '../system/type';
import { removeFalsyValues } from '../utils';
export const getAdmins = async (params: Record<string, string | number>) => {
return await axios({
url: 'admins',
params: generateNestParams(params),
withCredentials: true,
method: 'GET',
});
};
export const updateAdmin = async (admin: Partial<IAdmin>) => {
const { email, fullname, permissions } = removeFalsyValues(admin);
try {
const { data } = await axios({
url: 'admins/' + admin.id,
withCredentials: true,
method: 'PUT',
data: { email, fullname, permissions },
});
handleSuccess(data);
return data;
} catch (error) {
handleError(error);
}
};
export const grantNewPasswordAdmin = async (admin: Partial<IAdmin>) => {
const { password } = removeFalsyValues(admin);
try {
const { data } = await axios({
url: 'admins/grant-new-password/' + admin.id,
withCredentials: true,
method: 'POST',
data: { password },
});
handleSuccess(data);
return data;
} catch (error) {
handleError(error);
}
};
export const createAdmin = async (admin: Omit<IAdmin, 'id' | 'created_at' | 'updated_at' | 'is_system_account'>) => {
const newData = removeFalsyValues(admin);
try {
const { data } = await axios({
url: 'admins',
withCredentials: true,
method: 'POST',
data: newData,
});
handleSuccess(data);
return data;
} catch (error) {
handleError(error);
}
};
export const deleteAdmin = async (admin: IAdmin) => {
try {
const { data } = await axios({
url: 'admins/' + admin.id,
withCredentials: true,
method: 'DELETE',
});
handleSuccess(data);
return data;
} catch (error) {
handleError(error);
}
};
export const deletesAdmin = async (admins: IAdmin[]) => {
const ids = admins.reduce((prev, cur) => {
prev.push(cur.id);
return prev;
}, [] as number[]);
try {
const { data } = await axios({
url: 'admins/deletes',
withCredentials: true,
method: 'POST',
data: {
ids,
},
});
handleSuccess(data);
return data;
} catch (error) {
handleError(error);
}
};

View File

@ -0,0 +1,11 @@
import { generateNestParams } from '.';
import axios from '../lib/axios';
export const getPermissions = async (params: Record<string, string | number>) => {
return await axios({
url: 'permissions',
params: generateNestParams(params),
withCredentials: true,
method: 'GET',
});
};

View File

@ -4,11 +4,9 @@ import { useForm, zodResolver } from '@mantine/form';
import _ from 'lodash';
import { useEffect, useRef } from 'react';
import { z } from 'zod';
import { updateBid } from '../../apis/bid';
import { createWebBid, updateWebBid } from '../../apis/web-bid';
import { updateWebBid } from '../../apis/web-bid';
import { useConfirmStore } from '../../lib/zustand/use-confirm';
import { IWebBid } from '../../system/type';
import { extractDomain } from '../../utils';
export interface IWebBidModelProps extends ModalProps {
data: IWebBid | null;
onUpdated?: () => void;

View File

@ -4,7 +4,6 @@ import { useForm, zodResolver } from '@mantine/form';
import _ from 'lodash';
import { useEffect, useRef } from 'react';
import { z } from 'zod';
import { updateBid } from '../../apis/bid';
import { createWebBid, updateWebBid } from '../../apis/web-bid';
import { useConfirmStore } from '../../lib/zustand/use-confirm';
import { IWebBid } from '../../system/type';

View File

@ -1,3 +1 @@
export { default as usePermissions } from './use-permissions';
export { default as useCategories } from './use-categories';
export { default as useTags } from './use-tags';

View File

@ -1,28 +0,0 @@
import { useEffect, useState } from 'react';
import { getCategories } from '../apis/category';
import { ICategory } from '../system/type';
import { ComboboxData } from '@mantine/core';
export default function usePermissions() {
const [data, setData] = useState<ICategory[]>([]);
const handleGetData = async () => {
const result = await getCategories({ per_page: 100 });
if (!result || !result.data?.data) return;
setData(result.data.data);
};
useEffect(() => {
handleGetData();
}, []);
return {
data,
select: data.map((item) => {
return { label: item.name, value: String(item.id) };
}) as ComboboxData,
refresh: handleGetData,
};
}

View File

@ -1,28 +0,0 @@
import { ComboboxData } from '@mantine/core';
import { useEffect, useState } from 'react';
import { getTags } from '../apis/tag';
import { ITag } from '../system/type';
export default function useTags() {
const [data, setData] = useState<ITag[]>([]);
const handleGetData = async () => {
const result = await getTags({ per_page: 100 });
if (!result || !result.data?.data) return;
setData(result.data.data);
};
useEffect(() => {
handleGetData();
}, []);
return {
data,
select: data.map((item) => {
return { label: item.name, value: String(item.id) };
}) as ComboboxData,
refresh: handleGetData,
};
}

View File

@ -3,3 +3,10 @@ export const mappingStatusColors = {
'out-bid': 'red',
'win-bid': 'green',
};
export const mappingPermissionsColors = {
POST: 'blue',
DELETE: 'red',
GET: 'green',
PUT: 'yellow',
};

View File

@ -54,3 +54,9 @@ export interface IWebBid extends ITimestamp {
active: boolean;
children: IBid[];
}
export interface IPermission extends ITimestamp {
id: number;
name: string;
description: string;
}