first commit

This commit is contained in:
zc
2026-06-12 17:09:39 +08:00
commit ae41b388cb
756 changed files with 273542 additions and 0 deletions

42
src/App.vue Normal file

File diff suppressed because one or more lines are too long

9
src/apis/area/index.ts Normal file
View File

@@ -0,0 +1,9 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
/** @desc 获取地区列表 */
export const getAreaList = (params: { type: 'province' | 'city' | 'area', code?: string }) => {
return http.get<T.AreaItem>('/area/list', params)
}

5
src/apis/area/type.ts Normal file
View File

@@ -0,0 +1,5 @@
export interface AreaItem {
label: string
code: string
children?: AreaItem[]
}

46
src/apis/auth/index.ts Normal file
View File

@@ -0,0 +1,46 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/auth'
/** @desc 账号登录 */
export function accountLogin(req: T.AccountLoginReq) {
return http.post<T.LoginResp>(`${BASE_URL}/login`, req)
}
/** @desc 手机号登录 */
export function phoneLogin(req: T.PhoneLoginReq) {
return http.post<T.LoginResp>(`${BASE_URL}/login`, req)
}
/** @desc 邮箱登录 */
export function emailLogin(req: T.EmailLoginReq) {
return http.post<T.LoginResp>(`${BASE_URL}/login`, req)
}
/** @desc 三方账号登录 */
export function socialLogin(req: any) {
return http.post<T.LoginResp>(`${BASE_URL}/login`, req)
}
/** @desc 三方账号登录授权 */
export function socialAuth(source: string) {
return http.get<T.SocialAuthAuthorizeResp>(`${BASE_URL}/${source}`)
}
/** @desc 退出登录 */
export function logout() {
return http.post(`${BASE_URL}/logout`)
}
/** @desc 获取用户信息 */
export const getUserInfo = () => {
return http.get<T.UserInfo>(`${BASE_URL}/user/info`)
}
/** @desc 获取路由信息 */
export const getUserRoute = () => {
return http.get<T.RouteItem[]>(`${BASE_URL}/user/route`)
}

88
src/apis/auth/type.ts Normal file
View File

@@ -0,0 +1,88 @@
/** 用户类型 */
export interface UserInfo {
id: string
username: string
nickname: string
gender: 0 | 1 | 2
email: string
phone: string
avatar: string
pwdResetTime: string
pwdExpired: boolean
registrationDate: string
deptName: string
roles: string[]
permissions: string[]
}
/** 路由类型 */
export interface RouteItem {
id: string
title: string
parentId: string
type: 1 | 2 | 3
path: string
name: string
component: string
redirect: string
icon: string
isExternal: boolean
isHidden: boolean
isCache: boolean
permission: string
roles: string[]
sort: number
status: 0 | 1
children: RouteItem[]
activeMenu: string
alwaysShow: boolean
breadcrumb: boolean
showInTabs: boolean
affix: boolean
}
/** 认证类型 */
export type AuthType = 'ACCOUNT' | 'PHONE' | 'EMAIL' | 'SOCIAL'
export const AuthTypeConstants = {
ACCOUNT: 'ACCOUNT',
PHONE: 'PHONE',
EMAIL: 'EMAIL',
SOCIAL: 'SOCIAL',
} as const
/** 基础认证请求接口 */
export interface AuthReq {
clientId?: string
authType?: AuthType
}
/** 账号登录请求参数 */
export interface AccountLoginReq extends AuthReq {
username: string
password: string
captcha: string
uuid: string
}
/** 手机号登录请求参数 */
export interface PhoneLoginReq extends AuthReq {
phone: string
captcha: string
}
/** 邮箱登录请求参数 */
export interface EmailLoginReq extends AuthReq {
email: string
captcha: string
}
/** 登录响应类型 */
export interface LoginResp {
token: string
}
/** 第三方登录授权类型 */
export interface SocialAuthAuthorizeResp {
authorizeUrl: string
}

View File

@@ -0,0 +1,54 @@
import type * as T from './type'
import http from '@/utils/http'
import type { LabelValueState } from '@/types/global'
export type * from './type'
const BASE_URL = '/code/generator'
/** @desc 查询代码生成列表 */
export function listGenConfig(query: T.GenConfigPageQuery) {
return http.get<PageRes<T.GenConfigResp[]>>(`${BASE_URL}/config`, query)
}
/** @desc 查询生成配置信息 */
export function getGenConfig(tableName: string) {
return http.get<T.GenConfigResp>(`${BASE_URL}/config/${tableName}`)
}
/** @desc 查询字段配置列表 */
export function listFieldConfig(tableName: string, requireSync: boolean) {
return http.get<T.FieldConfigResp[]>(`${BASE_URL}/field/${tableName}?requireSync=${requireSync}`)
}
/** @desc 保存配置信息 */
export function saveGenConfig(tableName: string, req: T.GeneratorConfigResp) {
return http.post(`${BASE_URL}/config/${tableName}`, req)
}
/** @desc 生成预览 */
export function genPreview(tableNames: Array<string>) {
return http.get<T.GeneratePreviewResp[]>(`${BASE_URL}/preview/${tableNames}`)
}
/** @desc 生成代码 */
export function downloadCode(tableNames: Array<string>) {
return http.requestNative({
url: `${BASE_URL}/${tableNames}/download`,
method: 'post',
responseType: 'blob',
})
}
/** @desc 生成代码 */
export function generateCode(tableNames: Array<string>) {
return http.requestNative({
url: `${BASE_URL}/${tableNames}`,
method: 'post',
})
}
/** @desc 查询字典列表 */
export function listFieldConfigDict() {
return http.get<LabelValueState[]>(`${BASE_URL}/dict`)
}

1
src/apis/code/index.ts Normal file
View File

@@ -0,0 +1 @@
export * from './generator'

45
src/apis/code/type.ts Normal file
View File

@@ -0,0 +1,45 @@
/** 工具代码生成类型 */
export interface GenConfigResp {
tableName: string
comment: string
moduleName: string
packageName: string
businessName: string
author: string
tablePrefix: string
isOverride: boolean
createTime?: string
updateTime?: string
classNamePrefix?: string
}
export interface GenConfigQuery {
tableName?: string
}
export interface GenConfigPageQuery extends PageQuery, GenConfigQuery {}
export interface FieldConfigResp {
tableName: string
columnName: string
columnType: string
fieldName: string
fieldType: string
fieldSort: number
comment: string
isRequired: boolean
showInList: boolean
showInForm: boolean
showInQuery: boolean
formType: string
queryType: string
dictCode: string
createTime?: string
}
export interface GeneratorConfigResp {
genConfig: GenConfigResp
fieldConfigs: FieldConfigResp[]
}
export interface GeneratePreviewResp {
path: string
fileName: string
content: string
}

View File

@@ -0,0 +1,31 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/captcha'
/** @desc 获取图片验证码 */
export function getImageCaptcha() {
return http.get<T.ImageCaptchaResp>(`${BASE_URL}/image`)
}
/** @desc 获取短信验证码 */
export function getSmsCaptcha(phone: string, captchaReq: T.BehaviorCaptchaReq) {
return http.get<boolean>(`${BASE_URL}/sms?phone=${phone}&captchaVerification=${encodeURIComponent(captchaReq.captchaVerification || '')}`)
}
/** @desc 获取邮箱验证码 */
export function getEmailCaptcha(email: string, captchaReq: T.BehaviorCaptchaReq) {
return http.get<boolean>(`${BASE_URL}/mail?email=${email}&captchaVerification=${encodeURIComponent(captchaReq.captchaVerification || '')}`)
}
/** @desc 获取行为验证码 */
export function getBehaviorCaptcha(req: any) {
return http.get<T.BehaviorCaptchaResp>(`${BASE_URL}/behavior`, req)
}
/** @desc 校验行为验证码 */
export function checkBehaviorCaptcha(req: any) {
return http.post<T.CheckBehaviorCaptchaResp>(`${BASE_URL}/behavior`, req)
}

65
src/apis/common/common.ts Normal file
View File

@@ -0,0 +1,65 @@
import type { TreeNodeData } from '@arco-design/web-vue'
import http from '@/utils/http'
import type { LabelValueState } from '@/types/global'
const BASE_URL = '/common'
/** @desc 查询部门树 */
export function listDeptTree(query: { description: string | unknown }) {
return http.get<TreeNodeData[]>(`${BASE_URL}/tree/dept`, query)
}
/** @desc 查询部门树 */
export function listBranchTree(query: { description: string | unknown }) {
return http.get<TreeNodeData[]>(`${BASE_URL}/tree/branch`, query)
}
/** @desc 查询空间树 */
export function listSpaceTree(query: { description: string | unknown }) {
return http.get<TreeNodeData[]>(`${BASE_URL}/tree/space`, query)
}
/** @desc 查询空间树 */
export function listPointTree(query: { description: string | unknown }) {
return http.get<TreeNodeData[]>(`${BASE_URL}/tree/point`, query)
}
/** @desc 查询菜单树 */
export function listMenuTree(query: { description: string }) {
return http.get<TreeNodeData[]>(`${BASE_URL}/tree/menu`, query)
}
/** @desc 查询用户列表 */
export function listUserDict(query?: { status: number }) {
return http.get<LabelValueState[]>(`${BASE_URL}/dict/user`, query)
}
/** @desc 查询角色列表 */
export function listRoleDict(query?: { name: string, status: number }) {
return http.get<LabelValueState[]>(`${BASE_URL}/dict/role`, query)
}
/** @desc 查询字典列表 */
export function listCommonDict(code: string) {
return http.get<LabelValueState[]>(`${BASE_URL}/dict/${code}`)
}
/** @desc 查询系统配置参数 */
export function listSiteOptionDict() {
return http.get<LabelValueState[]>(`${BASE_URL}/dict/option/site`)
}
/** @desc 上传文件 */
export function uploadFile(data: FormData) {
return http.post(`${BASE_URL}/file`, data)
}
/** @desc 上传文件 */
export function updateUpload(data: object) {
return http.post(`${BASE_URL}/updateUpload`, data)
}
/** @desc 上传人像 */
export function faceUpload(data: object) {
return http.post(`${BASE_URL}/faceUpload`, data)
}

View File

@@ -0,0 +1,51 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/dashboard'
/** @desc 查询公告列表 */
export function listDashboardNotice() {
return http.get<T.DashboardNoticeResp[]>(`${BASE_URL}/notice`)
}
/** @desc 查询 PV 总览 */
export function getDashboardOverviewPv() {
return http.get<T.DashboardOverviewCommonResp>(`${BASE_URL}/analysis/overview/pv`)
}
/** @desc 查询 IP 总览 */
export function getDashboardOverviewIp() {
return http.get<T.DashboardOverviewCommonResp>(`${BASE_URL}/analysis/overview/ip`)
}
/** @desc 查询地域分析 */
export function getAnalysisGeo() {
return http.get<T.DashboardChartCommonResp[]>(`${BASE_URL}/analysis/geo`)
}
/** @desc 查询访问趋势 */
export function getDashboardAccessTrend(days: number) {
return http.get<T.DashboardAccessTrendResp[]>(`${BASE_URL}/access/trend/${days}`)
}
/** @desc 查询访问时段分析 */
export function getAnalysisTimeslot() {
return http.get<T.DashboardChartCommonResp[]>(`${BASE_URL}/analysis/timeslot`)
}
/** @desc 查询模块分析 */
export function getAnalysisModule() {
return http.get<T.DashboardChartCommonResp[]>(`${BASE_URL}/analysis/module`)
}
/** @desc 查询终端分析 */
export function getAnalysisOs() {
return http.get<T.DashboardChartCommonResp[]>(`${BASE_URL}/analysis/os`)
}
/** @desc 查询浏览器分析 */
export function getAnalysisBrowser() {
return http.get<T.DashboardChartCommonResp[]>(`${BASE_URL}/analysis/browser`)
}

3
src/apis/common/index.ts Normal file
View File

@@ -0,0 +1,3 @@
export * from './common'
export * from './captcha'
export * from './dashboard'

59
src/apis/common/type.ts Normal file
View File

@@ -0,0 +1,59 @@
/** 图形验证码类型 */
export interface ImageCaptchaResp {
uuid: string
img: string
expireTime: number
isEnabled: boolean
}
/** 仪表盘公告类型 */
export interface DashboardNoticeResp {
id: number
title: string
type: number
}
/** 仪表盘访问趋势类型 */
export interface DashboardAccessTrendResp {
date: string
pvCount: number
ipCount: number
}
/** 仪表盘通用总览类型 */
export interface DashboardOverviewCommonResp {
total: number
today: number
growth: number
dataList: DashboardChartCommonResp[]
}
/** 仪表盘通用图表类型 */
export interface DashboardChartCommonResp {
name: string
value: number
}
/* 行为验证码类型 */
export interface BehaviorCaptchaResp {
originalImageBase64: string
point: {
x: number
y: number
}
jigsawImageBase64: string
token: string
secretKey: string
wordList: string[]
}
export interface BehaviorCaptchaReq {
captchaType?: string
captchaVerification?: string
clientUid?: string
}
export interface CheckBehaviorCaptchaResp {
repCode: string
repMsg: string
}

15
src/apis/index.ts Normal file
View File

@@ -0,0 +1,15 @@
export * from './area'
export * from './auth'
export * from './common'
export * from './monitor'
export * from './system'
export * from './code'
export * from './schedule'
export * from './area/type'
export * from './auth/type'
export * from './common/type'
export * from './monitor/type'
export * from './system/type'
export * from './code/type'
export * from './schedule/type'

View File

@@ -0,0 +1,2 @@
export * from './online'
export * from './log'

26
src/apis/monitor/log.ts Normal file
View File

@@ -0,0 +1,26 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/system/log'
/** @desc 查询日志列表 */
export function listLog(query: T.LogPageQuery) {
return http.get<PageRes<T.LogResp[]>>(`${BASE_URL}`, query)
}
/** @desc 查询日志详情 */
export function getLog(id: string) {
return http.get<T.LogDetailResp>(`${BASE_URL}/${id}`)
}
/** @desc 导出登录日志 */
export function exportLoginLog(query: T.LogQuery) {
return http.download<any>(`${BASE_URL}/export/login`, query)
}
/** @desc 导出操作日志 */
export function exportOperationLog(query: T.LogQuery) {
return http.download<any>(`${BASE_URL}/export/operation`, query)
}

View File

@@ -0,0 +1,16 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/monitor/online'
/** @desc 查询在线用户列表 */
export function listOnlineUser(query: T.OnlineUserPageQuery) {
return http.get<PageRes<T.OnlineUserResp[]>>(`${BASE_URL}`, query)
}
/** @desc 强退在线用户 */
export function kickout(token: string) {
return http.del(`${BASE_URL}/${token}`)
}

57
src/apis/monitor/type.ts Normal file
View File

@@ -0,0 +1,57 @@
/** 在线用户类型 */
export interface OnlineUserResp {
id: string
description: string
module: string
timeTaken: number
ip: string
address: string
browser: string
os: string
status: number
errorMsg: string
createUserString: string
createTime: string
}
export interface OnlineUserQuery {
nickname?: string
loginTime?: string
sort: Array<string>
}
export interface OnlineUserPageQuery extends OnlineUserQuery, PageQuery {}
/** 系统日志类型 */
export interface LogResp {
id: string
description: string
module: string
timeTaken: number
ip: string
address: string
browser: string
os: string
status: number
errorMsg: string
createUserString: string
createTime: string
}
export interface LogDetailResp extends LogResp {
traceId: string
requestUrl: string
requestMethod: string
requestHeaders: string
requestBody: string
statusCode: number
responseHeaders: string
responseBody: string
}
export interface LogQuery {
description?: string
module?: string
ip?: string
createUserString?: string
createTime: Array<string>
status?: number
sort: Array<string>
}
export interface LogPageQuery extends LogQuery, PageQuery {}

46
src/apis/open/app.ts Normal file
View File

@@ -0,0 +1,46 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/open/app'
/** @desc 查询应用列表 */
export function listApp(query: T.AppPageQuery) {
return http.get<PageRes<T.AppResp[]>>(`${BASE_URL}`, query)
}
/** @desc 查询应用详情 */
export function getApp(id: string) {
return http.get<T.AppResp>(`${BASE_URL}/${id}`)
}
/** @desc 新增应用 */
export function addApp(data: any) {
return http.post(`${BASE_URL}`, data)
}
/** @desc 修改应用 */
export function updateApp(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除应用 */
export function deleteApp(id: string) {
return http.del(`${BASE_URL}/${id}`)
}
/** @desc 导出应用 */
export function exportApp(query: T.AppQuery) {
return http.download(`${BASE_URL}/export`, query)
}
/** @desc 获取密钥 */
export function getAppSecret(id: string) {
return http.get(`${BASE_URL}/${id}/secret`)
}
/** @desc 重置密钥 */
export function resetAppSecret(id: string) {
return http.patch(`${BASE_URL}/${id}/secret`)
}

21
src/apis/open/type.ts Normal file
View File

@@ -0,0 +1,21 @@
/** 应用类型 */
export interface AppResp {
id: string
name: string
accessKey: string
secretKey: string
expireTime: string
description: string
status: 1 | 2
createUserString: string
createTime: string
updateUserString: string
updateTime: string
}
export interface AppQuery {
description?: string
sort: Array<string>
}
export interface AppPageQuery extends AppQuery, PageQuery {}

View File

@@ -0,0 +1,2 @@
export * from '../schedule/job'
export * from '../schedule/log'

41
src/apis/schedule/job.ts Normal file
View File

@@ -0,0 +1,41 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/schedule/job'
/** @desc 查询任务组列表 */
export function listGroup() {
return http.get(`${BASE_URL}/group`)
}
/** @desc 查询任务列表 */
export function listJob(query: T.JobPageQuery) {
return http.get<PageRes<T.JobResp[]>>(`${BASE_URL}`, query)
}
/** @desc 新增任务 */
export function addJob(data: any) {
return http.post(`${BASE_URL}`, data)
}
/** @desc 修改任务 */
export function updateJob(data: any, id: number) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 修改任务状态 */
export function updateJobStatus(data: any, id: number) {
return http.patch(`${BASE_URL}/${id}/status`, data)
}
/** @desc 删除任务 */
export function deleteJob(id: number) {
return http.del(`${BASE_URL}/${id}`)
}
/** @desc 执行任务 */
export function triggerJob(id: number) {
return http.post(`${BASE_URL}/trigger/${id}`)
}

36
src/apis/schedule/log.ts Normal file
View File

@@ -0,0 +1,36 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/schedule/log'
/** @desc 查询任务日志列表 */
export function listJobLog(query: T.JobLogPageQuery) {
return http.get<PageRes<T.JobLogResp[]>>(`${BASE_URL}`, query)
}
/** @desc 查询任务日志详情 */
export function getJobLogDetail(id: number) {
return http.get<boolean>(`${BASE_URL}/${id}`)
}
/** @desc 停止任务 */
export function stopJob(id: number) {
return http.post(`${BASE_URL}/stop/${id}`)
}
/** @desc 重试任务 */
export function retryJob(id: number) {
return http.post(`${BASE_URL}/retry/${id}`)
}
/** @desc 查询任务实例列表 */
export function listJobInstance(query: T.JobInstanceQuery) {
return http.get<T.JobInstanceResp[]>(`${BASE_URL}/instance`, query)
}
/** @desc 查询任务实例日志列表 */
export function listJobInstanceLog(query: T.JobInstanceLogQuery) {
return http.get<T.JobInstanceLogResp>(`${BASE_URL}/instance/log`, query)
}

85
src/apis/schedule/type.ts Normal file
View File

@@ -0,0 +1,85 @@
/** 任务类型 */
export interface JobResp {
id: number
groupName: string
jobName: string
description?: string
triggerType: number
triggerInterval: string | number
executorType: number
taskType: number
executorInfo: string
argsStr?: string
argsType?: string
routeKey: number
blockStrategy: number
executorTimeout: number
maxRetryTimes: number
retryInterval: number
parallelNum: number
jobStatus: number
nextTriggerAt?: Date
createDt?: Date
updateDt?: Date
}
export interface JobQuery {
groupName: string
jobName?: string
jobStatus?: number
}
export interface JobPageQuery extends JobQuery, PageQuery {}
/** 任务日志类型 */
export interface JobLogResp {
id: number
groupName: string
jobName: string
jobId: number
taskBatchStatus: number
operationReason: number
executorType: number
executorInfo: string
executionAt: string
createDt: string
}
export interface JobLogQuery {
jobId?: number
groupName?: string
jobName?: string
taskBatchStatus?: number
datetimeRange?: Array<string>
}
export interface JobLogPageQuery extends JobLogQuery, PageQuery {}
/** 任务实例类型 */
export interface JobInstanceResp {
id: number
groupName: string
jobId: number
taskBatchId: number
taskStatus: number
retryCount: number
resultMessage: string
clientInfo: string
}
export interface JobInstanceQuery {
jobId?: string | number
taskBatchId?: number | string
}
/** 任务实例日志类型 */
export interface JobInstanceLogResp {
id: number
message: any[]
finished: number
fromIndex: number
nextStartId: number
}
export interface JobInstanceLogQuery {
taskBatchId: number
jobId: number
taskId: number
startId: number
fromIndex: number
size: number
}

View File

@@ -0,0 +1,62 @@
import http from '@/utils/http'
const BASE_URL = '/sysPeople/branch'
export interface BranchResp {
id: string
name: string
leader: string
phone: string
parentId: string
ancestors: string
spaceId: string
remark: string
createBy: string
createTime: string
updateBy: string
updateTime: string
deptId: string
level: string
deptCode: string
ruleId: string
ladderRuleId: string
isExamine: string
createUserString: string
updateUserString: string
disabled: boolean
children: BranchResp[]
}
export interface BranchQuery {
name: string
leader: string
}
/** @desc 查询部门管理列表 */
export function listBranch(query: BranchQuery) {
return http.get<BranchResp[]>(`${BASE_URL}/tree`, query)
}
/** @desc 查询部门管理详情 */
export function getBranch(id: string) {
return http.get<BranchResp>(`${BASE_URL}/${id}`)
}
/** @desc 新增部门管理 */
export function addBranch(data: any) {
return http.post(`${BASE_URL}`, data)
}
/** @desc 修改部门管理 */
export function updateBranch(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除部门管理 */
export function deleteBranch(id: string) {
return http.del(`${BASE_URL}/${id}`)
}
/** @desc 导出部门管理 */
export function exportBranch(query: BranchQuery) {
return http.download(`${BASE_URL}/export`, query)
}

View File

@@ -0,0 +1,172 @@
import http from '@/utils/http'
import type {LabelValueState} from "@/types/global";
const BASE_URL = '/sysPeople/people'
export type * from '../system/type'
export interface PeopleResp {
id: string
name: string
phone: string
sex: number
avatar: string
branchId: number
branchName: string
position: string
idcard: string
carNo: string
doorNo: string
guid: string
faceGuid: string
userId: number
userName: string
remark: string
createBy: string
createTime: string
updateBy: string
updateTime: string
gh: string
fingerprint: string
joinTime: string
down: number
delFlag: string
openid: string
createUserString: string
updateUserString: string
disabled: boolean
xfFlag: string
czje: string
btje: string
isConsume: number
freeze: number
xfje: string
xfcs: string
}
export interface PeopleDepositImportResp {
importKey: string
totalRows: number
validRows: number
duplicateUserRows: number
unEnabledRows: number
}
type Long = number
export interface PeopleQuery {
name: string | undefined
branchId: string | undefined
ids: Array<Long> | undefined
branchParentId: string | undefined
sort: Array<string>
}
export interface PeoplePageQuery extends PeopleQuery, PageQuery {}
/** @desc 查询人员管理列表 */
export function listPeople(query: PeoplePageQuery) {
return http.get<PageRes<PeopleResp[]>>(`${BASE_URL}`, query)
}
/** @desc 查询人员消费列表 */
export function pageConsume(query: PeoplePageQuery) {
return http.get<PageRes<PeopleResp[]>>(`${BASE_URL}/pageConsume`, query)
}
/** @desc 查询人员名称下拉数据 */
export function getPeopleNameList(query: PeopleQuery) {
return http.get(`${BASE_URL}/getPeopleNameList`, query)
}
/** @desc 查询人员管理详情 */
export function getPeople(id: string) {
return http.get<PeopleResp>(`${BASE_URL}/${id}`)
}
/** @desc 新增人员管理 */
export function addPeople(data: any) {
return http.post(`${BASE_URL}`, data)
}
/** @desc 修改人员管理 */
export function updatePeople(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除人员管理 */
export function deletePeople(ids: Long | Array<Long>) {
return http.del(`${BASE_URL}/${ids}`)
}
/** @desc 导出人员管理 */
export function exportPeople(query: PeopleQuery) {
return http.download(`${BASE_URL}/export`, query)
}
/** @desc 导出模板 */
export function exportTemplate() {
return http.download(`${BASE_URL}/import/template`)
}
/** @desc 解析用户导入数据 */
export function parseImportUser(data: FormData) {
return http.post(`${BASE_URL}/import/parse`, data)
}
/** @desc 导入用户 */
export function importPeople(data: any) {
return http.post(`${BASE_URL}/import`, data)
}
export function downPeople(ids: Long | Array<Long>) {
return http.get(`${BASE_URL}/down/${ids}`)
}
/** @desc 导出消费人员充值 */
export function exportConsumePeople(query: PeopleQuery) {
return http.download(`${BASE_URL}/exportConsume`, query)
}
/** @desc 下载人员充值导入模板 */
export function downloadConsumeImportTemplate() {
return http.download(`${BASE_URL}/import/template`)
}
/** @desc 解析人员充值导入数据 */
export function parseConsumeImportUser(data: FormData) {
return http.post(`${BASE_URL}/consume/import/parse`, data)
}
/** @desc 导入人员充值 */
export function importConsumeUser(data: any) {
return http.post(`${BASE_URL}/consume/import`, data)
}
/** @desc 退款人员 */
export function refundPeople(data: any) {
return http.post(`${BASE_URL}/refund`, data)
}
/** @desc 充值人员 */
export function depositPeople(data: any) {
return http.post(`${BASE_URL}/deposit`, data)
}
/** @desc 补贴人员 */
export function subsidyPeople(data: any) {
return http.post(`${BASE_URL}/subsidy`, data)
}
/** @desc 补贴人员 */
export function freeze(ids: Long[]) {
return http.post(`${BASE_URL}/freeze`, ids)
}
/** @desc 补贴人员 */
export function unFreeze(ids: Long[]) {
return http.post(`${BASE_URL}/unFreeze`, ids)
}
/** @desc 补贴人员 */
export function resetMoney(data: any) {
return http.post(`${BASE_URL}/resetMoney`, data)
}

31
src/apis/system/client.ts Normal file
View File

@@ -0,0 +1,31 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/system/client'
/** @desc 查询终端列表 */
export function listClient(query: T.ClientPageQuery) {
return http.get<PageRes<T.ClientResp[]>>(`${BASE_URL}`, query)
}
/** @desc 查询终端详情 */
export function getClient(id: string) {
return http.get<T.ClientDetailResp>(`${BASE_URL}/${id}`)
}
/** @desc 新增终端 */
export function addClient(data: any) {
return http.post(`${BASE_URL}`, data)
}
/** @desc 修改终端 */
export function updateClient(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除终端 */
export function deleteClient(ids: string | Array<string>) {
return http.del(`${BASE_URL}/${ids}`)
}

36
src/apis/system/dept.ts Normal file
View File

@@ -0,0 +1,36 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/system/dept'
/** @desc 查询部门列表 */
export function listDept(query: T.DeptQuery) {
return http.get<T.DeptResp[]>(`${BASE_URL}/tree`, query)
}
/** @desc 查询部门详情 */
export function getDept(id: string) {
return http.get<T.DeptResp>(`${BASE_URL}/${id}`)
}
/** @desc 新增部门 */
export function addDept(data: any) {
return http.post<boolean>(`${BASE_URL}`, data)
}
/** @desc 修改部门 */
export function updateDept(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除部门 */
export function deleteDept(id: string) {
return http.del(`${BASE_URL}/${id}`)
}
/** @desc 导出部门 */
export function exportDept(query: T.DeptQuery) {
return http.download(`${BASE_URL}/export`, query)
}

61
src/apis/system/dict.ts Normal file
View File

@@ -0,0 +1,61 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/system/dict'
/** @desc 查询字典列表 */
export function listDict(query?: T.DictQuery) {
return http.get<T.DictResp[]>(`${BASE_URL}/list`, query)
}
/** @desc 查询字典详情 */
export function getDict(id: string) {
return http.get<T.DictResp>(`${BASE_URL}/${id}`)
}
/** @desc 新增字典 */
export function addDict(data: any) {
return http.post(`${BASE_URL}`, data)
}
/** @desc 修改字典 */
export function updateDict(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除字典 */
export function deleteDict(id: string) {
return http.del(`${BASE_URL}/${id}`)
}
/** @desc 清除字典缓存 */
export function clearDictCache(code: string) {
return http.del(`${BASE_URL}/cache/${code}`)
}
/** @desc 查询字典项列表 */
export function listDictItem(query: T.DictItemPageQuery) {
return http.get<PageRes<T.DictItemResp[]>>(`${BASE_URL}/item`, query)
}
/** @desc 查询字典项详情 */
export function getDictItem(id: string) {
return http.get<T.DictItemResp>(`${BASE_URL}/item/${id}`)
}
/** @desc 新增字典项 */
export function addDictItem(data: any) {
return http.post(`${BASE_URL}/item`, data)
}
/** @desc 修改字典项 */
export function updateDictItem(data: any, id: string) {
return http.put(`${BASE_URL}/item/${id}`, data)
}
/** @desc 删除字典项 */
export function deleteDictItem(id: string) {
return http.del(`${BASE_URL}/item/${id}`)
}

31
src/apis/system/file.ts Normal file
View File

@@ -0,0 +1,31 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/system/file'
/** @desc 查询文件列表 */
export function listFile(query: T.FilePageQuery) {
return http.get<PageRes<T.FileItem[]>>(`${BASE_URL}`, query)
}
/** @desc 修改文件 */
export function updateFile(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除文件 */
export function deleteFile(ids: string | Array<string>) {
return http.del(`${BASE_URL}/${ids}`)
}
/** @desc 删除文件 */
export function deleteByUrl(url: string) {
return http.del(`${BASE_URL}/deleteByUrl`, { url: url })
}
/** @desc 查询文件资源统计统计 */
export function getFileStatistics() {
return http.get<T.FileStatisticsResp>(`${BASE_URL}/statistics`)
}

11
src/apis/system/index.ts Normal file
View File

@@ -0,0 +1,11 @@
export * from './user'
export * from './role'
export * from './menu'
export * from './dept'
export * from './notice'
export * from './dict'
export * from './file'
export * from './storage'
export * from './option'
export * from './user-center'
export * from './message'

36
src/apis/system/menu.ts Normal file
View File

@@ -0,0 +1,36 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/system/menu'
/** @desc 查询菜单列表 */
export function listMenu(query?: T.MenuQuery) {
return http.get<T.MenuResp[]>(`${BASE_URL}/tree`, query)
}
/** @desc 查询菜单详情 */
export function getMenu(id: string) {
return http.get<T.MenuResp>(`${BASE_URL}/${id}`)
}
/** @desc 新增菜单 */
export function addMenu(data: any) {
return http.post<boolean>(`${BASE_URL}`, data)
}
/** @desc 修改菜单 */
export function updateMenu(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除菜单 */
export function deleteMenu(id: string) {
return http.del(`${BASE_URL}/${id}`)
}
/** @desc 清除菜单缓存 */
export function clearMenuCache() {
return http.del(`${BASE_URL}/cache`)
}

View File

@@ -0,0 +1,26 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/system/message'
/** @desc 查询消息列表 */
export function listMessage(query: T.MessagePageQuery) {
return http.get<PageRes<T.MessageResp[]>>(`${BASE_URL}`, query)
}
/** @desc 删除消息 */
export function deleteMessage(ids: string | Array<string>) {
return http.del(`${BASE_URL}/${ids}`)
}
/** @desc 标记已读 */
export function readMessage(ids?: string | Array<string>) {
return http.patch(`${BASE_URL}/read`, ids)
}
/** @desc 查询未读消息数量 */
export function getUnreadMessageCount() {
return http.get(`${BASE_URL}/unread`)
}

31
src/apis/system/notice.ts Normal file
View File

@@ -0,0 +1,31 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/system/notice'
/** @desc 查询公告列表 */
export function listNotice(query: T.NoticePageQuery) {
return http.get<PageRes<T.NoticeResp[]>>(`${BASE_URL}`, query)
}
/** @desc 查询公告详情 */
export function getNotice(id: string) {
return http.get<T.NoticeResp>(`${BASE_URL}/${id}`)
}
/** @desc 新增公告 */
export function addNotice(data: any) {
return http.post(BASE_URL, data)
}
/** @desc 修改公告 */
export function updateNotice(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除公告 */
export function deleteNotice(ids: string | Array<number>) {
return http.del(`${BASE_URL}/${ids}`)
}

21
src/apis/system/option.ts Normal file
View File

@@ -0,0 +1,21 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/system/option'
/** @desc 查询参数列表 */
export function listOption(query: T.OptionQuery) {
return http.get<T.OptionResp[]>(`${BASE_URL}`, query)
}
/** @desc 修改参数 */
export function updateOption(data: any) {
return http.put(`${BASE_URL}`, data)
}
/** @desc 重置参数 */
export function resetOptionValue(query: T.OptionQuery) {
return http.patch(`${BASE_URL}/value`, query)
}

56
src/apis/system/role.ts Normal file
View File

@@ -0,0 +1,56 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/system/role'
/** @desc 查询角色列表 */
export function listRole(query: T.RoleQuery) {
return http.get<T.RoleResp[]>(`${BASE_URL}/list`, query)
}
/** @desc 查询角色详情 */
export function getRole(id: string) {
return http.get<T.RoleDetailResp>(`${BASE_URL}/${id}`)
}
/** @desc 新增角色 */
export function addRole(data: any) {
return http.post(`${BASE_URL}`, data)
}
/** @desc 修改角色 */
export function updateRole(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除角色 */
export function deleteRole(ids: string | Array<string>) {
return http.del(`${BASE_URL}/${ids}`)
}
/** @desc 修改角色权限 */
export function updateRolePermission(id: string, data: any) {
return http.put(`${BASE_URL}/${id}/permission`, data)
}
/** @desc 查询角色关联用户 */
export function listRoleUser(id: string, query: T.RoleUserPageQuery) {
return http.get<PageRes<T.RoleUserResp[]>>(`${BASE_URL}/${id}/user`, query)
}
/** @desc 分配角色给用户 */
export function assignToUsers(id: string, userIds: Array<string>) {
return http.post(`${BASE_URL}/${id}/user`, userIds)
}
/** @desc 取消分配角色给用户 */
export function unassignFromUsers(userRoleIds: Array<string | number>) {
return http.del(`${BASE_URL}/user`, userRoleIds)
}
/** @desc 查询角色关联用户 ID */
export function listRoleUserId(id: string) {
return http.get(`${BASE_URL}/${id}/user/id`)
}

View File

@@ -0,0 +1,41 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/system/storage'
/** @desc 查询存储列表 */
export function listStorage(query: T.StorageQuery) {
return http.get<T.StorageResp[]>(`${BASE_URL}/list`, query)
}
/** @desc 查询存储详情 */
export function getStorage(id: string) {
return http.get<T.StorageResp>(`${BASE_URL}/${id}`)
}
/** @desc 新增存储 */
export function addStorage(data: any) {
return http.post(`${BASE_URL}`, data)
}
/** @desc 修改存储 */
export function updateStorage(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除存储 */
export function deleteStorage(id: string) {
return http.del(`${BASE_URL}/${id}`)
}
/** @desc 修改存储状态 */
export function updateStorageStatus(data: any, id: string) {
return http.put(`${BASE_URL}/${id}/status`, data)
}
/** @desc 设置默认存储 */
export function setDefaultStorage(id: string) {
return http.put(`${BASE_URL}/${id}/default`)
}

View File

@@ -0,0 +1,66 @@
import http from '@/utils/http'
const BASE_URL = '/system/config'
export interface ConfigResp {
id: string
configName: string
configKey: string
configValue: string
remark: string
createTime: string
createUserString: string
updateUserString: string
disabled: boolean
}
export interface ConfigDetailResp {
id: string
configName: string
configKey: string
configValue: string
configType: string
remark: string
createUser: string
createTime: string
updateUser: string
updateTime: string
createUserString: string
updateUserString: string
}
export interface ConfigQuery {
configName: string | undefined
configKey: string | undefined
createTime: Array<string> | undefined
sort: Array<string>
}
export interface ConfigPageQuery extends ConfigQuery, PageQuery {}
/** @desc 查询参数配置列表 */
export function listConfig(query: ConfigPageQuery) {
return http.get<PageRes<ConfigResp[]>>(`${BASE_URL}`, query)
}
/** @desc 查询参数配置详情 */
export function getConfig(id: string) {
return http.get<ConfigDetailResp>(`${BASE_URL}/${id}`)
}
/** @desc 新增参数配置 */
export function addConfig(data: any) {
return http.post(`${BASE_URL}`, data)
}
/** @desc 修改参数配置 */
export function updateConfig(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除参数配置 */
export function deleteConfig(id: string) {
return http.del(`${BASE_URL}/${id}`)
}
/** @desc 导出参数配置 */
export function exportConfig(query: ConfigQuery) {
return http.download(`${BASE_URL}/export`, query)
}

406
src/apis/system/type.ts Normal file
View File

@@ -0,0 +1,406 @@
/** 用户类型 */
export interface UserResp {
id: string
username: string
nickname: string
avatar: string
gender: number
email: string
phone: string
description: string
status: 1 | 2
isSystem?: boolean
createUserString: string
createTime: string
updateUserString: string
updateTime: string
deptId: string
deptName: string
roleIds: Array<number>
roleNames: Array<string>
disabled: boolean
}
export type UserDetailResp = UserResp & {
pwdResetTime?: string
}
export interface UserImportResp {
importKey: string
totalRows: number
validRows: number
duplicateUserRows: number
duplicateEmailRows: number
duplicatePhoneRows: number
}
export interface PeopleImportResp {
importKey: string
totalRows: number
validRows: number
duplicatePeopleRows: number
}
export interface UserQuery {
description?: string
status?: number
createTime?: Array<string>
deptId?: string
sort: Array<string>
userIds?: Array<string>
roleId?: string
}
export interface UserPageQuery extends UserQuery, PageQuery {}
/** 角色类型 */
export interface RoleResp {
id: string
name: string
code: string
sort: number
description: string
dataScope: number
isSystem: boolean
createUserString: string
createTime: string
updateUserString: string
updateTime: string
disabled: boolean
}
export type RoleDetailResp = RoleResp & {
menuIds: Array<number>
deptIds: Array<number>
menuCheckStrictly: boolean
deptCheckStrictly: boolean
}
export interface RoleUserResp {
id: string
username: string
nickname: string
gender: number
description: string
status: 1 | 2
isSystem?: boolean
deptId: string
deptName: string
roleIds: Array<number>
roleNames: Array<string>
disabled: boolean
}
export interface RoleQuery {
description?: string
sort: Array<string>
}
export interface RoleUserQuery {
description?: string
sort: Array<string>
}
export interface RoleUserPageQuery extends RoleUserQuery, PageQuery {}
/** 菜单类型 */
export interface MenuResp {
id: string
title: string
parentId: string
type: 1 | 2 | 3
path: string
name: string
component: string
redirect: string
icon: string
isExternal: boolean
isCache: boolean
isHidden: boolean
permission: string
sort: number
status: 1 | 2
createUserString: string
createTime: string
updateUserString: string
updateTime: string
children: MenuResp[]
}
export interface MenuQuery {
title?: string
status?: number
}
/** 部门类型 */
export interface DeptResp {
id: string
name: string
sort: number
status: 1 | 2
isSystem: boolean
description: string
createUserString: string
createTime: string
updateUserString: string
updateTime: string
parentId: string
children: DeptResp[]
}
export interface DeptQuery {
description?: string
status?: number
}
/** 字典类型 */
export interface DictResp {
id: string
name: string
code: string
isSystem: boolean
description: string
createUserString: string
createTime: string
updateUserString: string
updateTime: string
}
export interface DictQuery {
description?: string
sort: Array<string>
}
export interface DictItemResp {
id: string
label: string
value: string
color: string
sort: number
description: string
status: 1 | 2
dictId: number
createUserString: string
createTime: string
updateUserString: string
updateTime: string
}
export interface DictItemQuery {
description?: string
status?: number
sort: Array<string>
dictId: string
}
export interface DictItemPageQuery extends DictItemQuery, PageQuery {
}
/** 公告类型 */
export interface NoticeResp {
id?: string
title?: string
content: string
status?: number
type?: string
effectiveTime?: string
terminateTime?: string
noticeScope?: number
noticeUsers?: Array<string>
createUserString?: string
createTime?: string
updateUserString?: string
updateTime?: string
}
export interface NoticeQuery {
title?: string
type?: string
sort: Array<string>
}
export interface NoticePageQuery extends NoticeQuery, PageQuery {
}
/** 文件类型 */
export interface FileItem {
id: string
name: string
size: number
url: string
parentPath: string
absPath: string
metadata: string
md5: string
contentType: string
thumbnailSize: number
thumbnailUrl: string
thumbnailMetadata: string
extension: string
type: number
storageId: string
storageName: string
createUserString: string
createTime: string
updateUserString: string
updateTime: string
}
/** 文件资源统计信息 */
export interface FileStatisticsResp {
type: string
size: any
number: number
unit: string
data: Array<FileStatisticsResp>
}
export interface FileQuery {
name?: string
type?: string
absPath?: string
sort: Array<string>
}
export interface FilePageQuery extends FileQuery, PageQuery {
}
/** 存储类型 */
export interface StorageResp {
id: string
name: string
code: string
type: number
accessKey: string
secretKey: string
endpoint: string
bucketName: string
domain: string
description: string
isDefault: boolean
sort: number
status: number
createUserString: string
createTime: string
updateUserString: string
updateTime: string
}
export interface StorageQuery {
description?: string
type?: number
sort: Array<string>
}
/** 终端类型 */
export interface ClientResp {
id: string
clientId: string
clientKey: string
clientSecret: string
authType: string
clientType: string
activeTimeout: string
timeout: string
status: string
createUser: string
createTime: string
updateUser: string
updateTime: string
createUserString: string
updateUserString: string
}
export interface ClientDetailResp {
id: string
clientId: string
clientKey: string
clientSecret: string
authType: string
clientType: string
activeTimeout: string
timeout: string
status: string
createUser: string
createTime: string
updateUser: string
updateTime: string
createUserString: string
updateUserString: string
}
export interface ClientQuery {
clientKey: string
clientSecret: string
authType: string[]
clientType: string
status: string
sort: Array<string>
}
export interface ClientPageQuery extends ClientQuery, PageQuery {}
/** 系统参数类型 */
export interface OptionResp {
id: string
name: string
code: string
value: string
description: string
}
export interface OptionQuery {
code?: Array<string>
category?: string
}
/** 基础配置类型 */
export interface BasicConfig {
SITE_FAVICON: string
SITE_LOGO: string
SITE_TITLE: string
SITE_COPYRIGHT: string
SITE_BEIAN: string
}
/** 基础配置类型 */
export interface SiteConfig {
SITE_FAVICON: OptionResp
SITE_LOGO: OptionResp
SITE_TITLE: OptionResp
SITE_DESCRIPTION: OptionResp
SITE_COPYRIGHT: OptionResp
SITE_BEIAN: OptionResp
}
/** 安全配置类型 */
export interface SecurityConfig {
PASSWORD_ERROR_LOCK_COUNT: OptionResp
PASSWORD_ERROR_LOCK_MINUTES: OptionResp
PASSWORD_EXPIRATION_DAYS: OptionResp
PASSWORD_EXPIRATION_WARNING_DAYS: OptionResp
PASSWORD_REPETITION_TIMES: OptionResp
PASSWORD_MIN_LENGTH: OptionResp
PASSWORD_ALLOW_CONTAIN_USERNAME: OptionResp
PASSWORD_REQUIRE_SYMBOLS: OptionResp
}
/** 邮箱配置类型 */
export interface MailConfig {
MAIL_PROTOCOL: OptionResp
MAIL_HOST: OptionResp
MAIL_PORT: OptionResp
MAIL_USERNAME: OptionResp
MAIL_PASSWORD: OptionResp
MAIL_SSL_ENABLED: OptionResp
MAIL_SSL_PORT: OptionResp
}
/** 登录配置类型 */
export interface LoginConfig {
LOGIN_CAPTCHA_ENABLED: OptionResp
}
/** 绑定三方账号信息 */
export interface BindSocialAccountRes {
source: string
description: string
}
/** 系统消息类型 */
export interface MessageResp {
id: string
title: string
content: string
type: number
isRead: boolean
readTime?: string
createUserString?: string
createTime: string
}
export interface MessageQuery {
title?: string
type?: number
isRead?: boolean
sort: Array<string>
}
export interface MessagePageQuery extends MessageQuery, PageQuery {
}

View File

@@ -0,0 +1,44 @@
import type * as System from './type'
import http from '@/utils/http'
const BASE_URL = '/system/user'
/** @desc 上传头像 */
export function uploadAvatar(data: FormData) {
return http.post(`${BASE_URL}/avatar`, data)
}
/** @desc 修改用户基本信息 */
export function updateUserBaseInfo(data: { nickname: string, gender: number }) {
return http.patch(`${BASE_URL}/basic/info`, data)
}
/** @desc 修改密码 */
export function updateUserPassword(data: { oldPassword: string, newPassword: string }) {
return http.patch(`${BASE_URL}/password`, data)
}
/** @desc 修改手机号 */
export function updateUserPhone(data: { phone: string, captcha: string, oldPassword: string }) {
return http.patch(`${BASE_URL}/phone`, data)
}
/** @desc 修改邮箱 */
export function updateUserEmail(data: { email: string, captcha: string, oldPassword: string }) {
return http.patch(`${BASE_URL}/email`, data)
}
/** @desc 获取绑定的三方账号 */
export function listUserSocial() {
return http.get<System.BindSocialAccountRes[]>(`${BASE_URL}/social`)
}
/** @desc 绑定三方账号 */
export function bindSocialAccount(source: string, data: any) {
return http.post(`${BASE_URL}/social/${source}`, data)
}
/** @desc 解绑三方账号 */
export function unbindSocialAccount(source: string) {
return http.del(`${BASE_URL}/social/${source}`)
}

66
src/apis/system/user.ts Normal file
View File

@@ -0,0 +1,66 @@
import type * as T from './type'
import http from '@/utils/http'
export type * from './type'
const BASE_URL = '/system/user'
/** @desc 查询用户列表 */
export function listUser(query: T.UserPageQuery) {
return http.get<PageRes<T.UserResp[]>>(`${BASE_URL}`, query)
}
/** @desc 查询所有用户列表 */
export function listAllUser(query: Partial<T.UserPageQuery>) {
return http.get<T.UserResp[]>(`${BASE_URL}/list`, query)
}
/** @desc 查询用户详情 */
export function getUser(id: string) {
return http.get<T.UserDetailResp>(`${BASE_URL}/${id}`)
}
/** @desc 新增用户 */
export function addUser(data: any) {
return http.post(`${BASE_URL}`, data)
}
/** @desc 修改用户 */
export function updateUser(data: any, id: string) {
return http.put(`${BASE_URL}/${id}`, data)
}
/** @desc 删除用户 */
export function deleteUser(ids: string | Array<string>) {
return http.del(`${BASE_URL}/${ids}`)
}
/** @desc 导出用户 */
export function exportUser(query: T.UserQuery) {
return http.download(`${BASE_URL}/export`, query)
}
/** @desc 下载用户导入模板 */
export function downloadUserImportTemplate() {
return http.download(`${BASE_URL}/import/template`)
}
/** @desc 解析用户导入数据 */
export function parseImportUser(data: FormData) {
return http.post(`${BASE_URL}/import/parse`, data)
}
/** @desc 导入用户 */
export function importUser(data: any) {
return http.post(`${BASE_URL}/import`, data)
}
/** @desc 重置密码 */
export function resetUserPwd(data: any, id: string) {
return http.patch(`${BASE_URL}/${id}/password`, data)
}
/** @desc 分配角色 */
export function updateUserRole(data: { roleIds: string[] }, id: string) {
return http.patch(`${BASE_URL}/${id}/role`, data)
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

20
src/assets/fonts/font.css Normal file
View File

@@ -0,0 +1,20 @@
@font-face {
font-family: 'DINPro-Bold';
src: url('./DINPro-Bold.otf');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'DINPro-Medium';
src: url('./DINPro-Medium.otf');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'DINPro-Regular';
src: url('./DINPro-Regular.otf');
font-weight: normal;
font-style: normal;
}

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M44 9H4m38 20H6m28-10H14m20 20H14" /></svg>

After

Width:  |  Height:  |  Size: 174 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M44 9H4m36 20H4m21-10H4m21 20H4" /></svg>

After

Width:  |  Height:  |  Size: 172 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M4 9h40M8 29h36M23 19h21M23 39h21" /></svg>

After

Width:  |  Height:  |  Size: 174 B

View File

@@ -0,0 +1 @@
<svg width="24" height="24" viewBox="0 0 48 48" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M4 15a1 1 0 001 1h2a1 1 0 001-1V8h7a1 1 0 001-1V5a1 1 0 00-1-1H6a2 2 0 00-2 2v9zm4 18a1 1 0 00-1-1H5a1 1 0 00-1 1v9a2 2 0 002 2h9a1 1 0 001-1v-2a1 1 0 00-1-1H8v-7zm35-17a1 1 0 001-1V6a2 2 0 00-2-2h-9a1 1 0 00-1 1v2a1 1 0 001 1h7v7a1 1 0 001 1h2zm1 17a1 1 0 00-1-1h-2a1 1 0 00-1 1v7h-7a1 1 0 00-1 1v2a1 1 0 001 1h9a2 2 0 002-2v-9zM32.835 11h-6.108c-6.512 0-11.882 4.804-12.636 11h-1.992c-.382 0-.52.046-.66.134a.855.855 0 00-.325.378c-.074.162-.114.324-.114.77v1.436c0 .446.04.608.114.77.075.163.185.291.324.378.14.088.279.134.66.134h2.157c1.179 5.706 6.315 10 12.472 10h6.108c.405 0 .552-.041.7-.12a.819.819 0 00.344-.337c.079-.145.121-.29.121-.688V31h.901c.382 0 .52-.046.66-.134a.855.855 0 00.325-.378c.074-.162.114-.324.114-.77v-1.436c0-.446-.04-.608-.114-.77a.855.855 0 00-.325-.378c-.14-.088-.278-.134-.66-.134H34v-7h.901c.382 0 .52-.046.66-.134a.855.855 0 00.325-.378c.074-.162.114-.324.114-.77v-1.436c0-.446-.04-.608-.114-.77a.855.855 0 00-.325-.378c-.14-.088-.278-.134-.66-.134H34v-3.855c0-.398-.042-.543-.121-.688a.819.819 0 00-.344-.338c-.148-.078-.295-.119-.7-.119zm-2.744 3.571h-3.637c-5.02 0-9.09 3.998-9.09 8.929s4.07 8.929 9.09 8.929h3.637V14.57z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M7 7h13v13H7zM28 7h13v13H28zM7 28h13v13H7zM28 28h13v13H28z"/></svg>

After

Width:  |  Height:  |  Size: 198 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><rect x="9" y="18" width="30" height="22" rx="1" /><path d="M6 9a1 1 0 011-1h34a1 1 0 011 1v8a1 1 0 01-1 1H7a1 1 0 01-1-1V9zM19 27h10" /></svg>

After

Width:  |  Height:  |  Size: 265 B

View File

@@ -0,0 +1,5 @@
<svg width="48" height="48" viewBox="0 0 22 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.72938 13.2709C1.31587 11.8234 1.31587 9.51246 2.72938 8.06503L7.9367 2.73274C9.39842 1.23594 11.8058 1.23594 13.2675 2.73274C14.681 4.18017 14.681 6.49116 13.2675 7.93859L8.06017 13.2709C6.59845 14.7677 4.19111 14.7677 2.72938 13.2709Z" fill="#12D2AC"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.94084 2.7323C9.40256 1.23549 11.8099 1.23549 13.2716 2.7323L18.4789 8.06459C19.8925 9.51202 19.8925 11.823 18.4789 13.2704C17.0172 14.7672 14.6099 14.7672 13.1482 13.2704L7.94084 7.93815C6.52733 6.49071 6.52733 4.17973 7.94084 2.7323Z" fill="#307AF2"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.7384 2.93044C9.30781 1.32337 11.8925 1.32337 13.4619 2.93045L15.8075 5.33229L10.6002 10.6646L5.39285 5.33229L7.7384 2.93044Z" fill="#0057FE"/>
</svg>

After

Width:  |  Height:  |  Size: 909 B

View File

@@ -0,0 +1 @@
<svg width="24" height="24" viewBox="0 0 48 48" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M7 4a1 1 0 011 1v35h35a1 1 0 011 1v2a1 1 0 01-1 1H4V5a1 1 0 011-1h2zm35.727 4.633A1 1 0 0143 9.32V36a1 1 0 01-1 1H12a1 1 0 01-1-1V23l11.324-10.38a1 1 0 011.352 0l6.787 6.22 10.85-10.247a1 1 0 011.414.04zM39 16.28l-8.497 8.024L23 17.426l-8 7.334V33h24V16.28z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 403 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M11.27 27.728l12.728 12.728 12.728-12.728M24 5v34.295" /></svg>

After

Width:  |  Height:  |  Size: 194 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M24.008 41.99a.01.01 0 01-.016 0l-9.978-11.974A.01.01 0 0114.02 30H33.98a.01.01 0 01.007.016l-9.978 11.975z" /><path d="M24 42L14 30h20L24 42z" fill="#4E5969"/><path stroke="#4E5969" stroke-width="2" d="M22 6h4v26h-4z"/><path fill="#4E5969" d="M22 6h4v26h-4z"/></svg>

After

Width:  |  Height:  |  Size: 398 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M20.272 11.27L7.544 23.998l12.728 12.728M43 24H8.705" /></svg>

After

Width:  |  Height:  |  Size: 193 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M27.728 11.27l12.728 12.728-12.728 12.728M5 24h34.295" /></svg>

After

Width:  |  Height:  |  Size: 194 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M23.992 6.01a.01.01 0 01.016 0l9.978 11.974a.01.01 0 01-.007.016H14.02a.01.01 0 01-.007-.016l9.978-11.975z" /><path d="M24 6l10 12H14L24 6z" fill="#4E5969"/><path stroke="#4E5969" stroke-width="2" d="M26 42h-4V16h4z"/><path fill="#4E5969" d="M26 42h-4V16h4z"/></svg>

After

Width:  |  Height:  |  Size: 397 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M11.27 20.272L23.998 7.544l12.728 12.728M24 43V8.705" /></svg>

After

Width:  |  Height:  |  Size: 193 B

1
src/assets/icons/at.svg Normal file
View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M31 23a7 7 0 11-14 0 7 7 0 0114 0zm0 0c0 3.038 2.462 6.5 5.5 6.5A5.5 5.5 0 0042 24c0-9.941-8.059-18-18-18S6 14.059 6 24s8.059 18 18 18c4.244 0 8.145-1.469 11.222-3.925" /></svg>

After

Width:  |  Height:  |  Size: 308 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M29.037 15.236s-9.174 9.267-11.48 11.594c-2.305 2.327-1.646 4.987-.329 6.316 1.317 1.33 3.994 1.953 6.258-.332L37.32 18.851c3.623-3.657 2.092-8.492 0-10.639-2.093-2.147-6.916-3.657-10.54 0L11.3 23.838c-3.623 3.657-3.953 10.638.329 14.96 4.282 4.322 11.115 4.105 14.821.333 3.706-3.773 8.74-8.822 11.224-11.33" /></svg>

After

Width:  |  Height:  |  Size: 449 B

View File

@@ -0,0 +1 @@
<svg t="1658914025483" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3426" width="200" height="200"><path d="M390 679.988v-35.864c0-111.8-70.278-134.488-70.278-134.488S250 534.068 250 644.126v35.864h140z" fill="#4988FD" p-id="3427"></path><path d="M390 699.988h-140c-11.046 0-20-8.956-20-20v-35.864c0-122.828 79.714-152.174 83.108-153.364a20.012 20.012 0 0 1 12.758-0.158c3.434 1.11 84.132 28.598 84.132 153.522v35.864c0.002 11.046-8.952 20-19.998 20z m-120-40h100v-15.864c0-76.286-35.178-104.09-49.982-112.408-14.948 8.808-50.018 37.46-50.018 112.41v15.862z" fill="#4988FD" p-id="3428"></path><path d="M776 679.988v-35.864c0-111.8-70.278-134.488-70.278-134.488S636 534.068 636 644.126v35.864h140z" fill="#4988FD" p-id="3429"></path><path d="M776 699.988h-140c-11.044 0-20-8.956-20-20v-35.864c0-122.828 79.714-152.174 83.11-153.364a20.026 20.026 0 0 1 12.758-0.158c3.436 1.11 84.132 28.598 84.132 153.522v35.864c0 11.046-8.956 20-20 20z m-120-40h100v-15.864c0-76.286-35.178-104.09-49.982-112.408-14.948 8.808-50.018 37.46-50.018 112.41v15.862z" fill="#4988FD" p-id="3430"></path><path d="M693.146 651.988v-92.516c0-288.398-181.292-346.924-181.292-346.924S332 275.57 332 559.476c0.012 56.328 0 92.514 0 92.514l361.146-0.002z" fill="#4988FD" p-id="3431"></path><path d="M332 671.99a19.996 19.996 0 0 1-20-20.006c0-0.004 0.012-36.184 0-92.504 0-152.884 51.604-243.788 94.894-293.124 47.876-54.564 96.308-71.968 98.346-72.684a20.012 20.012 0 0 1 12.758-0.158c2.06 0.666 51.034 16.918 99.41 71.014 43.676 48.838 95.738 139.654 95.738 294.944v92.516c0 11.044-8.956 20-20 20L332 671.99z m180.098-437.812c-13.256 6.236-45.196 23.814-76.73 60.39C380.828 357.83 352 449.434 352 559.476c0.006 31.314 0.006 56.404 0.004 72.514l321.142-0.002v-72.516c0-111.762-29.016-203.89-83.91-266.424-31.678-36.086-63.762-52.93-77.138-58.87z" fill="#4988FD" p-id="3432"></path><path d="M497.858 864.994l-42.426-42.426c-31.244-31.244-31.244-81.894 0-113.138 31.242-31.242 81.894-31.242 113.136 0 31.242 31.24 31.244 81.894 0 113.138l-42.426 42.426c-7.81 7.81-20.474 7.81-28.284 0z" fill="#DFECFD" p-id="3433"></path><path d="M512 870.852a19.868 19.868 0 0 1-14.142-5.86l-42.426-42.424c-15.11-15.11-23.432-35.2-23.432-56.57s8.322-41.46 23.432-56.568S490.632 686 512 685.996c21.37 0.002 41.46 8.324 56.568 23.434S592 744.63 592 766s-8.322 41.46-23.432 56.57l-42.428 42.428a19.864 19.864 0 0 1-14.14 5.856zM512 688c-20.832-0.002-40.42 8.112-55.154 22.844S434 745.164 434 766c0 20.834 8.112 40.422 22.846 55.156l42.426 42.426a17.88 17.88 0 0 0 12.728 5.272 17.88 17.88 0 0 0 12.726-5.27l42.428-42.428c14.732-14.732 22.846-34.32 22.846-55.156 0-20.834-8.114-40.42-22.846-55.154S532.834 688 512 688z" fill="#DFECFD" p-id="3434"></path><path d="M312.576 803.972l-22.274-22.274c-16.402-16.402-16.402-42.996 0-59.398 16.4-16.4 42.994-16.4 59.396 0 16.402 16.402 16.404 42.996 0 59.398l-22.272 22.274a10.5 10.5 0 0 1-14.85 0z" fill="#DFECFD" p-id="3435"></path><path d="M320 806.896a10.784 10.784 0 0 1-7.68-3.18l-22.02-22.02c-16.374-16.374-16.374-43.02 0-59.396A41.728 41.728 0 0 1 320 710c11.22 0 21.764 4.366 29.7 12.3 16.374 16.376 16.374 43.022 0 59.398l-22.02 22.02a10.784 10.784 0 0 1-7.68 3.178zM320 712a39.744 39.744 0 0 0-28.284 11.714c-15.596 15.596-15.596 40.974 0 56.57l22.02 22.02c1.674 1.674 3.898 2.594 6.264 2.592s4.59-0.92 6.264-2.594l22.02-22.02c15.596-15.594 15.596-40.972 0-56.568A39.744 39.744 0 0 0 320 712z" fill="#DFECFD" p-id="3436"></path><path d="M698.576 803.972l-22.274-22.274c-16.4-16.4-16.4-42.994 0-59.398 16.4-16.4 42.994-16.4 59.396 0 16.402 16.402 16.4 42.996 0 59.398l-22.274 22.274a10.498 10.498 0 0 1-14.848 0z" fill="#DFECFD" p-id="3437"></path><path d="M706 806.896a10.784 10.784 0 0 1-7.68-3.18l-22.02-22.02c-16.37-16.374-16.37-43.02 0-59.396 7.936-7.934 18.482-12.3 29.7-12.3s21.764 4.366 29.7 12.3c16.374 16.376 16.372 43.02 0 59.398l-22.02 22.02a10.784 10.784 0 0 1-7.68 3.178zM706 712a39.736 39.736 0 0 0-28.284 11.714c-15.594 15.596-15.594 40.974 0 56.57l22.02 22.02c1.672 1.672 3.896 2.592 6.264 2.592s4.592-0.92 6.264-2.594l22.02-22.02c15.596-15.594 15.594-40.972 0-56.568A39.736 39.736 0 0 0 706 712z" fill="#DFECFD" p-id="3438"></path><path d="M512 352c22.092 0 40 17.908 40 40v80c0 22.092-17.908 40-40 40s-40-17.908-40-40v-80c0-22.092 17.908-40 40-40z" fill="#DFECFD" p-id="3439"></path><path d="M512 512c-22.056 0-40-17.944-40-40v-80c0-22.056 17.944-40 40-40s40 17.944 40 40v80c0 22.056-17.944 40-40 40z m0-158c-20.954 0-38 17.046-38 38v80c0 20.954 17.046 38 38 38s38-17.046 38-38v-80c0-20.954-17.046-38-38-38z" fill="#DFECFD" p-id="3440"></path></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M38.293 36.293L26.707 24.707a1 1 0 010-1.414l11.586-11.586c.63-.63 1.707-.184 1.707.707v23.172c0 .89-1.077 1.337-1.707.707zM21 12.414v23.172c0 .89-1.077 1.337-1.707.707L7.707 24.707a1 1 0 010-1.414l11.586-11.586c.63-.63 1.707-.184 1.707.707z" /></svg>

After

Width:  |  Height:  |  Size: 382 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M19 5.25L22.75 9m0 0l12.043 12.043a1 1 0 010 1.414L32 25.25 21.221 36.029a1 1 0 01-1.428-.014L9.443 25.25l-.763-.793a1 1 0 01.013-1.4L22.75 9zM6 42h36" /><path d="M11.791 25.25c-.881 0-1.332 1.058-.72 1.693l8.722 9.072a1 1 0 001.428.014L32 25.25H11.791z" fill="#4E5969" /><path fill-rule="evenodd" clip-rule="evenodd" d="M40.013 29.812L37.201 27l-2.812 2.812a4 4 0 105.624 0z" fill="#4E5969"/></svg>

After

Width:  |  Height:  |  Size: 530 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M13 24h12a8 8 0 100-16H13.2a.2.2 0 00-.2.2V24zm0 0h16a8 8 0 110 16H13.2a.2.2 0 01-.2-.2V24z" /></svg>

After

Width:  |  Height:  |  Size: 232 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M24 13L7 7v28l17 6 17-6V7l-17 6zm0 0v27.5M19 18l-7-2.5M19 25l-7-2.5M19 32l-7-2.5M29 18l7-2.5M29 25l7-2.5M29 32l7-2.5" stroke="#4E5969" stroke-width="2" stroke-linejoin="round"/></svg>

After

Width:  |  Height:  |  Size: 314 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M16 16h16M16 24h8" /><path d="M24 41H8V6h32v17" /><path d="M30 29h11v13l-5.5-3.5L30 42V29Z" /></svg>

After

Width:  |  Height:  |  Size: 231 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M19 10a4 4 0 11-8 0 4 4 0 018 0zM38 10a4 4 0 11-8 0 4 4 0 018 0zM19 38a4 4 0 11-8 0 4 4 0 018 0zM15 15v15m0 3.5V30m0 0c0-5 19-7 19-15" /></svg>

After

Width:  |  Height:  |  Size: 274 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M33 13h7a1 1 0 011 1v12.14a1 1 0 01-.85.99l-21.3 3.24a1 1 0 00-.85.99V43" /><path d="M7 18V8c0-.552.444-1 .997-1H32.01c.552 0 .99.447.99 1v10.002A.998.998 0 0132 19H8a1 1 0 01-1-1z" /></svg>

After

Width:  |  Height:  |  Size: 321 B

1
src/assets/icons/bug.svg Normal file
View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M35 27h8M5 27h8m0-9h22v13c0 6.075-4.925 11-11 11s-11-4.925-11-11V18z" stroke="#4E5969" stroke-width="2" stroke-linejoin="round"/><path d="M7 42v-.5a6.5 6.5 0 016.5-6.5M7 42v-.5M41 42v-.5a6.5 6.5 0 00-6.5-6.5M13 18h22M7 14a4 4 0 004 4h26a4 4 0 004-4M24 42V23M17 14a7 7 0 1114 0" stroke="#4E5969" stroke-width="2" stroke-linejoin="round"/></svg>

After

Width:  |  Height:  |  Size: 474 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M30.8 32.465c.585-2.576 2.231-4.75 3.77-6.897A12.94 12.94 0 0037 18c0-7.18-5.82-13-13-13s-13 5.82-13 13c0 2.823.9 5.437 2.43 7.568 1.539 2.147 3.185 4.32 3.77 6.897l.623 2.756A1 1 0 0018.8 36H29.2a1 1 0 00.976-.779l.624-2.756zM17 42h14" /></svg>

After

Width:  |  Height:  |  Size: 376 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M7 22h34M8 41h32a1 1 0 001-1V10a1 1 0 00-1-1H8a1 1 0 00-1 1v30a1 1 0 001 1zM34 5v8M14 5v8" /></svg>

After

Width:  |  Height:  |  Size: 230 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M7 22h34V10a1 1 0 00-1-1H8a1 1 0 00-1 1v30a1 1 0 001 1h18M34 5v8M14 5v8" /><path fill-rule="evenodd" clip-rule="evenodd" d="M36 44a9 9 0 100-18 9 9 0 000 18zm1.5-9.75V29h-3v8.25H42v-3h-4.5z" fill="#4E5969"/></svg>

After

Width:  |  Height:  |  Size: 344 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M6 13a1 1 0 011-1h34a1 1 0 011 1v26a1 1 0 01-1 1H7a1 1 0 01-1-1V13z" /><path d="M31 26a7 7 0 11-14 0 7 7 0 0114 0zM33 12l-1.862-3.724A.5.5 0 0030.691 8H17.309a.5.5 0 00-.447.276L15 12" /></svg>

After

Width:  |  Height:  |  Size: 324 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M24.937 34.829a1.2 1.2 0 01-1.874 0L9.56 17.949C8.93 17.165 9.49 16 10.497 16h27.006c1.007 0 1.566 1.164.937 1.95L24.937 34.829z" fill="#4E5969"/></svg>

After

Width:  |  Height:  |  Size: 283 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M13.171 24.937a1.2 1.2 0 010-1.874L30.051 9.56c.785-.629 1.949-.07 1.949.937v27.006c0 1.007-1.164 1.566-1.95.937L13.171 24.937z" fill="#4E5969"/></svg>

After

Width:  |  Height:  |  Size: 282 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M34.829 23.063c.6.48.6 1.394 0 1.874L17.949 38.44c-.785.629-1.949.07-1.949-.937V10.497c0-1.006 1.164-1.566 1.95-.937l16.879 13.503z" fill="#4E5969"/></svg>

After

Width:  |  Height:  |  Size: 286 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M23.063 13.171a1.2 1.2 0 011.874 0l13.503 16.88c.629.785.07 1.949-.937 1.949H10.497c-1.006 0-1.566-1.164-.937-1.95l13.503-16.879z" fill="#4E5969"/></svg>

After

Width:  |  Height:  |  Size: 284 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M42 24c0 9.941-8.059 18-18 18S6 33.941 6 24 14.059 6 24 6s18 8.059 18 18z" fill="#4E5969" /><path d="M15 22l7 7 11.5-11.5" stroke="#fff" stroke-width="2"/></svg>

After

Width:  |  Height:  |  Size: 292 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M42 24c0 9.941-8.059 18-18 18S6 33.941 6 24 14.059 6 24 6s18 8.059 18 18z" /><path d="M15 22l7 7 11.5-11.5" /></svg>

After

Width:  |  Height:  |  Size: 247 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M7 8a1 1 0 011-1h32a1 1 0 011 1v32a1 1 0 01-1 1H8a1 1 0 01-1-1V8z" /><path d="M34.603 16.672L21.168 30.107l-7.778-7.779" /></svg>

After

Width:  |  Height:  |  Size: 260 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M41.678 11.05L19.05 33.678 6.322 20.95" /></svg>

After

Width:  |  Height:  |  Size: 179 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M22 21h-5v4.094h5V21zM26 25.094V21h5v4.094h-5z" fill="#4E5969"/><path fill-rule="evenodd" clip-rule="evenodd" d="M24 4C12.954 4 4 12.954 4 24s8.954 20 20 20 20-8.954 20-20S35.046 4 24 4zm2 13v-5h-4v5h-6.5a2.5 2.5 0 00-2.5 2.5v7.094a2.5 2.5 0 002.5 2.5H22V36h4v-6.906h6.5a2.5 2.5 0 002.5-2.5V19.5a2.5 2.5 0 00-2.5-2.5H26z" fill="#4E5969"/></svg>

After

Width:  |  Height:  |  Size: 475 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M42 24c0 9.941-8.059 18-18 18S6 33.941 6 24 14.059 6 24 6s18 8.059 18 18z" /><path d="M24 14v10h9.5" /></svg>

After

Width:  |  Height:  |  Size: 240 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M42 24c0 9.941-8.059 18-18 18S6 33.941 6 24 14.059 6 24 6s18 8.059 18 18z" fill="#4E5969" /><path d="M17.643 17.643l6.363 6.364m0 0l6.364 6.364m-6.364-6.364l6.364-6.364m-6.364 6.364l-6.363 6.364" stroke="#fff" stroke-width="2"/></svg>

After

Width:  |  Height:  |  Size: 365 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M42 24c0 9.941-8.059 18-18 18S6 33.941 6 24 14.059 6 24 6s18 8.059 18 18zM17.643 17.643l6.364 6.364 6.364 6.364" /><path d="M30.37 17.643l-6.363 6.364-6.364 6.364" /></svg>

After

Width:  |  Height:  |  Size: 303 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M38.142 9.858L24 24 9.858 38.142M9.858 9.858L24 24l14.142 14.142" /></svg>

After

Width:  |  Height:  |  Size: 205 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M43 22c0-7.732-6.492-14-14.5-14S14 14.268 14 22v.055A9.001 9.001 0 0015 40h13" /><path d="M44.142 34.071l-7.07 7.071L30 34.071M37.07 26v15" /></svg>

After

Width:  |  Height:  |  Size: 279 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M5 29a9 9 0 009 9h19c5.523 0 10-4.477 10-10 0-5.312-4.142-9.657-9.373-9.98C32.3 12.833 27.598 9 22 9c-6.606 0-11.965 5.338-12 11.935A9 9 0 005 29z" /></svg>

After

Width:  |  Height:  |  Size: 287 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M29 6h4a3 3 0 013 3v10c0 3 4.343 5 6 5-1.657 0-6 2-6 5v10a3 3 0 01-3 3h-4M19 6h-4a3 3 0 00-3 3v10c0 3-4.343 5-6 5 1.657 0 6 2 6 5v10a3 3 0 003 3h4" /></svg>

After

Width:  |  Height:  |  Size: 287 B

View File

@@ -0,0 +1 @@
<svg width="24" height="24" viewBox="0 0 48 48" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M26.5 6a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H9v30h29a1 1 0 001-1V22.5a.5.5 0 01.5-.5h3a.5.5 0 01.5.5V42a2 2 0 01-2 2H7a2 2 0 01-2-2V8a2 2 0 012-2h19.5zm3.768 14.707l3.864 1.035-4.141 15.455-3.864-1.035 4.141-15.455zM21.485 20l2.829 2.828-5.683 5.682 5.268 5.268-2.828 2.829-7.778-7.779.025-.025-.318-.318L21.485 20zM39.5 4a.5.5 0 01.5.5V9h4.5a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H40v4.5a.5.5 0 01-.5.5h-3a.5.5 0 01-.5-.5V13h-4.5a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5H36V4.5a.5.5 0 01.5-.5h3z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 621 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M39 6H9a1 1 0 00-1 1v34a1 1 0 001 1h30a1 1 0 001-1V7a1 1 0 00-1-1z" /><path d="M8 7a1 1 0 011-1h30a1 1 0 011 1v34a1 1 0 01-1 1H9a1 1 0 01-1-1V7zM32.072 16.518l-4.14 15.454" /><path d="M23.071 17L16 24.071l7.071 7.071" /></svg>

After

Width:  |  Height:  |  Size: 357 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M27.2 6.28l-6.251 35.453M16.734 12.686L5.42 24l11.314 11.314M31.255 12.686L42.57 24 31.255 35.314" /></svg>

After

Width:  |  Height:  |  Size: 238 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M29 19v10H19V19h10zM13 29a6 6 0 106 6v-6h-6zM35 29a6 6 0 11-6 6v-6h6zM13 19a6 6 0 116-6v6h-6zM35 19a6 6 0 10-6-6v6h6z" /></svg>

After

Width:  |  Height:  |  Size: 258 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M24 23L7.652 14.345M24 23l16.366-8.664M24 23v19.438M7 14v20l17 9 17-9V14L24 5 7 14z" /></svg>

After

Width:  |  Height:  |  Size: 224 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M42 24c0 9.941-8.059 18-18 18S6 33.941 6 24 14.059 6 24 6s18 8.059 18 18z" /><path d="M21.177 21.183l10.108-4.717a.2.2 0 01.266.265L26.834 26.84l-10.109 4.717a.2.2 0 01-.266-.266l4.718-10.108z" /></svg>

After

Width:  |  Height:  |  Size: 333 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M41 7H7v22h34V7Z" /><path d="M23.778 29v10" /><path d="M16 39h16" /><path d="m20.243 14.657 5.657 5.657M15.414 22.314l7.071-7.071M24.485 21.728l7.071-7.071" /></svg>

After

Width:  |  Height:  |  Size: 296 B

View File

@@ -0,0 +1 @@
<svg width="24" height="24" viewBox="0 0 48 48" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M31 21a7.003 7.003 0 006.71-5h5.008c.446 0 .607-.046.77-.134a.908.908 0 00.378-.378c.088-.162.134-.324.134-.77v-1.436c0-.446-.046-.607-.134-.77a.908.908 0 00-.378-.378c-.163-.088-.324-.134-.77-.134l-5.008-.001a7.003 7.003 0 00-13.42 0L5.282 12c-.446 0-.607.046-.77.134a.908.908 0 00-.378.378c-.088.162-.134.324-.134.77v1.436c0 .446.046.607.134.77.087.163.215.291.378.378.163.088.324.134.77.134H24.29c.86 2.892 3.539 5 6.71 5zm0-4a3 3 0 110-6 3 3 0 010 6zM17 41a7.003 7.003 0 006.71-5h19.008c.446 0 .607-.046.77-.134a.908.908 0 00.378-.378c.088-.163.134-.324.134-.77v-1.436c0-.446-.046-.607-.134-.77a.908.908 0 00-.378-.378c-.163-.088-.324-.134-.77-.134l-19.008-.001a7.003 7.003 0 00-13.42 0L5.282 32c-.446 0-.607.046-.77.134a.908.908 0 00-.378.378c-.088.163-.134.324-.134.77v1.436c0 .446.046.607.134.77.087.163.215.291.378.378.163.088.324.134.77.134h5.008c.86 2.892 3.539 5 6.71 5zm0-4a3 3 0 110-6 3 3 0 010 6z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,9 @@
<svg width="33" height="33" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 174.8 204">
<path fill="#307AF2" d="M86.7,0l88,51v.2l-16.3,9.4v-.2L86.7,18.9Zm71.8,143.5,16.3,9.4v.2L86.8,204h0l-16.3-9.4,16.3-9.4h0l71.7-41.5v-.2Z"/>
<path fill="#12D2AC" d="M16.3,143.5v.2L58,167.8l-16.3,9.4L0,153.1v-.2Z"/>
<path fill="#12D2AC" d="M104.1,93,15.9,143.8l-.2-.1V124.9l.2.1L87.7,83.6,104.1,93Z"/>
<path fill="#0057FE" d="M88.1,0,.1,51v.2l16.3,9.4v-.2L88.1,18.9Z"/>
<path fill="#307AF2" d="M.1,50.9.2,152.6l.2.1,16.3-9.4-.2-.1-.1-82.9L.1,50.9Z"/>
<path fill="#0057FE" d="M174.7,50.9l-.1,101.7-.2.1-16.3-9.4.2-.1.1-82.9Z"/>
<path fill="#12D2AC" d="M41.7,158.5l16.1,9.4,100.6-58.7V90.4Z"/>
</svg>

After

Width:  |  Height:  |  Size: 683 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="butt" stroke-linejoin="miter"><path d="M20 6h18a2 2 0 012 2v22" /><path d="M8 40V16a2 2 0 012-2h20c1.105 0 2 .892 2 1.997v24.011A1.99 1.99 0 0130.003 42H9.996A1.996 1.996 0 018 40z" /></svg>

After

Width:  |  Height:  |  Size: 282 B

Some files were not shown because too many files have changed in this diff Show More