feat: 初始提交
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
import webClient from "@/service/web-client"
|
||||
import { HttpStatus } from "@/constant"
|
||||
import type { CaptchaResponse, UserAuthResponse } from "@/types/web/response"
|
||||
import type { UsernamePasswordLoginRequest } from "@/types/web/request"
|
||||
|
||||
/**
|
||||
* 获取验证码图片及验证码 UUID
|
||||
*/
|
||||
async function getCaptcha(): Promise<CaptchaResponse | null> {
|
||||
const { data, status } = await webClient.get<CaptchaResponse | null>("/captcha")
|
||||
if (status == HttpStatus.OK) {
|
||||
return data as CaptchaResponse
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用用户名密码登录
|
||||
* @param request 用户名密码
|
||||
*/
|
||||
async function usernamePasswordLogin(
|
||||
request: UsernamePasswordLoginRequest
|
||||
): Promise<UserAuthResponse | null> {
|
||||
const { data } = await webClient.post<UserAuthResponse>("/auth/login", request)
|
||||
return data
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用企业微信登录
|
||||
* @param code 由企业微信提供的身份验证 code
|
||||
*/
|
||||
async function wecomLogin(code: string): Promise<UserAuthResponse> {
|
||||
const urlSearchParams = new URLSearchParams()
|
||||
urlSearchParams.append("code", code)
|
||||
|
||||
|
||||
const { data } = await webClient.get<UserAuthResponse>(`/auth/wecom/login?${urlSearchParams.toString()}`)
|
||||
return data
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用 Microsoft Entra 登录
|
||||
* @param msalToken 由 Microsoft Entra 提供的用户身份令牌
|
||||
*/
|
||||
async function msalLogin(msalToken: string): Promise<UserAuthResponse> {
|
||||
const { data, headers } = await webClient.post<UserAuthResponse>(`/auth/msal/login`, {
|
||||
msalToken,
|
||||
})
|
||||
|
||||
const token = (headers as Record<string, string>).authorization ?? ""
|
||||
|
||||
if (!token) {
|
||||
return Promise.reject(new Error("未获取到身份令牌,登录失败"))
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取注册功能是否启用
|
||||
*/
|
||||
async function fetchRegisterEnabled() {
|
||||
const { data } = await webClient.get<boolean>("/auth/register-enabled")
|
||||
return data
|
||||
}
|
||||
|
||||
export { usernamePasswordLogin, wecomLogin, msalLogin, getCaptcha, fetchRegisterEnabled }
|
||||
@@ -0,0 +1,13 @@
|
||||
import webClient from "@/service/web-client"
|
||||
import type { TreeNode } from "@/types/tree"
|
||||
import type { Department } from "@/types/entity"
|
||||
|
||||
export async function fetchDepartmentTree(): Promise<TreeNode<Department>> {
|
||||
const { data } = await webClient.get<TreeNode<Department>>("/departments/tree")
|
||||
return data
|
||||
}
|
||||
|
||||
export async function fetchDepartments(): Promise<Department[]> {
|
||||
const { data } = await webClient.get<Department[]>("/departments")
|
||||
return data
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
export * as AuthApi from "./auth"
|
||||
export * as MenuApi from "./menu"
|
||||
export * as DeptApi from "./department"
|
||||
export * as UserApi from "./user"
|
||||
export * as PositionApi from "./position"
|
||||
export * as RoleApi from "./role"
|
||||
@@ -0,0 +1,8 @@
|
||||
import webClient from "@/service/web-client"
|
||||
import type { TreeNode } from "@/types/tree"
|
||||
import type { MenuItem } from "@/types/entity"
|
||||
|
||||
export async function fetchMenuTree() {
|
||||
const { data } = await webClient.get<TreeNode<MenuItem>[]>("/menus")
|
||||
return data
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import webClient from "@/service/web-client"
|
||||
import type { QueryPositionRequest } from "@/types/web/request"
|
||||
import type { PageResponse } from "@/types/web/response"
|
||||
import type { Position } from "@/types/entity"
|
||||
|
||||
export async function fetchPositions(request: QueryPositionRequest): Promise<PageResponse<Position>> {
|
||||
const { data } = await webClient.get<PageResponse<Position>>("/positions")
|
||||
return data
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
import type { QueryRoleRequest } from "@/types/web/request"
|
||||
import webClient from "@/service/web-client"
|
||||
import type { PageResponse, RoleResponse } from "@/types/web/response"
|
||||
|
||||
export async function fetchRoles(
|
||||
request: QueryRoleRequest | null
|
||||
): Promise<RoleResponse> {
|
||||
const params = new URLSearchParams()
|
||||
params.append("pageNum", `${request?.pageNum ?? 1}`)
|
||||
params.append("pageSize", `${request?.pageSize ?? 1}`)
|
||||
|
||||
if (request?.name) {
|
||||
params.append("name", request.name)
|
||||
}
|
||||
|
||||
if (request?.code) {
|
||||
params.append("code", request.code)
|
||||
}
|
||||
|
||||
if (request?.status) {
|
||||
params.append("status", request.status)
|
||||
}
|
||||
|
||||
const { data } = await webClient.get<RoleResponse>(`/roles?${params.toString()}`)
|
||||
return data
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
import webClient from "@/service/web-client"
|
||||
import { getCountryCallingCode } from "libphonenumber-js"
|
||||
import { getDefaultCountryCode } from "@/utils/phone-number-utils"
|
||||
import type { AddUserRequest, EditUserRequest, QueryUserRequest } from "@/types/web/request"
|
||||
import type { PageResponse, UserDetailResponse } from "@/types/web/response"
|
||||
import type { UserFormValues } from "@/types/form"
|
||||
|
||||
export async function fetchUsers(
|
||||
request?: QueryUserRequest
|
||||
): Promise<PageResponse<UserDetailResponse>> {
|
||||
const urlSearchParam = new URLSearchParams()
|
||||
urlSearchParam.append("pageNum", `${request?.pageNum ?? 1}`)
|
||||
urlSearchParam.append("pageSize", `${request?.pageSize ?? 10}`)
|
||||
|
||||
if (request?.departmentId) {
|
||||
urlSearchParam.append("departmentId", `${request.departmentId}`)
|
||||
}
|
||||
|
||||
if (request?.username) {
|
||||
urlSearchParam.append("username", request.username)
|
||||
}
|
||||
|
||||
if (request?.regionAbbreviation) {
|
||||
urlSearchParam.append("regionAbbreviation", request.regionAbbreviation)
|
||||
}
|
||||
|
||||
if (request?.phoneNumber) {
|
||||
urlSearchParam.append("phoneNumber", request.phoneNumber)
|
||||
}
|
||||
|
||||
if (request?.status) {
|
||||
urlSearchParam.append("status", request.status)
|
||||
}
|
||||
|
||||
if (request?.createdAtStart) {
|
||||
urlSearchParam.append("createdAtStart", request.createdAtStart)
|
||||
}
|
||||
|
||||
if (request?.createdAtEnd) {
|
||||
urlSearchParam.append("createdAtEnd", request.createdAtEnd)
|
||||
}
|
||||
|
||||
const { data } = await webClient.get<PageResponse<UserDetailResponse>>(
|
||||
`/users?${urlSearchParam.toString()}`
|
||||
)
|
||||
return data
|
||||
}
|
||||
|
||||
export async function fetchUserById(userId: number): Promise<UserDetailResponse> {
|
||||
const { data } = await webClient.get<UserDetailResponse>(`/users/${userId}`)
|
||||
return data
|
||||
}
|
||||
|
||||
export async function addUser(values: UserFormValues) {
|
||||
await webClient.post("/users", {
|
||||
username: values.username,
|
||||
password: values.password,
|
||||
fullName: values.fullName,
|
||||
email: values.email,
|
||||
regionAbbreviation: values.regionAbbreviation ?? getDefaultCountryCode(),
|
||||
phoneNumber: values.phoneNumber,
|
||||
avatarUrl: values.avatarUrl,
|
||||
status: values.status,
|
||||
departmentId: values.departmentId,
|
||||
positionId: values.positionId,
|
||||
roleIds: [],
|
||||
} as AddUserRequest)
|
||||
}
|
||||
|
||||
export async function editUser(values: UserFormValues) {
|
||||
await webClient.put("/users", {
|
||||
id: values.id,
|
||||
username: values.username,
|
||||
fullName: values.fullName,
|
||||
email: values.email,
|
||||
regionAbbreviation: values.regionAbbreviation ?? getDefaultCountryCode(),
|
||||
phoneNumber: values.phoneNumber,
|
||||
avatarUrl: values.avatarUrl,
|
||||
status: values.status,
|
||||
departmentId: values.departmentId,
|
||||
positionId: values.positionId,
|
||||
roleIds: [],
|
||||
} as EditUserRequest)
|
||||
}
|
||||
|
||||
export async function deleteUser(userId: number | string) {
|
||||
await webClient.delete(`/users/${userId}`)
|
||||
}
|
||||
Reference in New Issue
Block a user