fix(web): 修复代码格式和文件清理问题

清理无用文件和资源,调整代码格式统一双引号,修复部分组件路径引用问题

删除大量无用图片资源和组件文件,统一代码风格使用双引号,修复国际化文件路径引用,调整部分组件逻辑,优化项目结构
This commit is contained in:
zhangtao
2026-04-30 00:56:34 +08:00
parent eb150bcede
commit cc85f624ab
595 changed files with 24879 additions and 103217 deletions
+28 -75
View File
@@ -1,93 +1,46 @@
<template>
<ElConfigProvider
:locale="locales"
:size="size"
:z-index="3000"
:card="{
shadow: 'never',
}"
>
<el-config-provider :locale="locale" :size="size">
<!-- 开启水印 -->
<ElWatermark
<el-watermark
:font="{ color: fontColor }"
:content="showWatermark ? watermarkContent : ''"
:z-index="9999"
class="wh-full"
>
<RouterView />
<router-view />
<!-- AI 助手 -->
<AiAssistant v-if="enableAiAssistant" />
</ElWatermark>
</ElConfigProvider>
<!-- <ElConfigProvider
size="default"
:locale="locales[language]"
:z-index="3000"
:card="{
shadow: 'never'
}"
>
<RouterView></RouterView>
</ElConfigProvider> -->
</el-watermark>
</el-config-provider>
</template>
<script setup lang="ts">
// import { useUserStore } from './store/modules/user'
// import zh from 'element-plus/es/locale/lang/zh-cn'
// import en from 'element-plus/es/locale/lang/en'
// import { systemUpgrade } from './utils/sys'
// import { toggleTransition } from './utils/ui/animation'
// import { checkStorageCompatibility } from './utils/storage'
// import { initializeTheme } from './hooks/core/useTheme'
import { useAppStore, useSettingsStore, useUserStore } from "@/store";
import { defaultSettings } from "@/settings";
import { ThemeMode } from "@/enums/settings/theme.enum";
import { ComponentSize } from "@/enums/settings/layout.enum";
import AiAssistant from "@/components/AiAssistant/index.vue";
// const userStore = useUserStore()
// const { language } = storeToRefs(userStore)
const appStore = useAppStore();
const settingsStore = useSettingsStore();
const userStore = useUserStore();
// const locales = {
// zh: zh,
// en: en
// }
const locale = computed(() => appStore.locale);
const size = computed(() => appStore.size as ComponentSize);
const showWatermark = computed(() => settingsStore.showWatermark);
const watermarkContent = defaultSettings.watermarkContent;
// onBeforeMount(() => {
// toggleTransition(true)
// initializeTheme()
// })
// 只有在启用 AI 助手且用户已登录时才显示
// 使用 userInfo 作为响应式依赖,当用户退出登录时会自动更新
const enableAiAssistant = computed(() => {
const isEnabled = settingsStore.userEnableAi;
const isLoggedIn = userStore.basicInfo && Object.keys(userStore.basicInfo).length > 0;
return isEnabled && isLoggedIn;
});
// onMounted(() => {
// checkStorageCompatibility()
// toggleTransition(false)
// systemUpgrade()
// })
import { useAppStore, useSettingsStore, useUserStore } from '@/store';
import { defaultSettings } from '@/settings';
import { ThemeMode } from '@/enums/settings/theme.enum';
import { ComponentSize } from '@/enums/settings/layout.enum';
import AiAssistant from '@/components/AiAssistant/index.vue';
const appStore = useAppStore();
const settingsStore = useSettingsStore();
const userStore = useUserStore();
const locales = computed(() => appStore.locale);
const size = computed(() => appStore.size as ComponentSize);
const showWatermark = computed(() => settingsStore.showWatermark);
const watermarkContent = defaultSettings.watermarkContent;
// 只有在启用 AI 助手且用户已登录时才显示
// 使用 userInfo 作为响应式依赖,当用户退出登录时会自动更新
const enableAiAssistant = computed(() => {
const isEnabled = settingsStore.userEnableAi;
const isLoggedIn = userStore.basicInfo && Object.keys(userStore.basicInfo).length > 0;
return isEnabled && isLoggedIn;
});
// 明亮/暗黑主题水印字体颜色适配
const fontColor = computed(() => {
return settingsStore.theme === ThemeMode.DARK
? 'rgba(255, 255, 255, .15)'
: 'rgba(0, 0, 0, .15)';
});
// 明亮/暗黑主题水印字体颜色适配
const fontColor = computed(() => {
return settingsStore.theme === ThemeMode.DARK ? "rgba(255, 255, 255, .15)" : "rgba(0, 0, 0, .15)";
});
</script>
-29
View File
@@ -1,29 +0,0 @@
import request from '@/utils/http';
/**
* 登录
* @param params 登录参数
* @returns 登录响应
*/
export function fetchLogin(params: Api.Auth.LoginParams) {
return request.post<Api.Auth.LoginResponse>({
url: '/api/auth/login',
params,
// showSuccessMessage: true // 显示成功消息
// showErrorMessage: false // 不显示错误消息
});
}
/**
* 获取用户信息
* @returns 用户信息
*/
export function fetchGetUserInfo() {
return request.get<Api.Auth.UserInfo>({
url: '/api/user/info',
// 自定义请求头
// headers: {
// 'X-Custom-Header': 'your-custom-value'
// }
});
}
+10 -35
View File
@@ -1,12 +1,8 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/ai/chat';
const API_PATH = "/ai/chat";
export const AiChatAPI = {
/**
* 查询会话列表
* @param query 查询参数
*/
getSessionList(query: {
page_no: number;
page_size: number;
@@ -14,70 +10,49 @@ export const AiChatAPI = {
created_at?: string[];
updated_at?: string[];
}) {
return request<PageResult<ChatSession[]>>({
return request<ApiResponse<PageResult<ChatSession[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 创建会话
* @param body 会话信息
*/
createSession(body: { title: string }) {
return request<ApiResponse<ChatSession>>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新会话
* @param id 会话ID
* @param body 会话信息
*/
updateSession(id: string, body: { title: string }) {
return request<ApiResponse<ChatSession>>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除会话
* @param body 会话ID数组
*/
deleteSession(body: string[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 调用AI模型
* @param body 调用参数
*/
chat(body: { message: string; session_id?: string | null }) {
return request<ApiResponse<AiChatResponse>>({
url: `${API_PATH}/ai-chat`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 查询会话详情
* @param sessionId 会话ID
*/
getSessionDetail(sessionId: string) {
return request<ApiResponse<ChatSessionDetail>>({
url: `${API_PATH}/detail/${sessionId}`,
method: 'get',
method: "get",
});
},
};
@@ -1,6 +1,6 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/application/portal';
const API_PATH = "/application/portal";
export const ApplicationAPI = {
/**
@@ -10,7 +10,7 @@ export const ApplicationAPI = {
detailApp(id: number) {
return request<ApiResponse<ApplicationInfo>>({
url: `${API_PATH}/detail/${id}`,
method: 'get',
method: "get",
});
},
@@ -19,9 +19,9 @@ export const ApplicationAPI = {
* @param query 查询参数
*/
listApp(query: ApplicationPageQuery) {
return request<PageResult<ApplicationInfo[]>>({
return request<ApiResponse<PageResult<ApplicationInfo[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
@@ -31,9 +31,9 @@ export const ApplicationAPI = {
* @param body 应用信息
*/
createApp(body: ApplicationForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
@@ -44,9 +44,9 @@ export const ApplicationAPI = {
* @param body 应用信息
*/
updateApp(id: number, body: ApplicationForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
@@ -56,9 +56,9 @@ export const ApplicationAPI = {
* @param body 应用ID数组
*/
deleteApp(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
@@ -68,9 +68,9 @@ export const ApplicationAPI = {
* @param body 批量操作参数
*/
batchApp(body: BatchType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/available/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
+22 -58
View File
@@ -1,115 +1,79 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/example/demo';
const API_PATH = "/example/demo";
const DemoAPI = {
/**
* 查询演示列表
* @param query 查询参数
*/
getDemoList(query: DemoPageQuery) {
return request<PageResult<DemoTable[]>>({
return request<ApiResponse<PageResult<DemoTable[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 查询演示详情
* @param query 演示ID
*/
getDemoDetail(query: number) {
return request<ApiResponse<DemoTable>>({
url: `${API_PATH}/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 创建演示
* @param body 演示信息
*/
createDemo(body: DemoForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新演示
* @param id 演示ID
* @param body 演示信息
*/
updateDemo(id: number, body: DemoForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除演示
* @param body 演示ID数组
*/
deleteDemo(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 批量操作演示
* @param body 批量操作参数
*/
batchDemo(body: BatchType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/available/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
/**
* 导出演示
* @param body 导出参数
*/
exportDemo(body: DemoPageQuery) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/export`,
method: 'post',
method: "post",
data: body,
responseType: 'blob',
responseType: "blob",
});
},
/**
* 下载演示模板
*/
downloadTemplateDemo() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/download/template`,
method: 'post',
responseType: 'blob',
method: "post",
responseType: "blob",
});
},
/**
* 导入演示
* @param body 导入参数
*/
importDemo(body: FormData) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/import`,
method: 'post',
method: "post",
data: body,
headers: {
'Content-Type': 'multipart/form-data',
"Content-Type": "multipart/form-data",
},
});
},
+22 -58
View File
@@ -1,115 +1,79 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/example/demo01';
const API_PATH = "/example/demo01";
const Demo01API = {
/**
* 查询演示列表
* @param query 查询参数
*/
getDemo01List(query: Demo01PageQuery) {
return request<PageResult<Demo01Table[]>>({
return request<ApiResponse<PageResult<Demo01Table[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 查询演示详情
* @param id 演示ID
*/
getDemo01Detail(id: number) {
return request<ApiResponse<Demo01Table>>({
url: `${API_PATH}/detail/${id}`,
method: 'get',
method: "get",
});
},
/**
* 创建演示
* @param body 演示信息
*/
createDemo01(body: Demo01Form) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新演示
* @param id 演示ID
* @param body 演示信息
*/
updateDemo01(id: number, body: Demo01Form) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除演示
* @param body 演示ID列表
*/
deleteDemo01(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 批量设置演示状态
* @param body 批量设置参数
*/
batchDemo01(body: BatchType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/available/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
/**
* 导出演示
* @param body 漼示参数
*/
exportDemo01(body: Demo01PageQuery) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/export`,
method: 'post',
method: "post",
data: body,
responseType: 'blob',
responseType: "blob",
});
},
/**
* 下载演示模板
*/
downloadDemo01Template() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/download/template`,
method: 'post',
responseType: 'blob',
method: "post",
responseType: "blob",
});
},
/**
* 导入演示
* @param body 演示数据
*/
importDemo01(body: FormData) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/import`,
method: 'post',
method: "post",
data: body,
headers: {
'Content-Type': 'multipart/form-data',
"Content-Type": "multipart/form-data",
},
});
},
@@ -1,148 +1,109 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/generator/gencode';
const API_PATH = "/generator/gencode";
const GencodeAPI = {
/**
* 查询生成表列表
* @param query 查询参数
* @returns 生成表列表
*/
// 查询生成表数据
listTable(query: GenTablePageQuery) {
return request<PageResult<GenTableSchema[]>>({
return request<ApiResponse<PageResult<GenTableSchema[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 查询db数据库列表
* @param query 查询参数
* @returns db数据库列表
*/
// 查询db数据库列表
listDbTable(query: DBTablePageQuery) {
return request<PageResult<DBTableSchema[]>>({
return request<ApiResponse<PageResult<DBTableSchema[]>>>({
url: `${API_PATH}/db/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 导入表
* @param table_names 表名列表
*/
// 导入表
importTable(table_names: string[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/import`,
method: 'post',
method: "post",
data: table_names,
});
},
/**
* 查询表详细信息
* @param table_id 表ID
*/
// 查询表详细信息
detailTable(table_id: number) {
return request<ApiResponse<GenTableSchema>>({
url: `${API_PATH}/detail/${table_id}`,
method: 'get',
method: "get",
});
},
/**
* 创建表(与后端 GenCreateTableSqlBody 一致)
* @param sql 表SQL语句
*/
// 创建表(与后端 GenCreateTableSqlBody 一致)
createTable(sql: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: { sql },
});
},
/**
* 更新表信息
* @param data 表数据
* @param table_id 表ID
*/
// 更新表信息
updateTable(data: GenTableSchema, table_id: number) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${table_id}`,
method: 'put',
method: "put",
data,
});
},
/**
* 删除表数据
* @param table_ids 表ID列表
*/
// 删除表数据
deleteTable(table_ids: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: table_ids,
});
},
/**
* 批量生成代码
* @param table_names 表名列表
*/
// 批量生成代码
batchGenCode(table_names: string[]) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/batch/output`,
method: 'patch',
method: "patch",
data: table_names,
responseType: 'blob',
responseType: "blob",
});
},
/**
* 生成代码到指定路径
* @param table_name 表名
*/
// 生成代码到指定路径
genCodeToPath(table_name: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/output/${table_name}`,
method: 'post',
method: "post",
});
},
/**
* 预览生成代码
* @param id 表ID
*/
// 预览生成代码
previewTable(id: number) {
return request<Record<string, string>>({
return request<ApiResponse<Record<string, string>>>({
url: `${API_PATH}/preview/${id}`,
method: 'get',
method: "get",
});
},
/**
* 同步数据库
* @param table_name 表名
*/
// 同步数据库
syncDb(table_name: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/sync_db/${table_name}`,
method: 'post',
method: "post",
});
},
/**
* 同步数据库差异预览(不落库)
* @param table_name 表名
*/
// 同步数据库差异预览(不落库)
syncDbPreview(table_name: string) {
return request<ApiResponse<GenSyncPreviewSchema>>({
url: `${API_PATH}/sync_db/preview/${table_name}`,
method: 'get',
method: "get",
});
},
};
+16 -47
View File
@@ -1,85 +1,54 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/monitor/cache';
const API_PATH = "/monitor/cache";
const CacheAPI = {
/**
* 获取缓存信息
* @returns 缓存信息
*/
getCacheInfo() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/info`,
method: 'get',
method: "get",
});
},
/**
* 获取所有缓存名称
* @returns 所有缓存名称
*/
getCacheNames() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/get/names`,
method: 'get',
method: "get",
});
},
/**
* 获取指定缓存名称下的所有键
* @param cacheName 缓存名称
* @returns 所有键
*/
getCacheKeys(cacheName: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/get/keys/${cacheName}`,
method: 'get',
method: "get",
});
},
/**
* 获取指定缓存名称下的指定键的值
* @param cacheName 缓存名称
* @param cacheKey 键
* @returns 值
*/
getCacheValue(cacheName: string, cacheKey: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/get/value/${cacheName}/${cacheKey}`,
method: 'get',
method: "get",
});
},
/**
* 删除指定缓存名称
* @param cacheName 缓存名称
*/
deleteCacheName(cacheName: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete/name/${cacheName}`,
method: 'delete',
method: "delete",
});
},
/**
* 删除指定缓存名称下的指定键
* @param cacheName 缓存名称
* @param cacheKey 键
*/
deleteCacheKey(cacheKey: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete/key/${cacheKey}`,
method: 'delete',
method: "delete",
});
},
/**
* 删除所有缓存
*/
deleteCacheAll() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete/all`,
method: 'delete',
method: "delete",
});
},
};
+11 -19
View File
@@ -1,39 +1,31 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/monitor/online';
const API_PATH = "/monitor/online";
const OnlineAPI = {
/**
* 查询所有在线用户列表
* @returns 所有在线用户列表
*/
// 查询在线用户列表
listOnline(query: OnlineUserPageQuery) {
return request<PageResult<OnlineUserTable[]>>({
return request<ApiResponse<PageResult<OnlineUserTable[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 强退用户
* @param body 用户会话ID列表
*/
// 强退用户
deleteOnline(body: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 强退所有在线用户
*/
// 强退用户
clearOnline() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/clear`,
method: 'delete',
method: "delete",
});
},
};
+22 -22
View File
@@ -1,6 +1,6 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/monitor/resource';
const API_PATH = "/monitor/resource";
export const ResourceAPI = {
/**
@@ -8,9 +8,9 @@ export const ResourceAPI = {
* @param query 查询参数
*/
listResource(query: ResourcePageQuery) {
return request<PageResult<ResourceItem[]>>({
return request<ApiResponse<PageResult<ResourceItem[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
@@ -22,9 +22,9 @@ export const ResourceAPI = {
uploadFile(formData: FormData) {
return request<ApiResponse<ResourceUploadSchema>>({
url: `${API_PATH}/upload`,
method: 'post',
method: "post",
data: formData,
headers: { 'Content-Type': 'multipart/form-data' },
headers: { "Content-Type": "multipart/form-data" },
});
},
@@ -33,11 +33,11 @@ export const ResourceAPI = {
* @param path 文件路径
*/
downloadFile(path: string) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/download`,
method: 'get',
method: "get",
params: { path },
responseType: 'blob',
responseType: "blob",
});
},
@@ -46,9 +46,9 @@ export const ResourceAPI = {
* @param body 文件路径数组
*/
deleteResource(body: string[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
@@ -58,9 +58,9 @@ export const ResourceAPI = {
* @param body 移动参数
*/
moveResource(body: ResourceMoveQuery) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/move`,
method: 'post',
method: "post",
data: body,
});
},
@@ -70,9 +70,9 @@ export const ResourceAPI = {
* @param body 复制参数
*/
copyResource(body: ResourceCopyQuery) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/copy`,
method: 'post',
method: "post",
data: body,
});
},
@@ -82,9 +82,9 @@ export const ResourceAPI = {
* @param body 重命名参数
*/
renameResource(body: ResourceRenameQuery) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/rename`,
method: 'post',
method: "post",
data: body,
});
},
@@ -94,9 +94,9 @@ export const ResourceAPI = {
* @param body 创建目录参数
*/
createDirectory(body: ResourceCreateDirQuery) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create-dir`,
method: 'post',
method: "post",
data: body,
});
},
@@ -106,11 +106,11 @@ export const ResourceAPI = {
* @param body 导出条件
*/
exportResource(body: ResourcePageQuery) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/export`,
method: 'post',
method: "post",
data: body,
responseType: 'blob',
responseType: "blob",
});
},
};
@@ -1,16 +1,13 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/monitor/server';
const API_PATH = "/monitor/server";
const ServerAPI = {
/**
* 获取当前服务信息
* @returns 服务信息
*/
// 获取服务信息
getServer() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/info`,
method: 'get',
method: "get",
});
},
};
+14 -43
View File
@@ -1,93 +1,64 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/system/auth';
const API_PATH = "/system/auth";
const AuthAPI = {
/**
* 登录
* @param body 登录表单数据
* @returns 登录响应
*/
login(body: LoginFormData) {
return request<ApiResponse<LoginResult>>({
url: `${API_PATH}/login`,
method: 'post',
method: "post",
headers: {
'Content-Type': 'multipart/form-data',
"Content-Type": "multipart/form-data",
},
data: body,
});
},
/**
* 刷新令牌
* @param body 刷新令牌请求体
* @returns 刷新响应
*/
refreshToken(body: RefreshToekenBody) {
return request<ApiResponse<LoginResult>>({
url: `${API_PATH}/token/refresh`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 获取验证码
* @returns 验证码信息
*/
getCaptcha() {
return request<ApiResponse<CaptchaInfo>>({
url: `${API_PATH}/captcha/get`,
method: 'get',
method: "get",
});
},
/**
* 退出登录
* @param body 退出登录操作
*/
logout(body: LogoutBody) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/logout`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 获取免登录用户列表
* @returns 免登录用户列表
*/
/** 获取免登录用户列表 */
getAutoLoginUsers() {
return request<ApiResponse<AutoLoginUser[]>>({
url: `${API_PATH}/auto-login/users`,
method: 'get',
method: "get",
});
},
/**
* 获取免登录Token
* @param userId 用户ID
* @returns 免登录Token响应
*/
/** 获取免登录Token */
getAutoLoginToken(userId: number) {
return request<ApiResponse<AutoLoginToken>>({
url: `${API_PATH}/auto-login/token`,
method: 'post',
method: "post",
params: { user_id: userId },
});
},
/**
* 免登录
* @param token 免登录Token
* @returns 登录响应
*/
/** 免登录 */
autoLogin(token: string) {
return request<ApiResponse<LoginResult>>({
url: `${API_PATH}/auto-login`,
method: 'post',
method: "post",
params: { token },
});
},
+12 -39
View File
@@ -1,78 +1,51 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/system/dept';
const API_PATH = "/system/dept";
const DeptAPI = {
/**
* 获取部门树
* @param query 查询参数
* @returns 部门树
*/
listDept(query?: DeptPageQuery) {
return request<ApiResponse<DeptTable[]>>({
url: `${API_PATH}/tree`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取部门详情
* @param query 部门ID
* @returns 部门详情
*/
detailDept(query: number) {
return request<ApiResponse<DeptTable>>({
url: `${API_PATH}/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 创建部门
* @param body 部门信息
*/
createDept(body: DeptForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新部门
* @param id 部门ID
* @param body 部门信息
*/
updateDept(id: number, body: DeptForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除部门
* @param body 部门ID列表
*/
deleteDept(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 批量设置部门状态
* @param body 批量设置部门状态请求体
*/
batchDept(body: BatchType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/available/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
+34 -107
View File
@@ -1,204 +1,131 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/system/dict';
const API_PATH = "/system/dict";
const DictAPI = {
/**
* 获取字典类型列表
* @param query 查询参数
* @returns 字典类型列表
*/
listDictType(query: DictPageQuery) {
return request<PageResult<DictTable[]>>({
return request<ApiResponse<PageResult<DictTable[]>>>({
url: `${API_PATH}/type/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取字典类型选项选择列表
* @returns 字典类型选项选择列表
*/
optionDictType() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/type/optionselect`,
method: 'get',
method: "get",
});
},
/**
* 获取字典类型详情
* @param query 字典类型ID
* @returns 字典类型详情
*/
detailDictType(query: number) {
return request<ApiResponse<DictTable>>({
url: `${API_PATH}/type/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 创建字典类型
* @param body 字典类型信息
*/
createDictType(body: DictForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/type/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新字典类型
* @param id 字典类型ID
* @param body 字典类型信息
*/
updateDictType(id: number, body: DictForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/type/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除字典类型
* @param body 字典类型ID列表
*/
deleteDictType(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/type/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 批量设置字典类型状态
* @param body 批量设置字典类型状态请求体
*/
batchDictType(body: BatchType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/type/available/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
/**
* 导出字典类型
* @param body 查询参数
* @returns 字典类型导出文件
*/
exportDictType(body: DictPageQuery) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/type/export`,
method: 'post',
method: "post",
data: body,
responseType: 'blob',
responseType: "blob",
});
},
/**
* 获取字典数据列表
* @param query 查询参数
* @returns 字典数据列表
*/
listDictData(query: DictDataPageQuery) {
return request<PageResult<DictDataTable[]>>({
return request<ApiResponse<PageResult<DictDataTable[]>>>({
url: `${API_PATH}/data/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取字典数据详情
* @param query 字典数据ID
* @returns 字典数据详情
*/
detailDictData(query: number) {
return request<ApiResponse<DictDataTable>>({
url: `${API_PATH}/data/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 创建字典数据
* @param body 字典数据信息
*/
createDictData(body: DictDataForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/data/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新字典数据
* @param id 字典数据ID
* @param body 字典数据信息
*/
updateDictData(id: number, body: DictDataForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/data/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除字典数据
* @param body 字典数据ID列表
*/
deleteDictData(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/data/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 批量设置字典数据状态
* @param body 批量设置字典数据状态请求体
*/
batchDictData(body: BatchType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/data/available/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
/**
* 导出字典数据
* @param body 查询参数
* @returns 字典数据导出文件
*/
exportDictData(body: DictDataPageQuery) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/data/export`,
method: 'post',
method: "post",
data: body,
responseType: 'blob',
responseType: "blob",
});
},
/**
* 获取初始化字典数据
* @param dict_type 字典类型
* @returns 初始化字典数据
*/
getInitDict(dict_type: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/data/info/${dict_type}`,
method: 'get',
method: "get",
});
},
};
+10 -29
View File
@@ -1,56 +1,37 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/system/log';
const API_PATH = "/system/log";
const LogAPI = {
/**
* 获取日志列表
* @param query 查询参数
* @returns 日志列表
*/
listLog(query: LogPageQuery) {
return request<PageResult<LogTable[]>>({
return request<ApiResponse<PageResult<LogTable[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取日志详情
* @param query 日志ID
* @returns 日志详情
*/
detailLog(query: number) {
return request<ApiResponse<LogTable>>({
url: `${API_PATH}/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 删除日志
* @param body 日志ID列表
*/
deleteLog(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 导出日志
* @param body 查询参数
* @returns 日志导出文件
*/
exportLog(body: LogPageQuery) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/export`,
method: 'post',
method: "post",
data: body,
responseType: 'blob',
responseType: "blob",
});
},
};
+12 -39
View File
@@ -1,78 +1,51 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/system/menu';
const API_PATH = "/system/menu";
const MenuAPI = {
/**
* 获取菜单树
* @param query 查询参数
* @returns 菜单树
*/
listMenu(query?: MenuPageQuery) {
return request<ApiResponse<MenuTable[]>>({
url: `${API_PATH}/tree`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取菜单详情
* @param query 菜单ID
* @returns 菜单详情
*/
detailMenu(query: number) {
return request<ApiResponse<MenuTable>>({
url: `${API_PATH}/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 创建菜单
* @param body 菜单信息
*/
createMenu(body: MenuForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新菜单
* @param id 菜单ID
* @param body 菜单信息
*/
updateMenu(id: number, body: MenuForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除菜单
* @param body 菜单ID列表
*/
deleteMenu(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 批量设置菜单状态
* @param body 批量操作参数
*/
batchMenu(body: BatchType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/available/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
+18 -54
View File
@@ -1,104 +1,68 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/system/notice';
const API_PATH = "/system/notice";
const NoticeAPI = {
/**
* 获取通知列表
* @param query 查询参数
* @returns 通知列表
*/
listNotice(query: NoticePageQuery) {
return request<PageResult<NoticeTable[]>>({
return request<ApiResponse<PageResult<NoticeTable[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取可用通知列表
* @returns 通知列表
*/
listNoticeAvailable() {
return request<PageResult<NoticeTable[]>>({
return request<ApiResponse<PageResult<NoticeTable[]>>>({
url: `${API_PATH}/available`,
method: 'get',
method: "get",
});
},
/**
* 获取通知详情
* @param query 通知ID
* @returns 通知详情
*/
detailNotice(query: number) {
return request<ApiResponse<NoticeTable>>({
url: `${API_PATH}/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 创建通知
* @param body 通知信息
*/
createNotice(body: NoticeForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新通知
* @param id 通知ID
* @param body 通知信息
*/
updateNotice(id: number, body: NoticeForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除通知
* @param body 通知ID列表
*/
deleteNotice(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 批量设置通知状态
* @param body 批量操作参数
*/
batchNotice(body: BatchType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/available/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
/**
* 导出通知
* @param body 查询参数
* @returns 通知导出文件
*/
exportNotice(body: NoticePageQuery) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/export`,
method: 'post',
method: "post",
data: body,
responseType: 'blob',
responseType: "blob",
});
},
};
+17 -54
View File
@@ -1,106 +1,69 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/system/param';
const API_PATH = "/system/param";
const ParamsAPI = {
/**
* 上传文件
* @param body 文件数据
* @returns 上传后的文件路径
*/
uploadFile(body: any) {
return request<ApiResponse<UploadFilePath>>({
url: `${API_PATH}/upload`,
method: 'post',
method: "post",
data: body,
headers: { 'Content-Type': 'multipart/form-data' },
headers: { "Content-Type": "multipart/form-data" },
});
},
/**
* 获取初始化配置
* @returns 初始化配置列表
*/
getInitConfig() {
return request<ApiResponse<ConfigTable[]>>({
url: `${API_PATH}/info`,
method: 'get',
method: "get",
});
},
/**
* 获取参数列表
* @param query 查询参数
* @returns 参数列表
*/
listParams(query: ConfigPageQuery) {
return request<PageResult<ConfigTable[]>>({
return request<ApiResponse<PageResult<ConfigTable[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取参数详情
* @param query 参数ID
* @returns 参数详情
*/
detailParams(query: number) {
return request<ApiResponse<ConfigTable>>({
url: `${API_PATH}/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 创建参数
* @param body 参数信息
*/
createParams(body: ConfigForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新参数
* @param id 参数ID
* @param body 参数信息
*/
updateParams(id: number, body: ConfigForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除参数
* @param body 参数ID列表
*/
deleteParams(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 导出参数
* @param body 查询参数
* @returns 导出的参数文件
*/
exportParams(body: ConfigPageQuery) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/export`,
method: 'post',
method: "post",
data: body,
responseType: 'blob',
responseType: "blob",
});
},
};
+16 -48
View File
@@ -1,93 +1,61 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/system/position';
const API_PATH = "/system/position";
const PositionAPI = {
/**
* 获取岗位列表
* @param query 查询参数
* @returns 岗位列表
*/
listPosition(query?: PositionPageQuery) {
return request<PageResult<PositionTable[]>>({
return request<ApiResponse<PageResult<PositionTable[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取岗位详情
* @param query 岗位ID
* @returns 岗位详情
*/
detailPosition(query: number) {
return request<ApiResponse<PositionTable>>({
url: `${API_PATH}/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 创建岗位
* @param body 岗位信息
*/
createPosition(body: PositionForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新岗位
* @param id 岗位ID
* @param body 岗位信息
*/
updatePosition(id: number, body: PositionForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除岗位
* @param body 岗位ID列表
*/
deletePosition(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 批量设置岗位状态
* @param body 批量操作参数
*/
batchPosition(body: BatchType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/available/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
/**
* 导出岗位
* @param body 查询参数
* @returns 导出的岗位文件
*/
exportPosition(body: PositionPageQuery) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/export`,
method: 'post',
method: "post",
data: body,
responseType: 'blob',
responseType: "blob",
});
},
};
+21 -57
View File
@@ -1,105 +1,69 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/system/role';
const API_PATH = "/system/role";
const RoleAPI = {
/**
* 获取角色列表
* @param query 查询参数
* @returns 角色列表
*/
listRole(query?: TablePageQuery) {
return request<PageResult<RoleTable[]>>({
return request<ApiResponse<PageResult<RoleTable[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取角色详情
* @param query 角色ID
* @returns 角色详情
*/
detailRole(query: number) {
return request<ApiResponse<RoleTable>>({
url: `${API_PATH}/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 创建角色
* @param body 角色信息
*/
createRole(body: RoleForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新角色
* @param id 角色ID
* @param body 角色信息
*/
updateRole(id: number, body: RoleForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除角色
* @param body 角色ID列表
*/
deleteRole(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 批量设置角色状态
* @param body 批量操作参数
*/
batchRole(body: BatchType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/available/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
/**
* 批量设置角色权限
* @param body 批量操作参数
*/
setPermission(body: permissionDataType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/permission/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
/**
* 导出角色列表
* @param body 查询参数
* @returns 导出的文件
*/
exportRole(body: TablePageQuery) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/export`,
method: 'post',
method: "post",
data: body,
responseType: 'blob',
responseType: "blob",
});
},
};
@@ -131,9 +95,9 @@ export interface RoleForm extends BaseFormType {
export interface permissionDataType {
data_scope: number;
role_ids: RoleTable['id'][];
menu_ids: permissionMenuType['id'][];
dept_ids: permissionDeptType['id'][];
role_ids: RoleTable["id"][];
menu_ids: permissionMenuType["id"][];
dept_ids: permissionDeptType["id"][];
}
export interface permissionDeptType {
+13 -40
View File
@@ -1,78 +1,51 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/system/tenant';
const API_PATH = "/system/tenant";
const TenantAPI = {
/**
* 获取租户列表
* @param query 查询参数
* @returns 租户列表
*/
listTenant(query?: TenantPageQuery) {
return request<PageResult<TenantTable[]>>({
return request<ApiResponse<PageResult<TenantTable[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取租户详情
* @param id 租户ID
* @returns 租户详情
*/
detailTenant(id: number) {
return request<ApiResponse<TenantTable>>({
url: `${API_PATH}/detail/${id}`,
method: 'get',
method: "get",
});
},
/**
* 创建租户
* @param body 租户信息
*/
createTenant(body: TenantCreateForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新租户
* @param id 租户ID
* @param body 租户信息
*/
updateTenant(id: number, body: TenantUpdateForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除租户
* @param body 租户ID列表
*/
deleteTenant(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 批量设置租户状态
* @param body 批量操作参数
*/
batchTenant(body: BatchType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/available/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
+41 -119
View File
@@ -1,214 +1,136 @@
import request from '@/utils/http';
import { MenuTable, MenuForm } from '@/api/module_system/menu';
import request from "@/utils/request";
import { MenuTable, MenuForm } from "@/api/module_system/menu";
const API_PATH = '/system/user';
const API_PATH = "/system/user";
export const UserAPI = {
/**
* 获取当前用户信息
* @returns 当前用户信息
*/
getCurrentUserInfo() {
return request<ApiResponse<UserInfo>>({
url: `${API_PATH}/current/info`,
method: 'get',
method: "get",
});
},
/**
* 上传当前用户头像
* @param body 头像文件
* @returns 上传后的文件路径
*/
uploadCurrentUserAvatar(body: any) {
return request<ApiResponse<UploadFilePath>>({
url: `${API_PATH}/current/avatar/upload`,
method: 'post',
method: "post",
data: body,
headers: { 'Content-Type': 'multipart/form-data' },
headers: { "Content-Type": "multipart/form-data" },
});
},
/**
* 更新当前用户信息
* @param body 用户信息
* @returns 更新后的用户信息
*/
updateCurrentUserInfo(body: InfoFormState) {
return request<ApiResponse<UserInfo>>({
url: `${API_PATH}/current/info/update`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 更新当前用户密码
* @param body 密码信息
* @returns 更新后的用户信息
*/
changeCurrentUserPassword(body: PasswordFormState) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/current/password/change`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 重置用户密码
* @param body 重置密码信息
* @returns 重置密码后的用户信息
*/
resetUserPassword(body: ResetPasswordForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/reset/password`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 注册用户
* @param body 注册信息
* @returns 注册后的用户信息
*/
registerUser(body: RegisterForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/register`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 忘记密码
* @param body 忘记密码信息
* @returns 忘记密码后的用户信息
*/
forgetPassword(body: ForgetPasswordForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/forget/password`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 获取用户列表
* @param query 查询参数
* @returns 用户列表
*/
listUser(query: UserPageQuery) {
return request<PageResult<UserInfo[]>>({
return request<ApiResponse<PageResult<UserInfo[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取用户详情
* @param id 用户ID
* @returns 用户详情
*/
detailUser(query: number) {
return request<ApiResponse<UserInfo>>({
url: `${API_PATH}/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 创建用户
* @param body 用户信息
* @returns 创建后的用户信息
*/
createUser(body: UserForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新用户
* @param id 用户ID
* @param body 用户信息
* @returns 更新后的用户信息
*/
updateUser(id: number, body: UserForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除用户
* @param body 用户ID列表
*/
deleteUser(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 批量设置用户状态
* @param body 批量设置用户状态信息
* @returns 批量设置用户状态后的用户列表
*/
batchUser(body: BatchType) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/available/setting`,
method: 'patch',
method: "patch",
data: body,
});
},
/**
* 导出用户
* @param body 查询参数
* @returns 导出的用户文件
*/
exportUser(body: UserPageQuery) {
return request<ApiResponse<Blob>>({
return request<Blob>({
url: `${API_PATH}/export`,
method: 'post',
method: "post",
data: body,
responseType: 'blob',
responseType: "blob",
});
},
/**
* 下载用户导入模板
* @returns 导入模板文件
*/
downloadTemplateUser() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/import/template`,
method: 'post',
responseType: 'blob',
method: "post",
responseType: "blob",
});
},
/**
* 导入用户数据
* @param body 导入数据文件
* @returns 导入后的用户列表
*/
importUser(body: any) {
return request<ApiResponse<UserInfo[]>>({
return request<ApiResponse>({
url: `${API_PATH}/import/data`,
method: 'post',
method: "post",
data: body,
headers: {
'Content-Type': 'multipart/form-data',
"Content-Type": "multipart/form-data",
},
});
},
@@ -256,14 +178,14 @@ export interface UserInfo extends BaseType {
password?: string;
menus?: MenuTable[];
dept?: deptTreeType;
dept_id?: deptTreeType['id'];
dept_name?: deptTreeType['name'];
dept_id?: deptTreeType["id"];
dept_name?: deptTreeType["name"];
roles?: roleSelectorType[];
role_names?: roleSelectorType['name'][];
role_ids?: roleSelectorType['id'][];
role_names?: roleSelectorType["name"][];
role_ids?: roleSelectorType["id"][];
positions?: positionSelectorType[];
position_names?: positionSelectorType['name'][];
position_ids?: positionSelectorType['id'][];
position_names?: positionSelectorType["name"][];
position_ids?: positionSelectorType["id"][];
is_superuser?: boolean;
last_login?: string;
created_by?: CommonType;
+29 -90
View File
@@ -1,179 +1,118 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/task/cronjob/job';
const API_PATH = "/task/cronjob/job";
const JobAPI = {
/**
* 获取任务调度器状态
* @returns 任务调度器状态
*/
getSchedulerStatus() {
return request<ApiResponse<SchedulerStatus>>({
url: `${API_PATH}/scheduler/status`,
method: 'get',
method: "get",
});
},
/**
* 获取任务调度器所有任务
* @returns 任务调度器所有任务
*/
getSchedulerJobs() {
return request<ApiResponse<SchedulerJob[]>>({
url: `${API_PATH}/scheduler/jobs`,
method: 'get',
method: "get",
});
},
/**
* 启动任务调度器
*/
startScheduler() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/scheduler/start`,
method: 'post',
method: "post",
});
},
/**
* 暂停任务调度器
*/
pauseScheduler() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/scheduler/pause`,
method: 'post',
method: "post",
});
},
/**
* 恢复任务调度器
*/
resumeScheduler() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/scheduler/resume`,
method: 'post',
method: "post",
});
},
/**
* 关闭任务调度器
*/
shutdownScheduler() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/scheduler/shutdown`,
method: 'post',
method: "post",
});
},
/**
* 清除所有任务
*/
clearAllJobs() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/scheduler/jobs/clear`,
method: 'delete',
method: "delete",
});
},
/**
* 获取任务调度器控制台输出
* @returns 任务调度器控制台输出
*/
getSchedulerConsole() {
return request<ApiResponse<string>>({
url: `${API_PATH}/scheduler/console`,
method: 'get',
method: "get",
});
},
/**
* 同步任务到数据库
* @returns 同步任务到数据库的记录数
*/
syncJobsToDb() {
return request<ApiResponse<number>>({
url: `${API_PATH}/scheduler/sync`,
method: 'post',
method: "post",
});
},
/**
* 暂停任务
* @param jobId 任务ID
*/
pauseJob(jobId: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/task/pause/${jobId}`,
method: 'post',
method: "post",
});
},
/**
* 恢复任务
* @param jobId 任务ID
*/
resumeJob(jobId: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/task/resume/${jobId}`,
method: 'post',
method: "post",
});
},
/**
* 立即运行任务
* @param jobId 任务ID
*/
runJobNow(jobId: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/task/run/${jobId}`,
method: 'post',
method: "post",
});
},
/**
* 删除任务
* @param jobId 任务ID
*/
removeJob(jobId: string) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/task/remove/${jobId}`,
method: 'delete',
method: "delete",
});
},
/**
* 获取任务日志列表
* @param query 查询参数
* @returns 任务日志列表
*/
getJobLogList(query: JobLogPageQuery) {
return request<PageResult<JobLogTable[]>>({
return request<ApiResponse<PageResult<JobLogTable[]>>>({
url: `${API_PATH}/log/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取任务日志详情
* @param id 任务日志ID
* @returns 任务日志详情
*/
getJobLogDetail(id: number) {
return request<ApiResponse<JobLogTable>>({
url: `${API_PATH}/log/detail/${id}`,
method: 'get',
method: "get",
});
},
/**
* 删除任务日志
* @param ids 任务日志ID列表
*/
deleteJobLog(ids: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/log/delete`,
method: 'delete',
method: "delete",
data: ids,
});
},
@@ -1,101 +1,65 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/task/cronjob/node';
const API_PATH = "/task/cronjob/node";
const NodeAPI = {
/**
* 获取节点类型选项
* @returns 节点类型选项
*/
getNodeTypeOptions() {
return request<ApiResponse<NodeType[]>>({
url: `${API_PATH}/options`,
method: 'get',
method: "get",
});
},
/**
* 获取节点列表
* @param query 查询参数
* @returns 节点列表
*/
listNode(query: NodePageQuery) {
return request<PageResult<NodeTable[]>>({
return request<ApiResponse<PageResult<NodeTable[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取节点详情
* @param id 节点ID
* @returns 节点详情
*/
detailNode(query: number) {
return request<ApiResponse<NodeTable>>({
url: `${API_PATH}/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 创建节点
* @param body 节点信息
*/
createNode(body: NodeForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新节点
* @param id 节点ID
* @param body 节点信息
*/
updateNode(id: number, body: NodeForm) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除节点
* @param body 节点ID列表
*/
deleteNode(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 清空所有节点
*/
clearNode() {
return request({
return request<ApiResponse>({
url: `${API_PATH}/clear`,
method: 'delete',
method: "delete",
});
},
/**
* 执行节点
* @param id 节点ID
* @param params 执行参数
* @returns 执行结果
*/
executeNode(id: number, params: ExecuteNodeParams = { trigger: 'now' }) {
executeNode(id: number, params: ExecuteNodeParams = { trigger: "now" }) {
return request<ApiResponse<ExecuteNodeResult>>({
url: `${API_PATH}/execute/${id}`,
method: 'post',
method: "post",
data: params,
});
},
@@ -112,7 +76,7 @@ export interface NodePageQuery extends PageQuery {
updated_time?: string[];
}
export type TriggerType = 'now' | 'cron' | 'interval' | 'date';
export type TriggerType = "now" | "cron" | "interval" | "date";
export interface ExecuteNodeParams {
trigger: TriggerType;
@@ -1,95 +1,60 @@
import request from '@/utils/http';
import request from "@/utils/request";
const API_PATH = '/task/workflow/definition';
/** 对应后端 `plugin.module_task.workflow.definition` */
const API_PATH = "/task/workflow/definition";
const WorkflowDefinitionAPI = {
/**
* 获取工作流列表
* @param query 查询参数
* @returns 工作流列表
*/
getWorkflowList(query: WorkflowPageQuery) {
return request<PageResult<WorkflowTable[]>>({
return request<ApiResponse<PageResult<WorkflowTable[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取工作流详情
* @param query 工作流ID
* @returns 工作流详情
*/
getWorkflowDetail(query: number) {
return request<ApiResponse<WorkflowTable>>({
url: `${API_PATH}/detail/${query}`,
method: 'get',
method: "get",
});
},
/**
* 创建工作流
* @param body 工作流信息
* @returns 工作流详情
*/
createWorkflow(body: WorkflowForm) {
return request<ApiResponse<WorkflowTable>>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新工作流
* @param id 工作流ID
* @param body 工作流信息
* @returns 工作流详情
*/
updateWorkflow(id: number, body: WorkflowForm) {
return request<ApiResponse<WorkflowTable>>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除工作流
* @param body 工作流ID列表
*/
deleteWorkflow(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
/**
* 发布工作流
* @param id 工作流ID
* @param body 发布参数
* @returns 工作流详情
*/
publishWorkflow(id: number, body: WorkflowPublishForm) {
return request<ApiResponse<WorkflowTable>>({
url: `${API_PATH}/publish/${id}`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 执行工作流
* @param body 执行参数
* @returns 执行结果
*/
executeWorkflow(body: WorkflowExecuteForm) {
return request<ApiResponse<WorkflowExecuteResult>>({
url: `${API_PATH}/execute`,
method: 'post',
method: "post",
data: body,
});
},
@@ -1,82 +1,51 @@
import request from '@/utils/http';
import request from "@/utils/request";
/** 对应后端 `plugin.module_task.workflow.node_type` */
const API_PATH = '/task/workflow/node-type';
const API_PATH = "/task/workflow/node-type";
const WorkflowNodeTypeAPI = {
/**
* 获取编排节点类型选项
* @returns 编排节点类型选项
*/
getWorkflowNodeTypeOptions() {
return request<ApiResponse<WorkflowNodeTypeOption[]>>({
url: `${API_PATH}/options`,
method: 'get',
method: "get",
});
},
/**
* 获取编排节点类型列表
* @param query 查询参数
* @returns 编排节点类型列表
*/
getWorkflowNodeTypeList(query: WorkflowNodeTypePageQuery) {
return request<PageResult<WorkflowNodeTypeTable[]>>({
return request<ApiResponse<PageResult<WorkflowNodeTypeTable[]>>>({
url: `${API_PATH}/list`,
method: 'get',
method: "get",
params: query,
});
},
/**
* 获取编排节点类型详情
* @param id 编排节点类型ID
* @returns 编排节点类型详情
*/
getWorkflowNodeTypeDetail(id: number) {
return request<ApiResponse<WorkflowNodeTypeTable>>({
url: `${API_PATH}/detail/${id}`,
method: 'get',
method: "get",
});
},
/**
* 创建编排节点类型
* @param body 编排节点类型信息
* @returns 编排节点类型详情
*/
createWorkflowNodeType(body: WorkflowNodeTypeForm) {
return request<ApiResponse<WorkflowNodeTypeTable>>({
url: `${API_PATH}/create`,
method: 'post',
method: "post",
data: body,
});
},
/**
* 更新编排节点类型
* @param id 编排节点类型ID
* @param body 编排节点类型信息
* @returns 编排节点类型详情
*/
updateWorkflowNodeType(id: number, body: WorkflowNodeTypeForm) {
return request<ApiResponse<WorkflowNodeTypeTable>>({
url: `${API_PATH}/update/${id}`,
method: 'put',
method: "put",
data: body,
});
},
/**
* 删除编排节点类型
* @param body 编排节点类型ID列表
* @returns 删除结果
* @returns 删除结果
*/
deleteWorkflowNodeType(body: number[]) {
return request({
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
method: "delete",
data: body,
});
},
-25
View File
@@ -1,25 +0,0 @@
import request from '@/utils/http';
import { AppRouteRecord } from '@/types/router';
// 获取用户列表
export function fetchGetUserList(params: Api.SystemManage.UserSearchParams) {
return request.get<Api.SystemManage.UserList>({
url: '/api/user/list',
params,
});
}
// 获取角色列表
export function fetchGetRoleList(params: Api.SystemManage.RoleSearchParams) {
return request.get<Api.SystemManage.RoleList>({
url: '/api/role/list',
params,
});
}
// 获取菜单列表
export function fetchGetMenuList() {
return request.get<AppRouteRecord[]>({
url: '/api/v3/system/menus',
});
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 954 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 726 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 944 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 810 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

@@ -1,73 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 1400 800">
<defs>
<style>
@media (prefers-color-scheme: dark) {
#bg-rect { fill: #101a29; }
#blueGlow-rect { fill: url(#blueGlowDark); }
#blueGlow2-rect { fill: url(#blueGlow2Dark); }
#pinkPurpleGlow-rect { fill: url(#pinkPurpleGlowDark); }
}
</style>
<!-- 亮色主题渐变 -->
<linearGradient id="bgGradient" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#f9fcff" />
<stop offset="100%" stop-color="#f5f9fd" />
</linearGradient>
<!-- 中间区域淡蓝白光晕 -->
<radialGradient id="blueGlow" cx="50%" cy="50%" r="70%" fx="50%" fy="50%">
<stop offset="0%" stop-color="#ffffff" stop-opacity="0.9" />
<stop offset="50%" stop-color="#f0f8ff" stop-opacity="0.5" />
<stop offset="100%" stop-color="#eef7fd" stop-opacity="0" />
</radialGradient>
<!-- 左上角蓝白光晕 -->
<radialGradient id="blueGlow2" cx="15%" cy="15%" r="40%" fx="15%" fy="15%">
<stop offset="0%" stop-color="#d9efff" stop-opacity="0.85" />
<stop offset="40%" stop-color="#e5f4fd" stop-opacity="0.6" />
<stop offset="100%" stop-color="#e9f5fd" stop-opacity="0" />
</radialGradient>
<!-- 右下角粉紫色光晕 -->
<radialGradient id="pinkPurpleGlow" cx="85%" cy="85%" r="40%" fx="85%" fy="85%">
<stop offset="0%" stop-color="#f7e6f9" stop-opacity="0.8" />
<stop offset="35%" stop-color="#f9edf8" stop-opacity="0.6" />
<stop offset="100%" stop-color="#f8f2f8" stop-opacity="0" />
</radialGradient>
<!-- 暗色主题渐变 -->
<radialGradient id="blueGlowDark" cx="50%" cy="50%" r="70%" fx="50%" fy="50%">
<stop offset="0%" stop-color="#1e3a5e" stop-opacity="0.6" />
<stop offset="50%" stop-color="#1c314e" stop-opacity="0.3" />
<stop offset="100%" stop-color="#1a2d47" stop-opacity="0" />
</radialGradient>
<!-- 左上角蓝白光晕 - 暗色模式 -->
<radialGradient id="blueGlow2Dark" cx="15%" cy="15%" r="40%" fx="15%" fy="15%">
<stop offset="0%" stop-color="#1e3858" stop-opacity="0.85" />
<stop offset="40%" stop-color="#1a304f" stop-opacity="0.6" />
<stop offset="100%" stop-color="#172b45" stop-opacity="0" />
</radialGradient>
<!-- 右下角粉紫色光晕 - 暗色模式 -->
<radialGradient id="pinkPurpleGlowDark" cx="85%" cy="85%" r="40%" fx="85%" fy="85%">
<stop offset="0%" stop-color="#2e2335" stop-opacity="0.85" />
<stop offset="35%" stop-color="#2a2035" stop-opacity="0.6" />
<stop offset="100%" stop-color="#2a202d" stop-opacity="0" />
</radialGradient>
</defs>
<!-- 背景层 -->
<rect id="bg-rect" width="100%" height="100%" fill="url(#bgGradient)" />
<!-- 中间淡蓝白光晕 -->
<rect id="blueGlow-rect" width="100%" height="100%" fill="url(#blueGlow)" />
<!-- 左上蓝白光晕 -->
<rect id="blueGlow2-rect" width="100%" height="100%" fill="url(#blueGlow2)" />
<!-- 右下粉紫光晕 -->
<rect id="pinkPurpleGlow-rect" width="100%" height="100%" fill="url(#pinkPurpleGlow)" />
</svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 514 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 416 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 509 B

@@ -1 +0,0 @@
<svg viewBox="0 0 400 300" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="a" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="94" y="34" width="212" height="233"><path d="M306 34H94v233h212V34Z" fill="#fff"/></mask><g mask="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M234.427 155.64h38.36V69.6h-38.36v86.04ZM113.326 155.64h121.1V69.6h-121.1v86.04Z" fill="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M130.126 155.354h104.2v-72.95h-104.2v72.95ZM236.369 71.05s0 3.3 1.65 5.05c2.33 2.52 7.38-.2 7.38-.2s-1.75 5.15-1.55 10.19c.29 8.24 6.99 9.51 10 4.75 4.56 4.85 8.94-.29 9.52-2.62 4.27 4.76 9.32-.87 9.32-.87v-6.3l-23.99-12.13-12.33 2.13Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M234.429 155.641h-121.1l-15.93 32.11h121.1l15.93-32.11Z" fill="#fff"/><path d="M234.427 69.6h38.46v86.04M113.326 146.52V69.6h121.1M234.429 155.641l-15.93 32.11h-121.1l15.93-32.11h111.39" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M226.37 159.715H116.82l-12.04 23.86H215l11.37-23.86Z" fill="#006EFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="m288.807 187.751-15.92-32.11h-38.46l16.02 32.11h38.36Z" fill="#fff"/><path d="m238.607 163.981 11.84 23.77h38.36l-15.92-32.11h-38.46" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M207.336 223.734c-3.69-13.77-15.44-23.86-29.33-23.86h-8.65s-27.09 14.94-27.09 33.27c0 18.34 25.44 33.18 25.44 33.18h10.4c13.79-.1 25.44-10.19 29.13-23.87 1.75-12.51 0-18.62.1-18.72Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M243.459 240.421c3.98 0 7.28-3.3 7.28-7.27 0-3.98-3.3-7.28-7.28-7.28h-31.08c-3.98 0-7.28 3.3-7.28 7.28 0 3.97 3.3 7.27 7.28 7.27h31.08Z" fill="#C7DEFF"/><path d="M210.342 223.737c-4.08-13.87-16.9-23.96-32.05-23.96H168.972s-29.62 14.94-29.62 33.37 27.87 33.37 27.87 33.37h11.27c15.05-.1 27.77-10.19 31.75-23.96" stroke="#071F4D"/><path d="M212.379 240.421c-3.98 0-7.28-3.3-7.28-7.27m0 0c0-3.98 3.3-7.28 7.28-7.28" stroke="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M168.781 199.777c-18.45 0-33.41 14.94-33.41 33.37s14.96 33.37 33.41 33.37c18.45 0 33.4-14.94 33.4-33.37s-14.95-33.37-33.4-33.37Z" fill="#006EFF"/><path d="M168.781 199.777c-18.45 0-33.41 14.94-33.41 33.37s14.96 33.37 33.41 33.37c18.45 0 33.4-14.94 33.4-33.37s-14.95-33.37-33.4-33.37Z" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M168.775 209.38c-13.14 0-23.79 10.64-23.79 23.77 0 13.12 10.65 23.76 23.79 23.76 13.14 0 23.8-10.64 23.8-23.76 0-13.13-10.66-23.77-23.8-23.77Z" fill="#00E4E5"/><path d="M162.174 223.736a17.48 17.48 0 0 1 14.76-8.05M159.455 231.982c.1-1.36.29-2.62.68-3.88" stroke="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M173.535 209.87c-1.55-.3-3.11-.49-4.76-.49-13.11 0-23.79 10.67-23.79 23.77 0 13.09 10.68 23.76 23.79 23.76 1.65 0 3.21-.19 4.76-.48-10.88-2.23-19.03-11.84-19.03-23.28 0-11.45 8.15-21.05 19.03-23.28Z" fill="#071F4D"/><path d="M219.957 225.774h23.6c4.08 0 7.38 3.3 7.38 7.37m0 0c0 4.08-3.3 7.37-7.38 7.37h-20.1M212.091 225.774h3.3" stroke="#071F4D"/><path d="m248.894 34.485-.19 18.24c0 4.07-.39 5.23-2.14 6.79-8.15 6.88-10.97 9.02-9.22 12.9 1.45 3.2 6.79 2.23 9.61-1.55-.39 4.56-5.24 15.32-.58 18.04 4.37 2.52 6.89-3.49 6.89-3.49s.49 3.49 4.47 3.49c3.69 0 5.24-4.75 5.24-4.75s2.14 3.49 6.22 1.35c3.11-1.55 5.44-7.08 5.44-26.67v-24.35" fill="#fff"/><path d="m248.894 34.485-.19 18.24c0 4.07-.39 5.23-2.14 6.79-8.15 6.88-10.97 9.02-9.22 12.9 1.45 3.2 6.79 2.23 9.61-1.55-.39 4.56-5.24 15.32-.58 18.04 4.37 2.52 6.89-3.49 6.89-3.49s.49 3.49 4.47 3.49c3.69 0 5.24-4.75 5.24-4.75s2.14 3.49 6.22 1.35c3.11-1.55 5.44-7.08 5.44-26.67v-24.35" stroke="#071F4D"/><path d="M255.307 75.71s-.39 5.43-2.04 9.6l2.04-9.6Z" fill="#fff"/><path d="M255.307 75.71s-.39 5.43-2.04 9.6" stroke="#071F4D"/><path d="M264.921 75.323s-.68 5.24-2.04 8.63l2.04-8.63Z" fill="#fff"/><path d="M264.921 75.323s-.68 5.24-2.04 8.63M147.801 34.485v34.92M121.775 34.485v34.92M102.546 204.724v13.97M102.546 222.379v.87M102.546 197.934v3.49M115.268 206.955v26.29M115.268 239.451v5.34M244.43 197.643v11.93M244.43 213.939v3.49M270.359 201.232v33.76M115.369 47.774h-13.6M94.486 47.774h3.4M241.516 47.774h-84.1M280.168 47.774h25.35" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="m282.497 183.575-12.04-23.86h-27.29l11.36 23.86h27.97Z" fill="#00E4E5"/><path d="M234.427 134.88V69.6M234.427 140.412v7.66" stroke="#071F4D"/><path d="M220.831 228.684h16.99M240.934 228.684h2.43" stroke="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="m223.842 187.462 21.46-.2-10.97-20.66-10.49 20.86Z" fill="#071F4D"/></g></svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.0 KiB

@@ -1,5 +0,0 @@
<svg
viewBox="0 0 400 300"
fill="none"
xmlns="http://www.w3.org/2000/svg"
><mask id="a" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="47" y="38" width="307" height="224"><path d="M353.3 38H47.5v223.8h305.8V38Z" fill="#fff"/></mask><g mask="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M299.2 200.6H61.6v5.1h240.3l-2.7-5.1Z" fill="#C7DEFF"/><path d="m308.9 185.8-6.5 20H183.7M332.3 127.6h10.6l-5 16.7-14.8-.1-7.2 21.1M328.8 127.4l13.6-39.6M307.6 166 337 84.7H180.6l-9.8 26.9h-10.5M296.6 196l4.3-11.8M157.2 149.2l6.4-17.7" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M324.8 93.1H188.5l-34.8 95.8h136.4l34.7-95.8ZM169.9 166.2l5-13.6-5 13.6Z" fill="#fff"/><path d="m169.9 166.2 5-13.6" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M324.8 93.1H188.5l-4 11.7h135.8l4.5-11.7Z" fill="#006EFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M102.6 159.5h38.3l2.7 36.6h-38.4c-10.1 0-20.9-8.2-20.9-18.3 0-10.1 8.2-18.3 18.3-18.3Z" fill="#DEEBFC"/><path fill-rule="evenodd" clip-rule="evenodd" d="M84.3 174.102c2.5 3.4 10 5 17.9 2.8 16.6-6.5 23.8-3.9 23.8-3.9s.5-3.4 1.3-5c-5.8-3-15.4.3-26.1 3.1-10.7 2.8-15.8-2.5-15.8-2.5-.4 0-1.1 2.8-1.1 5.5Z" fill="#fff"/><path d="M96.5 194.2c-7.2-3.3-12.2-10.5-12.2-19m0 0c0-11.5 9.3-20.8 20.8-20.8h29.4" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M140.3 195.1c-8.4-2.7-14.5-10.6-14.5-19.8l14.5 19.8Zm-14.5-19.8c0-11.5 9.3-20.8 20.8-20.8l-20.8 20.8Zm20.8-20.8c11.5 0 20.8 9.3 20.8 20.8l-20.8-20.8Zm20.8 20.8c0 8.4-5 15.6-12.1 18.9l12.1-18.9Z" fill="#fff"/><path d="M140.3 195.1c-8.4-2.7-14.5-10.6-14.5-19.8m0 0c0-11.5 9.3-20.8 20.8-20.8m0 0c11.5 0 20.8 9.3 20.8 20.8m0 0c0 8.4-5 15.6-12.1 18.9" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M161.5 177.2c0-7.7-6.3-14-14-14s-14 6.3-14 14c0 5.8 3.5 10.8 8.6 12.9.1 0 5.8 1.6 10.7 0 5.3-1.7 8.7-7.1 8.7-12.9Z" fill="#00E4E5"/><path d="M140.5 190.1c-5.8-2.4-9.9-8.2-9.9-14.9 0-8.9 7.2-16.1 16.1-16.1 8.9 0 16.1 7.2 16.1 16.1 0 6.8-4.2 12.5-10.1 14.9M88.4 170.604c2.9 1.3 7.7 2.6 13.6.3 14.7-5.7 22.3-4.3 24.6-3.5M84.5 174.599s5.9 6.5 19 1.7c9.2-3.4 15.3-3.9 18.8-3.8" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M340.6 112.3h-55.2l-2.7 6.2H338l2.6-6.2Z" fill="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M236.8 117.9c-16.13 0-29.2 13.07-29.2 29.2s13.07 29.2 29.2 29.2 29.2-13.07 29.2-29.2-13.07-29.2-29.2-29.2Z" fill="#00E4E5"/><path d="M265 123.3c13.1 13.1 13.1 34.4 0 47.6M306 205.9h19.2M61.7 205.9h32.9M181.2 196.2h115.2M47.5 205.9h10v-9.7h73.8" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M146.7 179.2c-2.49 0-4.5 2.01-4.5 4.5s2.01 4.5 4.5 4.5 4.5-2.01 4.5-4.5-2.01-4.5-4.5-4.5Z" fill="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M169.5 196.2c3.9 0 7.1 3.2 7.1 7.1 0 3.9-3.2 7.1-7.1 7.1H144c-2.1 0-3.9 1.7-3.9 3.9v1c0 2.1 1.7 3.9 3.9 3.9h48c5.1 0 9.2 4.1 9.2 9.2s-4.1 9.3-9.2 9.2h-33.8c-2.3 0-4.1 1.8-4.1 4.1s1.8 4.1 4.1 4.1h4.2c4.4 0 8 3.6 8 8s-3.6 8-8 8H111c-3.7 0-6.8-3-6.8-6.8 0-3.7 3-6.8 6.8-6.8h.3c2.3 0 4.1-1.8 4.1-4.1s-1.8-4.1-4.1-4.1H79c-4.5 0-8.1-3.6-8.1-8.1s3.6-8.1 8.1-8.1h37.7c2.1 0 3.9-1.7 3.9-3.9 0-2.1-1.7-3.9-3.9-3.9h-7.9c-4.4 0-7.9-3.5-7.9-7.9s3.5-7.9 7.9-7.9h30.4c2.2 0 3.9-1.8 3.9-3.9V187c0-1.9 1.6-3.5 3.5-3.5s3.5 1.6 3.5 3.5v5.3c0 2.2 1.8 3.9 3.9 3.9h15.5Z" fill="#006EFF"/><path d="m227.8 138.5 18.7 18.7M227.8 157.2l18.7-18.7" stroke="#fff" stroke-width="6"/><path fill-rule="evenodd" clip-rule="evenodd" d="M194.8 96.9c-.99 0-1.8.81-1.8 1.8s.81 1.8 1.8 1.8 1.8-.81 1.8-1.8-.81-1.8-1.8-1.8ZM202.9 96.9c-.99 0-1.8.81-1.8 1.8s.81 1.8 1.8 1.8 1.8-.81 1.8-1.8-.81-1.8-1.8-1.8Z" fill="#fff"/><path d="m291.7 184.3-1.6 4.6h-121M298.1 166.7l22.5-61.9" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="m193 134.1 2.2-5.1h-19.4l-2.3 5.1H193ZM313.2 123.5l2.2-5.1h-24.5l-2.3 5.1h24.6Z" fill="#DEEBFC"/><path d="m164.5 159.2 19.8-54.6" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M199.6 119.8h-53.2l-4.4 9.3h53.2l4.4-9.3Z" fill="#00E4E5"/><path d="M151.3 129.1H142l4.4-9.3h16.9" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M353.3 169.4h-67.4l-4.8 12.2h67.3l4.9-12.2Z" fill="#006EFF"/><path d="M332.4 169.4h20.9l-4.9 12.2h-39.7M242.7 235.5v-4.8c0-3.8 3.1-7 7-7h20.2c3.8 0 7 3.1 7 7" stroke="#071F4D"/><path d="M261.1 235.5v-4.8c0-3.8 3.1-7 7-7h13.7c3.8 0 7 3.1 7 7v4.8M242.6 230.7h13.7M235.2 237.7h63.3M224 237.7h6.7" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M324.1 141.3H335l3.3-10.7h-10.2l-4 10.7Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M288.3 230.4c0-3.6-2.9-6.5-6.5-6.5h-14.2c-3.6 0-6.5 2.9-6.5 6.5v5.3h27.2v-5.3Z" fill="#071F4D"/><path d="M80.4 228.5H83M87.7 228.5h19.2M146.3 195.8v2c0 3.6-2.9 6.6-6.6 6.6H138M133.4 204.3h1.5M154 249.9h9.4" stroke="#DEEBFC"/><path d="m299.4 141.9 5.1-13.9" stroke="#071F4D"/></g></svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

@@ -1 +0,0 @@
<svg viewBox="0 0 400 300" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="a" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="44" y="42" width="312" height="217"><path d="M355.3 42H44v216.9h311.3V42Z" fill="#fff"/></mask><g mask="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M288.2 248.4h25.1v-30h-25.1v30Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M304.498 238.199c-1.5-3.9-5.9-15.4-4-21.6-2.9.8-3.3.1-5-.1-1.7-.1 0 10.7 2.2 16.4 1.7 4.5 2.1 11.1 2.1 13.6h5.4c.2-1.9.3-5.5-.7-8.3Z" fill="#fff"/><path d="M311.5 214.7v-1.6c0-.7-.6-1.3-1.3-1.3h-22.8c-.7 0-1.3.6-1.3 1.3v1.6" fill="#fff"/><path d="M311.5 214.7v-1.6c0-.7-.6-1.3-1.3-1.3h-22.8c-.7 0-1.3.6-1.3 1.3v1.6M290.2 214.7h21.4c1 0 1.8.8 1.8 1.8v29" stroke="#071F4D" stroke-width="1.096"/><path d="M284.3 245.6v-29c0-1 .8-1.8 1.8-1.8h1.6" fill="#fff"/><path d="M284.3 245.6v-29c0-1 .8-1.8 1.8-1.8h1.6" stroke="#071F4D" stroke-width="1.096"/><path d="M295.402 216.5c-.9 4.2-.4 9.7 2.8 17.5 2.4 5.9 1.9 10.2 1.8 12.3M300.502 216.5c-.9 4.2-.4 9.7 2.8 17.5 2.4 5.9 1.9 10.2 1.8 12.3" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="m331 258.4-.3-5.2H88.5l-1.2 5.2H331Z" fill="#C7DEFF"/><path d="M252.9 248.7H331M216.6 258.4H331M47.1 139.3l-2.6 1.5 42.7 117.6h129.2v-6.6" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="m247.2 248.6-40.4-111.3H50.5l40.3 111.3h156.4Z" fill="#fff"/><path d="m247.2 248.6-40.4-111.3H50.5l40.3 111.3h156.4Z" stroke="#071F4D"/><path d="m203.2 153.2 32.2 88.7H97.8l-32.3-88.7" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M72.2 146.9c-.77 0-1.4.63-1.4 1.4 0 .77.63 1.4 1.4 1.4.77 0 1.4-.63 1.4-1.4 0-.77-.63-1.4-1.4-1.4ZM79.3 146.9c-.77 0-1.4.63-1.4 1.4 0 .77.63 1.4 1.4 1.4.77 0 1.4-.63 1.4-1.4 0-.77-.63-1.4-1.4-1.4Z" fill="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M263.5 171.2h80.3v-63.7h-80.3v63.7Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M290 143.9h-45.6l12.5 51.3H290v-51.3Z" fill="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M286 117.4h-29.3v77.8h92.9v-67.6l-55.9.6-7.7-10.8Z" fill="#00E4E5"/><path d="m332.6 127.6-38.9.6-7.7-10.8h-11.7M308.9 195.2h45.9M250.3 195.2h28.5M287.3 195.2h12.3" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M130.5 211.4H186v-44h-55.5v44Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M148.7 192.5h-31.6l8.7 35.5h22.9v-35.5Z" fill="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M145.9 174.2h-20.2V228h64.1v-46.7l-38.6.4-5.3-7.5Z" fill="#006EFF"/><path d="m179 181.3-27.8.4-5.3-7.5h-7.7M176.2 201.7h19.2M163.2 210.7H195M172.1 228h-54.2M184.8 228h8.1M174.9 228h5.4" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="m293.2 155.7-6.4 6.3 15.3 15.3 22.7-22.6-6.4-6.4-16.3 16.3-8.9-8.9Z" fill="#fff"/><path d="M57.2 258.4h283.6M345.9 258.4h8.1M55.4 258.4h220.5M160.1 118.8l-1.2 2.7M156.7 127c-.3.8-.7 1.8-1.1 2.8M222 68.5c-1 .2-1.9.5-2.9.8M214.1 70.7c-5.8 1.9-11.3 4.4-16.5 7.4M195.4 79.5c-.9.5-1.7 1.1-2.5 1.6M314.2 98.5c-.6-.8-1.3-1.5-2-2.3M308.9 92.8c-4-4-8.3-7.6-13-10.8M293.9 80.7c-.8-.5-1.7-1.1-2.5-1.6" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M251.296 71.203c-3.6-1.5-18.5-2.9-21.8-1.9-1 5.8 4.9 13.5 4.9 13.5s6-9.9 16.9-11.6Z" fill="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M251.3 42.704c-6.5 6.7-7.8 13-8.8 19.3 24.4-1.1 36.3 13 42.8 20 3.2-9.1 7.8-23 7.2-29-7.1-6.4-20-11.7-41.2-10.3Z" fill="#C7DEFF"/><path d="M230 69.3c36.2-3.8 52 21.1 52 21.1s11.4-28.2 10.5-37.4c-7.3-6.5-23.3-12-45.6-10.1-9 6.3-15.6 18.7-16.9 26.4Z" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M161.604 70.7c-6 8.4-9.9 21.9-8.8 33.8 8.4 5.3 32.3 10.5 43.6 11.5 6.1-7.9 15.9-26 15.9-26s-32-4.8-50.7-19.3Z" fill="#C7DEFF"/><path d="M193.103 119.5c4.8-2.7 19.2-29.5 19.2-29.5s-35.8-5.4-53.7-21.8c-9.3 6.1-16.4 24.3-15 40.1 10.6 6.7 45.8 13.3 49.5 11.2Z" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M189.5 111.6c-3 5.2-5.7 7.2-9.8 6.6 12.2 2.6 13.5 1.2 15.6-1.1 2.2-2.4 4.2-6.6 4.2-6.6s-3.1 2.5-10 1.1Z" fill="#071F4D"/><path d="M331 251.8v6.6M77 165.4l-2.7-6.7h7.8M222.8 228.9l2.8 6.6h-7.9" stroke="#071F4D"/></g></svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

@@ -1,292 +0,0 @@
// 全局样式
// 顶部进度条颜色
#nprogress .bar {
z-index: 2400;
background-color: color-mix(in srgb, var(--theme-color) 70%, white);
}
#nprogress .peg {
box-shadow:
0 0 10px var(--theme-color),
0 0 5px var(--theme-color) !important;
}
#nprogress .spinner-icon {
border-top-color: var(--theme-color) !important;
border-left-color: var(--theme-color) !important;
}
// 处理移动端组件兼容性
@media screen and (max-width: 640px) {
* {
cursor: default !important;
}
}
// 背景滤镜
*,
::before,
::after {
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
// 色弱模式
.color-weak {
filter: invert(80%);
-webkit-filter: invert(80%);
}
#noop {
display: none;
}
// 语言切换选中样式
.langDropDownStyle {
// 选中项背景颜色
.is-selected {
background-color: var(--art-el-active-color) !important;
}
// 语言切换按钮菜单样式优化
.lang-btn-item {
.el-dropdown-menu__item {
padding-left: 13px !important;
padding-right: 6px !important;
margin-bottom: 3px !important;
}
&:last-child {
.el-dropdown-menu__item {
margin-bottom: 0 !important;
}
}
.menu-txt {
min-width: 60px;
display: block;
}
i {
font-size: 10px;
margin-left: 10px;
}
}
}
// 盒子默认边框
.page-content {
border: 1px solid var(--art-card-border) !important;
}
@mixin art-card-base($border-color, $shadow: none, $radius-diff: 4px) {
background: var(--default-box-color);
border: 1px solid #{$border-color} !important;
border-radius: calc(var(--custom-radius) + #{$radius-diff}) !important;
box-shadow: #{$shadow} !important;
--el-card-border-color: var(--default-border) !important;
}
.art-card,
.art-card-sm,
.art-card-xs {
border: 1px solid var(--art-card-border);
}
// 盒子边框
[data-box-mode='border-mode'] {
.page-content,
.art-table-card {
border: 1px solid var(--art-card-border) !important;
}
.art-card {
@include art-card-base(var(--art-card-border), none, 4px);
}
.art-card-sm {
@include art-card-base(var(--art-card-border), none, 0px);
}
.art-card-xs {
@include art-card-base(var(--art-card-border), none, -4px);
}
}
// 盒子阴影
[data-box-mode='shadow-mode'] {
.page-content,
.art-table-card {
box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.04) !important;
border: 1px solid var(--art-gray-200) !important;
}
.layout-sidebar {
border-right: 1px solid var(--art-card-border) !important;
}
.art-card {
@include art-card-base(
var(--art-gray-200),
(0 1px 3px 0 rgba(0, 0, 0, 0.03), 0 1px 2px -1px rgba(0, 0, 0, 0.08)),
4px
);
}
.art-card-sm {
@include art-card-base(
var(--art-gray-200),
(0 1px 3px 0 rgba(0, 0, 0, 0.03), 0 1px 2px -1px rgba(0, 0, 0, 0.08)),
2px
);
}
.art-card-xs {
@include art-card-base(
var(--art-gray-200),
(0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 1px -1px rgba(0, 0, 0, 0.08)),
-4px
);
}
}
// 元素全屏
.el-full-screen {
position: fixed;
top: 0;
left: 0;
right: 0;
width: 100vw !important;
height: 100% !important;
z-index: 2300;
margin-top: 0;
padding: 15px;
box-sizing: border-box;
background-color: var(--default-box-color);
display: flex;
flex-direction: column;
}
// 表格卡片
.art-table-card {
flex: 1;
display: flex;
flex-direction: column;
margin-top: 12px;
border-radius: calc(var(--custom-radius) / 2 + 2px) !important;
.el-card__body {
height: 100%;
overflow: hidden;
}
}
// 容器全高
.art-full-height {
height: var(--art-full-height);
display: flex;
flex-direction: column;
@media (max-width: 640px) {
height: auto;
}
}
// 徽章样式
.art-badge {
position: absolute;
top: 0;
right: 20px;
bottom: 0;
width: 6px;
height: 6px;
margin: auto;
background: #ff3860;
border-radius: 50%;
animation: breathe 1.5s ease-in-out infinite;
&.art-badge-horizontal {
right: 0;
}
&.art-badge-mixed {
right: 0;
}
&.art-badge-dual {
right: 5px;
top: 5px;
bottom: auto;
}
}
// 文字徽章样式
.art-text-badge {
position: absolute;
top: 0;
right: 12px;
bottom: 0;
min-width: 20px;
height: 18px;
line-height: 17px;
padding: 0 5px;
margin: auto;
font-size: 10px;
color: #fff;
text-align: center;
background: #fd4e4e;
border-radius: 4px;
}
@keyframes breathe {
0% {
opacity: 0.7;
transform: scale(1);
}
50% {
opacity: 1;
transform: scale(1.1);
}
100% {
opacity: 0.7;
transform: scale(1);
}
}
// 修复老机型 loading 定位问题
.art-loading-fix {
position: fixed !important;
top: 0 !important;
left: 0 !important;
right: 0 !important;
bottom: 0 !important;
width: 100vw !important;
height: 100vh !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
.art-loading-fix .el-loading-spinner {
position: static !important;
top: auto !important;
left: auto !important;
transform: none !important;
}
// 去除移动端点击背景色
@media screen and (max-width: 1180px) {
* {
-webkit-tap-highlight-color: transparent;
}
}
@@ -1,93 +0,0 @@
/*
* 深色主题
* 单页面移除深色主题 document.getElementsByTagName("html")[0].removeAttribute('class')
*/
$font-color: rgba(#ffffff, 0.85);
/* 覆盖element-plus默认深色背景色 */
html.dark {
// element-plus
--el-bg-color: var(--default-box-color);
--el-text-color-regular: #{$font-color};
// 富文本编辑器
// 工具栏背景颜色
--w-e-toolbar-bg-color: #18191c;
// 输入区域背景颜色
--w-e-textarea-bg-color: #090909;
// 工具栏文字颜色
--w-e-toolbar-color: var(--art-gray-600);
// 选中菜单颜色
--w-e-toolbar-active-bg-color: #25262b;
// 弹窗边框颜色
--w-e-toolbar-border-color: var(--default-border-dashed);
// 分割线颜色
--w-e-textarea-border-color: var(--default-border-dashed);
// 链接输入框边框颜色
--w-e-modal-button-border-color: var(--default-border-dashed);
// 表格头颜色
--w-e-textarea-slight-bg-color: #090909;
// 按钮背景颜色
--w-e-modal-button-bg-color: #090909;
// hover toolbar 背景颜色
--w-e-toolbar-active-color: var(--art-gray-800);
}
.dark {
.page-content .article-list .item .left .outer > div {
border-right-color: var(--dark-border-color) !important;
}
// 富文本编辑器
.editor-wrapper {
*:not(pre code *) {
color: inherit !important;
}
}
// 分隔线
.w-e-bar-divider {
background-color: var(--art-gray-300) !important;
}
.w-e-select-list,
.w-e-drop-panel,
.w-e-bar-item-group .w-e-bar-item-menus-container,
.w-e-text-container [data-slate-editor] pre > code {
border: 1px solid var(--default-border) !important;
}
// 下拉选择框
.w-e-select-list {
background-color: var(--default-box-color) !important;
}
/* 下拉选择框 hover 样式调整 */
.w-e-select-list ul li:hover,
/* 工具栏 hover 按钮背景颜色 */
.w-e-bar-item button:hover {
background-color: #090909 !important;
}
/* 代码块 */
.w-e-text-container [data-slate-editor] pre > code {
background-color: #25262b !important;
text-shadow: none !important;
}
/* 引用 */
.w-e-text-container [data-slate-editor] blockquote {
border-left: 4px solid var(--default-border-dashed) !important;
background-color: var(--art-color);
}
.editor-wrapper {
.w-e-text-container [data-slate-editor] .table-container th:last-of-type {
border-right: 1px solid var(--default-border-dashed) !important;
}
.w-e-modal {
background-color: var(--art-color);
}
}
}
@@ -1,2 +0,0 @@
// 导入暗黑主题
@use 'element-plus/theme-chalk/src/dark/css-vars.scss' as *;
@@ -1,34 +0,0 @@
// https://github.com/element-plus/element-plus/blob/dev/packages/theme-chalk/src/common/var.scss
// 自定义Element 亮色主题
@forward 'element-plus/theme-chalk/src/common/var.scss' with (
$colors: (
'white': #ffffff,
'black': #000000,
'success': (
'base': #13deb9
),
'warning': (
'base': #ffae1f
),
'danger': (
'base': #ff4d4f
),
'error': (
'base': #fa896b
)
),
$button: (
'hover-bg-color': var(--el-color-primary-light-9),
'hover-border-color': var(--el-color-primary),
'border-color': var(--el-color-primary),
'text-color': var(--el-color-primary)
),
$messagebox: (
'border-radius': '12px'
),
$popover: (
'padding': '14px',
'border-radius': '10px'
)
);
@@ -1,519 +0,0 @@
// 优化 Element Plus 组件库默认样式
:root {
// 系统主色
--main-color: var(--el-color-primary);
--el-color-white: white !important;
--el-color-black: white !important;
// 输入框边框颜色
// --el-border-color: #E4E4E7 !important; // DCDFE6
// 按钮粗度
--el-font-weight-primary: 400 !important;
--el-component-custom-height: 36px !important;
--el-component-size: var(--el-component-custom-height) !important;
// 边框、按钮圆角...
--el-border-radius-base: calc(var(--custom-radius) / 3 + 2px) !important;
--el-border-radius-small: calc(var(--custom-radius) / 3 + 4px) !important;
--el-messagebox-border-radius: calc(var(--custom-radius) / 3 + 4px) !important;
--el-popover-border-radius: calc(var(--custom-radius) / 3 + 4px) !important;
.region .el-radio-button__original-radio:checked + .el-radio-button__inner {
color: var(--theme-color);
}
}
// 优化 el-form-item 标签高度
.el-form-item__label {
height: var(--el-component-custom-height) !important;
line-height: var(--el-component-custom-height) !important;
}
// 日期选择器
.el-date-range-picker {
--el-datepicker-inrange-bg-color: var(--art-gray-200) !important;
}
// el-card 背景色跟系统背景色保持一致
html.dark .el-card {
--el-card-bg-color: var(--default-box-color) !important;
}
// 修改 el-pagination 大小
.el-pagination--default {
& {
--el-pagination-button-width: 32px !important;
--el-pagination-button-height: var(--el-pagination-button-width) !important;
}
@media (max-width: 1180px) {
& {
--el-pagination-button-width: 28px !important;
}
}
.el-select--default .el-select__wrapper {
min-height: var(--el-pagination-button-width) !important;
}
.el-pagination__jump .el-input {
height: var(--el-pagination-button-width) !important;
}
}
.el-pager li {
padding: 0 10px !important;
// border: 1px solid red !important;
}
// 优化菜单折叠展开动画(提升动画流畅度)
.el-menu.el-menu--inline {
transition: max-height 0.26s cubic-bezier(0.4, 0, 0.2, 1) !important;
}
// 优化菜单 item hover 动画(提升鼠标跟手感)
.el-sub-menu__title,
.el-menu-item {
transition: background-color 0s !important;
}
// -------------------------------- 修改 el-size=default 组件默认高度 start --------------------------------
// 修改 el-button 高度
.el-button--default {
height: var(--el-component-custom-height) !important;
}
// circle 按钮宽度优化
.el-button--default.is-circle {
width: var(--el-component-custom-height) !important;
}
// 修改 el-select 高度
.el-select--default {
.el-select__wrapper {
min-height: var(--el-component-custom-height) !important;
}
}
// 修改 el-checkbox-button 高度
.el-checkbox-button--default .el-checkbox-button__inner,
// 修改 el-radio-button 高度
.el-radio-button--default .el-radio-button__inner {
padding: 10px 15px !important;
}
// -------------------------------- 修改 el-size=default 组件默认高度 end --------------------------------
.el-pagination.is-background .btn-next,
.el-pagination.is-background .btn-prev,
.el-pagination.is-background .el-pager li {
border-radius: 6px;
}
.el-popover {
min-width: 80px;
border-radius: var(--el-border-radius-small) !important;
}
.el-dialog {
border-radius: 100px !important;
border-radius: calc(var(--custom-radius) / 1.2 + 2px) !important;
overflow: hidden;
}
.el-dialog__header {
.el-dialog__title {
font-size: 16px;
}
}
.el-dialog__body {
padding: 25px 0 !important;
position: relative; // 为了兼容 el-pagination 样式,需要设置 relative,不然会影响 el-pagination 的样式,比如 el-pagination__jump--small 会被影响,导致 el-pagination__jump--small 按钮无法点击,详见 URL_ADDRESS.com/element-plus/element-plus/issues/5684#issuecomment-1176299275;
}
.el-dialog.el-dialog-border {
.el-dialog__body {
// 上边框
&::before,
// 下边框
&::after {
content: '';
position: absolute;
left: -16px;
width: calc(100% + 32px);
height: 1px;
background-color: var(--art-gray-300);
}
&::before {
top: 0;
}
&::after {
bottom: 0;
}
}
}
// el-message 样式优化
.el-message {
background-color: var(--default-box-color) !important;
border: 0 !important;
box-shadow:
0 6px 16px 0 rgba(0, 0, 0, 0.08),
0 3px 6px -4px rgba(0, 0, 0, 0.12),
0 9px 28px 8px rgba(0, 0, 0, 0.05) !important;
p {
font-size: 13px;
}
}
// 修改 el-dropdown 样式
.el-dropdown-menu {
padding: 6px !important;
border-radius: 10px !important;
border: none !important;
.el-dropdown-menu__item {
padding: 6px 16px !important;
border-radius: 6px !important;
&:hover:not(.is-disabled) {
color: var(--art-gray-900) !important;
background-color: var(--art-el-active-color) !important;
}
&:focus:not(.is-disabled) {
color: var(--art-gray-900) !important;
background-color: var(--art-gray-200) !important;
}
}
}
// 隐藏 select、dropdown 的三角
.el-select__popper,
.el-dropdown__popper {
margin-top: -6px !important;
.el-popper__arrow {
display: none;
}
}
.el-dropdown-selfdefine:focus {
outline: none !important;
}
// 处理移动端组件兼容性
@media screen and (max-width: 640px) {
.el-message-box,
.el-dialog {
width: calc(100% - 24px) !important;
}
.el-date-picker.has-sidebar.has-time {
width: calc(100% - 24px);
left: 12px !important;
}
.el-picker-panel *[slot='sidebar'],
.el-picker-panel__sidebar {
display: none;
}
.el-picker-panel *[slot='sidebar'] + .el-picker-panel__body,
.el-picker-panel__sidebar + .el-picker-panel__body {
margin-left: 0;
}
}
// 修改el-button样式
.el-button {
&.el-button--text {
background-color: transparent !important;
padding: 0 !important;
span {
margin-left: 0 !important;
}
}
}
// 修改el-tag样式
.el-tag {
font-weight: 500;
transition: all 0s !important;
&.el-tag--default {
height: 26px !important;
}
}
.el-checkbox-group {
&.el-table-filter__checkbox-group label.el-checkbox {
height: 17px !important;
.el-checkbox__label {
font-weight: 400 !important;
}
}
}
.el-radio--default {
// 优化单选按钮大小
.el-radio__input {
.el-radio__inner {
width: 16px;
height: 16px;
&::after {
width: 6px;
height: 6px;
}
}
}
}
.el-checkbox {
.el-checkbox__inner {
border-radius: 2px !important;
}
}
// 优化复选框样式
.el-checkbox--default {
.el-checkbox__inner {
width: 16px !important;
height: 16px !important;
border-radius: 4px !important;
&::before {
content: '';
height: 4px !important;
top: 5px !important;
background-color: #fff !important;
transform: scale(0.6) !important;
}
}
.is-checked {
.el-checkbox__inner {
&::after {
width: 3px;
height: 8px;
margin: auto;
border: 2px solid var(--el-checkbox-checked-icon-color);
border-left: 0;
border-top: 0;
transform: translate(-45%, -60%) rotate(45deg) scale(0.86) !important;
transform-origin: center;
}
}
}
}
.el-notification .el-notification__icon {
font-size: 22px !important;
}
// 修改 el-message-box 样式
.el-message-box__headerbtn .el-message-box__close,
.el-dialog__headerbtn .el-dialog__close {
top: 7px;
right: 7px;
width: 30px;
height: 30px;
border-radius: 5px;
transition: all 0.3s;
&:hover {
background-color: var(--art-hover-color) !important;
color: var(--art-gray-900) !important;
}
}
.el-message-box {
padding: 25px 20px !important;
}
.el-message-box__title {
font-weight: 500 !important;
}
.el-table__column-filter-trigger i {
color: var(--theme-color) !important;
margin: -3px 0 0 2px;
}
// 去除 el-dropdown 鼠标放上去出现的边框
.el-tooltip__trigger:focus-visible {
outline: unset;
}
// ipad 表单右侧按钮优化
@media screen and (max-width: 1180px) {
.el-table-fixed-column--right {
padding-right: 0 !important;
}
}
.login-out-dialog {
padding: 30px 20px !important;
border-radius: 10px !important;
}
// 修改 dialog 动画
.dialog-fade-enter-active {
.el-dialog:not(.is-draggable) {
animation: dialog-open 0.3s cubic-bezier(0.32, 0.14, 0.15, 0.86);
// 修复 el-dialog 动画后宽度不自适应问题
.el-select__selected-item {
display: inline-block;
}
}
}
.dialog-fade-leave-active {
animation: fade-out 0.2s linear;
.el-dialog:not(.is-draggable) {
animation: dialog-close 0.5s;
}
}
@keyframes dialog-open {
0% {
opacity: 0;
transform: scale(0.2);
}
100% {
opacity: 1;
transform: scale(1);
}
}
@keyframes dialog-close {
0% {
opacity: 1;
transform: scale(1);
}
100% {
opacity: 0;
transform: scale(0.2);
}
}
// 遮罩层动画
@keyframes fade-out {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
// 修改 el-select 样式
.el-select__popper:not(.el-tree-select__popper) {
.el-select-dropdown__list {
padding: 5px !important;
.el-select-dropdown__item {
height: 34px !important;
line-height: 34px !important;
border-radius: 6px !important;
&.is-selected {
color: var(--art-gray-900) !important;
font-weight: 400 !important;
background-color: var(--art-el-active-color) !important;
margin-bottom: 4px !important;
}
&:hover {
background-color: var(--art-hover-color) !important;
}
}
.el-select-dropdown__item:hover ~ .is-selected,
.el-select-dropdown__item.is-selected:has(~ .el-select-dropdown__item:hover) {
background-color: transparent !important;
}
}
}
// 修改 el-tree-select 样式
.el-tree-select__popper {
.el-select-dropdown__list {
padding: 5px !important;
.el-tree-node {
.el-tree-node__content {
height: 36px !important;
border-radius: 6px !important;
&:hover {
background-color: var(--art-gray-200) !important;
}
}
}
}
}
// 实现水波纹在文字下面效果
.el-button > span {
position: relative;
z-index: 10;
}
// 优化颜色选择器圆角
.el-color-picker__color {
border-radius: 2px !important;
}
// 优化日期时间选择器底部圆角
.el-picker-panel {
.el-picker-panel__footer {
border-radius: 0 0 var(--el-border-radius-base) var(--el-border-radius-base);
}
}
// 优化树型菜单样式
.el-tree-node__content {
border-radius: 4px;
margin-bottom: 4px;
padding: 1px 0;
&:hover {
background-color: var(--art-hover-color) !important;
}
}
.dark {
.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
background-color: var(--art-gray-300) !important;
}
}
// 隐藏折叠菜单弹窗 hover 出现的边框
.menu-left-popper:focus-within,
.horizontal-menu-popper:focus-within {
box-shadow: none !important;
outline: none !important;
}
// 数字输入组件右侧按钮高度跟随自定义组件高度
.el-input-number--default.is-controls-right {
.el-input-number__decrease,
.el-input-number__increase {
height: calc((var(--el-component-size) / 2)) !important;
}
}
File diff suppressed because it is too large Load Diff
@@ -1,157 +0,0 @@
// sass 混合宏(函数)
/**
* 溢出省略号
* @param {Number} 行数
*/
@mixin ellipsis($rowCount: 1) {
@if $rowCount <=1 {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} @else {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: $rowCount;
-webkit-box-orient: vertical;
}
}
/**
* 控制用户能否选中文本
* @param {String} 类型
*/
@mixin userSelect($value: none) {
user-select: $value;
-moz-user-select: $value;
-ms-user-select: $value;
-webkit-user-select: $value;
}
// 绝对定位居中
@mixin absoluteCenter() {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
}
/**
* css3动画
*
*/
@mixin animation(
$from: (
width: 0px
),
$to: (
width: 100px
),
$name: mymove,
$animate: mymove 2s 1 linear infinite
) {
-webkit-animation: $animate;
-o-animation: $animate;
animation: $animate;
@keyframes #{$name} {
from {
@each $key, $value in $from {
#{$key}: #{$value};
}
}
to {
@each $key, $value in $to {
#{$key}: #{$value};
}
}
}
@-webkit-keyframes #{$name} {
from {
@each $key, $value in $from {
$key: $value;
}
}
to {
@each $key, $value in $to {
$key: $value;
}
}
}
}
// 圆形盒子
@mixin circle($size: 11px, $bg: #fff) {
border-radius: 50%;
width: $size;
height: $size;
line-height: $size;
text-align: center;
background: $bg;
}
// placeholder
@mixin placeholder($color: #bbb) {
// Firefox
&::-moz-placeholder {
color: $color;
opacity: 1;
}
// Internet Explorer 10+
&:-ms-input-placeholder {
color: $color;
}
// Safari and Chrome
&::-webkit-input-placeholder {
color: $color;
}
&:placeholder-shown {
text-overflow: ellipsis;
}
}
//背景透明,文字不透明。兼容IE8
@mixin betterTransparentize($color, $alpha) {
$c: rgba($color, $alpha);
$ie_c: ie_hex_str($c);
background: rgba($color, 1);
background: $c;
background: transparent \9;
zoom: 1;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#{$ie_c}, endColorstr=#{$ie_c});
-ms-filter: 'progid:DXImageTransform.Microsoft.gradient(startColorstr=#{$ie_c}, endColorstr=#{$ie_c})';
}
//添加浏览器前缀
@mixin browserPrefix($propertyName, $value) {
@each $prefix in -webkit-, -moz-, -ms-, -o-, '' {
#{$prefix}#{$propertyName}: $value;
}
}
// 边框
@mixin border($color: red) {
border: 1px solid $color;
}
// 背景滤镜
@mixin backdropBlur() {
--tw-backdrop-blur: blur(30px);
-webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
@@ -1,41 +0,0 @@
@charset "UTF-8";
/*滚动条*/
/*滚动条整体部分,必须要设置*/
::-webkit-scrollbar {
width: 8px !important;
height: 0 !important;
}
/*滚动条的轨道*/
::-webkit-scrollbar-track {
background-color: var(--art-gray-200);
}
/*滚动条的滑块按钮*/
::-webkit-scrollbar-thumb {
border-radius: 5px;
background-color: #cccccc !important;
transition: all 0.2s;
-webkit-transition: all 0.2s;
}
::-webkit-scrollbar-thumb:hover {
background-color: #b0abab !important;
}
/*滚动条的上下两端的按钮*/
::-webkit-scrollbar-button {
height: 0px;
width: 0;
}
.dark {
::-webkit-scrollbar-track {
background-color: var(--default-bg-color);
}
::-webkit-scrollbar-thumb {
background-color: var(--art-gray-300) !important;
}
}
@@ -1,104 +0,0 @@
@use 'sass:map';
// === 变量区域 ===
$transition: (
// 动画持续时间
duration: 0.25s,
// 滑动动画的移动距离
distance: 15px,
// 默认缓动函数
easing: cubic-bezier(0.25, 0.1, 0.25, 1),
// 淡入淡出专用的缓动函数
fade-easing: cubic-bezier(0.4, 0, 0.6, 1)
);
// 抽取配置值函数,提高可复用性
@function transition-config($key) {
@return map.get($transition, $key);
}
// 变量简写
$duration: transition-config('duration');
$distance: transition-config('distance');
$easing: transition-config('easing');
$fade-easing: transition-config('fade-easing');
// === 动画类 ===
// 淡入淡出动画
.fade {
&-enter-active,
&-leave-active {
transition: opacity $duration $fade-easing;
will-change: opacity;
}
&-enter-from,
&-leave-to {
opacity: 0;
}
&-enter-to,
&-leave-from {
opacity: 1;
}
}
// 滑动动画通用样式
@mixin slide-transition($direction) {
$distance-x: 0;
$distance-y: 0;
@if $direction == 'left' {
$distance-x: -$distance;
} @else if $direction == 'right' {
$distance-x: $distance;
} @else if $direction == 'top' {
$distance-y: -$distance;
} @else if $direction == 'bottom' {
$distance-y: $distance;
}
&-enter-active {
transition:
opacity $duration $easing,
transform $duration $easing;
will-change: opacity, transform;
}
&-leave-active {
transition:
opacity calc($duration * 0.7) $easing,
transform calc($duration * 0.7) $easing;
will-change: opacity, transform;
}
&-enter-from {
opacity: 0;
transform: translate3d($distance-x, $distance-y, 0);
}
&-enter-to {
opacity: 1;
transform: translate3d(0, 0, 0);
}
&-leave-to {
opacity: 0;
transform: translate3d(-$distance-x, -$distance-y, 0);
}
}
// 滑动动画方向类
.slide-left {
@include slide-transition('left');
}
.slide-right {
@include slide-transition('right');
}
.slide-top {
@include slide-transition('top');
}
.slide-bottom {
@include slide-transition('bottom');
}
@@ -1,208 +0,0 @@
@import 'tailwindcss';
@custom-variant dark (&:where(.dark, .dark *));
/* ==================== Light Mode Variables ==================== */
:root {
/* Base Colors */
--art-color: #ffffff;
--theme-color: var(--main-color);
/* Theme Colors - OKLCH Format */
--art-primary: oklch(0.7 0.23 260);
--art-secondary: oklch(0.72 0.19 231.6);
--art-error: oklch(0.73 0.15 25.3);
--art-info: oklch(0.58 0.03 254.1);
--art-success: oklch(0.78 0.17 166.1);
--art-warning: oklch(0.78 0.14 75.5);
--art-danger: oklch(0.68 0.22 25.3);
/* Gray Scale - Light Mode */
--art-gray-100: #f9fafb;
--art-gray-200: #f2f4f5;
--art-gray-300: #e6eaeb;
--art-gray-400: #dbdfe1;
--art-gray-500: #949eb7;
--art-gray-600: #7987a1;
--art-gray-700: #4d5875;
--art-gray-800: #383853;
--art-gray-900: #323251;
/* Border Colors */
--art-card-border: rgba(0, 0, 0, 0.08);
--default-border: #e2e8ee;
--default-border-dashed: #dbdfe9;
/* Background Colors */
--default-bg-color: #fafbfc;
--default-box-color: #ffffff;
/* Hover Color */
--art-hover-color: #edeff0;
/* Active Color */
--art-active-color: #f2f4f5;
/* Element Component Active Color */
--art-el-active-color: #f2f4f5;
}
/* ==================== Dark Mode Variables ==================== */
.dark {
/* Base Colors */
--art-color: #000000;
/* Gray Scale - Dark Mode */
--art-gray-100: #110f0f;
--art-gray-200: #17171c;
--art-gray-300: #393946;
--art-gray-400: #505062;
--art-gray-500: #73738c;
--art-gray-600: #8f8fa3;
--art-gray-700: #ababba;
--art-gray-800: #c7c7d1;
--art-gray-900: #e3e3e8;
/* Border Colors */
--art-card-border: rgba(255, 255, 255, 0.08);
--default-border: rgba(255, 255, 255, 0.1);
--default-border-dashed: #363843;
/* Background Colors */
--default-bg-color: #070707;
--default-box-color: #161618;
/* Hover Color */
--art-hover-color: #252530;
/* Active Color */
--art-active-color: #202226;
/* Element Component Active Color */
--art-el-active-color: #2e2e38;
}
/* ==================== Tailwind Theme Configuration ==================== */
@theme {
/* Box Color (Light: white / Dark: black) */
--color-box: var(--default-box-color);
/* System Theme Color */
--color-theme: var(--theme-color);
/* Hover Color */
--color-hover-color: var(--art-hover-color);
/* Active Color */
--color-active-color: var(--art-active-color);
/* Active Color */
--color-el-active-color: var(--art-active-color);
/* ElementPlus Theme Colors */
--color-primary: var(--art-primary);
--color-secondary: var(--art-secondary);
--color-error: var(--art-error);
--color-info: var(--art-info);
--color-success: var(--art-success);
--color-warning: var(--art-warning);
--color-danger: var(--art-danger);
/* Gray Scale Colors (Auto-adapts to dark mode) */
--color-g-100: var(--art-gray-100);
--color-g-200: var(--art-gray-200);
--color-g-300: var(--art-gray-300);
--color-g-400: var(--art-gray-400);
--color-g-500: var(--art-gray-500);
--color-g-600: var(--art-gray-600);
--color-g-700: var(--art-gray-700);
--color-g-800: var(--art-gray-800);
--color-g-900: var(--art-gray-900);
}
/* ==================== Custom Border Radius Utilities ==================== */
@utility rounded-custom-xs {
border-radius: calc(var(--custom-radius) / 2);
}
@utility rounded-custom-sm {
border-radius: calc(var(--custom-radius) / 2 + 2px);
}
/* ==================== Custom Utility Classes ==================== */
@layer utilities {
/* Flexbox Layout Utilities */
.flex-c {
@apply flex items-center;
}
.flex-b {
@apply flex justify-between;
}
.flex-cc {
@apply flex items-center justify-center;
}
.flex-cb {
@apply flex items-center justify-between;
}
/* Transition Utilities */
.tad-200 {
@apply transition-all duration-200;
}
.tad-300 {
@apply transition-all duration-300;
}
/* Border Utilities */
.border-full-d {
@apply border border-[var(--default-border)];
}
.border-b-d {
@apply border-b border-[var(--default-border)];
}
.border-t-d {
@apply border-t border-[var(--default-border)];
}
.border-l-d {
@apply border-l border-[var(--default-border)];
}
.border-r-d {
@apply border-r border-[var(--default-border)];
}
/* Cursor Utilities */
.c-p {
@apply cursor-pointer;
}
}
/* ==================== Custom Component Classes ==================== */
@layer components {
/* Art Card Header Component */
.art-card-header {
@apply flex justify-between pr-6 pb-1;
.title {
h4 {
@apply text-lg font-medium text-g-900;
}
p {
@apply mt-1 text-sm text-g-600;
span {
@apply ml-2 font-medium;
}
}
}
}
}
@@ -1,63 +0,0 @@
// 定义基础变量
$bg-animation-color-light: #000;
$bg-animation-color-dark: #fff;
$bg-animation-duration: 0.5s;
html {
--bg-animation-color: $bg-animation-color-light;
&.dark {
--bg-animation-color: $bg-animation-color-dark;
}
// View transition styles
&::view-transition-old(*) {
animation: none;
}
&::view-transition-new(*) {
animation: clip $bg-animation-duration ease-in both;
}
&::view-transition-old(root) {
z-index: 1;
}
&::view-transition-new(root) {
z-index: 9999;
}
&.dark {
&::view-transition-old(*) {
animation: clip $bg-animation-duration ease-in reverse both;
}
&::view-transition-new(*) {
animation: none;
}
&::view-transition-old(root) {
z-index: 9999;
}
&::view-transition-new(root) {
z-index: 1;
}
}
}
// 定义动画
@keyframes clip {
from {
clip-path: circle(0% at var(--x) var(--y));
}
to {
clip-path: circle(var(--r) at var(--x) var(--y));
}
}
// body 相关样式
body {
background-color: var(--bg-animation-color);
}
@@ -1,11 +0,0 @@
// 主题切换过渡优化,优化除视觉上的不适感
.theme-change {
* {
transition: 0s !important;
}
.el-switch__core,
.el-switch__action {
transition: all 0.3s !important;
}
}
@@ -1,98 +0,0 @@
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
color: #a6accd;
}
.hljs-string,
.hljs-section,
.hljs-selector-class,
.hljs-template-variable,
.hljs-deletion {
color: #aed07e !important;
}
.hljs-comment,
.hljs-quote {
color: #6f747d;
}
.hljs-doctag,
.hljs-keyword,
.hljs-formula {
color: #c792ea;
}
.hljs-section,
.hljs-name,
.hljs-selector-tag,
.hljs-deletion,
.hljs-subst {
color: #c86068;
}
.hljs-literal {
color: #56b6c2;
}
.hljs-string,
.hljs-regexp,
.hljs-addition,
.hljs-attribute,
.hljs-meta-string {
color: #abb2bf;
}
.hljs-attribute {
color: #c792ea;
}
.hljs-function {
color: #c792ea;
}
.hljs-type {
color: #f07178;
}
.hljs-title {
color: #82aaff !important;
}
.hljs-built_in,
.hljs-class {
color: #82aaff;
}
// 括号
.hljs-params {
color: #a6accd;
}
.hljs-attr,
.hljs-variable,
.hljs-template-variable,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo,
.hljs-number {
color: #de7e61;
}
.hljs-symbol,
.hljs-bullet,
.hljs-link,
.hljs-meta,
.hljs-selector-id {
color: #61aeee;
}
.hljs-strong {
font-weight: bold;
}
.hljs-link {
text-decoration: underline;
}
-23
View File
@@ -1,23 +0,0 @@
// 重置默认样式
@use './core/reset.scss';
// 应用全局样式
@use './core/app.scss';
// Element Plus 样式优化
@use './core/el-ui.scss';
// Element Plus 暗黑主题
@use './core/el-dark.scss';
// 暗黑主题样式优化
@use './core/dark.scss';
// 路由切换动画
@use './core/router-transition';
// 主题切换过渡优化
@use './core/theme-change.scss';
// 主题切换圆形扩散动画
@use './core/theme-animation.scss';

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