init code

This commit is contained in:
Asoka 2025-06-03 16:45:54 +08:00
commit 1a92e8b30e
446 changed files with 67221 additions and 0 deletions

23
.editorconfig Normal file
View File

@ -0,0 +1,23 @@
# https://editorconfig.org
root = true
# 匹配全部文件
[*]
# 设置字符集
charset = utf-8
# 缩进风格可选space、tab
indent_style = space
# 缩进的空格数
indent_size = 2
# 结尾换行符可选lf、cr、crlf
end_of_line = lf
# 在文件结尾插入新行
insert_final_newline = true
# 删除一行中的前后空格
trim_trailing_whitespace = true
# 匹配md结尾的文件
[*.md]
indent_style = tab
insert_final_newline = false
trim_trailing_whitespace = false

8
.env Normal file
View File

@ -0,0 +1,8 @@
# port 端口号
VITE_PORT = 9010
# open 运行 npm run dev 时自动打开浏览器
VITE_OPEN = true
# public path 配置线上环境路径(打包)、本地通过 http-server 访问时,请置空即可
VITE_PUBLIC_PATH = ''

5
.env.development Normal file
View File

@ -0,0 +1,5 @@
# 本地环境
ENV = 'development'
# 本地环境接口地址
VITE_API_URL = 'http://localhost:18010'

11
.env.production Normal file
View File

@ -0,0 +1,11 @@
# 线上环境
ENV = 'production'
# 开启压缩
VITE_COMPRESSION = true
# public path 配置线上环境路径(打包)
VITE_PUBLIC_PATH = '/'
# 线上环境接口地址,确保替换 http://localhost:16010 为你的实际线上接口地址
VITE_API_URL = 'http://localhost:16010'

19
.eslintignore Normal file
View File

@ -0,0 +1,19 @@
*.sh
node_modules
lib
*.md
*.scss
*.woff
*.ttf
.vscode
.idea
dist
mock
public
bin
build
config
index.html
src/assets
gen

78
.eslintrc.js Normal file
View File

@ -0,0 +1,78 @@
module.exports = {
root: true,
env: {
browser: true,
es2021: true,
node: true,
},
parser: 'vue-eslint-parser',
parserOptions: {
ecmaVersion: 12,
parser: '@typescript-eslint/parser',
sourceType: 'module',
},
extends: ['plugin:vue/vue3-essential', 'plugin:vue/essential', 'eslint:recommended'],
plugins: ['vue', '@typescript-eslint'],
overrides: [
{
files: ['*.ts', '*.tsx', '*.vue'],
rules: {
'no-undef': 'off',
},
},
],
rules: {
// http://eslint.cn/docs/rules/
// https://eslint.vuejs.org/rules/
// https://typescript-eslint.io/rules/no-unused-vars/
'@typescript-eslint/ban-ts-ignore': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-use-before-define': 'off',
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/ban-types': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-redeclare': 'error',
'@typescript-eslint/no-non-null-asserted-optional-chain': 'off',
'@typescript-eslint/no-unused-vars': [2],
'vue/custom-event-name-casing': 'off',
'vue/attributes-order': 'off',
'vue/one-component-per-file': 'off',
'vue/html-closing-bracket-newline': 'off',
'vue/max-attributes-per-line': 'off',
'vue/multiline-html-element-content-newline': 'off',
'vue/singleline-html-element-content-newline': 'off',
'vue/attribute-hyphenation': 'off',
'vue/html-self-closing': 'off',
'vue/no-multiple-template-root': 'off',
'vue/require-default-prop': 'off',
'vue/no-v-model-argument': 'off',
'vue/no-arrow-functions-in-watch': 'off',
'vue/no-template-key': 'off',
'vue/no-v-html': 'off',
'vue/comment-directive': 'off',
'vue/no-parsing-error': 'off',
'vue/no-deprecated-v-on-native-modifier': 'off',
'vue/multi-word-component-names': 'off',
'no-useless-escape': 'off',
'no-sparse-arrays': 'off',
'no-prototype-builtins': 'off',
'no-constant-condition': 'off',
'no-use-before-define': 'off',
'no-restricted-globals': 'off',
'no-restricted-syntax': 'off',
'generator-star-spacing': 'off',
'no-unreachable': 'off',
'no-multiple-template-root': 'off',
'no-unused-vars': 'error',
'no-v-model-argument': 'off',
'no-case-declarations': 'off',
'no-console': 'error',
'no-redeclare': 'off',
//修复prettier格式化语句在语句前生成分号后eslintrc检测报错误的问题
'no-extra-semi': 'off',
},
}

26
.gitignore vendored Normal file
View File

@ -0,0 +1,26 @@
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
pnpm-lock.yaml
package-lock.json

39
.prettierrc.cjs Normal file
View File

@ -0,0 +1,39 @@
module.exports = {
// 一行最多多少个字符
printWidth: 150,
// 指定每个缩进级别的空格数
tabWidth: 2,
// 使用制表符而不是空格缩进行
useTabs: false,
// 在语句末尾打印分号
semi: false,
// 使用单引号而不是双引号
singleQuote: true,
// 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>"
quoteProps: 'as-needed',
// 在JSX中使用单引号而不是双引号
jsxSingleQuote: false,
// 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>"默认none
trailingComma: 'es5',
// 在对象文字中的括号之间打印空格
bracketSpacing: true,
// jsx 标签的反尖括号需要换行
jsxBracketSameLine: false,
// 在单独的箭头函数参数周围包括括号 always(x) => x \ avoidx => x
arrowParens: 'always',
// 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码
rangeStart: 0,
rangeEnd: Infinity,
// 指定要使用的解析器,不需要写文件开头的 @prettier
requirePragma: false,
// 不需要自动在文件开头插入 @prettier
insertPragma: false,
// 使用默认的折行标准 always\never\preserve
proseWrap: 'preserve',
// 指定HTML文件的全局空格敏感度 css\strict\ignore
htmlWhitespaceSensitivity: 'css',
// Vue文件脚本和样式标签缩进
vueIndentScriptAndStyle: false,
// 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
endOfLine: 'lf',
}

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 zhontai
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

117
README.md Normal file
View File

@ -0,0 +1,117 @@
<div align="center">
<h2>NPP</h2>
<h3>前后端分离后台权限管理系统</h3>
<p align="center">
<a href="https://v3.vuejs.org/" target="_blank">
<img src="https://img.shields.io/badge/vue.js-vue3.x-green" alt="vue">
</a>
<a href="https://element-plus.gitee.io/#/zh-CN/component/changelog" target="_blank">
<img src="https://img.shields.io/badge/element--plus-%3E1.0.0-blue" alt="element plus">
</a>
<a href="https://vitejs.dev/" target="_blank">
<img src="https://img.shields.io/badge/vite-%3E2.0.0-yellow" alt="vite">
</a>
<a href="https://github.com/zhontai/admin.ui.plus/blob/master/LICENSE" target="_blank">
<img src="https://img.shields.io/badge/license-MIT-success" alt="license">
</a>
</p>
<p>&nbsp;</p>
</div>
#### 🌈 介绍
基于 vue3.x + CompositionAPI setup 语法糖 + typescript + vite + element plus + vue-router-next + pinia 技术内置支持一键生成微服务接口适配手机、平板、pc 的后台权限管理框架,希望减少工作量,帮助大家实现快速开发。
#### ⛱️ 线上预览
- vue3.x 版本预览admin.ui.plus<a href="https://admin.zhontai.net/login" target="_blank">https://admin.zhontai.net</a>
#### 💒 代码仓库
- vue3.x 版本 <a href="https://github.com/zhontai/Admin.Core/tree/master/ui/zhontai.ui.admin.vue3" target="_blank">zhontai.ui.admin.vue3</a>
#### 🚧 安装 pnpm
- 复制代码(桌面 cmd 运行) `npm install -g pnpm --registry=https://registry.npmmirror.com`
#### 🏭 环境支持
| Edge | Firefox | Chrome | Safari |
| --------- | ------------ | ----------- | ----------- |
| Edge ≥ 88 | Firefox ≥ 78 | Chrome ≥ 87 | Safari ≥ 13 |
> 由于 Vue3 不再支持 IE11故而 ElementPlus 也不支持 IE11 及之前版本。
#### ⚡ 使用说明
建议使用 pnpm因为 yarn 有时会报错。<a href="http://nodejs.cn" target="_blank">node 版本 > 14.18+/16+</a>
> Vite 不再支持 Node 12 / 13 / 15因为上述版本已经进入了 EOL 阶段。现在你必须使用 Node 14.18+ / 16+ 版本。
```bash
# 克隆项目
git clone https://github.com/zhontai/Admin.Core.git
# 进入项目
cd ui\zhontai.ui.admin.vue3
# 安装依赖
pnpm install
# 运行项目
pnpm run dev
# 打包发布
pnpm run build
```
#### 📚 开发文档
- 查看开发文档:<a href="https://www.zhontai.net" target="_blank">https://zhontai.net</a>
#### 💯 学习交流加 QQ 群
> 中台 admin 开发群2000 人群)。
- QQ 群号:<a target="_blank" href="//qm.qq.com/cgi-bin/qm/qr?k=zjVRMcdD_oxPokw7zG1kv8Ud4kPJUZAk&jump_from=webapi&authKey=smP6idH1QaIqi6NSiBck8nZuY1BokW4fpi/IGcRi6w/Xt/HTyqfqrC5WpVRsSi22">1058693879</a>
<a target="_blank" href="//qm.qq.com/cgi-bin/qm/qr?k=zjVRMcdD_oxPokw7zG1kv8Ud4kPJUZAk&jump_from=webapi&authKey=smP6idH1QaIqi6NSiBck8nZuY1BokW4fpi/IGcRi6w/Xt/HTyqfqrC5WpVRsSi22">
<img src="https://zhontai.net/images/qq-group-1058693879.png" width="220" height="220" alt="NPP 开发群" title="NPP 开发群"/>
</a>
#### 💕 特别感谢
- <a href="https://github.com/lyt-Top/vue-next-admin" target="_blank">vue-next-admin</a>
#### ❤️ 鸣谢列表
- <a href="https://github.com/vuejs/vue" target="_blank">vue</a>
- <a href="https://github.com/vuejs/vue-next" target="_blank">vue-next</a>
- <a href="https://github.com/ElemeFE/element" target="_blank">element-ui</a>
- <a href="https://github.com/element-plus/element-plus" target="_blank">element-plus</a>
- <a href="https://github.com/vuejs/vue-router-next" target="_blank">vue-router-next</a>
- <a href="https://github.com/vuejs/pinia" target="_blank">pinia</a>
- <a href="https://github.com/apache/echarts" target="_blank">echarts</a>
- <a href="https://github.com/axios/axios" target="_blank">axios</a>
- <a href="https://github.com/zenorocha/clipboard.js" target="_blank">clipboard</a>
- <a href="https://github.com/inorganik/countUp.js" target="_blank">countUp</a>
- <a href="https://github.com/developit/mitt" target="_blank">mitt</a>
- <a href="https://github.com/rstacruz/nprogress" target="_blank">nprogress</a>
- <a href="https://github.com/sindresorhus/screenfull.js" target="_blank">screenfull</a>
- <a href="https://github.com/SortableJS/Sortable" target="_blank">sortablejs</a>
- <a href="https://github.com/sass/sass" target="_blank">sass</a>
- <a href="https://github.com/microsoft/TypeScript" target="_blank">typescript</a>
- <a href="https://github.com/vitejs/vite" target="_blank">vite</a>
- <a href="https://github.com/wangeditor-team/wangEditor" target="_blank">wangeditor</a>
- <a href="https://github.com/fengyuanchen/cropperjs" target="_blank">cropperjs</a>
- <a href="https://github.com/davidshimjs/qrcodejs" target="_blank">qrcodejs</a>
- <a href="https://github.com/crabbly/Print.js" target="_blank">print-js</a>
- <a href="https://github.com/jbaysolutions/vue-grid-layout" target="_blank">vue-grid-layout</a>
- <a href="https://github.com/antoniandre/splitpanes" target="_blank">splitpanes</a>
- <a href="https://github.com/jsplumb/jsplumb" target="_blank">jsplumb</a>
- <a href="https://github.com/hxj9102/table2excel" target="_blank">js-table2excel</a>
#### 💌 支持作者
如果觉得框架不错,或者已经在使用了,希望你可以去 <a target="_blank" href="https://github.com/zhontai/admin.ui.plus">Github</a> 或者
<a target="_blank" href="https://gitee.com/zhontai/admin.ui.plus">Gitee</a> 帮我点个 ⭐ Star这将是对我极大的鼓励与支持。

12
bin/build.bat Normal file
View File

@ -0,0 +1,12 @@
@echo off
echo.
echo 发布网站生成dist文件
echo.
%~d0
cd %~dp0
cd ..
pnpm run build
pause

12
bin/install.bat Normal file
View File

@ -0,0 +1,12 @@
@echo off
echo.
echo 安装包生成node_modules文件
echo.
%~d0
cd %~dp0
cd ..
pnpm install --registry=https://registry.npmmirror.com
pause

12
bin/run-web.bat Normal file
View File

@ -0,0 +1,12 @@
@echo off
echo.
echo 运行网站
echo.
%~d0
cd %~dp0
cd ..
pnpm run dev
pause

56
gen/gen-api.js Normal file
View File

@ -0,0 +1,56 @@
import axios from 'axios'
import ejs from 'ejs'
import fs from 'node:fs'
import path from 'node:path'
import { generateApi } from 'swagger-typescript-api'
const projectPath = process.cwd()
const apiUrl = 'http://localhost:16010'
const apis = [
{
output: path.resolve(projectPath, './src/api/admin'),
url: `${apiUrl}/doc/admin/swagger/admin/swagger.json`,
enumUrl: `${apiUrl}/api/admin/get-enums`,
},
// {
// output: path.resolve(projectPath, './src/api/app'),
// url: `${apiUrl}/doc/app/swagger/app/swagger.json`,
// // enumUrl: `${apiUrl}/api/app/get-enums`,
// },
]
const genEnums = async (api) => {
console.log(`✨ try to get enums by URL "${api.enumUrl}"`)
console.log(`⭐ start generating your typescript api`)
const res = await axios.get(api.enumUrl).catch((error) => {
console.error(error)
})
if (res?.data?.data?.length > 0) {
ejs.renderFile(path.resolve(projectPath, './gen/templates/enum-contracts.ejs'), res.data, {}, function (err, content) {
fs.writeFile(path.resolve(api.output + '/enum-contracts.ts'), content, (err) => {})
console.log(`✅ api file "enum-contracts.ts" created in ${api.output}\n`)
})
}
}
apis?.forEach(async (api) => {
if (api.enumUrl) {
await genEnums(api)
}
await generateApi({
output: api.output,
templates: path.resolve(projectPath, './gen/templates'),
url: api.url,
httpClientType: 'axios',
modular: true,
cleanOutput: false,
moduleNameIndex: 2, // 0 api, 1 api htt-client data-contracts, 2 apis htt-client data-contracts
moduleNameFirstTag: true, //apis htt-client data-contracts
unwrapResponseData: true,
generateUnionEnums: true,
defaultResponseType: 'AxiosResponse',
}).catch((error) => console.error(error))
})

12
gen/gen-templates.js Normal file
View File

@ -0,0 +1,12 @@
import path from 'node:path'
import { generateTemplates } from 'swagger-typescript-api'
//导出swagger-typescript-api内置模板
generateTemplates({
cleanOutput: false,
output: path.resolve(process.cwd(), './gen/templates'),
httpClientType: 'axios',
modular: true,
silent: false,
rewrite: false,
})

28
gen/templates/api.ejs Normal file
View File

@ -0,0 +1,28 @@
<%
const { utils, route, config, modelTypes } = it;
const { _, pascalCase, require } = utils;
const apiClassName = pascalCase(route.moduleName);
const routes = route.routes;
const dataContracts = _.map(modelTypes, "name");
%>
<% if (config.httpClientType === config.constants.HTTP_CLIENT.AXIOS) { %> import { AxiosRequestConfig, AxiosResponse } from "axios"; <% } %>
import { HttpClient, RequestParams, ContentType, HttpResponse } from "./<%~ config.fileNames.httpClient %>";
<% if (dataContracts.length) { %>
import { <%~ dataContracts.join(", ") %> } from "./<%~ config.fileNames.dataContracts %>"
<% } %>
export class <%= apiClassName %>Api<SecurityDataType = unknown><% if (!config.singleHttpClient) { %> extends HttpClient<SecurityDataType> <% } %> {
<% if(config.singleHttpClient) { %>
http: HttpClient<SecurityDataType>;
constructor (http: HttpClient<SecurityDataType>) {
this.http = http;
}
<% } %>
<% routes.forEach((route) => { %>
<%~ includeFile('./procedure-call.ejs', { ...it, route }) %>
<% }) %>
}

View File

@ -0,0 +1,37 @@
<%
const { data, utils } = it;
const { formatDescription, require, _ } = utils;
const stringify = (value) => _.isObject(value) ? JSON.stringify(value) : _.isString(value) ? `"${value}"` : value
const jsDocLines = _.compact([
data.title,
data.description && formatDescription(data.description),
!_.isUndefined(data.deprecated) && data.deprecated && '@deprecated',
!_.isUndefined(data.format) && `@format ${data.format}`,
!_.isUndefined(data.minimum) && `@min ${data.minimum}`,
!_.isUndefined(data.multipleOf) && `@multipleOf ${data.multipleOf}`,
!_.isUndefined(data.exclusiveMinimum) && `@exclusiveMin ${data.exclusiveMinimum}`,
!_.isUndefined(data.maximum) && `@max ${data.maximum}`,
!_.isUndefined(data.minLength) && `@minLength ${data.minLength}`,
!_.isUndefined(data.maxLength) && `@maxLength ${data.maxLength}`,
!_.isUndefined(data.exclusiveMaximum) && `@exclusiveMax ${data.exclusiveMaximum}`,
!_.isUndefined(data.maxItems) && `@maxItems ${data.maxItems}`,
!_.isUndefined(data.minItems) && `@minItems ${data.minItems}`,
!_.isUndefined(data.uniqueItems) && `@uniqueItems ${data.uniqueItems}`,
!_.isUndefined(data.default) && `@default ${stringify(data.default)}`,
!_.isUndefined(data.pattern) && `@pattern ${data.pattern}`,
!_.isUndefined(data.example) && `@example ${stringify(data.example)}`
]).join('\n').split('\n');
%>
<% if (jsDocLines.every(_.isEmpty)) { %>
<% } else if (jsDocLines.length === 1) { %>
/** <%~ jsDocLines[0] %> */
<% } else if (jsDocLines.length) { %>
/**
<% for (jsDocLine of jsDocLines) { %>
* <%~ jsDocLine %>
<% } %>
*/
<% } %>

View File

@ -0,0 +1,28 @@
<%
const { modelTypes, utils, config } = it;
const { formatDescription, require, _, Ts } = utils;
const dataContractTemplates = {
enum: (contract) => {
return `enum ${contract.name} {\r\n${contract.content} \r\n }`;
},
interface: (contract) => {
return `interface ${contract.name} {\r\n${contract.content}}`;
},
type: (contract) => {
return `type ${contract.name} = ${contract.content}`;
},
}
%>
<% if (config.internalTemplateOptions.addUtilRequiredKeysType) { %>
type <%~ config.Ts.CodeGenKeyword.UtilRequiredKeys %><T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>
<% } %>
<% modelTypes.forEach((contract) => { %>
<%~ includeFile('./data-contract-jsdoc.ejs', { ...it, data: { ...contract, ...contract.typeData } }) %>
export <%~ (dataContractTemplates[contract.typeIdentifier] || dataContractTemplates.type)(contract) %>
<% }) %>

View File

@ -0,0 +1,6 @@
<% data.forEach((enumType) => { %>/** <%= enumType.desc %> */
export const <%= enumType.name %> = {<% enumType.options.forEach((option) => { %>
<%= option.name %>: { name: '<%= option.name %>', value: <%= option.value %>, desc: '<%= option.desc %>' },<% }) %>
}
<% }) %>

View File

@ -0,0 +1,12 @@
<%
const { contract, utils, config } = it;
const { formatDescription, require, _ } = utils;
const { name, $content } = contract;
%>
<% if (config.generateUnionEnums) { %>
export type <%~ name %> = <%~ _.map($content, ({ value }) => value).join(" | ") %>
<% } else { %>
export enum <%~ name %> {
<%~ _.map($content, ({ key, value }) => `${key} = ${value}`).join(",\n") %>
}
<% } %>

View File

@ -0,0 +1,465 @@
<%
const { apiConfig, generateResponses, config } = it;
%>
import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, HeadersDefaults, ResponseType, RawAxiosRequestHeaders } from 'axios'
import { ElLoading, ElMessage, LoadingOptions } from 'element-plus'
import { useUserInfo } from '/@/stores/userInfo'
export type QueryParamsType = Record<string | number, any>;
export interface FullRequestParams extends Omit<AxiosRequestConfig, "data" | "params" | "url" | "responseType"> {
/** set parameter to `true` for call `securityWorker` for this request */
secure?: boolean;
/** request path */
path: string;
/** content type of request body */
type?: ContentType;
/** query params */
query?: QueryParamsType;
/** format of response (i.e. response.json() -> format: "json") */
format?: ResponseType;
/** request body */
body?: unknown;
/** 显示错误消息 */
showErrorMessage?: boolean
/** 显示成功消息 */
showSuccessMessage?: boolean
/** 登录访问 */
login?: boolean
/** 加载中 */
loading?: boolean
/** 加载中选项 */
loadingOptions?: LoadingOptions
/** 取消重复请求 */
cancelRepeatRequest?: boolean
/** 返回整个响应对象 */
returnResponse?: boolean
}
export type RequestParams = Omit<FullRequestParams, "body" | "method" | "query" | "path">;
export interface ApiConfig<SecurityDataType = unknown> extends Omit<AxiosRequestConfig, "data" | "cancelToken"> {
securityWorker?: (securityData: SecurityDataType | null) => Promise<AxiosRequestConfig | void> | AxiosRequestConfig | void;
secure?: boolean;
format?: ResponseType;
}
export enum ContentType {
Json = "application/json",
FormData = "multipart/form-data",
UrlEncoded = "application/x-www-form-urlencoded",
Text = "text/plain",
}
export interface LoadingInstance {
target: any
count: number
}
const pendingMap = new Map()
const loadingInstance: LoadingInstance = {
target: null,
count: 0,
}
export class HttpClient<SecurityDataType = unknown> {
public instance: AxiosInstance;
private securityData: SecurityDataType | null = null;
private securityWorker?: ApiConfig<SecurityDataType>["securityWorker"];
private secure?: boolean;
private format?: ResponseType;
constructor({ securityWorker, secure, format, ...axiosConfig }: ApiConfig<SecurityDataType> = {}) {
this.instance = axios.create({ ...axiosConfig, timeout: 60000, baseURL: axiosConfig.baseURL || import.meta.env.VITE_API_URL })
this.secure = secure;
this.format = format;
this.securityWorker = securityWorker;
}
public setSecurityData = (data: SecurityDataType | null) => {
this.securityData = data
}
protected mergeRequestParams(params1: AxiosRequestConfig, params2?: AxiosRequestConfig): AxiosRequestConfig {
const method = params1.method || (params2 && params2.method)
return {
...this.instance.defaults,
...params1,
...(params2 || {}),
headers: {
...((method && this.instance.defaults.headers[method.toLowerCase() as keyof HeadersDefaults]) || {}),
...(params1.headers || {}),
...((params2 && params2.headers) || {}),
} as RawAxiosRequestHeaders,
};
}
protected stringifyFormItem(formItem: unknown) {
if (typeof formItem === "object" && formItem !== null) {
return JSON.stringify(formItem);
} else {
return `${formItem}`;
}
}
protected createFormData(input: Record<string, unknown>): FormData {
return Object.keys(input || {}).reduce((formData, key) => {
const property = input[key];
const propertyContent: any[] = (property instanceof Array) ? property : [property]
for (const formItem of propertyContent) {
const isFileType = formItem instanceof Blob || formItem instanceof File;
formData.append(
key,
isFileType ? formItem : this.stringifyFormItem(formItem)
);
}
return formData;
}, new FormData());
}
/**
* 错误处理
* @param {*} error
*/
protected errorHandle(error: any) {
if (!error) {
return
}
if (axios.isCancel(error)) return console.error('请求重复已被自动取消:' + error.message)
let message = ''
if (error.response) {
switch (error.response.status) {
case 302:
message = '接口重定向'
break
case 400:
message = '参数不正确'
break
case 401:
message = '您还没有登录'
break
case 403:
message = '您没有权限操作'
break
case 404:
message = '请求地址出错:' + error.response.config.url
break
case 408:
message = '请求超时'
break
case 409:
message = '系统已存在相同数据'
break
case 429:
message = '访问过于频繁'
break
case 500:
message = '服务器内部错误'
break
case 501:
message = '服务未实现'
break
case 502:
message = '网关错误'
break
case 503:
message = '服务不可用'
break
case 504:
message = '服务暂时无法访问,请稍后再试'
break
case 505:
message = 'HTTP版本不受支持'
break
default:
message = '异常问题,请联系网站管理员'
break
}
}
if (error.message.includes('timeout')) message = '请求超时'
if (error.message.includes('Network')) message = window.navigator.onLine ? '服务端异常' : '您已断网'
if (message) {
ElMessage.error({ message, grouping: true })
}
}
/**
* 刷新token接口
* @param string refreshToken
*/
protected async refreshApi(refreshToken: string) {
return this.request<AxiosResponse, any>({
path: `/api/admin/auth/refresh`,
method: 'GET',
secure: true,
format: 'json',
login: false,
query: {
token: refreshToken,
},
})
}
/**
* 刷新token
* @param {*} config
*/
protected async refreshToken(config: any) {
const storesUseUserInfo = useUserInfo()
const token = storesUseUserInfo.getToken()
if (!token) {
storesUseUserInfo.clear()
return Promise.reject(config)
}
if (window.tokenRefreshing) {
window.requests = window.requests ? window.requests : []
return new Promise((resolve) => {
window.requests.push(() => {
resolve(this.instance(config))
})
})
}
window.tokenRefreshing = true
return this.refreshApi(token)
.then((res) => {
if (res?.success) {
storesUseUserInfo.setTokenInfo(res.data)
if (window.requests?.length > 0) {
window.requests.forEach((apiRequest) => apiRequest())
window.requests = []
}
return this.instance(config)
} else {
storesUseUserInfo.clear()
return Promise.reject(res)
}
})
.catch((error) => {
storesUseUserInfo.clear()
return Promise.reject(error)
})
.finally(() => {
window.tokenRefreshing = false
})
}
/**
* 储存每个请求的唯一cancel回调, 以此为标识
*/
protected addPending(config: AxiosRequestConfig) {
const pendingKey = this.getPendingKey(config)
config.cancelToken =
config.cancelToken ||
new axios.CancelToken((cancel) => {
if (!pendingMap.has(pendingKey)) {
pendingMap.set(pendingKey, cancel)
}
})
}
/**
* 删除重复的请求
*/
protected removePending(config: AxiosRequestConfig) {
const pendingKey = this.getPendingKey(config)
if (pendingMap.has(pendingKey)) {
const cancelToken = pendingMap.get(pendingKey)
cancelToken(pendingKey)
pendingMap.delete(pendingKey)
}
}
/**
* 生成每个请求的唯一key
*/
protected getPendingKey(config: AxiosRequestConfig) {
let { data, headers } = config
headers = headers as RawAxiosRequestHeaders
const { url, method, params } = config
if (typeof data === 'string') data = JSON.parse(data)
return [url, method, headers && headers.Authorization ? headers.Authorization : '', JSON.stringify(params), JSON.stringify(data)].join('&')
}
/**
* 关闭Loading层实例
*/
protected closeLoading(loading: boolean = false) {
if (loading && loadingInstance.count > 0) loadingInstance.count--
if (loadingInstance.count === 0) {
loadingInstance.target.close()
loadingInstance.target = null
}
}
public request = async <T = any, _E = any>({
secure,
path,
type,
query,
format,
body,
showErrorMessage = true,
showSuccessMessage = false,
login = true,
loading = false,
loadingOptions = {
background: 'rgba(0,0,0,0.5)',
},
cancelRepeatRequest = false,
returnResponse = false,
...params
<% if (config.unwrapResponseData) { %>
}: FullRequestParams): Promise<T> => {
<% } else { %>
}: FullRequestParams): Promise<AxiosResponse<T>> => {
<% } %>
const secureParams = ((typeof secure === 'boolean' ? secure : this.secure) && this.securityWorker && (await this.securityWorker(this.securityData))) || {};
const requestParams = this.mergeRequestParams(params, secureParams);
const responseFormat = (format || this.format) || undefined;
if (type === ContentType.FormData && body && body !== null && typeof body === "object") {
body = this.createFormData(body as Record<string, unknown>);
}
if (type === ContentType.Text && body && body !== null && typeof body !== "string") {
body = JSON.stringify(body);
}
// 请求拦截
this.instance.interceptors.request.use(
async (config) => {
this.removePending(config)
cancelRepeatRequest && this.addPending(config)
if (loading) {
loadingInstance.count++
if (loadingInstance.count === 1) {
loadingInstance.target = ElLoading.service(loadingOptions)
}
}
const storesUseUserInfo = useUserInfo()
const tokenInfo = storesUseUserInfo.getTokenInfo()
if (tokenInfo && tokenInfo.accessToken) {
// 判断 accessToken 是否快失效
const now = new Date().getTime()
const expiresAt = new Date(tokenInfo.accessTokenExpiresAt).getTime()
const maxThreshold = tokenInfo.accessTokenLifeTime * 0.5
// 确保阈值不超过 5 分钟且不超过 accessTokenLifeTime 的一半
const threshold = Math.min(5 * 60 * 1000, maxThreshold)
if (expiresAt - now < threshold) {
//加锁
if (!window.tokenRefreshing) {
window.tokenRefreshing = true
try {
const res = await this.refreshApi(tokenInfo.accessToken)
if (res?.success) {
storesUseUserInfo.setTokenInfo(res.data)
//处理等待队列中的请求
if (window.requests?.length > 0) {
window.requests.forEach((apiRequest) => apiRequest())
window.requests = []
}
} else {
storesUseUserInfo.clear()
return Promise.reject(res)
}
} catch (error) {
// 清空等待队列
window.requests = []
return Promise.reject(error)
} finally {
// 解锁
window.tokenRefreshing = false
}
} else {
// 如果正在刷新,则将当前请求加入等待队列
if (config.url !== '/api/admin/auth/refresh') {
window.requests = window.requests ? window.requests : []
return new Promise((resolve) => {
window.requests.push(() => {
resolve(this.instance(config))
})
})
}
}
}
}
const accessToken = storesUseUserInfo.getToken()
config.headers!['Authorization'] = `Bearer ${accessToken}`
return config
},
(error) => {
return Promise.reject(error)
}
)
// 响应拦截
this.instance.interceptors.response.use(
(res) => {
this.removePending(res.config)
loading && this.closeLoading(loading)
if (res.config?.responseType == 'blob') {
return res
}
const data = res.data
if (data.success) {
if (showSuccessMessage) {
ElMessage.success({ message: data.msg ? data.msg : '操作成功', grouping: true })
}
} else {
if (showErrorMessage) {
ElMessage.error({ message: data.msg ? data.msg : '操作失败', grouping: true })
}
// return Promise.reject(res)
}
return res
},
async (error) => {
error.config && this.removePending(error.config)
loading && this.closeLoading(loading)
//刷新token
if (login && error?.response?.status === 401) {
return this.refreshToken(error.config)
}
//错误处理
if (showErrorMessage) {
this.errorHandle(error)
}
return Promise.reject(error)
}
)
return this.instance.request({
...requestParams,
headers: {
...(requestParams.headers || {}),
...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}),
} as RawAxiosRequestHeaders,
params: query,
responseType: responseFormat,
data: body,
url: path,
<% if (config.unwrapResponseData) { %>
}).then(response => returnResponse ? response : response.data);
<% } else { %>
});
<% } %>
};
}

View File

@ -0,0 +1,10 @@
<%
const { contract, utils } = it;
const { formatDescription, require, _ } = utils;
%>
export interface <%~ contract.name %> {
<% _.forEach(contract.$content, (field) => { %>
<%~ includeFile('./object-field-jsdoc.ejs', { ...it, field }) %>
<%~ field.name %><%~ field.isRequired ? '' : '?' %>: <%~ field.value %><%~ field.isNullable ? ' | null' : ''%>;
<% }) %>
}

View File

@ -0,0 +1,28 @@
<%
const { field, utils } = it;
const { formatDescription, require, _ } = utils;
const comments = _.uniq(
_.compact([
field.title,
field.description,
field.deprecated && ` * @deprecated`,
!_.isUndefined(field.format) && `@format ${field.format}`,
!_.isUndefined(field.minimum) && `@min ${field.minimum}`,
!_.isUndefined(field.maximum) && `@max ${field.maximum}`,
!_.isUndefined(field.pattern) && `@pattern ${field.pattern}`,
!_.isUndefined(field.example) &&
`@example ${_.isObject(field.example) ? JSON.stringify(field.example) : field.example}`,
]).reduce((acc, comment) => [...acc, ...comment.split(/\n/g)], []),
);
%>
<% if (comments.length === 1) { %>
/** <%~ comments[0] %> */
<% } else if (comments.length) { %>
/**
<% comments.forEach(comment => { %>
* <%~ comment %>
<% }) %>
*/
<% } %>

View File

@ -0,0 +1,100 @@
<%
const { utils, route, config } = it;
const { requestBodyInfo, responseBodyInfo, specificArgNameResolver } = route;
const { _, getInlineParseContent, getParseContent, parseSchema, getComponentByRef, require } = utils;
const { parameters, path, method, payload, query, formData, security, requestParams } = route.request;
const { type, errorType, contentTypes } = route.response;
const { HTTP_CLIENT, RESERVED_REQ_PARAMS_ARG_NAMES } = config.constants;
const routeDocs = includeFile("./route-docs", { config, route, utils });
const queryName = (query && query.name) || "query";
const pathParams = _.values(parameters);
const pathParamsNames = _.map(pathParams, "name");
const isFetchTemplate = config.httpClientType === HTTP_CLIENT.FETCH;
const requestConfigParam = {
name: specificArgNameResolver.resolve(RESERVED_REQ_PARAMS_ARG_NAMES),
optional: true,
type: "RequestParams",
defaultValue: "{}",
}
const argToTmpl = ({ name, optional, type, defaultValue }) => `${name}${!defaultValue && optional ? '?' : ''}: ${type}${defaultValue ? ` = ${defaultValue}` : ''}`;
const rawWrapperArgs = config.extractRequestParams ?
_.compact([
requestParams && {
name: pathParams.length ? `{ ${_.join(pathParamsNames, ", ")}, ...${queryName} }` : queryName,
optional: false,
type: getInlineParseContent(requestParams),
},
...(!requestParams ? pathParams : []),
payload,
requestConfigParam,
]) :
_.compact([
...pathParams,
query,
payload,
requestConfigParam,
])
const wrapperArgs = _
// Sort by optionality
.sortBy(rawWrapperArgs, [o => o.optional])
.map(argToTmpl)
.join(', ')
// RequestParams["type"]
const requestContentKind = {
"JSON": "ContentType.Json",
"URL_ENCODED": "ContentType.UrlEncoded",
"FORM_DATA": "ContentType.FormData",
"TEXT": "ContentType.Text",
}
// RequestParams["format"]
const responseContentKind = {
"JSON": '"json"',
"IMAGE": '"blob"',
"FORM_DATA": isFetchTemplate ? '"formData"' : '"document"'
}
const bodyTmpl = _.get(payload, "name") || null;
const queryTmpl = (query != null && queryName) || null;
const bodyContentKindTmpl = requestContentKind[requestBodyInfo.contentKind] || null;
const responseFormatTmpl = responseContentKind[responseBodyInfo.success && responseBodyInfo.success.schema && responseBodyInfo.success.schema.contentKind] || null;
const securityTmpl = security ? 'true' : null;
const describeReturnType = () => {
if (!config.toJS) return "";
switch(config.httpClientType) {
case HTTP_CLIENT.AXIOS: {
return `Promise<AxiosResponse<${type}>>`
}
default: {
return `Promise<HttpResponse<${type}, ${errorType}>`
}
}
}
%>
/**
<%~ routeDocs.description %>
*<% /* Here you can add some other JSDoc tags */ %>
<%~ routeDocs.lines %>
*/
<%~ route.routeName.usage %> = (<%~ wrapperArgs %>)<%~ config.toJS ? `: ${describeReturnType()}` : "" %> =>
<%~ config.singleHttpClient ? 'this.http.request' : 'this.request' %><<%~ type %>, <%~ errorType %>>({
path: `<%~ path %>`,
method: '<%~ _.upperCase(method) %>',
<%~ queryTmpl ? `query: ${queryTmpl},` : '' %>
<%~ bodyTmpl ? `body: ${bodyTmpl},` : '' %>
<%~ securityTmpl ? `secure: ${securityTmpl},` : '' %>
<%~ bodyContentKindTmpl ? `type: ${bodyContentKindTmpl},` : '' %>
<%~ responseFormatTmpl ? `format: ${responseFormatTmpl},` : '' %>
...<%~ _.get(requestConfigParam, "name") %>,
})

View File

@ -0,0 +1,30 @@
<%
const { config, route, utils } = it;
const { _, formatDescription, fmtToJSDocLine, pascalCase, require } = utils;
const { raw, request, routeName } = route;
const jsDocDescription = raw.description ?
` * @description ${formatDescription(raw.description, true)}` :
fmtToJSDocLine('No description', { eol: false });
const jsDocLines = _.compact([
_.size(raw.tags) && ` * @tags ${raw.tags.join(", ")}`,
` * @name ${pascalCase(routeName.usage)}`,
raw.summary && ` * @summary ${raw.summary}`,
` * @request ${_.upperCase(request.method)}:${raw.route}`,
raw.deprecated && ` * @deprecated`,
routeName.duplicate && ` * @originalName ${routeName.original}`,
routeName.duplicate && ` * @duplicate`,
request.security && ` * @secure`,
...(config.generateResponses && raw.responsesTypes.length
? raw.responsesTypes.map(
({ type, status, description, isSuccess }) =>
` * @response \`${status}\` \`${_.replace(_.replace(type, /\/\*/g, "\\*"), /\*\//g, "*\\")}\` ${description}`,
)
: []),
]).map(str => str.trimEnd()).join("\n");
return {
description: jsDocDescription,
lines: jsDocLines,
}
%>

View File

@ -0,0 +1,27 @@
<%
const { routeInfo, utils } = it;
const {
operationId,
method,
route,
moduleName,
responsesTypes,
description,
tags,
summary,
pathArgs,
} = routeInfo;
const { _, fmtToJSDocLine, require } = utils;
const createCustomOperationId = (method, route, moduleName) => {
const hasPathInserts = /\{(\w){1,}\}/g.test(route);
const splitedRouteBySlash = _.compact(_.replace(route, /\{(\w){1,}\}/g, "").split("/"));
const routeParts = (splitedRouteBySlash.length > 1
? [splitedRouteBySlash[splitedRouteBySlash.length-1]]
: splitedRouteBySlash
).join("_");
return _.camelCase(_.lowerCase(routeParts));
};
return createCustomOperationId(method, route, moduleName);
%>

View File

@ -0,0 +1,22 @@
<%
const { route, utils, config } = it;
const { _, pascalCase, require } = utils;
const { query, payload, pathParams, headers } = route.request;
const routeDocs = includeFile("./route-docs", { config, route, utils });
const routeNamespace = pascalCase(route.routeName.usage);
%>
/**
<%~ routeDocs.description %>
<%~ routeDocs.lines %>
*/
export namespace <%~ routeNamespace %> {
export type RequestParams = <%~ (pathParams && pathParams.type) || '{}' %>;
export type RequestQuery = <%~ (query && query.type) || '{}' %>;
export type RequestBody = <%~ (payload && payload.type) || 'never' %>;
export type RequestHeaders = <%~ (headers && headers.type) || '{}' %>;
export type ResponseBody = <%~ route.response.type %>;
}

View File

@ -0,0 +1,18 @@
<%
const { utils, config, route, modelTypes } = it;
const { _, pascalCase } = utils;
const { routes, moduleName } = route;
const dataContracts = config.modular ? _.map(modelTypes, "name") : [];
%>
<% if (dataContracts.length) { %>
import { <%~ dataContracts.join(", ") %> } from "./<%~ config.fileNames.dataContracts %>"
<% } %>
export namespace <%~ pascalCase(moduleName) %> {
<% _.forEach(routes, (route) => { %>
<%~ includeFile('./route-type.ejs', { ...it, route }) %>
<% }) %>
}

View File

@ -0,0 +1,15 @@
<%
const { contract, utils } = it;
const { formatDescription, require, _ } = utils;
%>
<% if (contract.$content.length) { %>
export type <%~ contract.name %> = {
<% _.forEach(contract.$content, (field) => { %>
<%~ includeFile('./object-field-jsdoc.ejs', { ...it, field }) %>
<%~ field.field %>;
<% }) %>
}<%~ utils.isNeedToAddNull(contract) ? ' | null' : ''%>
<% } else { %>
export type <%~ contract.name %> = Record<string, any>;
<% } %>

27
index.html Normal file
View File

@ -0,0 +1,27 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="keywords" content="NPP" />
<meta name="description" content="NPP" />
<link rel="icon" href="/favicon.ico" />
<title>NPP</title>
<link rel="stylesheet" type="text/css" media="print" href="/print-lock.css" />
</head>
<body>
<div id="app"></div>
<!-- <script type="text/javascript">
var _hmt = _hmt || []
;(function () {
var hm = document.createElement('script')
hm.src = ''
var s = document.getElementsByTagName('script')[0]
s.parentNode.insertBefore(hm, s)
})()
</script> -->
<script type="module" src="/src/main.ts"></script>
<!-- <script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=wsijQt8sLXrCW71YesmispvYHitfG9gv&s=1"></script> -->
</body>
</html>

98
package.json Normal file
View File

@ -0,0 +1,98 @@
{
"name": "zhontai.ui.admin.vue3",
"version": "9.1.1",
"description": "vue3 vite admin plus",
"author": "",
"license": "MIT",
"type": "module",
"scripts": {
"dev": "vite --force",
"build": "vite build",
"lint-fix": "eslint --fix --ext .js --ext .jsx --ext .vue src/",
"format": "npx prettier --write .",
"install:pkg": "pnpm install",
"gen:api": "node ./gen/gen-api"
},
"dependencies": {
"@azure/msal-browser": "^4.12.0",
"@element-plus/icons-vue": "^2.3.1",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "^1.9.0",
"countup.js": "^2.8.2",
"cropperjs": "^2.0.0",
"dayjs": "^1.11.13",
"echarts": "^5.6.0",
"echarts-gl": "^2.0.9",
"echarts-wordcloud": "^2.1.0",
"element-plus": "2.9.11",
"js-cookie": "^3.0.5",
"js-table2excel": "^1.1.2",
"jsoneditor": "^10.2.0",
"jsplumb": "^2.15.6",
"lodash-es": "^4.17.21",
"mitt": "^3.0.1",
"nprogress": "^0.2.0",
"pinia": "^3.0.2",
"print-js": "^1.6.0",
"qrcodejs2-fixes": "^0.0.2",
"qs": "^6.14.0",
"screenfull": "^6.0.2",
"sm-crypto-v2": "^1.11.0",
"sortablejs": "^1.15.6",
"splitpanes": "^4.0.4",
"vue": "3.5.14",
"vue-clipboard3": "^2.0.0",
"vue-demi": "^0.14.10",
"vue-grid-layout": "^3.0.0-beta1",
"vue-i18n": "^11.1.3",
"vue-plugin-hiprint": "^0.0.60",
"vue-router": "^4.5.1",
"vue3-tree-org": "^4.2.2"
},
"devDependencies": {
"@types/lodash-es": "^4.17.12",
"@types/node": "^22.15.21",
"@types/nprogress": "^0.2.3",
"@types/sortablejs": "^1.15.8",
"@typescript-eslint/eslint-plugin": "^8.32.1",
"@typescript-eslint/parser": "^8.32.1",
"@vitejs/plugin-vue": "^5.2.4",
"@vue/compiler-sfc": "^3.5.14",
"dotenv": "16.5.0",
"ejs": "^3.1.10",
"eslint": "^9.27.0",
"eslint-plugin-vue": "^10.1.0",
"prettier": "^3.5.3",
"sass": "^1.89.0",
"swagger-typescript-api": "13.0.28",
"typescript": "^5.8.3",
"vite": "^6.3.5",
"vite-plugin-compression": "0.5.1",
"vite-plugin-svg-icons": "^2.0.1",
"vite-plugin-vue-setup-extend": "^0.4.0",
"vue-eslint-parser": "^10.1.3"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
],
"bugs": {
"url": "https://github.com/zhontai/admin.ui.plus/issues"
},
"engines": {
"node": ">=16.0.0",
"npm": ">= 7.0.0"
},
"keywords": [
"vue3",
"element-plus",
"zhontai",
"admin"
],
"repository": {
"type": "git",
"url": "https://github.com/zhontai/admin.ui.plus/git"
}
}

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

356
public/print-lock.css Normal file
View File

@ -0,0 +1,356 @@
@media print {
body {
margin: 0px;
padding: 0px;
}
}
@page {
margin: 0;
}
.hiprint-printPaper * {
box-sizing: border-box;
-moz-box-sizing: border-box; /* Firefox */
-webkit-box-sizing: border-box; /* Safari */
}
.hiprint-printPaper *:focus {
outline: -webkit-focus-ring-color auto 0px;
}
.hiprint-printPaper {
position: relative;
padding: 0 0 0 0;
page-break-after: always;
-webkit-user-select: none; /* Chrome/Safari/Opera */
-moz-user-select: none; /* Firefox */
user-select: none;
overflow-x: hidden;
overflow: hidden;
}
.hiprint-printPaper .hiprint-printPaper-content {
position: relative;
}
/* 火狐浏览器打印 第一页过后 重叠问题 */
@-moz-document url-prefix() {
.hiprint-printPaper .hiprint-printPaper-content {
position: relative;
margin-top: 20px;
top: -20px;
}
}
.hiprint-printPaper.design {
overflow: visible;
}
.hiprint-printTemplate .hiprint-printPanel {
page-break-after: always;
}
.hiprint-printPaper,
hiprint-printPanel {
box-sizing: border-box;
border: 0px;
}
.hiprint-printPanel .hiprint-printPaper:last-child {
page-break-after: avoid;
}
.hiprint-printTemplate .hiprint-printPanel:last-child {
page-break-after: avoid;
}
.hiprint-printPaper .hideheaderLinetarget {
border-top: 0px dashed rgb(201, 190, 190) !important;
}
.hiprint-printPaper .hidefooterLinetarget {
border-top: 0px dashed rgb(201, 190, 190) !important;
}
.hiprint-printPaper.design {
border: 1px dashed rgba(170, 170, 170, 0.7);
}
.design .hiprint-printElement-table-content,
.design .hiprint-printElement-longText-content {
overflow: hidden;
box-sizing: border-box;
}
.design .resize-panel {
box-sizing: border-box;
border: 1px dotted;
}
.hiprint-printElement-text {
background-color: transparent;
background-repeat: repeat;
padding: 0 0 0 0;
border: 0.75pt none rgb(0, 0, 0);
direction: ltr;
font-family: 'SimSun';
font-size: 9pt;
font-style: normal;
font-weight: normal;
padding-bottom: 0pt;
padding-left: 0pt;
padding-right: 0pt;
padding-top: 0pt;
text-align: left;
text-decoration: none;
line-height: 9.75pt;
box-sizing: border-box;
word-wrap: break-word;
word-break: break-all;
}
.design .hiprint-printElement-text-content {
border: 1px dashed rgb(206, 188, 188);
box-sizing: border-box;
}
.hiprint-printElement-longText {
background-color: transparent;
background-repeat: repeat;
border: 0.75pt none rgb(0, 0, 0);
direction: ltr;
font-family: 'SimSun';
font-size: 9pt;
font-style: normal;
font-weight: normal;
padding-bottom: 0pt;
padding-left: 0pt;
padding-right: 0pt;
padding-top: 0pt;
text-align: left;
text-decoration: none;
line-height: 9.75pt;
box-sizing: border-box;
word-wrap: break-word;
word-break: break-all;
/*white-space: pre-wrap*/
}
.hiprint-printElement-table {
background-color: transparent;
background-repeat: repeat;
color: rgb(0, 0, 0);
border-color: rgb(0, 0, 0);
border-style: none;
direction: ltr;
font-family: 'SimSun';
font-size: 9pt;
font-style: normal;
font-weight: normal;
padding-bottom: 0pt;
padding-left: 0pt;
padding-right: 0pt;
padding-top: 0pt;
text-align: left;
text-decoration: none;
padding: 0 0 0 0;
box-sizing: border-box;
line-height: 9.75pt;
}
.hiprint-printElement-table thead {
background: #e8e8e8;
font-weight: 700;
}
table.hiprint-printElement-tableTarget {
width: 100%;
}
.hiprint-printElement-tableTarget,
.hiprint-printElement-tableTarget tr,
.hiprint-printElement-tableTarget td {
border-color: rgb(0, 0, 0);
/*border-style: none;*/
/*border: 1px solid rgb(0, 0, 0);*/
font-weight: normal;
direction: ltr;
padding-bottom: 0pt;
padding-left: 4pt;
padding-right: 4pt;
padding-top: 0pt;
text-decoration: none;
vertical-align: middle;
box-sizing: border-box;
word-wrap: break-word;
word-break: break-all;
/*line-height: 9.75pt;
font-size: 9pt;*/
}
.hiprint-printElement-tableTarget-border-all {
border: 1px solid;
}
.hiprint-printElement-tableTarget-border-none {
border: 0px solid;
}
.hiprint-printElement-tableTarget-border-lr {
border-left: 1px solid;
border-right: 1px solid;
}
.hiprint-printElement-tableTarget-border-left {
border-left: 1px solid;
}
.hiprint-printElement-tableTarget-border-right {
border-right: 1px solid;
}
.hiprint-printElement-tableTarget-border-tb {
border-top: 1px solid;
border-bottom: 1px solid;
}
.hiprint-printElement-tableTarget-border-top {
border-top: 1px solid;
}
.hiprint-printElement-tableTarget-border-bottom {
border-bottom: 1px solid;
}
.hiprint-printElement-tableTarget-border-td-none td {
border: 0px solid;
}
.hiprint-printElement-tableTarget-border-td-all td:not(:nth-last-child(-n + 2)) {
border-right: 1px solid;
}
.hiprint-printElement-tableTarget-border-td-all td:not(last-child) {
border-right: 1px solid;
}
.hiprint-printElement-tableTarget-border-td-all td:last-child {
border-left: 1px solid;
}
.hiprint-printElement-tableTarget-border-td-all td:last-child:first-child {
border-left: none;
}
/*.hiprint-printElement-tableTarget tr,*/
.hiprint-printElement-tableTarget td {
height: 18pt;
}
.hiprint-printPaper .hiprint-paperNumber {
font-size: 9pt;
}
.design .hiprint-printElement-table-handle {
position: absolute;
height: 21pt;
width: 21pt;
background: red;
z-index: 1;
}
.hiprint-printPaper .hiprint-paperNumber-disabled {
float: right !important;
right: 0 !important;
color: gainsboro !important;
}
.hiprint-printElement-vline,
.hiprint-printElement-hline {
border: 0px none rgb(0, 0, 0);
}
.hiprint-printElement-vline {
border-left: 0.75pt solid #000;
border-right: 0px none rgb(0, 0, 0) !important;
border-bottom: 0px none rgb(0, 0, 0) !important;
border-top: 0px none rgb(0, 0, 0) !important;
}
.hiprint-printElement-hline {
border-top: 0.75pt solid #000;
border-right: 0px none rgb(0, 0, 0) !important;
border-bottom: 0px none rgb(0, 0, 0) !important;
border-left: 0px none rgb(0, 0, 0) !important;
}
.hiprint-printElement-oval,
.hiprint-printElement-rect {
border: 0.75pt solid #000;
}
.hiprint-text-content-middle {
}
.hiprint-text-content-middle > div {
display: grid;
align-items: center;
}
.hiprint-text-content-bottom {
}
.hiprint-text-content-bottom > div {
display: grid;
align-items: flex-end;
}
.hiprint-text-content-wrap {
}
.hiprint-text-content-wrap .hiprint-text-content-wrap-nowrap {
white-space: nowrap;
}
.hiprint-text-content-wrap .hiprint-text-content-wrap-clip {
white-space: nowrap;
overflow: hidden;
text-overflow: clip;
}
.hiprint-text-content-wrap .hiprint-text-content-wrap-ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/*hi-grid-row */
.hi-grid-row {
position: relative;
height: auto;
margin-right: 0;
margin-left: 0;
zoom: 1;
display: block;
box-sizing: border-box;
}
.hi-grid-row::after,
.hi-grid-row::before {
display: table;
content: '';
box-sizing: border-box;
}
.hi-grid-col {
display: block;
box-sizing: border-box;
position: relative;
float: left;
flex: 0 0 auto;
}
.table-grid-row {
margin-left: -0pt;
margin-right: -0pt;
}
.tableGridColumnsGutterRow {
padding-left: 0pt;
padding-right: 0pt;
}
.hiprint-gridColumnsFooter {
text-align: left;
clear: both;
}

105
src/App.vue Normal file
View File

@ -0,0 +1,105 @@
<template>
<el-config-provider :size="getGlobalComponentSize" :locale="getGlobalI18n">
<router-view v-show="getLockScreen" />
<LockScreen v-if="themeConfig.isLockScreen" />
<Setings ref="setingsRef" v-show="getLockScreen" />
<CloseFull v-if="!themeConfig.isLockScreen" />
<Upgrade v-if="getVersion" />
</el-config-provider>
</template>
<script setup lang="ts" name="app">
import { defineAsyncComponent, computed, ref, onBeforeMount, onMounted, onUnmounted, nextTick, watch } from 'vue'
import { useRoute } from 'vue-router'
import { useI18n } from 'vue-i18n'
import { storeToRefs } from 'pinia'
import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes'
import { useThemeConfig } from '/@/stores/themeConfig'
import other from '/@/utils/other'
import { Local, Session } from '/@/utils/storage'
import mittBus from '/@/utils/mitt'
import setIntroduction from '/@/utils/setIconfont'
//
const LockScreen = defineAsyncComponent(() => import('/@/layout/lockScreen/index.vue'))
const Setings = defineAsyncComponent(() => import('/@/layout/navBars/topBar/setings.vue'))
const CloseFull = defineAsyncComponent(() => import('/@/layout/navBars/topBar/closeFull.vue'))
const Upgrade = defineAsyncComponent(() => import('/@/layout/upgrade/index.vue'))
//
const { messages, locale } = useI18n()
const setingsRef = ref()
const route = useRoute()
const stores = useTagsViewRoutes()
const storesThemeConfig = useThemeConfig()
const { themeConfig } = storeToRefs(storesThemeConfig)
//
const getLockScreen = computed(() => {
//
return themeConfig.value.isLockScreen ? themeConfig.value.lockScreenTime > 1 : themeConfig.value.lockScreenTime >= 0
})
//
const getVersion = computed(() => {
let isVersion = false
if (route.path !== '/login') {
// @ts-ignore
const currentVersion = __NEXT_VERSION__
const lastVersion = Local.get('version')
if (!lastVersion) {
Local.set('version', currentVersion)
} else if (lastVersion !== currentVersion) {
isVersion = true
}
}
return isVersion
})
//
const getGlobalComponentSize = computed(() => {
return other.globalComponentSize()
})
// i18n
const getGlobalI18n = computed(() => {
return messages.value[locale.value]
})
//
onBeforeMount(() => {
// icon
setIntroduction.cssCdn()
// js
setIntroduction.jsCdn()
})
//
onMounted(() => {
nextTick(() => {
// '
mittBus.on('openSetingsDrawer', () => {
setingsRef.value.openDrawer()
})
//
if (Local.get('themeConfig')) {
storesThemeConfig.setThemeConfig({ themeConfig: Local.get('themeConfig') })
document.documentElement.style.cssText = Local.get('themeConfigStyle')
}
//
if (Session.get('isTagsViewCurrenFull')) {
stores.setCurrenFullscreen(Session.get('isTagsViewCurrenFull'))
}
})
})
// /i18n
onUnmounted(() => {
mittBus.off('openSetingsDrawer', () => {})
})
//
watch(
() => route.path,
() => {
other.useTitle()
},
{
deep: true,
}
)
</script>

View File

@ -0,0 +1,50 @@
/* eslint-disable */
/* tslint:disable */
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import { HttpClient, RequestParams } from '../admin/http-client'
export class ApiApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags api
* @name GetList
* @summary swagger resources
* @request GET:/swagger-resources
* @secure
*/
getSwaggerResources = (path: string, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: path,
method: 'GET',
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags api
* @name GetList
* @summary swagger json
* @request GET:/swagger-resources
* @secure
*/
getSwaggerJson = (path: string, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: path,
method: 'GET',
secure: true,
format: 'json',
...params,
})
}

View File

@ -0,0 +1,32 @@
/** 组件类型 */
export const ComponentType = {
Account: { name: 'account', value: 1, desc: '账号' },
AAD: { name: 'aad', value: 2, desc: 'AAD' },
Email: { name: 'email', value: 3, desc: '邮箱' },
}
/** 平台类型 */
export const PlatformType = {
Web: { name: 'web', value: 1, desc: 'Web端' },
App: { name: 'app', value: 2, desc: 'App端' },
CS: { name: 'cs', value: 3, desc: 'CS端' },
}
/** 操作符 */
export const Operator = {
equal: { label: '等于', value: 'Equal' },
notEqual: { label: '不等于', value: 'NotEqual' },
contains: { label: '包含', value: 'Contains' },
notContains: { label: '不包含', value: 'NotContains' },
startsWith: { label: '开始以', value: 'StartsWith' },
notStartsWith: { label: '开始不是以', value: 'NotStartsWith' },
endsWith: { label: '结束以', value: 'EndsWith' },
notEndsWith: { label: '结束不是以', value: 'NotEndsWith' },
lessThan: { label: '小于', value: 'LessThan' },
lessThanOrEqual: { label: '小于等于', value: 'LessThanOrEqual' },
greaterThan: { label: '大于', value: 'GreaterThan' },
greaterThanOrEqual: { label: '大于等于', value: 'GreaterThanOrEqual' },
dateRange: { label: '时间段', value: 'dateRange' },
any: { label: '在列表', value: 'Any' },
notAny: { label: '不在列表', value: 'NotAny' },
}

312
src/api/admin/Api.ts Normal file
View File

@ -0,0 +1,312 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
ApiAddInput,
ApiSetEnableLogInput,
ApiSetEnableParamsInput,
ApiSetEnableResultInput,
ApiSyncInput,
ApiUpdateInput,
PageInputApiGetPageInput,
ResultOutputApiGetOutput,
ResultOutputInt64,
ResultOutputListApiGetListOutput,
ResultOutputListProjectConfig,
ResultOutputPageOutputApiEntity,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class ApiApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags api
* @name Get
* @summary
* @request GET:/api/admin/api/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputApiGetOutput, any>({
path: `/api/admin/api/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags api
* @name GetList
* @summary
* @request GET:/api/admin/api/get-list
* @secure
*/
getList = (
query?: {
key?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputListApiGetListOutput, any>({
path: `/api/admin/api/get-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags api
* @name GetPage
* @summary
* @request POST:/api/admin/api/get-page
* @secure
*/
getPage = (data: PageInputApiGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputApiEntity, any>({
path: `/api/admin/api/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags api
* @name Add
* @summary
* @request POST:/api/admin/api/add
* @secure
*/
add = (data: ApiAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/api/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags api
* @name Update
* @summary
* @request PUT:/api/admin/api/update
* @secure
*/
update = (data: ApiUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/api/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags api
* @name SetEnableLog
* @summary
* @request POST:/api/admin/api/set-enable-log
* @secure
*/
setEnableLog = (data: ApiSetEnableLogInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/api/set-enable-log`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags api
* @name SetEnableParams
* @summary
* @request POST:/api/admin/api/set-enable-params
* @secure
*/
setEnableParams = (data: ApiSetEnableParamsInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/api/set-enable-params`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags api
* @name SetEnableResult
* @summary
* @request POST:/api/admin/api/set-enable-result
* @secure
*/
setEnableResult = (data: ApiSetEnableResultInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/api/set-enable-result`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags api
* @name Delete
* @summary
* @request DELETE:/api/admin/api/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/api/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags api
* @name BatchDelete
* @summary
* @request PUT:/api/admin/api/batch-delete
* @secure
*/
batchDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/api/batch-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags api
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/api/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/api/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags api
* @name BatchSoftDelete
* @summary
* @request PUT:/api/admin/api/batch-soft-delete
* @secure
*/
batchSoftDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/api/batch-soft-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags api
* @name Sync
* @summary
* @request POST:/api/admin/api/sync
* @secure
*/
sync = (data: ApiSyncInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/api/sync`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags api
* @name GetProjects
* @summary
* @request GET:/api/admin/api/get-projects
* @secure
*/
getProjects = (
query?: {
/** @default "/swagger" */
suffix?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputListProjectConfig, any>({
path: `/api/admin/api/get-projects`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
}

302
src/api/admin/Auth.ts Normal file
View File

@ -0,0 +1,302 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
AuthChangePasswordByEmailInput,
AuthChangePasswordByMobileInput,
AuthEmailLoginInput,
AuthLoginInput,
AuthMobileLoginInput,
AuthRegByEmailInput,
AuthRegByMobileInput,
ResultOutputAuthGetPasswordEncryptKeyOutput,
ResultOutputAuthGetUserInfoOutput,
ResultOutputAuthGetUserPermissionsOutput,
ResultOutputAuthUserProfileOutput,
ResultOutputBoolean,
ResultOutputListAuthUserMenuOutput,
ResultOutputTokenInfo,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class AuthApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags auth
* @name GetPasswordEncryptKey
* @summary
* @request GET:/api/admin/auth/get-password-encrypt-key
* @secure
*/
getPasswordEncryptKey = (params: RequestParams = {}) =>
this.request<ResultOutputAuthGetPasswordEncryptKeyOutput, any>({
path: `/api/admin/auth/get-password-encrypt-key`,
method: 'GET',
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags auth
* @name GetUserProfile
* @summary
* @request GET:/api/admin/auth/get-user-profile
* @secure
*/
getUserProfile = (params: RequestParams = {}) =>
this.request<ResultOutputAuthUserProfileOutput, any>({
path: `/api/admin/auth/get-user-profile`,
method: 'GET',
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags auth
* @name GetUserMenus
* @summary
* @request GET:/api/admin/auth/get-user-menus
* @secure
*/
getUserMenus = (
query?: {
/** @default "web" */
platform?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputListAuthUserMenuOutput, any>({
path: `/api/admin/auth/get-user-menus`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags auth
* @name GetUserPermissions
* @summary
* @request GET:/api/admin/auth/get-user-permissions
* @secure
*/
getUserPermissions = (
query?: {
/** @default "web" */
platform?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputAuthGetUserPermissionsOutput, any>({
path: `/api/admin/auth/get-user-permissions`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags auth
* @name GetUserInfo
* @summary
* @request GET:/api/admin/auth/get-user-info
* @secure
*/
getUserInfo = (params: RequestParams = {}) =>
this.request<ResultOutputAuthGetUserInfoOutput, any>({
path: `/api/admin/auth/get-user-info`,
method: 'GET',
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags auth
* @name Login
* @summary
* @request POST:/api/admin/auth/login
* @secure
*/
login = (data: AuthLoginInput, params: RequestParams = {}) =>
this.request<ResultOutputTokenInfo, any>({
path: `/api/admin/auth/login`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags auth
* @name MobileLogin
* @summary
* @request POST:/api/admin/auth/mobile-login
* @secure
*/
mobileLogin = (data: AuthMobileLoginInput, params: RequestParams = {}) =>
this.request<ResultOutputTokenInfo, any>({
path: `/api/admin/auth/mobile-login`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags auth
* @name EmailLogin
* @summary
* @request POST:/api/admin/auth/email-login
* @secure
*/
emailLogin = (data: AuthEmailLoginInput, params: RequestParams = {}) =>
this.request<ResultOutputTokenInfo, any>({
path: `/api/admin/auth/email-login`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags auth
* @name ChangePasswordByEmail
* @summary
* @request POST:/api/admin/auth/change-password-by-email
* @secure
*/
changePasswordByEmail = (data: AuthChangePasswordByEmailInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/auth/change-password-by-email`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags auth
* @name ChangePasswordByMobile
* @summary
* @request POST:/api/admin/auth/change-password-by-mobile
* @secure
*/
changePasswordByMobile = (data: AuthChangePasswordByMobileInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/auth/change-password-by-mobile`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags auth
* @name RegByEmail
* @summary
* @request POST:/api/admin/auth/reg-by-email
* @secure
*/
regByEmail = (data: AuthRegByEmailInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/auth/reg-by-email`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags auth
* @name RegByMobile
* @summary
* @request POST:/api/admin/auth/reg-by-mobile
* @secure
*/
regByMobile = (data: AuthRegByMobileInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/auth/reg-by-mobile`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags auth
* @name Refresh
* @summary Token
* @request GET:/api/admin/auth/refresh
* @secure
*/
refresh = (
query: {
token: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputTokenInfo, any>({
path: `/api/admin/auth/refresh`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags auth
* @name IsCaptcha
* @summary
* @request GET:/api/admin/auth/is-captcha
* @secure
*/
isCaptcha = (params: RequestParams = {}) =>
this.request<ResultOutputBoolean, any>({
path: `/api/admin/auth/is-captcha`,
method: 'GET',
secure: true,
format: 'json',
...params,
})
}

58
src/api/admin/Cache.ts Normal file
View File

@ -0,0 +1,58 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import { ResultOutputListObject } from './data-contracts'
import { HttpClient, RequestParams } from './http-client'
export class CacheApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags cache
* @name GetList
* @summary
* @request GET:/api/admin/cache/get-list
* @secure
*/
getList = (params: RequestParams = {}) =>
this.request<ResultOutputListObject, any>({
path: `/api/admin/cache/get-list`,
method: 'GET',
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags cache
* @name Clear
* @summary
* @request DELETE:/api/admin/cache/clear
* @secure
*/
clear = (
query?: {
/** 缓存键 */
cacheKey?: string
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/cache/clear`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
}

113
src/api/admin/Captcha.ts Normal file
View File

@ -0,0 +1,113 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import {
ResultOutputCaptchaData,
ResultOutputString,
ResultOutputValidateResult,
SendEmailCodeInput,
SendSmsCodeInput,
SlideTrack,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class CaptchaApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags captcha
* @name Generate
* @summary
* @request POST:/api/admin/captcha/generate
* @secure
*/
generate = (
query?: {
/** 验证码id */
captchaId?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputCaptchaData, any>({
path: `/api/admin/captcha/generate`,
method: 'POST',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags captcha
* @name Check
* @summary
* @request POST:/api/admin/captcha/check
* @secure
*/
check = (
data: SlideTrack,
query?: {
/** 验证码Id */
captchaId?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputValidateResult, any>({
path: `/api/admin/captcha/check`,
method: 'POST',
query: query,
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags captcha
* @name SendSmsCode
* @summary
* @request POST:/api/admin/captcha/send-sms-code
* @secure
*/
sendSmsCode = (data: SendSmsCodeInput, params: RequestParams = {}) =>
this.request<ResultOutputString, any>({
path: `/api/admin/captcha/send-sms-code`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags captcha
* @name SendEmailCode
* @summary
* @request POST:/api/admin/captcha/send-email-code
* @secure
*/
sendEmailCode = (data: SendEmailCodeInput, params: RequestParams = {}) =>
this.request<ResultOutputString, any>({
path: `/api/admin/captcha/send-email-code`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
}

316
src/api/admin/Dict.ts Normal file
View File

@ -0,0 +1,316 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
DictAddInput,
DictUpdateInput,
ExportInput,
PageInputDictGetPageInput,
ResultOutputDictGetOutput,
ResultOutputDictionaryStringListDictGetListOutput,
ResultOutputImportOutput,
ResultOutputInt64,
ResultOutputPageOutputDictGetPageOutput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class DictApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags dict
* @name Get
* @summary
* @request GET:/api/admin/dict/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputDictGetOutput, any>({
path: `/api/admin/dict/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags dict
* @name GetPage
* @summary
* @request POST:/api/admin/dict/get-page
* @secure
*/
getPage = (data: PageInputDictGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputDictGetPageOutput, any>({
path: `/api/admin/dict/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags dict
* @name GetList
* @summary
* @request POST:/api/admin/dict/get-list
* @secure
*/
getList = (data: string[], params: RequestParams = {}) =>
this.request<ResultOutputDictionaryStringListDictGetListOutput, any>({
path: `/api/admin/dict/get-list`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags dict
* @name GetListByNames
* @summary
* @request POST:/api/admin/dict/get-list-by-names
* @secure
*/
getListByNames = (data: string[], params: RequestParams = {}) =>
this.request<ResultOutputDictionaryStringListDictGetListOutput, any>({
path: `/api/admin/dict/get-list-by-names`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags dict
* @name DownloadTemplate
* @summary
* @request POST:/api/admin/dict/download-template
* @secure
*/
downloadTemplate = (params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict/download-template`,
method: 'POST',
secure: true,
...params,
})
/**
* No description
*
* @tags dict
* @name DownloadErrorMark
* @summary
* @request POST:/api/admin/dict/download-error-mark
* @secure
*/
downloadErrorMark = (
query?: {
fileId?: string
fileName?: string
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict/download-error-mark`,
method: 'POST',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags dict
* @name ExportData
* @summary
* @request POST:/api/admin/dict/export-data
* @secure
*/
exportData = (data: ExportInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict/export-data`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags dict
* @name ImportData
* @summary
* @request POST:/api/admin/dict/import-data
* @secure
*/
importData = (
data: {
/** @format binary */
file: File
},
query?: {
/** @format int32 */
duplicateAction?: number
fileId?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputImportOutput, any>({
path: `/api/admin/dict/import-data`,
method: 'POST',
query: query,
body: data,
secure: true,
type: ContentType.FormData,
format: 'json',
...params,
})
/**
* No description
*
* @tags dict
* @name Add
* @summary
* @request POST:/api/admin/dict/add
* @secure
*/
add = (data: DictAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/dict/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags dict
* @name Update
* @summary
* @request PUT:/api/admin/dict/update
* @secure
*/
update = (data: DictUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags dict
* @name Delete
* @summary
* @request DELETE:/api/admin/dict/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags dict
* @name BatchDelete
* @summary
* @request PUT:/api/admin/dict/batch-delete
* @secure
*/
batchDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict/batch-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags dict
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/dict/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags dict
* @name BatchSoftDelete
* @summary
* @request PUT:/api/admin/dict/batch-soft-delete
* @secure
*/
batchSoftDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict/batch-soft-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
}

187
src/api/admin/DictType.ts Normal file
View File

@ -0,0 +1,187 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
DictTypeAddInput,
DictTypeUpdateInput,
PageInputDictTypeGetPageInput,
ResultOutputDictTypeGetOutput,
ResultOutputInt64,
ResultOutputPageOutputDictTypeGetPageOutput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class DictTypeApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags dict-type
* @name Get
* @summary
* @request GET:/api/admin/dict-type/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputDictTypeGetOutput, any>({
path: `/api/admin/dict-type/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags dict-type
* @name GetPage
* @summary
* @request POST:/api/admin/dict-type/get-page
* @secure
*/
getPage = (data: PageInputDictTypeGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputDictTypeGetPageOutput, any>({
path: `/api/admin/dict-type/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags dict-type
* @name Add
* @summary
* @request POST:/api/admin/dict-type/add
* @secure
*/
add = (data: DictTypeAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/dict-type/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags dict-type
* @name Update
* @summary
* @request PUT:/api/admin/dict-type/update
* @secure
*/
update = (data: DictTypeUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict-type/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags dict-type
* @name Delete
* @summary
* @request DELETE:/api/admin/dict-type/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict-type/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags dict-type
* @name BatchDelete
* @summary
* @request PUT:/api/admin/dict-type/batch-delete
* @secure
*/
batchDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict-type/batch-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags dict-type
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/dict-type/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict-type/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags dict-type
* @name BatchSoftDelete
* @summary
* @request PUT:/api/admin/dict-type/batch-soft-delete
* @secure
*/
batchSoftDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/dict-type/batch-soft-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
}

387
src/api/admin/Doc.ts Normal file
View File

@ -0,0 +1,387 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
DocAddGroupInput,
DocAddImageInput,
DocAddMenuInput,
DocUpdateContentInput,
DocUpdateGroupInput,
DocUpdateMenuInput,
ResultOutputDocGetContentOutput,
ResultOutputDocGetGroupOutput,
ResultOutputDocGetMenuOutput,
ResultOutputIEnumerableObject,
ResultOutputInt64,
ResultOutputListDocListOutput,
ResultOutputListString,
ResultOutputString,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class DocApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags doc
* @name GetGroup
* @summary
* @request GET:/api/admin/doc/get-group
* @secure
*/
getGroup = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputDocGetGroupOutput, any>({
path: `/api/admin/doc/get-group`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags doc
* @name GetMenu
* @summary
* @request GET:/api/admin/doc/get-menu
* @secure
*/
getMenu = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputDocGetMenuOutput, any>({
path: `/api/admin/doc/get-menu`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags doc
* @name GetContent
* @summary
* @request GET:/api/admin/doc/get-content
* @secure
*/
getContent = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputDocGetContentOutput, any>({
path: `/api/admin/doc/get-content`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags doc
* @name GetList
* @summary
* @request GET:/api/admin/doc/get-list
* @secure
*/
getList = (
query?: {
key?: string
/** @format date-time */
start?: string
/** @format date-time */
end?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputListDocListOutput, any>({
path: `/api/admin/doc/get-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags doc
* @name GetImageList
* @summary
* @request GET:/api/admin/doc/get-image-list
* @secure
*/
getImageList = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputListString, any>({
path: `/api/admin/doc/get-image-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags doc
* @name AddGroup
* @summary
* @request POST:/api/admin/doc/add-group
* @secure
*/
addGroup = (data: DocAddGroupInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/doc/add-group`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags doc
* @name AddMenu
* @summary
* @request POST:/api/admin/doc/add-menu
* @secure
*/
addMenu = (data: DocAddMenuInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/doc/add-menu`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags doc
* @name AddImage
* @summary
* @request POST:/api/admin/doc/add-image
* @secure
*/
addImage = (data: DocAddImageInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/doc/add-image`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags doc
* @name UpdateGroup
* @summary
* @request PUT:/api/admin/doc/update-group
* @secure
*/
updateGroup = (data: DocUpdateGroupInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/doc/update-group`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags doc
* @name UpdateMenu
* @summary
* @request PUT:/api/admin/doc/update-menu
* @secure
*/
updateMenu = (data: DocUpdateMenuInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/doc/update-menu`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags doc
* @name UpdateContent
* @summary
* @request PUT:/api/admin/doc/update-content
* @secure
*/
updateContent = (data: DocUpdateContentInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/doc/update-content`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags doc
* @name Delete
* @summary
* @request DELETE:/api/admin/doc/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/doc/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags doc
* @name DeleteImage
* @summary
* @request DELETE:/api/admin/doc/delete-image
* @secure
*/
deleteImage = (
query?: {
/** @format int64 */
documentId?: number
url?: string
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/doc/delete-image`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags doc
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/doc/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/doc/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags doc
* @name GetPlainList
* @summary
* @request GET:/api/admin/doc/get-plain-list
* @secure
*/
getPlainList = (params: RequestParams = {}) =>
this.request<ResultOutputIEnumerableObject, any>({
path: `/api/admin/doc/get-plain-list`,
method: 'GET',
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags doc
* @name UploadImage
* @summary
* @request POST:/api/admin/doc/upload-image
* @secure
*/
uploadImage = (
data: {
/**
*
* @format binary
*/
File?: File
/**
*
* @format int64
*/
Id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputString, any>({
path: `/api/admin/doc/upload-image`,
method: 'POST',
body: data,
secure: true,
type: ContentType.FormData,
format: 'json',
...params,
})
}

140
src/api/admin/File.ts Normal file
View File

@ -0,0 +1,140 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
FileDeleteInput,
PageInputFileGetPageInput,
ResultOutputFileEntity,
ResultOutputListFileEntity,
ResultOutputPageOutputFileGetPageOutput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class FileApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags file
* @name GetPage
* @summary
* @request POST:/api/admin/file/get-page
* @secure
*/
getPage = (data: PageInputFileGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputFileGetPageOutput, any>({
path: `/api/admin/file/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags file
* @name Delete
* @summary
* @request POST:/api/admin/file/delete
* @secure
*/
delete = (data: FileDeleteInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/file/delete`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags file
* @name UploadFile
* @summary
* @request POST:/api/admin/file/upload-file
* @secure
*/
uploadFile = (
data: {
/**
*
* @format binary
*/
file: File
},
query?: {
/**
*
* @default ""
*/
fileDirectory?: string
/**
*
* @default true
*/
fileReName?: boolean
},
params: RequestParams = {}
) =>
this.request<ResultOutputFileEntity, any>({
path: `/api/admin/file/upload-file`,
method: 'POST',
query: query,
body: data,
secure: true,
type: ContentType.FormData,
format: 'json',
...params,
})
/**
* No description
*
* @tags file
* @name UploadFiles
* @summary
* @request POST:/api/admin/file/upload-files
* @secure
*/
uploadFiles = (
data: {
/** 文件列表 */
files: File[]
},
query?: {
/**
*
* @default ""
*/
fileDirectory?: string
/**
*
* @default true
*/
fileReName?: boolean
},
params: RequestParams = {}
) =>
this.request<ResultOutputListFileEntity, any>({
path: `/api/admin/file/upload-files`,
method: 'POST',
query: query,
body: data,
secure: true,
type: ContentType.FormData,
format: 'json',
...params,
})
}

55
src/api/admin/LoginLog.ts Normal file
View File

@ -0,0 +1,55 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { LoginLogAddInput, PageInputLoginLogGetPageInput, ResultOutputInt64, ResultOutputPageOutputLoginLogGetPageOutput } from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class LoginLogApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags login-log
* @name GetPage
* @summary
* @request POST:/api/admin/login-log/get-page
* @secure
*/
getPage = (data: PageInputLoginLogGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputLoginLogGetPageOutput, any>({
path: `/api/admin/login-log/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags login-log
* @name Add
* @summary
* @request POST:/api/admin/login-log/add
* @secure
*/
add = (data: LoginLogAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/login-log/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
}

254
src/api/admin/Msg.ts Normal file
View File

@ -0,0 +1,254 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
MsgAddInput,
MsgAddMsgUserListInput,
MsgUpdateInput,
PageInputMsgGetPageInput,
ResultOutputInt64,
ResultOutputListMsgGetMsgUserListOutput,
ResultOutputMsgGetOutput,
ResultOutputPageOutputMsgGetPageOutput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class MsgApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags msg
* @name Get
* @summary
* @request GET:/api/admin/msg/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputMsgGetOutput, any>({
path: `/api/admin/msg/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags msg
* @name GetPage
* @summary
* @request POST:/api/admin/msg/get-page
* @secure
*/
getPage = (data: PageInputMsgGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputMsgGetPageOutput, any>({
path: `/api/admin/msg/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags msg
* @name GetMsgUserList
* @summary
* @request GET:/api/admin/msg/get-msg-user-list
* @secure
*/
getMsgUserList = (
query?: {
/**
* Id
* @format int64
*/
MsgId?: number
/** 姓名 */
Name?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputListMsgGetMsgUserListOutput, any>({
path: `/api/admin/msg/get-msg-user-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags msg
* @name AddMsgUser
* @summary
* @request POST:/api/admin/msg/add-msg-user
* @secure
*/
addMsgUser = (data: MsgAddMsgUserListInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/msg/add-msg-user`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags msg
* @name RemoveMsgUser
* @summary
* @request POST:/api/admin/msg/remove-msg-user
* @secure
*/
removeMsgUser = (data: MsgAddMsgUserListInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/msg/remove-msg-user`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags msg
* @name Add
* @summary
* @request POST:/api/admin/msg/add
* @secure
*/
add = (data: MsgAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/msg/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags msg
* @name Update
* @summary
* @request PUT:/api/admin/msg/update
* @secure
*/
update = (data: MsgUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/msg/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags msg
* @name Delete
* @summary
* @request DELETE:/api/admin/msg/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/msg/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags msg
* @name BatchDelete
* @summary
* @request PUT:/api/admin/msg/batch-delete
* @secure
*/
batchDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/msg/batch-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags msg
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/msg/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/msg/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags msg
* @name BatchSoftDelete
* @summary
* @request PUT:/api/admin/msg/batch-soft-delete
* @secure
*/
batchSoftDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/msg/batch-soft-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
}

191
src/api/admin/MsgType.ts Normal file
View File

@ -0,0 +1,191 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
MsgTypeAddInput,
MsgTypeUpdateInput,
ResultOutputInt64,
ResultOutputListMsgTypeGetListOutput,
ResultOutputMsgTypeGetOutput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class MsgTypeApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags msg-type
* @name Get
* @summary
* @request GET:/api/admin/msg-type/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputMsgTypeGetOutput, any>({
path: `/api/admin/msg-type/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags msg-type
* @name GetList
* @summary
* @request GET:/api/admin/msg-type/get-list
* @secure
*/
getList = (
query?: {
/** 名称 */
Name?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputListMsgTypeGetListOutput, any>({
path: `/api/admin/msg-type/get-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags msg-type
* @name Add
* @summary
* @request POST:/api/admin/msg-type/add
* @secure
*/
add = (data: MsgTypeAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/msg-type/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags msg-type
* @name Update
* @summary
* @request PUT:/api/admin/msg-type/update
* @secure
*/
update = (data: MsgTypeUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/msg-type/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags msg-type
* @name Delete
* @summary
* @request DELETE:/api/admin/msg-type/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/msg-type/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags msg-type
* @name BatchDelete
* @summary
* @request PUT:/api/admin/msg-type/batch-delete
* @secure
*/
batchDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/msg-type/batch-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags msg-type
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/msg-type/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/msg-type/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags msg-type
* @name BatchSoftDelete
* @summary
* @request PUT:/api/admin/msg-type/batch-soft-delete
* @secure
*/
batchSoftDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/msg-type/batch-soft-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
}

View File

@ -0,0 +1,60 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import {
OperationLogAddInput,
PageInputOperationLogGetPageInput,
ResultOutputInt64,
ResultOutputPageOutputOperationLogGetPageOutput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class OperationLogApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags operation-log
* @name GetPage
* @summary
* @request POST:/api/admin/operation-log/get-page
* @secure
*/
getPage = (data: PageInputOperationLogGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputOperationLogGetPageOutput, any>({
path: `/api/admin/operation-log/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags operation-log
* @name Add
* @summary
* @request POST:/api/admin/operation-log/add
* @secure
*/
add = (data: OperationLogAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/operation-log/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
}

172
src/api/admin/Org.ts Normal file
View File

@ -0,0 +1,172 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
OrgAddInput,
OrgUpdateInput,
ResultOutputInt64,
ResultOutputListOrgGetListOutput,
ResultOutputListOrgGetSimpleListWithPathOutput,
ResultOutputOrgGetOutput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class OrgApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags org
* @name Get
* @summary
* @request GET:/api/admin/org/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputOrgGetOutput, any>({
path: `/api/admin/org/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags org
* @name GetList
* @summary
* @request GET:/api/admin/org/get-list
* @secure
*/
getList = (
query?: {
key?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputListOrgGetListOutput, any>({
path: `/api/admin/org/get-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags org
* @name GetSimpleListWithPath
* @summary
* @request GET:/api/admin/org/get-simple-list-with-path
* @secure
*/
getSimpleListWithPath = (params: RequestParams = {}) =>
this.request<ResultOutputListOrgGetSimpleListWithPathOutput, any>({
path: `/api/admin/org/get-simple-list-with-path`,
method: 'GET',
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags org
* @name Add
* @summary
* @request POST:/api/admin/org/add
* @secure
*/
add = (data: OrgAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/org/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags org
* @name Update
* @summary
* @request PUT:/api/admin/org/update
* @secure
*/
update = (data: OrgUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/org/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags org
* @name Delete
* @summary
* @request DELETE:/api/admin/org/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/org/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags org
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/org/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/org/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
}

350
src/api/admin/Permission.ts Normal file
View File

@ -0,0 +1,350 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
PermissionAddDotInput,
PermissionAddGroupInput,
PermissionAddMenuInput,
PermissionAssignInput,
PermissionGetListInput,
PermissionUpdateDotInput,
PermissionUpdateGroupInput,
PermissionUpdateMenuInput,
ResultOutputInt64,
ResultOutputListInt64,
ResultOutputListPermissionGetListOutput,
ResultOutputListPermissionGetPermissionListOutput,
ResultOutputPermissionGetDotOutput,
ResultOutputPermissionGetGroupOutput,
ResultOutputPermissionGetMenuOutput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class PermissionApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags permission
* @name GetGroup
* @summary
* @request GET:/api/admin/permission/get-group
* @secure
*/
getGroup = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputPermissionGetGroupOutput, any>({
path: `/api/admin/permission/get-group`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags permission
* @name GetMenu
* @summary
* @request GET:/api/admin/permission/get-menu
* @secure
*/
getMenu = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputPermissionGetMenuOutput, any>({
path: `/api/admin/permission/get-menu`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags permission
* @name GetDot
* @summary
* @request GET:/api/admin/permission/get-dot
* @secure
*/
getDot = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputPermissionGetDotOutput, any>({
path: `/api/admin/permission/get-dot`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags permission
* @name GetList
* @summary
* @request POST:/api/admin/permission/get-list
* @secure
*/
getList = (data: PermissionGetListInput, params: RequestParams = {}) =>
this.request<ResultOutputListPermissionGetListOutput, any>({
path: `/api/admin/permission/get-list`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags permission
* @name GetPermissionList
* @summary
* @request GET:/api/admin/permission/get-permission-list
* @secure
*/
getPermissionList = (
query?: {
platform?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputListPermissionGetPermissionListOutput, any>({
path: `/api/admin/permission/get-permission-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags permission
* @name GetRolePermissionList
* @summary
* @request GET:/api/admin/permission/get-role-permission-list
* @secure
*/
getRolePermissionList = (
query?: {
/**
* @format int64
* @default 0
*/
roleId?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputListInt64, any>({
path: `/api/admin/permission/get-role-permission-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags permission
* @name AddGroup
* @summary
* @request POST:/api/admin/permission/add-group
* @secure
*/
addGroup = (data: PermissionAddGroupInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/permission/add-group`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags permission
* @name AddMenu
* @summary
* @request POST:/api/admin/permission/add-menu
* @secure
*/
addMenu = (data: PermissionAddMenuInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/permission/add-menu`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags permission
* @name AddDot
* @summary
* @request POST:/api/admin/permission/add-dot
* @secure
*/
addDot = (data: PermissionAddDotInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/permission/add-dot`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags permission
* @name UpdateGroup
* @summary
* @request PUT:/api/admin/permission/update-group
* @secure
*/
updateGroup = (data: PermissionUpdateGroupInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/permission/update-group`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags permission
* @name UpdateMenu
* @summary
* @request PUT:/api/admin/permission/update-menu
* @secure
*/
updateMenu = (data: PermissionUpdateMenuInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/permission/update-menu`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags permission
* @name UpdateDot
* @summary
* @request PUT:/api/admin/permission/update-dot
* @secure
*/
updateDot = (data: PermissionUpdateDotInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/permission/update-dot`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags permission
* @name Delete
* @summary
* @request DELETE:/api/admin/permission/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/permission/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags permission
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/permission/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/permission/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags permission
* @name Assign
* @summary
* @request POST:/api/admin/permission/assign
* @secure
*/
assign = (data: PermissionAssignInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/permission/assign`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
}

347
src/api/admin/Pkg.ts Normal file
View File

@ -0,0 +1,347 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
PageInputPkgGetPageInput,
PageInputPkgGetPkgTenantListInput,
PkgAddInput,
PkgAddPkgTenantListInput,
PkgSetPkgPermissionsInput,
PkgUpdateInput,
ResultOutputInt64,
ResultOutputListInt64,
ResultOutputListPkgGetListOutput,
ResultOutputListPkgGetPkgTenantListOutput,
ResultOutputPageOutputPkgGetPageOutput,
ResultOutputPageOutputPkgGetPkgTenantListOutput,
ResultOutputPkgGetOutput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class PkgApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags pkg
* @name Get
* @summary
* @request GET:/api/admin/pkg/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputPkgGetOutput, any>({
path: `/api/admin/pkg/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags pkg
* @name GetList
* @summary
* @request GET:/api/admin/pkg/get-list
* @secure
*/
getList = (
query?: {
/** 名称 */
Name?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputListPkgGetListOutput, any>({
path: `/api/admin/pkg/get-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags pkg
* @name GetPage
* @summary
* @request POST:/api/admin/pkg/get-page
* @secure
*/
getPage = (data: PageInputPkgGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputPkgGetPageOutput, any>({
path: `/api/admin/pkg/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags pkg
* @name GetPkgTenantList
* @summary
* @request GET:/api/admin/pkg/get-pkg-tenant-list
* @secure
*/
getPkgTenantList = (
query?: {
/** 租户名 */
TenantName?: string
/**
* Id
* @format int64
*/
PkgId?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputListPkgGetPkgTenantListOutput, any>({
path: `/api/admin/pkg/get-pkg-tenant-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags pkg
* @name GetPkgTenantPage
* @summary
* @request POST:/api/admin/pkg/get-pkg-tenant-page
* @secure
*/
getPkgTenantPage = (data: PageInputPkgGetPkgTenantListInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputPkgGetPkgTenantListOutput, any>({
path: `/api/admin/pkg/get-pkg-tenant-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags pkg
* @name GetPkgPermissionList
* @summary
* @request GET:/api/admin/pkg/get-pkg-permission-list
* @secure
*/
getPkgPermissionList = (
query?: {
/**
*
* @format int64
*/
pkgId?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputListInt64, any>({
path: `/api/admin/pkg/get-pkg-permission-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags pkg
* @name SetPkgPermissions
* @summary
* @request POST:/api/admin/pkg/set-pkg-permissions
* @secure
*/
setPkgPermissions = (data: PkgSetPkgPermissionsInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/pkg/set-pkg-permissions`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags pkg
* @name AddPkgTenant
* @summary
* @request POST:/api/admin/pkg/add-pkg-tenant
* @secure
*/
addPkgTenant = (data: PkgAddPkgTenantListInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/pkg/add-pkg-tenant`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags pkg
* @name RemovePkgTenant
* @summary
* @request POST:/api/admin/pkg/remove-pkg-tenant
* @secure
*/
removePkgTenant = (data: PkgAddPkgTenantListInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/pkg/remove-pkg-tenant`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags pkg
* @name Add
* @summary
* @request POST:/api/admin/pkg/add
* @secure
*/
add = (data: PkgAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/pkg/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags pkg
* @name Update
* @summary
* @request PUT:/api/admin/pkg/update
* @secure
*/
update = (data: PkgUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/pkg/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags pkg
* @name Delete
* @summary
* @request DELETE:/api/admin/pkg/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/pkg/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags pkg
* @name BatchDelete
* @summary
* @request PUT:/api/admin/pkg/batch-delete
* @secure
*/
batchDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/pkg/batch-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags pkg
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/pkg/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/pkg/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags pkg
* @name BatchSoftDelete
* @summary
* @request PUT:/api/admin/pkg/batch-soft-delete
* @secure
*/
batchSoftDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/pkg/batch-soft-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
}

View File

@ -0,0 +1,250 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
PageInputPrintTemplateGetPageInput,
PrintTemplateAddInput,
PrintTemplateSetEnableInput,
PrintTemplateUpdateInput,
PrintTemplateUpdateTemplateInput,
ResultOutputInt64,
ResultOutputPageOutputPrintTemplateGetPageOutput,
ResultOutputPrintTemplateGetOutput,
ResultOutputPrintTemplateGetUpdateTemplateOutput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class PrintTemplateApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags print-template
* @name Get
* @summary
* @request GET:/api/admin/print-template/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputPrintTemplateGetOutput, any>({
path: `/api/admin/print-template/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags print-template
* @name GetUpdateTemplate
* @summary
* @request GET:/api/admin/print-template/get-update-template
* @secure
*/
getUpdateTemplate = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputPrintTemplateGetUpdateTemplateOutput, any>({
path: `/api/admin/print-template/get-update-template`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags print-template
* @name GetPage
* @summary
* @request POST:/api/admin/print-template/get-page
* @secure
*/
getPage = (data: PageInputPrintTemplateGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputPrintTemplateGetPageOutput, any>({
path: `/api/admin/print-template/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags print-template
* @name Add
* @summary
* @request POST:/api/admin/print-template/add
* @secure
*/
add = (data: PrintTemplateAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/print-template/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags print-template
* @name Update
* @summary
* @request PUT:/api/admin/print-template/update
* @secure
*/
update = (data: PrintTemplateUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/print-template/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags print-template
* @name UpdateTemplate
* @summary
* @request PUT:/api/admin/print-template/update-template
* @secure
*/
updateTemplate = (data: PrintTemplateUpdateTemplateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/print-template/update-template`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags print-template
* @name SetEnable
* @summary
* @request POST:/api/admin/print-template/set-enable
* @secure
*/
setEnable = (data: PrintTemplateSetEnableInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/print-template/set-enable`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags print-template
* @name Delete
* @summary
* @request DELETE:/api/admin/print-template/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/print-template/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags print-template
* @name BatchDelete
* @summary
* @request PUT:/api/admin/print-template/batch-delete
* @secure
*/
batchDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/print-template/batch-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags print-template
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/print-template/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/print-template/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags print-template
* @name BatchSoftDelete
* @summary
* @request PUT:/api/admin/print-template/batch-soft-delete
* @secure
*/
batchSoftDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/print-template/batch-soft-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
}

229
src/api/admin/Region.ts Normal file
View File

@ -0,0 +1,229 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
PageInputRegionGetPageInput,
RegionAddInput,
RegionGetListInput,
RegionLevel,
RegionSetEnableInput,
RegionSetHotInput,
RegionUpdateInput,
ResultOutputInt64,
ResultOutputListRegionGetChildListOutput,
ResultOutputPageOutputRegionGetPageOutput,
ResultOutputRegionGetOutput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class RegionApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags region
* @name Get
* @summary
* @request GET:/api/admin/region/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputRegionGetOutput, any>({
path: `/api/admin/region/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags region
* @name GetChildList
* @summary
* @request POST:/api/admin/region/get-child-list
* @secure
*/
getChildList = (data: RegionGetListInput, params: RequestParams = {}) =>
this.request<ResultOutputListRegionGetChildListOutput, any>({
path: `/api/admin/region/get-child-list`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags region
* @name GetPage
* @summary
* @request POST:/api/admin/region/get-page
* @secure
*/
getPage = (data: PageInputRegionGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputRegionGetPageOutput, any>({
path: `/api/admin/region/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags region
* @name Add
* @summary
* @request POST:/api/admin/region/add
* @secure
*/
add = (data: RegionAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/region/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags region
* @name Update
* @summary
* @request PUT:/api/admin/region/update
* @secure
*/
update = (data: RegionUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/region/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags region
* @name Delete
* @summary
* @request DELETE:/api/admin/region/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/region/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags region
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/region/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/region/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags region
* @name SetEnable
* @summary
* @request POST:/api/admin/region/set-enable
* @secure
*/
setEnable = (data: RegionSetEnableInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/region/set-enable`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags region
* @name SetHot
* @summary
* @request POST:/api/admin/region/set-hot
* @secure
*/
setHot = (data: RegionSetHotInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/region/set-hot`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags region
* @name SyncData
* @summary
* @request POST:/api/admin/region/sync-data
* @secure
*/
syncData = (data: RegionLevel, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/region/sync-data`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
}

298
src/api/admin/Role.ts Normal file
View File

@ -0,0 +1,298 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
PageInputRoleGetPageInput,
ResultOutputInt64,
ResultOutputListRoleGetListOutput,
ResultOutputListRoleGetRoleUserListOutput,
ResultOutputPageOutputRoleGetPageOutput,
ResultOutputRoleGetOutput,
RoleAddInput,
RoleAddRoleUserListInput,
RoleSetDataScopeInput,
RoleUpdateInput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class RoleApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags role
* @name Get
* @summary
* @request GET:/api/admin/role/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputRoleGetOutput, any>({
path: `/api/admin/role/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags role
* @name GetList
* @summary
* @request GET:/api/admin/role/get-list
* @secure
*/
getList = (
query?: {
/** 名称 */
Name?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputListRoleGetListOutput, any>({
path: `/api/admin/role/get-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags role
* @name GetPage
* @summary
* @request POST:/api/admin/role/get-page
* @secure
*/
getPage = (data: PageInputRoleGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputRoleGetPageOutput, any>({
path: `/api/admin/role/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags role
* @name GetRoleUserList
* @summary
* @request GET:/api/admin/role/get-role-user-list
* @secure
*/
getRoleUserList = (
query?: {
/** 姓名 */
Name?: string
/**
* Id
* @format int64
*/
RoleId?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputListRoleGetRoleUserListOutput, any>({
path: `/api/admin/role/get-role-user-list`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags role
* @name AddRoleUser
* @summary
* @request POST:/api/admin/role/add-role-user
* @secure
*/
addRoleUser = (data: RoleAddRoleUserListInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/role/add-role-user`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags role
* @name RemoveRoleUser
* @summary
* @request POST:/api/admin/role/remove-role-user
* @secure
*/
removeRoleUser = (data: RoleAddRoleUserListInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/role/remove-role-user`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags role
* @name Add
* @summary
* @request POST:/api/admin/role/add
* @secure
*/
add = (data: RoleAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/role/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags role
* @name Update
* @summary
* @request PUT:/api/admin/role/update
* @secure
*/
update = (data: RoleUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/role/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags role
* @name Delete
* @summary
* @request DELETE:/api/admin/role/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/role/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags role
* @name BatchDelete
* @summary
* @request PUT:/api/admin/role/batch-delete
* @secure
*/
batchDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/role/batch-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags role
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/role/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/role/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags role
* @name BatchSoftDelete
* @summary
* @request PUT:/api/admin/role/batch-soft-delete
* @secure
*/
batchSoftDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/role/batch-soft-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags role
* @name SetDataScope
* @summary
* @request POST:/api/admin/role/set-data-scope
* @secure
*/
setDataScope = (data: RoleSetDataScopeInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/role/set-data-scope`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
}

153
src/api/admin/Room.ts Normal file
View File

@ -0,0 +1,153 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
RoomAddInput,
RoomUpdateInput,
ResultOutputInt64,
ResultOutputListRoomGetListOutput,
ResultOutputRoomGetOutput,
PageInputRoomGetPageInput,
ResultOutputPageOutputRoomGetPageOutput
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class RoomApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags room
* @name Get
* @summary
* @request GET:/api/admin/room/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputRoomGetOutput, any>({
path: `/api/admin/room/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags room
* @name GetList
* @summary
* @request GET:/api/admin/room/get-page
* @secure
*/
getPage = (data: PageInputRoomGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputRoomGetPageOutput, any>({
path: `/api/admin/room/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags room
* @name Add
* @summary
* @request POST:/api/admin/room/add
* @secure
*/
add = (data: RoomAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/room/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags room
* @name Update
* @summary
* @request PUT:/api/admin/room/update
* @secure
*/
update = (data: RoomUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/room/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags room
* @name Delete
* @summary
* @request DELETE:/api/admin/room/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/room/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags room
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/room/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/room/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
}

181
src/api/admin/SiteMsg.ts Normal file
View File

@ -0,0 +1,181 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
PageInputSiteMsgGetPageInput,
ResultOutputBoolean,
ResultOutputPageOutputSiteMsgGetPageOutput,
ResultOutputSiteMsgGetContentOutput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class SiteMsgApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags site-msg
* @name GetContent
* @summary
* @request GET:/api/admin/site-msg/get-content
* @secure
*/
getContent = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputSiteMsgGetContentOutput, any>({
path: `/api/admin/site-msg/get-content`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags site-msg
* @name GetPage
* @summary
* @request POST:/api/admin/site-msg/get-page
* @secure
*/
getPage = (data: PageInputSiteMsgGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputSiteMsgGetPageOutput, any>({
path: `/api/admin/site-msg/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags site-msg
* @name IsUnread
* @summary
* @request GET:/api/admin/site-msg/is-unread
* @secure
*/
isUnread = (params: RequestParams = {}) =>
this.request<ResultOutputBoolean, any>({
path: `/api/admin/site-msg/is-unread`,
method: 'GET',
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags site-msg
* @name SetAllRead
* @summary
* @request POST:/api/admin/site-msg/set-all-read
* @secure
*/
setAllRead = (params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/site-msg/set-all-read`,
method: 'POST',
secure: true,
...params,
})
/**
* No description
*
* @tags site-msg
* @name SetRead
* @summary
* @request POST:/api/admin/site-msg/set-read
* @secure
*/
setRead = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/site-msg/set-read`,
method: 'POST',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags site-msg
* @name BatchSetRead
* @summary
* @request POST:/api/admin/site-msg/batch-set-read
* @secure
*/
batchSetRead = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/site-msg/batch-set-read`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags site-msg
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/site-msg/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/site-msg/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags site-msg
* @name BatchSoftDelete
* @summary
* @request POST:/api/admin/site-msg/batch-soft-delete
* @secure
*/
batchSoftDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/site-msg/batch-soft-delete`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
}

287
src/api/admin/Task.ts Normal file
View File

@ -0,0 +1,287 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
PageInputTaskGetPageInput,
ResultOutputPageOutputTaskGetPageOutput,
ResultOutputString,
ResultOutputTaskGetOutput,
TaskAddInput,
TaskUpdateInput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class TaskApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags task
* @name GetAlerEmail
* @summary
* @request GET:/api/admin/task/get-aler-email
* @secure
*/
getAlerEmail = (
query?: {
id?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputString, any>({
path: `/api/admin/task/get-aler-email`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags task
* @name Get
* @summary
* @request GET:/api/admin/task/get
* @secure
*/
get = (
query?: {
id?: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputTaskGetOutput, any>({
path: `/api/admin/task/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags task
* @name GetPage
* @summary
* @request POST:/api/admin/task/get-page
* @secure
*/
getPage = (data: PageInputTaskGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputTaskGetPageOutput, any>({
path: `/api/admin/task/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags task
* @name Add
* @summary
* @request POST:/api/admin/task/add
* @secure
*/
add = (data: TaskAddInput, params: RequestParams = {}) =>
this.request<ResultOutputString, any>({
path: `/api/admin/task/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags task
* @name Update
* @summary
* @request PUT:/api/admin/task/update
* @secure
*/
update = (data: TaskUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/task/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags task
* @name Pause
* @summary
* @request POST:/api/admin/task/pause
* @secure
*/
pause = (
query: {
id: string
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/task/pause`,
method: 'POST',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags task
* @name Resume
* @summary
* @request POST:/api/admin/task/resume
* @secure
*/
resume = (
query: {
id: string
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/task/resume`,
method: 'POST',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags task
* @name Run
* @summary
* @request POST:/api/admin/task/run
* @secure
*/
run = (
query: {
id: string
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/task/run`,
method: 'POST',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags task
* @name Delete
* @summary
* @request DELETE:/api/admin/task/delete
* @secure
*/
delete = (
query: {
id: string
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/task/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags task
* @name BatchRun
* @summary
* @request PUT:/api/admin/task/batch-run
* @secure
*/
batchRun = (data: string[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/task/batch-run`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags task
* @name BatchPause
* @summary
* @request PUT:/api/admin/task/batch-pause
* @secure
*/
batchPause = (data: string[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/task/batch-pause`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags task
* @name BatchResume
* @summary
* @request PUT:/api/admin/task/batch-resume
* @secure
*/
batchResume = (data: string[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/task/batch-resume`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags task
* @name BatchDelete
* @summary
* @request PUT:/api/admin/task/batch-delete
* @secure
*/
batchDelete = (data: string[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/task/batch-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
}

36
src/api/admin/TaskLog.ts Normal file
View File

@ -0,0 +1,36 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { PageInputTaskLogGetPageInput, ResultOutputPageOutputTaskLog } from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class TaskLogApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags task-log
* @name GetPage
* @summary
* @request POST:/api/admin/task-log/get-page
* @secure
*/
getPage = (data: PageInputTaskLogGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputTaskLog, any>({
path: `/api/admin/task-log/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
}

213
src/api/admin/Tenant.ts Normal file
View File

@ -0,0 +1,213 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
PageInputTenantGetPageInput,
ResultOutputInt64,
ResultOutputPageOutputTenantGetPageOutput,
ResultOutputTenantGetOutput,
ResultOutputTokenInfo,
TenantAddInput,
TenantSetEnableInput,
TenantUpdateInput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class TenantApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags tenant
* @name Get
* @summary
* @request GET:/api/admin/tenant/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputTenantGetOutput, any>({
path: `/api/admin/tenant/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags tenant
* @name GetPage
* @summary
* @request POST:/api/admin/tenant/get-page
* @secure
*/
getPage = (data: PageInputTenantGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputTenantGetPageOutput, any>({
path: `/api/admin/tenant/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags tenant
* @name Add
* @summary
* @request POST:/api/admin/tenant/add
* @secure
*/
add = (data: TenantAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/tenant/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags tenant
* @name Update
* @summary
* @request PUT:/api/admin/tenant/update
* @secure
*/
update = (data: TenantUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/tenant/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags tenant
* @name Delete
* @summary
* @request DELETE:/api/admin/tenant/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/tenant/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags tenant
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/tenant/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/tenant/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags tenant
* @name BatchSoftDelete
* @summary
* @request PUT:/api/admin/tenant/batch-soft-delete
* @secure
*/
batchSoftDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/tenant/batch-soft-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags tenant
* @name SetEnable
* @summary
* @request POST:/api/admin/tenant/set-enable
* @secure
*/
setEnable = (data: TenantSetEnableInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/tenant/set-enable`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags tenant
* @name OneClickLogin
* @summary
* @request POST:/api/admin/tenant/one-click-login
* @secure
*/
oneClickLogin = (
query?: {
/** @format int64 */
tenantId?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputTokenInfo, any>({
path: `/api/admin/tenant/one-click-login`,
method: 'POST',
query: query,
secure: true,
format: 'json',
...params,
})
}

495
src/api/admin/User.ts Normal file
View File

@ -0,0 +1,495 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
PageInput,
PageInputUserGetPageInput,
ResultOutputInt64,
ResultOutputPageOutputUserGetDeletedUserPageOutput,
ResultOutputPageOutputUserGetPageOutput,
ResultOutputString,
ResultOutputTokenInfo,
ResultOutputUserGetBasicOutput,
ResultOutputUserGetOutput,
ResultOutputUserGetPermissionOutput,
UserAddInput,
UserAddMemberInput,
UserBatchSetOrgInput,
UserChangePasswordInput,
UserResetPasswordInput,
UserRestoreInput,
UserSetEnableInput,
UserSetManagerInput,
UserUpdateBasicInput,
UserUpdateInput,
UserUpdateMemberInput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class UserApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags user
* @name Get
* @summary
* @request GET:/api/admin/user/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputUserGetOutput, any>({
path: `/api/admin/user/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags user
* @name GetPage
* @summary
* @request POST:/api/admin/user/get-page
* @secure
*/
getPage = (data: PageInputUserGetPageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputUserGetPageOutput, any>({
path: `/api/admin/user/get-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags user
* @name GetDeletedPage
* @summary
* @request POST:/api/admin/user/get-deleted-page
* @secure
*/
getDeletedPage = (data: PageInput, params: RequestParams = {}) =>
this.request<ResultOutputPageOutputUserGetDeletedUserPageOutput, any>({
path: `/api/admin/user/get-deleted-page`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags user
* @name GetBasic
* @summary
* @request GET:/api/admin/user/get-basic
* @secure
*/
getBasic = (params: RequestParams = {}) =>
this.request<ResultOutputUserGetBasicOutput, any>({
path: `/api/admin/user/get-basic`,
method: 'GET',
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags user
* @name GetPermission
* @summary
* @request GET:/api/admin/user/get-permission
* @secure
*/
getPermission = (params: RequestParams = {}) =>
this.request<ResultOutputUserGetPermissionOutput, any>({
path: `/api/admin/user/get-permission`,
method: 'GET',
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags user
* @name Add
* @summary
* @request POST:/api/admin/user/add
* @secure
*/
add = (data: UserAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/user/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags user
* @name Update
* @summary
* @request PUT:/api/admin/user/update
* @secure
*/
update = (data: UserUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags user
* @name AddMember
* @summary
* @request POST:/api/admin/user/add-member
* @secure
*/
addMember = (data: UserAddMemberInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/user/add-member`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags user
* @name UpdateMember
* @summary
* @request PUT:/api/admin/user/update-member
* @secure
*/
updateMember = (data: UserUpdateMemberInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/update-member`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags user
* @name UpdateBasic
* @summary
* @request PUT:/api/admin/user/update-basic
* @secure
*/
updateBasic = (data: UserUpdateBasicInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/update-basic`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags user
* @name ChangePassword
* @summary
* @request PUT:/api/admin/user/change-password
* @secure
*/
changePassword = (data: UserChangePasswordInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/change-password`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags user
* @name ResetPassword
* @summary
* @request POST:/api/admin/user/reset-password
* @secure
*/
resetPassword = (data: UserResetPasswordInput, params: RequestParams = {}) =>
this.request<ResultOutputString, any>({
path: `/api/admin/user/reset-password`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags user
* @name SetManager
* @summary
* @request POST:/api/admin/user/set-manager
* @secure
*/
setManager = (data: UserSetManagerInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/set-manager`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags user
* @name SetEnable
* @summary
* @request POST:/api/admin/user/set-enable
* @secure
*/
setEnable = (data: UserSetEnableInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/set-enable`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags user
* @name Restore
* @summary
* @request POST:/api/admin/user/restore
* @secure
*/
restore = (data: UserRestoreInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/restore`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags user
* @name BatchSetOrg
* @summary
* @request PUT:/api/admin/user/batch-set-org
* @secure
*/
batchSetOrg = (data: UserBatchSetOrgInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/batch-set-org`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags user
* @name Delete
* @summary
* @request DELETE:/api/admin/user/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags user
* @name BatchDelete
* @summary
* @request PUT:/api/admin/user/batch-delete
* @secure
*/
batchDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/batch-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags user
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/user/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags user
* @name BatchSoftDelete
* @summary
* @request PUT:/api/admin/user/batch-soft-delete
* @secure
*/
batchSoftDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/batch-soft-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags user
* @name AvatarUpload
* @summary
* @request POST:/api/admin/user/avatar-upload
* @secure
*/
avatarUpload = (
data: {
/** @format binary */
file?: File
},
query?: {
/** @default false */
autoUpdate?: boolean
},
params: RequestParams = {}
) =>
this.request<ResultOutputString, any>({
path: `/api/admin/user/avatar-upload`,
method: 'POST',
query: query,
body: data,
secure: true,
type: ContentType.FormData,
format: 'json',
...params,
})
/**
* No description
*
* @tags user
* @name OneClickLogin
* @summary
* @request GET:/api/admin/user/one-click-login
* @secure
*/
oneClickLogin = (
query: {
userName: string
},
params: RequestParams = {}
) =>
this.request<ResultOutputTokenInfo, any>({
path: `/api/admin/user/one-click-login`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags user
* @name ForceOffline
* @summary 线
* @request POST:/api/admin/user/force-offline
* @secure
*/
forceOffline = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/user/force-offline`,
method: 'POST',
query: query,
secure: true,
...params,
})
}

206
src/api/admin/View.ts Normal file
View File

@ -0,0 +1,206 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { AxiosResponse } from 'axios'
import {
ResultOutputInt64,
ResultOutputListViewGetListOutput,
ResultOutputViewGetOutput,
ViewAddInput,
ViewGetListInput,
ViewSyncInput,
ViewUpdateInput,
} from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class ViewApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags view
* @name Get
* @summary
* @request GET:/api/admin/view/get
* @secure
*/
get = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<ResultOutputViewGetOutput, any>({
path: `/api/admin/view/get`,
method: 'GET',
query: query,
secure: true,
format: 'json',
...params,
})
/**
* No description
*
* @tags view
* @name GetList
* @summary
* @request POST:/api/admin/view/get-list
* @secure
*/
getList = (data: ViewGetListInput, params: RequestParams = {}) =>
this.request<ResultOutputListViewGetListOutput, any>({
path: `/api/admin/view/get-list`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags view
* @name Add
* @summary
* @request POST:/api/admin/view/add
* @secure
*/
add = (data: ViewAddInput, params: RequestParams = {}) =>
this.request<ResultOutputInt64, any>({
path: `/api/admin/view/add`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags view
* @name Update
* @summary
* @request PUT:/api/admin/view/update
* @secure
*/
update = (data: ViewUpdateInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/view/update`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags view
* @name Delete
* @summary
* @request DELETE:/api/admin/view/delete
* @secure
*/
delete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/view/delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags view
* @name BatchDelete
* @summary
* @request PUT:/api/admin/view/batch-delete
* @secure
*/
batchDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/view/batch-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags view
* @name SoftDelete
* @summary
* @request DELETE:/api/admin/view/soft-delete
* @secure
*/
softDelete = (
query?: {
/** @format int64 */
id?: number
},
params: RequestParams = {}
) =>
this.request<AxiosResponse, any>({
path: `/api/admin/view/soft-delete`,
method: 'DELETE',
query: query,
secure: true,
...params,
})
/**
* No description
*
* @tags view
* @name BatchSoftDelete
* @summary
* @request PUT:/api/admin/view/batch-soft-delete
* @secure
*/
batchSoftDelete = (data: number[], params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/view/batch-soft-delete`,
method: 'PUT',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
/**
* No description
*
* @tags view
* @name Sync
* @summary
* @request POST:/api/admin/view/sync
* @secure
*/
sync = (data: ViewSyncInput, params: RequestParams = {}) =>
this.request<AxiosResponse, any>({
path: `/api/admin/view/sync`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
...params,
})
}

View File

@ -0,0 +1,53 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import { ResultOutputBoolean, ResultOutputObject, WebSocketPreConnectInput } from './data-contracts'
import { ContentType, HttpClient, RequestParams } from './http-client'
export class WebSocketApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
/**
* No description
*
* @tags web-socket
* @name PreConnect
* @summary websocket分区
* @request POST:/api/admin/web-socket/pre-connect
* @secure
*/
preConnect = (data: WebSocketPreConnectInput, params: RequestParams = {}) =>
this.request<ResultOutputObject, any>({
path: `/api/admin/web-socket/pre-connect`,
method: 'POST',
body: data,
secure: true,
type: ContentType.Json,
format: 'json',
...params,
})
/**
* No description
*
* @tags web-socket
* @name IsUseIm
* @summary 使im
* @request GET:/api/admin/web-socket/is-use-im
* @secure
*/
isUseIm = (params: RequestParams = {}) =>
this.request<ResultOutputBoolean, any>({
path: `/api/admin/web-socket/is-use-im`,
method: 'GET',
secure: true,
format: 'json',
...params,
})
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,128 @@
/** 账号类型 */
export const AccountType = {
UserName: { name: 'UserName', value: 1, desc: '账号' },
Email: { name: 'Email', value: 2, desc: '邮箱' },
Phone: { name: 'Phone', value: 3, desc: '手机号' },
AAD: { name: 'AAD', value: 4, desc: 'AAD' },
}
/** 密码加密类型 */
export const PasswordEncryptType = {
MD5Encrypt32: { name: 'MD5Encrypt32', value: 0, desc: '32位MD5加密' },
PasswordHasher: { name: 'PasswordHasher', value: 1, desc: '标准标识密码哈希' },
}
/** 用户状态 */
export const UserStatus = {
WaitChangePasssword: { name: 'WaitChangePasssword', value: 2, desc: '待修改密码' },
WaitActive: { name: 'WaitActive', value: 3, desc: '待激活' },
}
/** 性别 */
export const Sex = {
Unknown: { name: 'Unknown', value: 0, desc: '未知' },
Male: { name: 'Male', value: 1, desc: '男' },
Female: { name: 'Female', value: 2, desc: '女' },
}
/** 角色类型 */
export const RoleType = {
Group: { name: 'Group', value: 1, desc: '分组' },
Role: { name: 'Role', value: 2, desc: '角色' },
}
/** 地区级别 */
export const RegionLevel = {
Province: { name: 'Province', value: 1, desc: '省份' },
City: { name: 'City', value: 2, desc: '城市' },
County: { name: 'County', value: 3, desc: '县/区' },
Town: { name: 'Town', value: 4, desc: '镇/乡' },
Vilage: { name: 'Vilage', value: 5, desc: '村/社区' },
}
/** 权限类型 */
export const PermissionType = {
Group: { name: 'Group', value: 1, desc: '分组' },
Menu: { name: 'Menu', value: 2, desc: '菜单' },
Dot: { name: 'Dot', value: 3, desc: '权限点' },
}
/** 消息状态 */
export const MsgStatusEnum = {
Draft: { name: 'Draft', value: 1, desc: '草稿' },
Published: { name: 'Published', value: 2, desc: '已发布' },
Scheduled: { name: 'Scheduled', value: 3, desc: '定时发布' },
Revoked: { name: 'Revoked', value: 4, desc: '已撤销' },
Archived: { name: 'Archived', value: 5, desc: '已归档' },
}
/** 文档类型 */
export const DocType = {
Group: { name: 'Group', value: 1, desc: '分组' },
Markdown: { name: 'Markdown', value: 2, desc: 'Markdown文档' },
}
/** 缓存类型 */
export const CacheType = {
Memory: { name: 'Memory', value: 0, desc: '内存缓存' },
Redis: { name: 'Redis', value: 1, desc: 'Redis缓存' },
}
/** 租户类型 */
export const TenantType = {
Platform: { name: 'Platform', value: 1, desc: '平台' },
Tenant: { name: 'Tenant', value: 2, desc: '租户' },
}
/** 数据范围 */
export const DataScope = {
All: { name: 'All', value: 1, desc: '全部' },
DeptWithChild: { name: 'DeptWithChild', value: 2, desc: '本部门和下级部门' },
Dept: { name: 'Dept', value: 3, desc: '本部门' },
Self: { name: 'Self', value: 4, desc: '本人数据' },
Custom: { name: 'Custom', value: 5, desc: '指定部门' },
}
/** 用户类型 */
export const UserType = {
Member: { name: 'Member', value: 0, desc: '会员' },
DefaultUser: { name: 'DefaultUser', value: 1, desc: '普通用户' },
TenantAdmin: { name: 'TenantAdmin', value: 10, desc: '租户管理员' },
PlatformAdmin: { name: 'PlatformAdmin', value: 100, desc: '平台管理员' },
}
/** 接口版本 */
export const ApiVersion = {
V1: { name: 'V1', value: 1, desc: 'V1 版本' },
V2: { name: 'V2', value: 2, desc: 'V2 版本' },
}
/** 内容类型 */
export const ContentTypeEnum = {
FormData: { name: 'FormData', value: 0, desc: '表单数据' },
Json: { name: 'Json', value: 1, desc: 'Json格式' },
}
/** 状态码枚举 */
export const StatusCodes = {
Status0NotOk: { name: 'Status0NotOk', value: 0, desc: '操作失败' },
Status1Ok: { name: 'Status1Ok', value: 1, desc: '操作成功' },
Status401Unauthorized: { name: 'Status401Unauthorized', value: 401, desc: '未登录' },
Status403Forbidden: { name: 'Status403Forbidden', value: 403, desc: '权限不足' },
Status404NotFound: { name: 'Status404NotFound', value: 404, desc: '资源不存在' },
Status500InternalServerError: { name: 'Status500InternalServerError', value: 500, desc: '系统内部错误' },
}
/** 排序方式 */
export const SortOrder = {
Asc: { name: 'Asc', value: 0, desc: '' },
Desc: { name: 'Desc', value: 1, desc: '' },
}
/** 应用程序类型 */
export const AppType = {
Controllers: { name: 'Controllers', value: 0, desc: '' },
ControllersWithViews: { name: 'ControllersWithViews', value: 1, desc: '' },
MVC: { name: 'MVC', value: 2, desc: '' },
}

View File

@ -0,0 +1,465 @@
/* eslint-disable */
/* tslint:disable */
// @ts-nocheck
/*
* ---------------------------------------------------------------
* ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
* ## ##
* ## AUTHOR: acacode ##
* ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
* ---------------------------------------------------------------
*/
import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, HeadersDefaults, RawAxiosRequestHeaders, ResponseType } from 'axios'
import { ElLoading, ElMessage, LoadingOptions } from 'element-plus'
import { useUserInfo } from '/@/stores/userInfo'
export type QueryParamsType = Record<string | number, any>
export interface FullRequestParams extends Omit<AxiosRequestConfig, 'data' | 'params' | 'url' | 'responseType'> {
/** set parameter to `true` for call `securityWorker` for this request */
secure?: boolean
/** request path */
path: string
/** content type of request body */
type?: ContentType
/** query params */
query?: QueryParamsType
/** format of response (i.e. response.json() -> format: "json") */
format?: ResponseType
/** request body */
body?: unknown
/** 显示错误消息 */
showErrorMessage?: boolean
/** 显示成功消息 */
showSuccessMessage?: boolean
/** 登录访问 */
login?: boolean
/** 加载中 */
loading?: boolean
/** 加载中选项 */
loadingOptions?: LoadingOptions
/** 取消重复请求 */
cancelRepeatRequest?: boolean
/** 返回整个响应对象 */
returnResponse?: boolean
}
export type RequestParams = Omit<FullRequestParams, 'body' | 'method' | 'query' | 'path'>
export interface ApiConfig<SecurityDataType = unknown> extends Omit<AxiosRequestConfig, 'data' | 'cancelToken'> {
securityWorker?: (securityData: SecurityDataType | null) => Promise<AxiosRequestConfig | void> | AxiosRequestConfig | void
secure?: boolean
format?: ResponseType
}
export enum ContentType {
Json = 'application/json',
FormData = 'multipart/form-data',
UrlEncoded = 'application/x-www-form-urlencoded',
Text = 'text/plain',
}
export interface LoadingInstance {
target: any
count: number
}
const pendingMap = new Map()
const loadingInstance: LoadingInstance = {
target: null,
count: 0,
}
export class HttpClient<SecurityDataType = unknown> {
public instance: AxiosInstance
private securityData: SecurityDataType | null = null
private securityWorker?: ApiConfig<SecurityDataType>['securityWorker']
private secure?: boolean
private format?: ResponseType
constructor({ securityWorker, secure, format, ...axiosConfig }: ApiConfig<SecurityDataType> = {}) {
this.instance = axios.create({ ...axiosConfig, timeout: 60000, baseURL: axiosConfig.baseURL || import.meta.env.VITE_API_URL })
this.secure = secure
this.format = format
this.securityWorker = securityWorker
}
public setSecurityData = (data: SecurityDataType | null) => {
this.securityData = data
}
protected mergeRequestParams(params1: AxiosRequestConfig, params2?: AxiosRequestConfig): AxiosRequestConfig {
const method = params1.method || (params2 && params2.method)
return {
...this.instance.defaults,
...params1,
...(params2 || {}),
headers: {
...((method && this.instance.defaults.headers[method.toLowerCase() as keyof HeadersDefaults]) || {}),
...(params1.headers || {}),
...((params2 && params2.headers) || {}),
} as RawAxiosRequestHeaders,
}
}
protected stringifyFormItem(formItem: unknown) {
if (typeof formItem === 'object' && formItem !== null) {
return JSON.stringify(formItem)
} else {
return `${formItem}`
}
}
protected createFormData(input: Record<string, unknown>): FormData {
return Object.keys(input || {}).reduce((formData, key) => {
const property = input[key]
const propertyContent: any[] = property instanceof Array ? property : [property]
for (const formItem of propertyContent) {
const isFileType = formItem instanceof Blob || formItem instanceof File
formData.append(key, isFileType ? formItem : this.stringifyFormItem(formItem))
}
return formData
}, new FormData())
}
/**
*
* @param {*} error
*/
protected errorHandle(error: any) {
if (!error) {
return
}
if (axios.isCancel(error)) return console.error('请求重复已被自动取消:' + error.message)
let message = ''
if (error.response) {
switch (error.response.status) {
case 302:
message = '接口重定向'
break
case 400:
message = '参数不正确'
break
case 401:
message = '您还没有登录'
break
case 403:
message = '您没有权限操作'
break
case 404:
message = '请求地址出错:' + error.response.config.url
break
case 408:
message = '请求超时'
break
case 409:
message = '系统已存在相同数据'
break
case 429:
message = '访问过于频繁'
break
case 500:
message = '服务器内部错误'
break
case 501:
message = '服务未实现'
break
case 502:
message = '网关错误'
break
case 503:
message = '服务不可用'
break
case 504:
message = '服务暂时无法访问,请稍后再试'
break
case 505:
message = 'HTTP版本不受支持'
break
default:
message = '异常问题,请联系网站管理员'
break
}
}
if (error.message.includes('timeout')) message = '请求超时'
if (error.message.includes('Network')) message = window.navigator.onLine ? '服务端异常' : '您已断网'
if (message) {
ElMessage.error({ message, grouping: true })
}
}
/**
* token接口
* @param string refreshToken
*/
protected async refreshApi(refreshToken: string) {
return this.request<AxiosResponse, any>({
path: `/api/admin/auth/refresh`,
method: 'GET',
secure: true,
format: 'json',
login: false,
query: {
token: refreshToken,
},
})
}
/**
* token
* @param {*} config
*/
protected async refreshToken(config: any) {
const storesUseUserInfo = useUserInfo()
const token = storesUseUserInfo.getToken()
if (!token) {
storesUseUserInfo.clear()
return Promise.reject(config)
}
if (window.tokenRefreshing) {
window.requests = window.requests ? window.requests : []
return new Promise((resolve) => {
window.requests.push(() => {
resolve(this.instance(config))
})
})
}
window.tokenRefreshing = true
return this.refreshApi(token)
.then((res) => {
if (res?.success) {
storesUseUserInfo.setTokenInfo(res.data)
if (window.requests?.length > 0) {
window.requests.forEach((apiRequest) => apiRequest())
window.requests = []
}
return this.instance(config)
} else {
storesUseUserInfo.clear()
return Promise.reject(res)
}
})
.catch((error) => {
storesUseUserInfo.clear()
return Promise.reject(error)
})
.finally(() => {
window.tokenRefreshing = false
})
}
/**
* cancel回调,
*/
protected addPending(config: AxiosRequestConfig) {
const pendingKey = this.getPendingKey(config)
config.cancelToken =
config.cancelToken ||
new axios.CancelToken((cancel) => {
if (!pendingMap.has(pendingKey)) {
pendingMap.set(pendingKey, cancel)
}
})
}
/**
*
*/
protected removePending(config: AxiosRequestConfig) {
const pendingKey = this.getPendingKey(config)
if (pendingMap.has(pendingKey)) {
const cancelToken = pendingMap.get(pendingKey)
cancelToken(pendingKey)
pendingMap.delete(pendingKey)
}
}
/**
* key
*/
protected getPendingKey(config: AxiosRequestConfig) {
let { data, headers } = config
headers = headers as RawAxiosRequestHeaders
const { url, method, params } = config
if (typeof data === 'string') data = JSON.parse(data)
return [url, method, headers && headers.Authorization ? headers.Authorization : '', JSON.stringify(params), JSON.stringify(data)].join('&')
}
/**
* Loading层实例
*/
protected closeLoading(loading: boolean = false) {
if (loading && loadingInstance.count > 0) loadingInstance.count--
if (loadingInstance.count === 0) {
loadingInstance.target.close()
loadingInstance.target = null
}
}
public request = async <T = any, _E = any>({
secure,
path,
type,
query,
format,
body,
showErrorMessage = true,
showSuccessMessage = false,
login = true,
loading = false,
loadingOptions = {
background: 'rgba(0,0,0,0.5)',
},
cancelRepeatRequest = false,
returnResponse = false,
...params
}: FullRequestParams): Promise<T> => {
const secureParams =
((typeof secure === 'boolean' ? secure : this.secure) && this.securityWorker && (await this.securityWorker(this.securityData))) || {}
const requestParams = this.mergeRequestParams(params, secureParams)
const responseFormat = format || this.format || undefined
if (type === ContentType.FormData && body && body !== null && typeof body === 'object') {
body = this.createFormData(body as Record<string, unknown>)
}
if (type === ContentType.Text && body && body !== null && typeof body !== 'string') {
body = JSON.stringify(body)
}
// 请求拦截
this.instance.interceptors.request.use(
async (config) => {
this.removePending(config)
cancelRepeatRequest && this.addPending(config)
if (loading) {
loadingInstance.count++
if (loadingInstance.count === 1) {
loadingInstance.target = ElLoading.service(loadingOptions)
}
}
const storesUseUserInfo = useUserInfo()
const tokenInfo = storesUseUserInfo.getTokenInfo()
if (tokenInfo && tokenInfo.accessToken) {
// 判断 accessToken 是否快失效
const now = new Date().getTime()
const expiresAt = new Date(tokenInfo.accessTokenExpiresAt).getTime()
const maxThreshold = tokenInfo.accessTokenLifeTime * 0.5
// 确保阈值不超过 5 分钟且不超过 accessTokenLifeTime 的一半
const threshold = Math.min(5 * 60 * 1000, maxThreshold)
if (expiresAt - now < threshold) {
//加锁
if (!window.tokenRefreshing) {
window.tokenRefreshing = true
try {
const res = await this.refreshApi(tokenInfo.accessToken)
if (res?.success) {
storesUseUserInfo.setTokenInfo(res.data)
//处理等待队列中的请求
if (window.requests?.length > 0) {
window.requests.forEach((apiRequest) => apiRequest())
window.requests = []
}
} else {
storesUseUserInfo.clear()
return Promise.reject(res)
}
} catch (error) {
// 清空等待队列
window.requests = []
return Promise.reject(error)
} finally {
// 解锁
window.tokenRefreshing = false
}
} else {
// 如果正在刷新,则将当前请求加入等待队列
if (config.url !== '/api/admin/auth/refresh') {
window.requests = window.requests ? window.requests : []
return new Promise((resolve) => {
window.requests.push(() => {
resolve(this.instance(config))
})
})
}
}
}
}
const accessToken = storesUseUserInfo.getToken()
config.headers!['Authorization'] = `Bearer ${accessToken}`
return config
},
(error) => {
return Promise.reject(error)
}
)
// 响应拦截
this.instance.interceptors.response.use(
(res) => {
this.removePending(res.config)
loading && this.closeLoading(loading)
if (res.config?.responseType == 'blob') {
return res
}
const data = res.data
if (data.success) {
if (showSuccessMessage) {
ElMessage.success({ message: data.msg ? data.msg : '操作成功', grouping: true })
}
} else {
if (showErrorMessage) {
ElMessage.error({ message: data.msg ? data.msg : '操作失败', grouping: true })
}
// return Promise.reject(res)
}
return res
},
async (error) => {
error.config && this.removePending(error.config)
loading && this.closeLoading(loading)
//刷新token
if (login && error?.response?.status === 401) {
return this.refreshToken(error.config)
}
//错误处理
if (showErrorMessage) {
this.errorHandle(error)
}
return Promise.reject(error)
}
)
return this.instance
.request({
...requestParams,
headers: {
...(requestParams.headers || {}),
...(type && type !== ContentType.FormData ? { 'Content-Type': type } : {}),
} as RawAxiosRequestHeaders,
params: query,
responseType: responseFormat,
data: body,
url: path,
})
.then((response) => (returnResponse ? response : response.data))
}
}

View File

@ -0,0 +1,9 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742649432954"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1700"
xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32">
<path
d="M195 131.2c-11 0-20 9-20 20v619.2c0 11 9 20 20 20s20-9 20-20V151.2c0-11-8.9-20-20-20zM513 429.9c-11 0-20 9-20 20v320.5c0 11 9 20 20 20s20-9 20-20V449.9c0-11-8.9-20-20-20zM831.1 271.1c-11 0-20 9-20 20v479.4c0 11 9 20 20 20s20-9 20-20V291.1c0-11.1-9-20-20-20z"
p-id="1701"></path>
<path d="M968 897.7H58.1c-11 0-20 9-20 20s9 20 20 20H968c11 0 20-9 20-20s-9-20-20-20z" p-id="1702"></path>
</svg>

After

Width:  |  Height:  |  Size: 741 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742746024557" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1618" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M99.29697 844.024242h825.40606v80.678788H99.29697zM37.236364 757.139394h31.030303c18.618182 0 24.824242 6.206061 24.824242 24.824242v198.59394c0 18.618182-6.206061 24.824242-24.824242 24.824242H37.236364c-18.618182 0-24.824242-6.206061-24.824243-24.824242v-198.59394c0-12.412121 12.412121-24.824242 24.824243-24.824242z m0 0" p-id="1619"></path><path d="M949.527273 757.139394h31.030303c18.618182 0 24.824242 6.206061 24.824242 24.824242v198.59394c0 18.618182-6.206061 24.824242-24.824242 24.824242h-31.030303c-18.618182 0-24.824242-6.206061-24.824243-24.824242v-198.59394c0-12.412121 6.206061-24.824242 24.824243-24.824242z m0 0M477.866667 645.430303l434.424242-434.424242c12.412121-12.412121 12.412121-24.824242 0-37.236364L763.345455 24.824242c-12.412121-12.412121-24.824242-12.412121-37.236364 0l-434.424243 440.630303-6.20606 6.206061-31.030303 173.769697c0 6.206061 0 18.618182 6.20606 24.824242 6.206061 6.206061 12.412121 6.206061 24.824243 6.206061l179.975757-24.824242c6.206061 0 12.412121 0 12.412122-6.206061z m0 0" p-id="1620"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,8 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742649639774"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1436"
xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32">
<path
d="M179.2 569.6h268.8v-96h-268.8v-140.8l-179.2 192 179.2 192v-147.2z m844.8-44.8l-179.2-192v140.8H576v96h268.8v140.8l179.2-185.6z m-896-384h768v128h64v-192h-896v192h64v-128z m768 768h-768v-128h-64v192h896v-192h-64v128z"
p-id="1437"></path>
</svg>

After

Width:  |  Height:  |  Size: 590 B

View File

@ -0,0 +1,8 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742649643706"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1593"
xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32">
<path
d="M461.118012 178.086957l0 267.13043401 95.403727-1e-8 0-267.130434 139.925466 0-190.807453-178.086957-190.807454 178.086957 146.285714 0z m50.881988 833.192546l190.807453-178.086956-139.925465 1e-8 0-267.130435-95.403727-1e-8L467.478261 833.192547l-139.92546601 0 184.44720501 178.086956z m381.614907-884.074534l0 763.229814-127.204969 1e-8 0 63.60248399 190.807453 0 0-890.434783-190.807453 0 0 63.602485 127.204969 0z m-763.229814 763.229814l0-763.229814 127.204969 0 0-63.602485-190.807453 0 0 890.434783 190.807453 0 0-63.60248399-127.204969-1e-8z"
p-id="1594"></path>
</svg>

After

Width:  |  Height:  |  Size: 925 B

View File

@ -0,0 +1,11 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742820587871"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1618"
xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32">
<path
d="M606.71 838.93a4.87 4.87 0 0 1-4.92 4.92H173a4.87 4.87 0 0 1-4.92-4.92V172.25a4.87 4.87 0 0 1 4.92-4.92h428.79a4.87 4.87 0 0 1 4.92 4.92v102.89h60.52V172.25a65.51 65.51 0 0 0-65.44-65.44H173a65.51 65.51 0 0 0-65.44 65.44v666.68A65.51 65.51 0 0 0 173 904.37h428.79a65.51 65.51 0 0 0 65.44-65.44V714.1h-60.52z"
p-id="1619"></path>
<path
d="M712.04 294.25l-40.07 45.37 153.78 135.8H438.76v60.53h379.32L673.33 649.44l37.35 47.63 242.32-190-240.96-212.82z"
p-id="1620"></path>
</svg>

After

Width:  |  Height:  |  Size: 835 B

View File

@ -0,0 +1,8 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742649406972"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1502"
xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32">
<path
d="M1012.622222 512c0 17.066667-17.066667 34.133333-34.133333 34.133333h-261.688889v147.911111c0 17.066667-17.066667 34.133333-34.133333 34.133334s-34.133333-17.066667-34.133334-34.133334V546.133333H375.466667v335.644445c0 17.066667-17.066667 34.133333-34.133334 34.133333s-34.133333-17.066667-34.133333-34.133333V546.133333H45.511111C22.755556 546.133333 11.377778 529.066667 11.377778 512s17.066667-34.133333 34.133333-34.133333h267.377778V125.155556c0-17.066667 17.066667-34.133333 34.133333-34.133334s34.133333 17.066667 34.133334 34.133334v352.711111h273.066666V324.266667c0-17.066667 17.066667-34.133333 34.133334-34.133334s34.133333 17.066667 34.133333 34.133334v153.6h261.688889c17.066667 0 28.444444 17.066667 28.444444 34.133333z"
p-id="1503"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

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

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1714459829707" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2536" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M702.08 558.72a469.12 469.12 0 0 0-50.56-210.56 776.64 776.64 0 0 0-105.6-186.56A778.24 778.24 0 0 0 467.2 86.4c-10.88-9.6-37.76-27.2-58.88-44.16S384 28.16 384 50.88c22.72 248-217.92 433.28-261.44 540.16-83.2 208.32 27.2 366.4 224 397.12 26.24 4.16 29.44-4.8 9.92-20.16a192 192 0 0 1-75.52-224c29.44-86.08 103.04-111.04 131.52-250.56 4.48-22.4 22.08-27.52 40.64-11.2a768 768 0 0 1 173.44 234.88c25.92 74.88 38.4 151.36-101.44 248.96-20.48 14.4 8.64 27.52 35.2 24.96C746.88 972.8 930.56 800 928 653.44c0-53.76-51.2-168-112.32-256-13.76-19.52-28.8-16.32-32 6.4-6.08 64-8.32 110.72-56 164.16-15.04 18.88-26.88 13.44-25.6-9.28z" p-id="2537"></path></svg>

After

Width:  |  Height:  |  Size: 958 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742741578617" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1588" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M355.398 139.327c-15.858 0-30.395 2.643-43.611 7.929-18.501 10.572-33.699 24.448-45.593 41.628-11.894 17.18-17.841 37.664-17.841 61.451v99.115c0 15.858-1.322 31.717-3.965 47.575-2.643 15.858-6.608 30.395-11.894 43.611-13.215 29.074-31.717 52.861-55.504 71.363 23.788 18.501 42.289 42.289 55.504 71.363 5.286 13.215 9.251 27.752 11.894 43.611 2.643 15.858 3.965 31.717 3.965 47.575v99.115c0 15.858 2.643 30.395 7.929 43.611 5.286 13.215 12.555 25.109 21.805 35.681 9.251 10.572 20.484 18.502 33.699 23.788 13.215 5.286 27.752 7.929 43.611 7.929h7.929V960h-7.929c-23.788-2.643-46.254-7.929-67.398-15.858s-40.307-20.484-57.487-37.664-29.735-36.342-37.664-57.487c-7.929-21.145-13.215-40.968-15.858-59.469v-3.965a254.735 254.735 0 0 1 0-63.434V658.69c0-15.858-2.643-30.395-7.929-43.611-5.286-13.215-13.215-23.788-23.788-31.717v-3.965c-7.929-7.929-18.501-14.537-31.717-19.823v-3.965c-13.215-5.286-27.752-7.929-43.611-7.929H65.98v-71.363h3.965c15.858 0 30.395-2.643 43.611-7.929 26.431-13.215 44.932-33.038 55.504-59.469 5.286-13.215 7.929-27.752 7.929-43.611v-63.434a254.735 254.735 0 0 1 0-63.434c2.643-21.145 7.929-42.289 15.858-63.434 7.929-21.145 19.823-40.307 35.681-57.487s35.021-30.395 57.487-39.646S331.611 64 355.398 64h7.929v75.327h-7.929z m309.239 745.346c15.858 0 30.395-2.643 43.611-7.929 18.501-10.572 33.699-24.448 45.593-41.628s17.841-37.664 17.841-61.451V674.55c0-15.858 1.322-31.717 3.965-47.575 2.643-15.858 6.608-30.395 11.894-43.611 13.215-29.074 31.717-52.861 55.504-71.363-23.788-18.501-42.289-42.289-55.504-71.363-5.286-13.215-9.251-27.752-11.894-43.611-2.643-15.858-3.965-31.717-3.965-47.575v-99.115c0-15.858-2.643-30.395-7.929-43.611-5.286-13.215-12.555-25.109-21.805-35.681-9.251-10.572-20.484-18.501-33.699-23.788s-27.752-7.929-43.611-7.929h-3.965V67.965h3.965c23.788-2.643 46.254 0.661 67.398 9.912s40.307 22.466 57.487 39.646 29.735 36.342 37.664 57.487c7.929 21.145 13.215 40.968 15.858 59.469v3.965a254.735 254.735 0 0 1 0 63.434v63.434c0 15.858 2.643 30.395 7.929 43.611 5.286 13.215 13.215 23.788 23.788 31.717v3.965c7.929 7.929 18.502 14.537 31.717 19.823v3.965c13.215 5.286 27.752 7.929 43.611 7.929h7.929v71.363h-7.929c-15.858 0-30.395 2.643-43.611 7.929-26.431 13.215-44.932 33.038-55.504 59.469-5.286 13.215-7.929 27.752-7.929 43.611v63.434a254.735 254.735 0 0 1 0 63.434c-2.643 23.788-7.929 44.932-15.858 63.434-7.929 21.145-20.484 40.307-37.664 57.487s-36.342 29.734-57.487 37.664-43.611 11.894-67.398 11.894h-3.965v-71.363h3.963z" p-id="1589"></path></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

11
src/assets/icons/left.svg Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742649422234"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1376"
xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32">
<path
d="M926.2 225.9H277c-11.5 0-20.9-9.4-20.9-20.9 0-11.5 9.4-20.9 20.9-20.9h649.2c11.5 0 20.9 9.4 20.9 20.9 0 11.5-9.3 20.9-20.9 20.9zM613.1 540.7H277c-11.5 0-20.9-9.4-20.9-20.9 0-11.5 9.4-20.9 20.9-20.9h336c11.5 0 20.9 9.4 20.9 20.9 0.1 11.6-9.3 20.9-20.8 20.9zM779.6 855.6H277c-11.5 0-20.9-9.4-20.9-20.9 0-11.5 9.4-20.9 20.9-20.9h502.6c11.5 0 20.9 9.4 20.9 20.9 0 11.5-9.3 20.9-20.9 20.9z"
p-id="1377"></path>
<path
d="M116 987c-11.5 0-20.9-9.4-20.9-20.9V73.6c0-11.5 9.4-20.9 20.9-20.9s20.9 9.4 20.9 20.9v892.5c0 11.5-9.3 20.9-20.9 20.9z"
p-id="1378"></path>
</svg>

After

Width:  |  Height:  |  Size: 918 B

View File

@ -0,0 +1,8 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747576403127"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1799"
xmlns:xlink="http://www.w3.org/1999/xlink">
<path
d="M448 191.004444a64 64 0 1 0 128 0 64 64 0 0 0-128 0z m0 320a64 64 0 1 0 128 0 64 64 0 0 0-128 0z m0 320a64 64 0 1 0 128 0 64 64 0 0 0-128 0z"
fill-opacity=".65" p-id="1800"></path>
</svg>

After

Width:  |  Height:  |  Size: 511 B

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

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1727688134168" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8813" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M135.72096 579.80928c-31.86688 76.7488-37.09952 149.9648-11.43296 163.584 17.63328 9.49248 45.3632-12.032 71.2704-51.44576 10.3424 42.93632 35.64032 81.73568 71.8848 112.9984-38.0672 14.35136-62.87872 37.82144-62.87872 64.34304 0 43.65824 67.25632 78.93504 150.21056 78.93504 74.8032 0 136.832-28.70784 148.26496-66.4064a426.30656 426.30656 0 0 1 17.87904 0c11.43808 37.69856 73.58976 66.4064 148.39296 66.4064 82.944 0 150.21056-35.39456 150.21056-78.93504 0-26.5216-24.81152-49.99168-62.88384-64.34816 36.2496-31.1296 61.66528-70.05696 71.8848-112.99328 25.9072 39.40864 53.51424 60.81536 71.15264 51.45088 25.66144-13.6192 20.55168-86.9632-11.43808-163.58912-25.04704-60.32896-59.1104-104.72448-85.0176-114.58048 0.36864-3.76832 0.60928-7.7824 0.60928-11.55072 0-23.23456-6.31808-44.88192-17.152-62.39744 0.24576-1.33632 0.24576-2.79552 0.24576-4.13696 0-10.7008-2.55488-20.79744-6.8096-29.43488-6.56896-156.7744-106.42432-281.20576-268.07296-281.20576S250.4192 200.9344 243.968 357.71392a67.56864 67.56864 0 0 0-6.8096 29.43488c0 1.3312 0.12288 2.79552 0.12288 4.13184-10.7008 17.51552-17.02912 39.04512-17.02912 62.39744 0 3.8912 0.12288 7.65952 0.4864 11.55584-25.78432 9.85088-59.96544 54.2464-85.0176 114.57536z" p-id="8814"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1745160499480" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1739" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M927.232 224.256h-200.704V160.768c0-52.736-42.496-95.744-95.232-95.744H393.216c-52.736 0-95.744 43.008-95.744 95.744v64H96.768c-17.408 0-31.744 14.336-31.744 31.744 0 17.92 14.336 31.744 31.744 31.744H926.72c17.408 0 31.744-14.336 31.744-31.744 0.512-17.92-13.312-32.256-31.232-32.256zM361.472 160.768c0-17.408 14.336-31.744 31.744-31.744h238.08c17.408 0 31.232 13.824 31.232 31.744v64H361.472V160.768zM757.76 958.976H266.752c-57.856 0-104.96-43.008-104.96-95.744V383.488c-0.512-11.776 6.144-22.528 16.896-28.672s24.576-6.144 35.84 0c10.752 6.144 17.408 16.896 16.896 28.672v479.232c0 17.408 15.872 31.744 34.816 31.744h491.52c9.216 0 18.432-3.584 24.576-9.216 6.656-6.144 10.24-14.336 10.24-22.528V385.024c-0.512-11.776 6.144-22.528 16.896-28.672s24.576-6.144 35.84 0c10.752 6.144 17.408 16.896 16.896 28.672v478.208c0.512 52.736-46.592 95.744-104.448 95.744z" p-id="1740"></path><path d="M496.64 788.992l3.584-90.624s-97.792-3.584-116.224-6.656c-5.12 6.656-24.576 54.784-13.824 73.728 5.632 9.728 12.8 19.456 25.088 22.016l101.376 7.168v-5.632z m-140.8-53.76c5.12-47.104 59.392-110.08 59.392-110.08l35.328 22.528-43.52-93.184-103.936-4.096 33.792 20.992s-18.944 30.72-27.648 46.08c-8.704 15.36 1.024 29.696 1.024 29.696l45.568 88.064z m314.88-198.656l-78.848 41.984s45.568 88.064 52.224 105.984c8.192 1.536 58.88-5.632 69.632-24.576 5.632-9.728 10.24-20.992 6.144-33.28l-44.544-93.184-4.608 3.072z m24.576 151.552c-42.496 18.944-122.88 2.56-122.88 2.56l1.536-42.496-57.344 84.992 48.64 94.208 1.024-40.448s35.328 1.536 52.736 1.024c17.408 0 24.576-15.36 24.576-15.36l51.712-84.48z m-325.12-179.2l75.264 48.64s52.224-84.48 64-99.328c-3.072-8.192-34.304-49.152-55.296-49.152-11.264 0-23.04 1.536-31.232 11.264L365.568 505.856l4.608 3.072z m115.712-97.28c37.376 28.16 64 107.52 64 107.52l-36.864 19.968 100.864 8.192 55.808-90.112-34.816 19.456s-16.384-32.256-25.6-47.104c-8.704-15.36-25.6-13.824-25.6-13.824l-97.792-4.096z" p-id="1741"></path></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,11 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742649426690"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1538"
xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32">
<path
d="M101.8 225.9H751c11.5 0 20.9-9.4 20.9-20.9 0-11.5-9.4-20.9-20.9-20.9H101.8c-11.5 0-20.9 9.4-20.9 20.9 0 11.5 9.3 20.9 20.9 20.9zM414.9 540.7h336c11.5 0 20.9-9.4 20.9-20.9 0-11.5-9.4-20.9-20.9-20.9h-336c-11.5 0-20.9 9.4-20.9 20.9 0 11.6 9.4 20.9 20.9 20.9zM248.4 855.6H751c11.5 0 20.9-9.4 20.9-20.9 0-11.5-9.4-20.9-20.9-20.9H248.4c-11.5 0-20.9 9.4-20.9 20.9 0 11.5 9.3 20.9 20.9 20.9z"
p-id="1539"></path>
<path
d="M912 987c11.5 0 20.9-9.4 20.9-20.9V73.6c0-11.5-9.4-20.9-20.9-20.9-11.5 0-20.9 9.4-20.9 20.9v892.5c0 11.5 9.3 20.9 20.9 20.9z"
p-id="1540"></path>
</svg>

After

Width:  |  Height:  |  Size: 923 B

View File

@ -0,0 +1,11 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742658243556"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1467"
xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32">
<path
d="M785.792 949.888V339.541333H42.666667v610.346667h743.125333zM85.333333 382.208h657.749334v524.970667H85.333333V382.208z"
p-id="1468"></path>
<path
d="M638.08 245.76l-102.954667-75.221333 72.149334-107.477334 32.170666 23.509334-32.256 48.128c128.597333-35.328 269.013333 21.504 338.773334 147.541333a327.082667 327.082667 0 0 1 24.405333 259.456h-41.813333a285.525333 285.525333 0 0 0 16.725333-135.594667 282.197333 282.197333 0 0 0-33.365333-103.381333A269.226667 269.226667 0 0 0 842.666667 221.013333a258.176 258.176 0 0 0-90.709334-46.208 251.989333 251.989333 0 0 0-140.885333 1.28l49.493333 36.181334-22.528 33.578666z"
p-id="1469"></path>
</svg>

After

Width:  |  Height:  |  Size: 1010 B

View File

@ -0,0 +1,8 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742820619537"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1780"
xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32">
<path
d="M814.805 128a51.179 51.179 0 0 1 51.179 51.179V844.01a51.179 51.179 0 0 1-51.179 51.157H201.173a51.179 51.179 0 0 1-51.178-51.157V179.179A51.179 51.179 0 0 1 201.173 128h613.654zM329.024 434.837a51.093 51.093 0 0 1-51.179-51.093V179.157h-76.672v664.854h613.76V179.179H738.22v204.48a51.179 51.179 0 0 1-51.179 51.178H329.024z m0-51.093h357.995V179.157H329.024v204.587z m357.91 204.501a25.557 25.557 0 1 1 0.085 51.072H329.024a25.536 25.536 0 1 1 0-51.072h357.91z"
p-id="1781"></path>
</svg>

After

Width:  |  Height:  |  Size: 836 B

8
src/assets/icons/top.svg Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742649402589"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1345"
xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32">
<path
d="M6 42c0 22.091 17.909 40 40 40h932c22.091 0 40-17.909 40-40s-17.909-40-40-40H46C23.909 2 6 19.909 6 42z m156 206v734c0 22.091 17.909 40 40 40s40-17.909 40-40V248c0-22.091-17.909-40-40-40s-40 17.909-40 40z m310 0v529.963c0 22.091 17.909 40 40 40s40-17.909 40-40V248c0-22.091-17.909-40-40-40s-40 17.909-40 40z m310 0v734c0 22.091 17.909 40 40 40s40-17.909 40-40V248c0-22.091-17.909-40-40-40s-40 17.909-40 40z"
p-id="1346"></path>
</svg>

After

Width:  |  Height:  |  Size: 781 B

View File

@ -0,0 +1,7 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742649436235"
class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1862"
xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32">
<path d="M896 756.992v64H129.216v-64H896zM704 480v64H321.216v-64H704z m192-268.8v64H129.216v-64H896z" p-id="1863">
</path>
</svg>

After

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 20 KiB

BIN
src/assets/logo-mini.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

85
src/assets/svgs/401.svg Normal file
View File

@ -0,0 +1,85 @@
<svg height="350" viewBox="0 0 586 659.29778" width="450" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<circle cx="332.47856" cy="254" fill="#f2f2f2" r="254.00001" />
<path
d="M498.46363,113.58835H33.17063c-.99774-.02133-1.78931-.84746-1.76797-1.84521,.02069-.96771,.80026-1.74727,1.76797-1.76796H498.46363c.99774,.02133,1.78931,.84746,1.76794,1.84521-.02069,.96771-.80023,1.74727-1.76794,1.76796Z"
fill="#cacaca" />
<rect fill="#fff" height="34.98639" rx="17.49318" ry="17.49318" width="163.61147" x="193.77441" y="174.47256" />
<path
d="M128.17493,244.44534H422.98542c9.66122,0,17.49316,7.83197,17.49316,17.49319h0c0,9.66122-7.83194,17.49319-17.49316,17.49319H128.17493c-9.66122,0-17.49318-7.83197-17.49318-17.49319h0c0-9.66122,7.83196-17.49319,17.49318-17.49319Z"
fill="#fff" />
<path
d="M128.17493,314.41812H422.98542c9.66122,0,17.49316,7.83197,17.49316,17.49319h0c0,9.66122-7.83194,17.49319-17.49316,17.49319H128.17493c-9.66122,0-17.49318-7.83197-17.49318-17.49319h0c0-9.66122,7.83196-17.49319,17.49318-17.49319Z"
fill="#fff" />
<path
d="M91.64085,657.75932l-.69385-.06793c-23.54068-2.42871-44.82135-15.08929-58.18845-34.61835-3.66138-5.44159-6.62299-11.32251-8.815-17.50409l-.21069-.58966,.62375-.05048c7.44699-.59924,15.09732-1.86292,18.49585-2.46417l-21.91473-7.42511-.1355-.65033c-1.29926-6.10406,1.24612-12.38458,6.4285-15.86176,5.19641-3.64447,12.08731-3.76111,17.40405-.29449,2.38599,1.52399,4.88162,3.03339,7.29489,4.49359,8.29321,5.01636,16.8688,10.20337,23.29828,17.30121,9.74951,10.97778,14.02298,25.76984,11.63,40.25562l4.7829,17.47595Z"
fill="#f2f2f2" />
<polygon fill="#a0616a"
points="171.30016 646.86102 182.10017 646.85999 187.23916 605.198 171.29716 605.19897 171.30016 646.86102" />
<path
d="M170.9192,658.12816l33.21436-.00122v-.41998c-.00049-7.13965-5.78833-12.92737-12.92798-12.92773h-.00079l-6.06702-4.60278-11.3197,4.60345-2.89941,.00012,.00055,13.34814Z"
fill="#2f2e41" />
<polygon fill="#a0616a"
points="84.74116 616.94501 93.38016 623.42603 122.49316 593.185 109.74116 583.61902 84.74116 616.94501" />
<path
d="M77.67448,625.72966l26.569,19.93188,.25208-.336c4.2843-5.71136,3.12799-13.81433-2.58279-18.09937l-.00064-.00049-2.09079-7.32275-11.81735-3.11102-2.31931-1.73993-8.01019,10.67767Z"
fill="#2f2e41" />
<path
d="M120.64463,451.35271s.59625,16.26422,1.3483,29.30737c.12335,2.13916-4.88821,4.46301-4.75842,6.7901,.08609,1.54395,1.02808,3.04486,1.1156,4.65472,.09235,1.69897-1.20822,3.20282-1.1156,4.95984,.09052,1.71667,1.57422,3.6853,1.66373,5.44244,.96317,18.9093,4.45459,41.54633,.9584,47.87439-1.72299,3.11871-23.68533,46.32446-23.68533,46.32446,0,0,12.23666,18.35498,15.73285,12.23663,4.61771-8.08099,40.20615-45.88745,40.20615-53.10712,0-7.21088,8.23346-61.25323,8.23346-61.25323l5.74103,31.98169,2.63239,6.33655-.82715,3.71997,1.70117,5.02045,.09192,4.96838,1.65619,9.22614s-4.98199,71.88159-2.17633,73.88312c2.81439,2.01038,16.44086,5.62018,18.04901,2.01038,1.59955-3.6098,12.0108-75.01947,12.0108-75.01947,0,0,1.6781-32.72424,3.49622-63.14111,.1048-1.76556,1.34607-3.89825,1.4422-5.63763,.11365-2.01898-.67297-4.64111-.56818-6.599,.11365-2.24628,1.11005-3.82831,1.20618-5.97852,.74292-16.6156-3.42761-36.84912-4.7561-38.84192-4.01202-6.01343-7.62177-10.82074-7.62177-10.82074,0,0-54.03558-17.75403-68.47485,.28625l-3.30185,25.37585Z"
fill="#2f2e41" />
<path
d="M174.53779,284.10378l-21.4209-4.28418-9.9964,13.56656h0c-18.65262,18.34058-18.93359,34.52753-15.60379,60.47382v36.41553l-2.41,24.41187s-8.53156,17.84521,.26788,22.00006,66.59857,3.80066,72.117,2.14209,.73517-3.69482-.71399-11.4245c-2.72211-14.51929-.90131-7.51562-.71399-12.13849,2.68585-66.31363-3.57013-93.5379-4.20544-100.69376l-10.89398-19.75858-6.42639-10.71042Z"
fill="#3f3d56" />
<path
d="M287.43909,337.57097c-2.23248,4.23007-7.47144,5.84943-11.70148,3.61694-.45099-.23804-.88013-.51541-1.28229-.82895l-46.26044,29.37308,.13336-15.9924,44.93842-26.07846c3.20093-3.58887,8.70514-3.90332,12.29401-.70239,3.00305,2.67844,3.7796,7.0657,1.87842,10.61218Z"
fill="#a0616a" />
<path
d="M157.62488,302.62425l-5.26666-.55807c-4.86633-.50473-9.64093,1.57941-12.57947,5.491-1.12549,1.48346-1.9339,3.18253-2.37491,4.99164l-.00317,.01447c-1.32108,5.44534,.75095,11.15201,5.25803,14.48117l18.19031,13.41101c12.76544,17.24899,36.75653,28.69272,64.89832,37.98978l43.74274-27.16666-15.47186-18.73843-30.00336,16.0798-44.59833-34.52374-.0257-.02075-16.97424-10.936-4.79169-.5152Z"
fill="#3f3d56" />
<circle cx="167.29993" cy="248.60526" fill="#a0616a" r="24.9798" />
<path
d="M167.8769,273.59047c-.20135,.00662-.4032,.01108-.6048,.01657-.0863,.22388-.17938,.44583-.2868,.66357l.8916-.68015Z"
fill="#2f2e41" />
<path d="M174.73243,249.29823c.03918,.24612,.09912,.48846,.17914,.72449-.03302-.24731-.09308-.49026-.17914-.72449Z"
fill="#2f2e41" />
<path
d="M192.59852,224.6942c-1.0282,3.19272-1.94586-.85715-5.32825-.12869-4.06885,.87625-8.80377,.57532-12.13586-1.91879-4.96478-3.64273-11.39874-4.62335-17.22333-2.62509-5.70154,2.01706-15.25348,3.43933-16.73907,9.30179-.51642,2.03781-.7215,4.24933-1.97321,5.9382-1.09436,1.47662-2.82166,2.31854-4.26608,3.45499-4.87726,3.83743-1.14954,14.73981,1.15881,20.50046,2.30838,5.76065,7.60355,9.95721,13.42526,12.10678,5.63281,2.07977,11.7464,2.44662,17.75531,2.28317,1.04517-2.7106,.59363-5.84137-.26874-8.65134-.93359-3.04199-2.31592-5.97791-2.70593-9.13599s.46643-6.74527,3.11444-8.50986c2.4339-1.62192,6.39465-.63388,7.32062,1.98843-.54028-3.27841,2.7807-6.4509,6.20508-7.00882,3.67651-.599,7.35291,.72833,11.01886,1.38901s2.36475-14.77301,.64209-18.98425Z"
fill="#2f2e41" />
<circle cx="281.3585" cy="285.71051" fill="hsl(var(--primary))" r="51.12006"
transform="translate(-26.58509 542.54478) rotate(-85.26884)" />
<path
d="M294.78675,264.41051l-13.42828,13.42828-13.42828-13.42828c-2.17371-2.17374-5.69806-2.17374-7.87177,0s-2.17371,5.69803,0,7.87177l13.42828,13.42828-13.42828,13.42828c-2.17169,2.17575-2.1684,5.70007,.00739,7.87177,2.17285,2.16879,5.69153,2.16879,7.86438-.00003l13.42828-13.42828,13.42828,13.42828c2.17578,2.17169,5.70007,2.1684,7.87177-.00735,2.16882-2.17288,2.16882-5.6915,0-7.86438l-13.42828-13.42828,13.42828-13.42828c2.17371-2.17374,2.17371-5.69803,0-7.87177s-5.69806-2.17374-7.87177,0h0Z"
fill="#fff" />
<path
d="M261.21387,242.74385c1.5069,4.53946-.95154,9.44101-5.49097,10.94791-.48401,.16064-.9812,.27823-1.4859,.35141l-10.83051,53.71692-11.44788-11.16785,12.29266-50.48209c-.37366-4.7944,3.21008-8.98395,8.00452-9.3576,4.01166-.31265,7.71509,2.16425,8.95807,5.9913Z"
fill="#a0616a" />
<path
d="M146.12519,312.22478l-4.04883,3.41412c-3.73322,3.16214-5.53476,8.05035-4.74649,12.87888,.29129,1.83917,.95773,3.59879,1.95786,5.16949l.00824,.0123c3.01477,4.72311,8.5672,7.17865,14.08978,6.23117l22.27075-3.84171c21.28461,2.72995,46.15155-6.65967,72.34302-20.53055l10.67969-50.37274-24.23297-1.80811-9.16821,32.78271-55.78815,8.28149-.03278,.00415-19.64294,4.67767-3.68896,3.1011Z"
fill="#3f3d56" />
<path
d="M272.93684,658.99046l-271.75,.30731c-.65759-.00214-1.18896-.53693-1.18683-1.19452,.00211-.6546,.53223-1.18469,1.18683-1.18683l271.75-.30731c.65759,.00214,1.18896,.53693,1.18683,1.19452-.00208,.6546-.53223,1.18469-1.18683,1.18683Z"
fill="#cacaca" />
<g>
<ellipse cx="56.77685" cy="82.05834" fill="#3f3d56" rx="8.45661" ry="8.64507" />
<ellipse cx="85.9906" cy="82.05834" fill="#3f3d56" rx="8.45661" ry="8.64507" />
<ellipse cx="115.20435" cy="82.05834" fill="#3f3d56" rx="8.45661" ry="8.64507" />
<path
d="M148.51577,88.89113c-.25977,0-.51904-.10059-.71484-.30078l-5.70605-5.83301c-.38037-.38867-.38037-1.00977,0-1.39844l5.70605-5.83252c.38721-.39453,1.021-.40088,1.41406-.01562,.39502,.38623,.40186,1.01953,.01562,1.41406l-5.02197,5.1333,5.02197,5.13379c.38623,.39453,.37939,1.02783-.01562,1.41406-.19434,.19043-.44678,.28516-.69922,.28516Z"
fill="#3f3d56" />
<path
d="M158.10415,88.89113c-.25244,0-.50488-.09473-.69922-.28516-.39502-.38623-.40186-1.01904-.01562-1.41406l5.02148-5.13379-5.02148-5.1333c-.38623-.39453-.37939-1.02783,.01562-1.41406,.39404-.38672,1.02783-.37939,1.41406,.01562l5.70557,5.83252c.38037,.38867,.38037,1.00977,0,1.39844l-5.70557,5.83301c-.1958,.2002-.45508,.30078-.71484,.30078Z"
fill="#3f3d56" />
<path
d="M456.61398,74.41416h-10.60999c-1.21002,0-2.19,.97998-2.19,2.19v10.62c0,1.21002,.97998,2.19,2.19,2.19h10.60999c1.21002,0,2.20001-.97998,2.20001-2.19v-10.62c0-1.21002-.98999-2.19-2.20001-2.19Z"
fill="#3f3d56" />
<path
d="M430.61398,74.41416h-10.60999c-1.21002,0-2.19,.97998-2.19,2.19v10.62c0,1.21002,.97998,2.19,2.19,2.19h10.60999c1.21002,0,2.20001-.97998,2.20001-2.19v-10.62c0-1.21002-.98999-2.19-2.20001-2.19Z"
fill="#3f3d56" />
<path
d="M481.11398,74.91416h-10.60999c-1.21002,0-2.19,.97998-2.19,2.19v10.62c0,1.21002,.97998,2.19,2.19,2.19h10.60999c1.21002,0,2.20001-.97998,2.20001-2.19v-10.62c0-1.21002-.98999-2.19-2.20001-2.19Z"
fill="#3f3d56" />
<path
d="M321.19229,78.95414h-84.81c-1.48004,0-2.67004,1.20001-2.67004,2.67004s1.19,2.66998,2.67004,2.66998h84.81c1.46997,0,2.66998-1.20001,2.66998-2.66998s-1.20001-2.67004-2.66998-2.67004Z"
fill="#3f3d56" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.1 KiB

90
src/assets/svgs/404.svg Normal file
View File

@ -0,0 +1,90 @@
<svg height="350" viewBox="0 0 860 571" width="450" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<path
d="M605.66974,324.95306c-7.66934-12.68446-16.7572-26.22768-30.98954-30.36953-16.482-4.7965-33.4132,4.73193-47.77473,14.13453a1392.15692,1392.15692,0,0,0-123.89338,91.28311l.04331.49238q46.22556-3.1878,92.451-6.37554c22.26532-1.53546,45.29557-3.2827,64.97195-13.8156,7.46652-3.99683,14.74475-9.33579,23.20555-9.70782,10.51175-.46217,19.67733,6.87923,26.8802,14.54931,42.60731,45.371,54.937,114.75409,102.73817,154.61591A1516.99453,1516.99453,0,0,0,605.66974,324.95306Z"
fill="#f2f2f2" transform="translate(-169.93432 -164.42601)" />
<path
d="M867.57068,709.78146c-4.71167-5.94958-6.6369-7.343-11.28457-13.34761q-56.7644-73.41638-106.70791-151.79237-33.92354-53.23-64.48275-108.50439-14.54864-26.2781-28.29961-52.96872-10.67044-20.6952-20.8646-41.63793c-1.94358-3.98782-3.8321-7.99393-5.71122-12.00922-4.42788-9.44232-8.77341-18.93047-13.43943-28.24449-5.31686-10.61572-11.789-21.74485-21.55259-28.877a29.40493,29.40493,0,0,0-15.31855-5.89458c-7.948-.51336-15.28184,2.76855-22.17568,6.35295-50.43859,26.301-97.65922,59.27589-140.3696,96.79771A730.77816,730.77816,0,0,0,303.32241,496.24719c-1.008,1.43927-3.39164.06417-2.37419-1.38422q6.00933-8.49818,12.25681-16.81288A734.817,734.817,0,0,1,500.80465,303.06436q18.24824-11.82581,37.18269-22.54245c6.36206-3.60275,12.75188-7.15967,19.25136-10.49653,6.37146-3.27274,13.13683-6.21547,20.41563-6.32547,24.7701-.385,37.59539,27.66695,46.40506,46.54248q4.15283,8.9106,8.40636,17.76626,16.0748,33.62106,33.38729,66.628,10.68453,20.379,21.83683,40.51955,34.7071,62.71816,73.77854,122.897c34.5059,53.1429,68.73651,100.08874,108.04585,149.78472C870.59617,709.21309,868.662,711.17491,867.57068,709.78146Z"
fill="#e4e4e4" transform="translate(-169.93432 -164.42601)" />
<path
d="M414.91613,355.804c-1.43911-1.60428-2.86927-3.20856-4.31777-4.81284-11.42244-12.63259-23.6788-25.11847-39.3644-32.36067a57.11025,57.11025,0,0,0-23.92679-5.54622c-8.56213.02753-16.93178,2.27348-24.84306,5.41792-3.74034,1.49427-7.39831,3.1902-11.00078,4.99614-4.11634,2.07182-8.15927,4.28118-12.1834,6.50883q-11.33112,6.27044-22.36816,13.09089-21.9606,13.57221-42.54566,29.21623-10.67111,8.11311-20.90174,16.75788-9.51557,8.03054-18.64618,16.492c-1.30169,1.20091-3.24527-.74255-1.94358-1.94347,1.60428-1.49428,3.22691-2.97938,4.84955-4.44613q6.87547-6.21546,13.9712-12.19257,12.93921-10.91827,26.54851-20.99312,21.16293-15.67614,43.78288-29.22541,11.30361-6.76545,22.91829-12.96259c2.33794-1.24675,4.70318-2.466,7.09572-3.6211a113.11578,113.11578,0,0,1,16.86777-6.86632,60.0063,60.0063,0,0,1,25.476-2.50265,66.32706,66.32706,0,0,1,23.50512,8.1314c15.40091,8.60812,27.34573,21.919,38.97,34.90915C418.03337,355.17141,416.09875,357.12405,414.91613,355.804Z"
fill="#e4e4e4" transform="translate(-169.93432 -164.42601)" />
<path
d="M730.47659,486.71092l36.90462-13.498,18.32327-6.70183c5.96758-2.18267,11.92082-4.66747,18.08988-6.23036a28.53871,28.53871,0,0,1,16.37356.20862,37.73753,37.73753,0,0,1,12.771,7.91666,103.63965,103.63965,0,0,1,10.47487,11.18643c3.98932,4.79426,7.91971,9.63877,11.86772,14.46706q24.44136,29.89094,48.56307,60.04134,24.12117,30.14991,47.91981,60.556,23.85681,30.48041,47.38548,61.21573,2.88229,3.76518,5.75966,7.53415c1.0598,1.38809,3.44949.01962,2.37472-1.38808Q983.582,650.9742,959.54931,620.184q-24.09177-30.86383-48.51647-61.46586-24.42421-30.60141-49.17853-60.93743-6.16706-7.55761-12.35445-15.09858c-3.47953-4.24073-6.91983-8.52718-10.73628-12.47427-7.00539-7.24516-15.75772-13.64794-26.23437-13.82166-6.15972-.10214-12.121,1.85248-17.844,3.92287-6.16968,2.232-12.32455,4.50571-18.48633,6.75941l-37.16269,13.59243-9.29067,3.3981c-1.64875.603-.93651,3.2619.73111,2.652Z"
fill="#e4e4e4" transform="translate(-169.93432 -164.42601)" />
<path
d="M366.37741,334.52609c-18.75411-9.63866-42.77137-7.75087-60.00508,4.29119a855.84708,855.84708,0,0,1,97.37056,22.72581C390.4603,353.75916,380.07013,341.5635,366.37741,334.52609Z"
fill="#f2f2f2" transform="translate(-169.93432 -164.42601)" />
<path
d="M306.18775,338.7841l-3.61042,2.93462c1.22123-1.02713,2.4908-1.99013,3.795-2.90144C306.31073,338.80665,306.24935,338.79473,306.18775,338.7841Z"
fill="#f2f2f2" transform="translate(-169.93432 -164.42601)" />
<path
d="M831.54929,486.84576c-3.6328-4.42207-7.56046-9.05222-12.99421-10.84836l-5.07308.20008A575.436,575.436,0,0,0,966.74929,651.418Q899.14929,569.13192,831.54929,486.84576Z"
fill="#f2f2f2" transform="translate(-169.93432 -164.42601)" />
<path
d="M516.08388,450.36652A37.4811,37.4811,0,0,0,531.015,471.32518c2.82017,1.92011,6.15681,3.76209,7.12158,7.03463a8.37858,8.37858,0,0,1-.87362,6.1499,24.88351,24.88351,0,0,1-3.86126,5.04137l-.13667.512c-6.99843-4.14731-13.65641-9.3934-17.52227-16.55115s-4.40553-16.53895.34116-23.14544"
fill="#f2f2f2" transform="translate(-169.93432 -164.42601)" />
<path
d="M749.08388,653.36652A37.4811,37.4811,0,0,0,764.015,674.32518c2.82017,1.92011,6.15681,3.76209,7.12158,7.03463a8.37858,8.37858,0,0,1-.87362,6.1499,24.88351,24.88351,0,0,1-3.86126,5.04137l-.13667.512c-6.99843-4.14731-13.65641-9.3934-17.52227-16.55115s-4.40553-16.53895.34116-23.14544"
fill="#f2f2f2" transform="translate(-169.93432 -164.42601)" />
<path
d="M284.08388,639.36652A37.4811,37.4811,0,0,0,299.015,660.32518c2.82017,1.92011,6.15681,3.76209,7.12158,7.03463a8.37858,8.37858,0,0,1-.87362,6.1499,24.88351,24.88351,0,0,1-3.86126,5.04137l-.13667.512c-6.99843-4.14731-13.65641-9.3934-17.52227-16.55115s-4.40553-16.53895.34116-23.14544"
fill="#f2f2f2" transform="translate(-169.93432 -164.42601)" />
<circle cx="649.24878" cy="51" fill="hsl(var(--primary))" r="51" />
<path
d="M911.21851,176.29639c-24.7168-3.34094-52.93512,10.01868-59.34131,34.12353a21.59653,21.59653,0,0,0-41.09351,2.10871l2.82972,2.02667a372.27461,372.27461,0,0,0,160.65881-.72638C957.07935,195.76,935.93537,179.63727,911.21851,176.29639Z"
fill="#f0f0f0" transform="translate(-169.93432 -164.42601)" />
<path
d="M805.21851,244.29639c-24.7168-3.34094-52.93512,10.01868-59.34131,34.12353a21.59653,21.59653,0,0,0-41.09351,2.10871l2.82972,2.02667a372.27461,372.27461,0,0,0,160.65881-.72638C851.07935,263.76,829.93537,247.63727,805.21851,244.29639Z"
fill="#f0f0f0" transform="translate(-169.93432 -164.42601)" />
<path
d="M1020.94552,257.15423a.98189.98189,0,0,1-.30176-.04688C756.237,173.48919,523.19942,184.42376,374.26388,208.32122c-20.26856,3.251-40.59131,7.00586-60.40381,11.16113-5.05811,1.05957-10.30567,2.19532-15.59668,3.37793-6.31885,1.40723-12.55371,2.85645-18.53223,4.30567q-3.873.917-7.59472,1.84863c-3.75831.92773-7.57178,1.89453-11.65967,2.957-4.56787,1.17774-9.209,2.41309-13.79737,3.67188a.44239.44239,0,0,1-.05127.01465l.00049.001c-5.18261,1.415-10.33789,2.8711-15.32324,4.3252-2.69824.77929-5.30371,1.54785-7.79932,2.30664-.2788.07715-.52587.15136-.77636.22754l-.53614.16308c-.31054.09473-.61718.1875-.92382.27539l-.01953.00586.00048.001-.81152.252c-.96777.293-1.91211.5791-2.84082.86426-24.54492,7.56641-38.03809,12.94922-38.17139,13.00195a1,1,0,1,1-.74414-1.85644c.13428-.05274,13.69336-5.46289,38.32764-13.05762.93213-.28613,1.87891-.57226,2.84961-.86621l.7539-.23438c.02588-.00976.05176-.01757.07813-.02539.30518-.08691.60986-.17968.91943-.27343l.53711-.16309c.26758-.08105.53125-.16113.80127-.23535,2.47852-.75391,5.09278-1.52441,7.79785-2.30664,4.98731-1.45508,10.14746-2.91113,15.334-4.32813.01611-.00586.03271-.00976.04883-.01464v-.001c4.60449-1.2627,9.26269-2.50293,13.84521-3.68457,4.09424-1.06348,7.915-2.03223,11.67969-2.96192q3.73755-.93017,7.60937-1.85253c5.98536-1.45118,12.23291-2.90235,18.563-4.3125,5.29932-1.1836,10.55567-2.32227,15.62207-3.38282,19.84326-4.16211,40.19776-7.92285,60.49707-11.17871C523.09591,182.415,756.46749,171.46282,1021.2463,255.2011a.99974.99974,0,0,1-.30078,1.95313Z"
fill="#ccc" transform="translate(-169.93432 -164.42601)" />
<path
d="M432.92309,584.266a6.72948,6.72948,0,0,0-1.7-2.67,6.42983,6.42983,0,0,0-.92-.71c-2.61-1.74-6.51-2.13-8.99,0a5.81012,5.81012,0,0,0-.69.71q-1.11,1.365-2.28,2.67c-1.28,1.46-2.59,2.87-3.96,4.24-.39.38-.78.77-1.18,1.15-.23.23-.46.45-.69.67-.88.84-1.78,1.65-2.69,2.45-.48.43-.96.85-1.45,1.26-.73.61-1.46,1.22-2.2,1.81-.07.05-.14.1-.21.16-.02.01-.03.03-.05.04-.01,0-.02,0-.03.02a.17861.17861,0,0,0-.07.05c-.22.15-.37.25-.48.34.04-.01995.08-.05.12-.07-.18.14-.37.28-.55.42-1.75,1.29-3.54,2.53-5.37,3.69a99.21022,99.21022,0,0,1-14.22,7.55c-.33.13-.67.27-1.01.4a85.96993,85.96993,0,0,1-40.85,6.02q-2.13008-.165-4.26-.45c-1.64-.24-3.27-.53-4.89-.86a97.93186,97.93186,0,0,1-18.02-5.44,118.65185,118.65185,0,0,1-20.66-12.12c-1-.71-2.01-1.42-3.02-2.11,1.15-2.82,2.28-5.64,3.38-8.48.55-1.37,1.08-2.74,1.6-4.12,4.09-10.63,7.93-21.36,11.61-32.13q5.58-16.365,10.53-32.92.51-1.68.99-3.36,2.595-8.745,4.98-17.53c.15-.56994.31-1.12994.45-1.7q.68994-2.52,1.35-5.04c1-3.79-1.26-8.32-5.24-9.23a7.63441,7.63441,0,0,0-9.22,5.24c-.43,1.62-.86,3.23-1.3,4.85q-3.165,11.74494-6.66,23.41-.51,1.68-1.02,3.36-7.71,25.41-16.93,50.31-1.11,3.015-2.25,6.01c-.37.98-.74,1.96-1.12,2.94-.73,1.93-1.48,3.86-2.23,5.79-.43006,1.13-.87006,2.26-1.31,3.38-.29.71-.57,1.42-.85,2.12a41.80941,41.80941,0,0,0-8.81-2.12l-.48-.06a27.397,27.397,0,0,0-7.01.06,23.91419,23.91419,0,0,0-17.24,10.66c-4.77,7.51-4.71,18.25,1.98,24.63,6.89,6.57,17.32,6.52,25.43,2.41a28.35124,28.35124,0,0,0,10.52-9.86,50.56939,50.56939,0,0,0,2.74-4.65c.21.14.42.28.63.43.8.56,1.6,1.13,2.39,1.69a111.73777,111.73777,0,0,0,14.51,8.91,108.35887,108.35887,0,0,0,34.62,10.47c.27.03.53.07.8.1,1.33.17,2.67.3,4.01.41a103.78229,103.78229,0,0,0,55.58-11.36q2.175-1.125,4.31-2.36,3.315-1.92,6.48-4.08c1.15-.78,2.27-1.57,3.38-2.4a101.04244,101.04244,0,0,0,13.51-11.95q2.35491-2.475,4.51-5.11005a8.0612,8.0612,0,0,0,2.2-5.3A7.5644,7.5644,0,0,0,432.92309,584.266Zm-165.59,23.82c.21-.15.42-.31.62-.47C267.89312,607.766,267.60308,607.936,267.33312,608.086Zm3.21-3.23c-.23.26-.44.52-.67.78a23.36609,23.36609,0,0,1-2.25,2.2c-.11.1-.23.2-.35.29a.00976.00976,0,0,0-.01.01,3.80417,3.80417,0,0,0-.42005.22q-.645.39-1.31994.72a17.00459,17.00459,0,0,1-2.71.75,16.79925,16.79925,0,0,1-2.13.02h-.02a14.82252,14.82252,0,0,1-1.45-.4c-.24-.12-.47-.25994-.7-.4-.09-.08-.17005-.16-.22-.21a2.44015,2.44015,0,0,1-.26995-.29.0098.0098,0,0,0-.01-.01c-.11005-.2-.23005-.4-.34-.6a.031.031,0,0,1-.01-.02c-.08-.25-.15-.51-.21-.77a12.51066,12.51066,0,0,1,.01-1.37,13.4675,13.4675,0,0,1,.54-1.88,11.06776,11.06776,0,0,1,.69-1.26c.02-.04.12-.2.23-.38.01-.01.01-.01.01-.02.15-.17.3-.35.46-.51.27-.3.56-.56.85-.83a18.02212,18.02212,0,0,1,1.75-1.01,19.48061,19.48061,0,0,1,2.93-.79,24.98945,24.98945,0,0,1,4.41.04,30.30134,30.30134,0,0,1,4.1,1.01,36.94452,36.94452,0,0,1-2.77,4.54C270.6231,604.746,270.58312,604.806,270.54308,604.856Zm-11.12-3.29a2.18029,2.18029,0,0,1-.31.38995A1.40868,1.40868,0,0,1,259.42309,601.566Z"
fill="hsl(var(--foreground))" transform="translate(-169.93432 -164.42601)" />
<path
d="M402.86309,482.136q-.13494,4.71-.27,9.42-.285,10.455-.59,20.92-.315,11.775-.66,23.54-.165,6.07507-.34,12.15-.465,16.365-.92,32.72c-.03,1.13-.07,2.25-.1,3.38q-.225,8.11506-.45,16.23-.255,8.805-.5,17.61-.18,6.59994-.37,13.21-1.34994,47.895-2.7,95.79a7.64844,7.64844,0,0,1-7.5,7.5,7.56114,7.56114,0,0,1-7.5-7.5q.75-26.94,1.52-53.88.675-24.36,1.37-48.72.225-8.025.45-16.06.345-12.09.68-24.18c.03-1.13.07-2.25.1-3.38.02-.99.05-1.97.08-2.96q.66-23.475,1.32-46.96.27-9.24.52-18.49.3-10.545.6-21.08c.09-3.09.17005-6.17.26-9.26a7.64844,7.64844,0,0,1,7.5-7.5A7.56116,7.56116,0,0,1,402.86309,482.136Z"
fill="hsl(var(--foreground))" transform="translate(-169.93432 -164.42601)" />
<path
d="M814.29118,484.2172a893.23753,893.23753,0,0,1-28.16112,87.94127c-3.007,7.94641-6.08319,15.877-9.3715,23.71185l.75606-1.7916a54.58274,54.58274,0,0,1-5.58953,10.61184q-.22935.32119-.46685.63642,1.16559-1.49043.4428-.589c-.25405.30065-.5049.60219-.7676.89546a23.66436,23.66436,0,0,1-2.2489,2.20318q-.30139.25767-.61188.5043l.93783-.729c-.10884.25668-.87275.59747-1.11067.74287a18.25362,18.25362,0,0,1-2.40479,1.21853l1.7916-.75606a19.0859,19.0859,0,0,1-4.23122,1.16069l1.9938-.26791a17.02055,17.02055,0,0,1-4.29785.046l1.99379.2679a14.0022,14.0022,0,0,1-3.40493-.917l1.79159.75606a12.01175,12.01175,0,0,1-1.67882-.89614c-.27135-.17688-1.10526-.80852-.01487.02461,1.13336.86595.14562.07434-.08763-.15584-.19427-.19171-.36962-.4-.55974-.595-.88208-.90454.99637,1.55662.39689.49858a18.18179,18.18179,0,0,1-.87827-1.63672l.75606,1.7916a11.92493,11.92493,0,0,1-.728-2.65143l.26791,1.9938a13.65147,13.65147,0,0,1-.00316-3.40491l-.2679,1.9938a15.96371,15.96371,0,0,1,.99486-3.68011l-.75606,1.7916a16.72914,16.72914,0,0,1,1.17794-2.29848,6.72934,6.72934,0,0,1,.72851-1.0714c.04915.01594-1.26865,1.51278-.56937.757.1829-.19767.354-.40592.539-.602.29617-.31382.61354-.60082.92561-.89791,1.04458-.99442-1.46188.966-.25652.17907a19.0489,19.0489,0,0,1,2.74925-1.49923l-1.79159.75606a20.31136,20.31136,0,0,1,4.99523-1.33984l-1.9938.2679a25.62828,25.62828,0,0,1,6.46062.07647l-1.9938-.2679a33.21056,33.21056,0,0,1,7.89178,2.2199l-1.7916-.75606c5.38965,2.31383,10.16308,5.74926,14.928,9.118a111.94962,111.94962,0,0,0,14.50615,8.9065,108.38849,108.38849,0,0,0,34.62226,10.47371,103.93268,103.93268,0,0,0,92.58557-36.75192,8.07773,8.07773,0,0,0,2.1967-5.3033,7.63232,7.63232,0,0,0-2.1967-5.3033c-2.75154-2.52586-7.94926-3.239-10.6066,0a95.63575,95.63575,0,0,1-8.10664,8.72692q-2.01736,1.914-4.14232,3.70983-1.21364,1.02588-2.46086,2.01121c-.3934.31081-1.61863,1.13807.26309-.19744-.43135.30614-.845.64036-1.27058.95478a99.26881,99.26881,0,0,1-20.33215,11.56478l1.79159-.75606a96.8364,96.8364,0,0,1-24.17119,6.62249l1.99379-.2679a97.64308,97.64308,0,0,1-25.75362-.03807l1.99379.2679a99.79982,99.79982,0,0,1-24.857-6.77027l1.7916.75607a116.02515,116.02515,0,0,1-21.7364-12.59112,86.87725,86.87725,0,0,0-11.113-6.99417,42.8238,42.8238,0,0,0-14.43784-4.38851c-9.43884-1.11076-19.0571,2.56562-24.24624,10.72035-4.77557,7.50482-4.71394,18.24362,1.97369,24.62519,6.8877,6.5725,17.31846,6.51693,25.43556,2.40567,7.81741-3.95946,12.51288-12.18539,15.815-19.94186,7.43109-17.45514,14.01023-35.31364,20.1399-53.263q9.09651-26.63712,16.49855-53.81332.91661-3.36581,1.80683-6.73869c1.001-3.78869-1.26094-8.32-5.23829-9.22589a7.63317,7.63317,0,0,0-9.22589,5.23829Z"
fill="hsl(var(--foreground))" transform="translate(-169.93432 -164.42601)" />
<path
d="M889.12382,482.13557l-2.69954,95.79311-2.68548,95.29418-1.5185,53.88362a7.56465,7.56465,0,0,0,7.5,7.5,7.64923,7.64923,0,0,0,7.5-7.5l2.69955-95.79311,2.68548-95.29418,1.51849-53.88362a7.56465,7.56465,0,0,0-7.5-7.5,7.64923,7.64923,0,0,0-7.5,7.5Z"
fill="hsl(var(--foreground))" transform="translate(-169.93432 -164.42601)" />
<path
d="M629.52566,700.36106h2.32885V594.31942h54.32863v-2.32291H631.85451V547.25214H673.8102q-.92256-1.17339-1.89893-2.31694H631.85451V515.38231c-.7703-.32846-1.54659-.64493-2.32885-.9435V544.9352h-45.652V507.07c-.78227.03583-1.55258.08959-2.3289.15527v37.71h-36.4201V516.68409c-.78227.34636-1.55258.71061-2.31694,1.0928V544.9352h-30.6158v2.31694h30.6158v44.74437h-30.6158v2.32291h30.6158V700.36106h2.31694V594.31942a36.41283,36.41283,0,0,1,36.4201,36.42007v69.62157h2.3289V594.31942h45.652Zm-84.401-108.36455V547.25214h36.4201v44.74437Zm38.749,0V547.25214h.91362a44.74135,44.74135,0,0,1,44.73842,44.74437Z"
opacity="0.2" transform="translate(-169.93432 -164.42601)" />
<path
d="M615.30309,668.566a63.05854,63.05854,0,0,1-20.05,33.7c-.74.64-1.48,1.26-2.25,1.87q-2.805.25506-5.57.52c-1.53.14-3.04.29-4.54.43l-.27.03-.19-1.64-.76-6.64a37.623,37.623,0,0,1-3.3-32.44c2.64-7.12,7.42-13.41,12.12-19.65,6.49-8.62,12.8-17.14,13.03-27.65a60.54415,60.54415,0,0,1,7.9,13.33,16.432,16.432,0,0,0-5.12,3.76995c-.41.45-.82,1.08-.54,1.62006.24.46.84.57,1.36.62994,1.25.13,2.51.26,3.76.39,1,.11,2,.21,3,.32a63.99025,63.99025,0,0,1,2.45,12.18A61.18851,61.18851,0,0,1,615.30309,668.566Z"
fill="hsl(var(--foreground))" transform="translate(-169.93432 -164.42601)" />
<path
d="M648.50311,642.356c-5.9,4.29-9.35,10.46-12.03,17.26a16.62776,16.62776,0,0,0-7.17,4.58c-.41.45-.82,1.08-.54,1.62006.24.46.84.57,1.36.62994,1.25.13,2.51.26,3.76.39-2.68,8.04-5.14,16.36-9.88,23.15a36.98942,36.98942,0,0,1-12.03,10.91,38.49166,38.49166,0,0,1-4.02,1.99q-7.62.585-14.95,1.25-2.805.25506-5.57.52c-1.53.14-3.04.29-4.54.43q-.015-.825,0-1.65a63.30382,63.30382,0,0,1,15.25-39.86c.45-.52.91-1.03,1.38-1.54a61.7925,61.7925,0,0,1,16.81-12.7A62.65425,62.65425,0,0,1,648.50311,642.356Z"
fill="hsl(var(--primary))" transform="translate(-169.93432 -164.42601)" />
<path
d="M589.16308,699.526l-1.15,3.4-.58,1.73c-1.53.14-3.04.29-4.54.43l-.27.03c-1.66.17-3.31.34-4.96.51-.43-.5-.86-1.01-1.28-1.53a62.03045,62.03045,0,0,1,8.07-87.11c-1.32,6.91.22,13.53,2.75,20.1-.27.11-.53.22-.78.34a16.432,16.432,0,0,0-5.12,3.76995c-.41.45-.82,1.08-.54,1.62006.24.46.84.57,1.36.62994,1.25.13,2.51.26,3.76.39,1,.11,2,.21,3,.32q.705.075,1.41.15c.07.15.13.29.2.44,2.85,6.18,5.92,12.39,7.65,18.83a43.66591,43.66591,0,0,1,1.02,4.91A37.604,37.604,0,0,1,589.16308,699.526Z"
fill="hsl(var(--primary))" transform="translate(-169.93432 -164.42601)" />
<path
d="M689.82123,554.48655c-8.60876-16.79219-21.94605-30.92088-37.63219-41.30357a114.2374,114.2374,0,0,0-52.5626-18.37992q-3.69043-.33535-7.399-.39281c-2.92141-.04371-46.866,12.63176-61.58712,22.98214a114.29462,114.29462,0,0,0-35.333,39.527,102.49972,102.49972,0,0,0-12.12557,51.6334,113.56387,113.56387,0,0,0,14.70268,51.47577,110.47507,110.47507,0,0,0,36.44425,38.74592C549.66655,708.561,565.07375,734.51,583.1831,735.426c18.24576.923,39.05418-23.55495,55.6951-30.98707a104.42533,104.42533,0,0,0,41.72554-34.005,110.24964,110.24964,0,0,0,19.599-48.94777c2.57368-18.08313,1.37415-36.73271-4.80123-54.01627a111.85969,111.85969,0,0,0-5.58024-12.9833c-1.77961-3.50519-6.996-4.7959-10.26142-2.69063a7.67979,7.67979,0,0,0-2.69064,10.26142q1.56766,3.08773,2.91536,6.27758l-.75606-1.7916a101.15088,101.15088,0,0,1,6.87641,25.53816l-.26791-1.99379a109.2286,109.2286,0,0,1-.06613,28.68252l.26791-1.9938a109.73379,109.73379,0,0,1-7.55462,27.67419l.75606-1.79159a104.212,104.212,0,0,1-6.67151,13.09835q-1.92308,3.18563-4.08062,6.22159c-.63172.8881-1.28287,1.761-1.939,2.63114-.85625,1.13555,1.16691-1.48321.28228-.36941-.15068.18972-.30049.3801-.45182.5693q-.68121.85165-1.3818,1.68765a93.61337,93.61337,0,0,1-10.17647,10.38359q-1.36615,1.19232-2.77786,2.33115c-.46871.37832-.932.77269-1.42079,1.12472.01861-.0134,1.57956-1.19945.65556-.511-.2905.21644-.57851.43619-.86961.65184q-2.90994,2.1558-5.97433,4.092a103.48509,103.48509,0,0,1-14.75565,7.7131l1.7916-.75606a109.21493,109.21493,0,0,1-27.59663,7.55154l1.9938-.26791a108.15361,108.15361,0,0,1-28.58907.0506l1.99379.2679a99.835,99.835,0,0,1-25.09531-6.78448l1.79159.75607a93.64314,93.64314,0,0,1-13.41605-6.99094q-3.17437-2-6.18358-4.24743c-.2862-.21359-.56992-.43038-.855-.64549-.9155-.69088.65765.50965.67021.51787a19.16864,19.16864,0,0,1-1.535-1.22469q-1.45353-1.18358-2.86136-2.4218a101.98931,101.98931,0,0,1-10.49319-10.70945q-1.21308-1.43379-2.37407-2.91054c-.33524-.4263-.9465-1.29026.40424.5289-.17775-.23939-.36206-.47414-.54159-.71223q-.64657-.85751-1.27568-1.72793-2.203-3.048-4.18787-6.24586a109.29037,109.29037,0,0,1-7.8054-15.10831l.75606,1.7916a106.58753,106.58753,0,0,1-7.34039-26.837l.26791,1.9938a97.86589,97.86589,0,0,1-.04843-25.63587l-.2679,1.9938A94.673,94.673,0,0,1,505.27587,570.55l-.75606,1.7916a101.55725,101.55725,0,0,1,7.19519-13.85624q2.0655-3.32328,4.37767-6.4847.52528-.71832,1.06244-1.42786c.324-.4279,1.215-1.49333-.30537.38842.14906-.18449.29252-.37428.43942-.56041q1.26882-1.60756,2.59959-3.1649A107.40164,107.40164,0,0,1,530.772,536.21508q1.47408-1.29171,2.99464-2.52906.6909-.56218,1.39108-1.11284c.18664-.14673.37574-.29073.56152-.43858-1.99743,1.58953-.555.43261-.10157.09288q3.13393-2.34833,6.43534-4.46134a103.64393,103.64393,0,0,1,15.38655-8.10791l-1.7916.75606c7.76008-3.25839,42.14086-10.9492,48.394-10.10973l-1.99379-.26791A106.22471,106.22471,0,0,1,628.768,517.419l-1.7916-.75606a110.31334,110.31334,0,0,1,12.6002,6.32922q3.04344,1.78405,5.96742,3.76252,1.38351.93658,2.73809,1.915.677.48917,1.34626.98885c.24789.185.49386.37253.74135.558,1.03924.779-1.43148-1.1281-.34209-.26655a110.84261,110.84261,0,0,1,10.36783,9.2532q2.401,2.445,4.63686,5.04515,1.14659,1.33419,2.24643,2.70757c.36436.45495,1.60506,2.101.08448.08457.37165.49285.74744.98239,1.11436,1.47884a97.97718,97.97718,0,0,1,8.39161,13.53807c1.79317,3.49775,6.98675,4.80186,10.26142,2.69064A7.67666,7.67666,0,0,0,689.82123,554.48655Z"
fill="hsl(var(--foreground))" transform="translate(-169.93432 -164.42601)" />
<path
d="M602.43116,676.88167a3.77983,3.77983,0,0,1-2.73939-6.55137c.09531-.37882.16368-.65085.259-1.02968q-.05115-.12366-.1029-.24717c-3.47987-8.29769-25.685,14.83336-26.645,22.63179a30.029,30.029,0,0,0,.52714,10.32752A120.39223,120.39223,0,0,1,562.77838,652.01a116.20247,116.20247,0,0,1,.72078-12.96332q.59712-5.293,1.65679-10.51055a121.78667,121.78667,0,0,1,24.1515-51.61646c6.87378.38364,12.898-.66348,13.47967-13.98532.10346-2.36972,1.86113-4.42156,2.24841-6.756-.65621.08607-1.32321.13985-1.97941.18285-.20444.0107-.41958.02149-.624.03228l-.07709.00346a3.745,3.745,0,0,1-3.07566-6.10115q.425-.52305.85054-1.04557c.43036-.53793.87143-1.06507,1.30171-1.60292a1.865,1.865,0,0,0,.13986-.16144c.49494-.61322.98971-1.21564,1.48465-1.82885a10.82911,10.82911,0,0,0-3.55014-3.43169c-4.95941-2.90463-11.80146-.89293-15.38389,3.59313-3.59313,4.486-4.27083,10.77947-3.023,16.3843a43.39764,43.39764,0,0,0,6.003,13.3828c-.269.34429-.54872.67779-.81765,1.02209a122.57366,122.57366,0,0,0-12.79359,20.2681c1.0163-7.93863-11.41159-36.60795-16.21776-42.68052-5.773-7.29409-17.61108-4.11077-18.62815,5.13562q-.01476.13428-.02884.26849,1.07082.60411,2.0964,1.28237a5.12707,5.12707,0,0,1-2.06713,9.33031l-.10452.01613c-9.55573,13.64367,21.07745,49.1547,28.74518,41.18139a125.11045,125.11045,0,0,0-6.73449,31.69282,118.66429,118.66429,0,0,0,.08607,19.15986l-.03231-.22593C558.90163,648.154,529.674,627.51374,521.139,629.233c-4.91675.99041-9.75952.76525-9.01293,5.72484q.01788.11874.03635.2375a34.4418,34.4418,0,0,1,3.862,1.86105q1.07082.60423,2.09639,1.28237a5.12712,5.12712,0,0,1-2.06712,9.33039l-.10464.01606c-.07528.01079-.13987.02157-.21507.03237-4.34967,14.96631,27.90735,39.12,47.5177,31.43461h.01081a125.07484,125.07484,0,0,0,8.402,24.52806H601.679c.10765-.3335.20443-.67779.3013-1.01129a34.102,34.102,0,0,1-8.30521-.49477c2.22693-2.73257,4.45377-5.48664,6.6807-8.21913a1.86122,1.86122,0,0,0,.13986-.16135c1.12956-1.39849,2.26992-2.78627,3.39948-4.18476l.00061-.00173a49.95232,49.95232,0,0,0-1.46367-12.72495Zm-34.37066-67.613.0158-.02133-.0158.04282Zm-6.64832,59.93237-.25822-.58084c.01079-.41957.01079-.83914,0-1.26942,0-.11845-.0215-.23672-.0215-.35508.09678.74228.18285,1.48464.29042,2.22692Z"
fill="hsl(var(--foreground))" transform="translate(-169.93432 -164.42601)" />
<circle cx="95.24878" cy="439" fill="hsl(var(--foreground))" r="11" />
<circle cx="227.24878" cy="559" fill="hsl(var(--foreground))" r="11" />
<circle cx="728.24878" cy="559" fill="hsl(var(--foreground))" r="11" />
<circle cx="755.24878" cy="419" fill="hsl(var(--foreground))" r="11" />
<circle cx="723.24878" cy="317" fill="hsl(var(--foreground))" r="11" />
<path d="M434.1831,583.426a10.949,10.949,0,1,1-.21-2.16A10.9921,10.9921,0,0,1,434.1831,583.426Z"
fill="hsl(var(--foreground))" transform="translate(-169.93432 -164.42601)" />
<circle cx="484.24878" cy="349" fill="hsl(var(--foreground))" r="11" />
<path d="M545.1831,513.426a10.949,10.949,0,1,1-.21-2.16A10.9921,10.9921,0,0,1,545.1831,513.426Z"
fill="hsl(var(--foreground))" transform="translate(-169.93432 -164.42601)" />
<path d="M403.1831,481.426a10.949,10.949,0,1,1-.21-2.16A10.9921,10.9921,0,0,1,403.1831,481.426Z"
fill="hsl(var(--foreground))" transform="translate(-169.93432 -164.42601)" />
<circle cx="599.24878" cy="443" fill="hsl(var(--foreground))" r="11" />
<circle cx="426.24878" cy="338" fill="hsl(var(--foreground))" r="16" />
<path
d="M1028.875,735.26666l-857.75.30733a1.19068,1.19068,0,1,1,0-2.38136l857.75-.30734a1.19069,1.19069,0,0,1,0,2.38137Z"
fill="#cacaca" transform="translate(-169.93432 -164.42601)" />
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742572800421" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="977" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M152.25 801.23h-48c-4.42 0-8-3.58-8-8V233.21c0-4.42 3.58-8 8-8h48c4.42 0 8 3.58 8 8v560.02c0 4.42-3.58 8-8 8zM472.31 801.23h-48c-4.42 0-8-3.58-8-8V233.21c0-4.42 3.58-8 8-8h48c4.42 0 8 3.58 8 8v560.02c0 4.42-3.58 8-8 8zM384.19 801.23c-4.42 0-8-3.58-8-8V233.21c0-4.42 3.58-8 8-8s8 3.58 8 8v560.02c0 4.42-3.58 8-8 8zM568.41 801.23h-48c-4.42 0-8-3.58-8-8V233.21c0-4.42 3.58-8 8-8h48c4.42 0 8 3.58 8 8v560.02c0 4.42-3.58 8-8 8zM920.4 801.23h-48c-4.42 0-8-3.58-8-8V233.21c0-4.42 3.58-8 8-8h48c4.42 0 8 3.58 8 8v560.02c0 4.42-3.59 8-8 8zM648.14 801.23h-16c-4.42 0-8-3.58-8-8V233.21c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v560.02c0 4.42-3.59 8-8 8zM311.85 801.23h-112c-4.42 0-8-3.58-8-8V233.21c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v560.02c0 4.42-3.58 8-8 8zM824.37 801.23h-112c-4.42 0-8-3.58-8-8V233.21c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v560.02c0 4.42-3.58 8-8 8z" fill="#515151" p-id="978"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742614262568" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1134" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M1000.96 404.992v-248.32c0-21.504-17.408-39.424-38.912-39.424H62.976c-21.504 0-39.424 17.92-38.912 39.424v710.144c0 22.016 17.408 39.424 38.912 39.424h899.072c21.504 0 39.424-17.92 38.912-39.424V404.992z m-39.424-248.32v208.896h-609.28V156.672h609.28z m-648.192 0v208.896H62.464V156.672h250.88z m0 248.32v208.896H62.464V404.992h250.88z m-250.88 248.32h250.88v213.504H62.464V653.312z m899.072 214.016h-609.28V653.824h609.28v213.504z m0-253.44h-609.28V404.992h609.28v208.896z" fill="#515151" p-id="1135"></path></svg>

After

Width:  |  Height:  |  Size: 846 B

View File

@ -0,0 +1 @@
<svg t="1742570427705" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2698" width="32" height="32"><path d="M63.6 489.6h896.7v44.8H63.6z" p-id="2699"></path></svg>

After

Width:  |  Height:  |  Size: 208 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742632887371" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1162" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M868.8 105.6 155.2 105.6c-28.8 0-51.2 25.6-48 54.4l75.2 600c1.6 17.6 12.8 32 28.8 38.4l281.6 118.4c11.2 4.8 25.6 4.8 36.8 0l281.6-118.4c16-6.4 27.2-20.8 28.8-38.4l75.2-600C920 129.6 897.6 105.6 868.8 105.6zM865.6 179.2l-70.4 558.4c-1.6 8-6.4 16-14.4 19.2l-259.2 108.8c-6.4 3.2-12.8 3.2-19.2 0l-259.2-108.8c-8-3.2-12.8-11.2-14.4-19.2L158.4 179.2c-1.6-14.4 9.6-27.2 24-27.2l659.2 0C856 153.6 867.2 166.4 865.6 179.2z" fill="#515151" p-id="1163"></path><path d="M716.8 252.8 331.2 252.8c-28.8 0-51.2 25.6-48 54.4l17.6 136c3.2 24 24 41.6 48 41.6l294.4 0c14.4 0 25.6 12.8 24 27.2l-9.6 80c-1.6 8-6.4 16-14.4 19.2l-120 51.2c-6.4 3.2-12.8 3.2-19.2 0l-120-51.2c-8-3.2-12.8-11.2-14.4-19.2l-3.2-28.8c-1.6-12.8-14.4-22.4-27.2-20.8-12.8 1.6-22.4 14.4-20.8 27.2l4.8 41.6c1.6 17.6 12.8 32 28.8 38.4l142.4 60.8c11.2 4.8 25.6 4.8 36.8 0l142.4-60.8c16-6.4 27.2-20.8 28.8-38.4l14.4-121.6c3.2-28.8-19.2-54.4-48-54.4l-300.8 0c-12.8 0-22.4-9.6-24-20.8l-11.2-88c-1.6-14.4 9.6-27.2 24-27.2l358.4 0c11.2 0 20.8-8 24-19.2l0 0C742.4 267.2 731.2 252.8 716.8 252.8z" fill="#515151" p-id="1164"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742824830074" class="icon" viewBox="0 0 1152 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1648" xmlns:xlink="http://www.w3.org/1999/xlink" width="36" height="32"><path d="M871.125 433.75a119.85 119.85 0 1 0 0-239.66 119.85 119.85 0 0 0 0 239.66z m209.622-399.318H102.272c-38.955 0-69.93 31.701-69.93 70.656v817.067c0 38.954 30.975 70.656 69.93 70.656h978.475c38.954 0 69.93-31.702 69.93-70.656V105.088c0-38.955-30.976-70.656-69.93-70.656z m-257.28 493.44a42.837 42.837 0 0 0-31.958-15.488c-12.714 0-21.674 5.973-31.957 14.208l-46.677 39.467c-9.728 6.997-17.494 11.733-28.672 11.733a41.301 41.301 0 0 1-27.478-10.24 338.09 338.09 0 0 1-10.752-10.24L511.701 412.075a55.04 55.04 0 0 0-41.685-18.774c-16.725 0-32.213 8.278-41.941 19.499L112.213 793.643V143.53c2.475-16.982 15.702-29.227 32.683-29.227h892.928c17.237 0 31.19 12.757 32.213 29.952l0.726 649.899L823.38 527.872z" fill="#515151" p-id="1649"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742574120913" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1232" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M813.333333 85.333333a104.064 104.064 0 0 1 103.509334 93.354667l0.490666 10.645333v624a104 104 0 0 1-93.354666 103.509334l-10.645334 0.490666H189.333333a104 104 0 0 1-103.509333-93.354666L85.333333 813.333333V189.333333a104.064 104.064 0 0 1 93.354667-103.509333L189.333333 85.333333h624z m0 52.010667H189.333333a52.010667 52.010667 0 0 0-51.413333 44.330667l-0.576 7.658666v624c0 26.133333 19.2 47.765333 44.330667 51.413334l7.658666 0.597333h624a51.989333 51.989333 0 0 0 51.413334-44.373333l0.597333-7.637334V189.333333a52.010667 52.010667 0 0 0-52.010667-52.010666z m9.152 570.410667v49.92H258.133333v-49.92h564.352z m-293.034666-425.173334l29.952 87.04-32.426667 24.64-3.093333-4.992c-19.050667-30.784-29.610667-42.026667-35.114667-46.272-4.16-3.072-26.197333-8.234667-59.989333-8.234666-14.976 0-22.464 0.426667-26.197334 0.661333a69.973333 69.973333 0 0 0-0.426666 5.824v226.133333c0 0.853333 0 1.493333 2.176 2.666667 2.944 1.386667 6.144 2.24 9.386666 2.496l6.08 0.256h46.421334v42.602667h-174.549334v-42.666667h43.669334c11.498667 0 15.146667-1.770667 16.064-2.346667 0.661333-0.341333 1.173333-0.746667 1.408-1.493333l0.170666-1.664V340.096a49.706667 49.706667 0 0 0-0.426666-4.906667 216.746667 216.746667 0 0 0-17.194667-0.512c-32.704 0-54.762667 4.416-61.333333 8.085334-5.738667 3.242667-15.637333 12.224-30.933334 36.437333l-5.994666 9.813333-2.986667 5.162667-36.117333-24.298667 33.706666-87.274666H529.429333zM817.92 509.418667v49.92H509.269333v-49.92H817.92z m0-182.784v49.92h-207.744v-49.92h207.765333z" fill="#515151" p-id="1233"></path></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742572503889" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2838" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M512 42.666667C252.793333 42.666667 42.666667 252.793333 42.666667 512s210.126667 469.333333 469.333333 469.333333 469.333333-210.126667 469.333333-469.333333S771.206667 42.666667 512 42.666667z m0 896c-235.64 0-426.666667-191.026667-426.666667-426.666667s191.026667-426.666667 426.666667-426.666667 426.666667 191.026667 426.666667 426.666667-191.026667 426.666667-426.666667 426.666667z" fill="#5C5C66" p-id="2839"></path></svg>

After

Width:  |  Height:  |  Size: 761 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742573495841" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1007" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M737.673809 863.903745 737.673809 800.13335 672.503531 800.13335 672.503531 863.949794ZM834.943157 863.949794c15.954367 0 29.006637-13.053294 29.006637-29.006637l0-34.808784-62.461587 0 0 63.769372M415.311891 223.865627l0 191.447287L223.864604 415.312914 223.864604 223.865627 415.311891 223.865627M450.120674 160.050206 189.05582 160.050206c-15.953344 0-29.006637 13.053294-29.006637 29.006637l0 261.063831c0 15.954367 13.053294 29.006637 29.006637 29.006637l261.063831 0c15.953344 0 29.006637-13.053294 29.006637-29.006637L479.126288 189.056843C479.127312 173.1035 466.074018 160.050206 450.120674 160.050206L450.120674 160.050206zM319.588759 319.589782m-31.907711 0a31.181 31.181 0 1 0 63.815421 0 31.181 31.181 0 1 0-63.815421 0ZM800.134373 223.865627l0 191.447287L608.688109 415.312914 608.688109 223.865627 800.134373 223.865627M834.943157 160.050206 573.879326 160.050206c-15.954367 0-29.006637 13.053294-29.006637 29.006637l0 261.063831c0 15.954367 13.053294 29.006637 29.006637 29.006637l261.063831 0c15.954367 0 29.006637-13.053294 29.006637-29.006637L863.949794 189.056843C863.950817 173.1035 850.897523 160.050206 834.943157 160.050206L834.943157 160.050206zM704.411241 319.589782m-31.907711 0a31.181 31.181 0 1 0 63.815421 0 31.181 31.181 0 1 0-63.815421 0ZM415.311891 608.687086l0 191.447287L223.864604 800.134373 223.864604 608.687086 415.311891 608.687086M450.120674 544.871665 189.05582 544.871665c-15.953344 0-29.006637 13.053294-29.006637 29.006637l0 261.063831c0 15.954367 13.053294 29.006637 29.006637 29.006637l261.063831 0c15.954367 0 29.006637-13.053294 29.006637-29.006637L479.126288 573.878303C479.127312 557.924959 466.074018 544.871665 450.120674 544.871665L450.120674 544.871665zM319.588759 704.410218m-31.907711 0a31.181 31.181 0 1 0 63.815421 0 31.181 31.181 0 1 0-63.815421 0ZM834.943157 544.871665l-35.579333 0 0 127.630842-63.815421 0L735.548402 544.871665 573.879326 544.871665c-15.954367 0-29.006637 13.053294-29.006637 29.006637l0 261.063831c0 15.954367 13.053294 29.006637 29.006637 29.006637l34.808784 0 0-63.815421 0-63.815421 0-63.815421 63.815421 0 0 63.815421L863.950817 736.317928l0-162.439626C863.950817 557.924959 850.897523 544.871665 834.943157 544.871665z" fill="#515151" p-id="1008"></path></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742572377664" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1823" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M928 896H96a53.393333 53.393333 0 0 1-53.333333-53.333333V181.333333a53.393333 53.393333 0 0 1 53.333333-53.333333h832a53.393333 53.393333 0 0 1 53.333333 53.333333v661.333334a53.393333 53.393333 0 0 1-53.333333 53.333333zM96 170.666667a10.666667 10.666667 0 0 0-10.666667 10.666666v661.333334a10.666667 10.666667 0 0 0 10.666667 10.666666h832a10.666667 10.666667 0 0 0 10.666667-10.666666V181.333333a10.666667 10.666667 0 0 0-10.666667-10.666666z" fill="#5C5C66" p-id="1824"></path></svg>

After

Width:  |  Height:  |  Size: 820 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742614649517" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1131" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M122.368 165.888h778.24c-9.216 0-16.384-7.168-16.384-16.384v713.728c0-9.216 7.168-16.384 16.384-16.384h-778.24c9.216 0 16.384 7.168 16.384 16.384V150.016c0 8.192-6.656 15.872-16.384 15.872z m-32.768 684.544c0 26.112 20.992 47.104 47.104 47.104h750.08c26.112 0 47.104-20.992 47.104-47.104V162.304c0-26.112-20.992-47.104-47.104-47.104H136.704c-26.112 0-47.104 20.992-47.104 47.104v688.128z" fill="#515151" p-id="1132"></path><path d="M249.344 347.648h49.152v499.2h-49.152zM584.704 347.648h49.152v499.2h-49.152zM137.728 165.888h746.496v181.76H137.728z" fill="#515151" p-id="1133"></path><path d="M137.728 481.792h746.496v49.152H137.728zM137.728 664.576h746.496v49.152H137.728z" fill="#515151" p-id="1134"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742574116722" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1069" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M747.24 345.95c-11.47 0-20.76-9.3-20.76-20.76v-20.76H297.51v20.76c0 11.46-9.29 20.76-20.76 20.76S256 336.65 256 325.19v-41.51c0-11.46 9.29-20.76 20.76-20.76h470.49c11.47 0 20.76 9.3 20.76 20.76v41.51c-0.01 11.46-9.3 20.76-20.77 20.76z" fill="#515151" p-id="1070"></path><path d="M512 761.08c-11.47 0-20.76-9.3-20.76-20.76V283.68c0-11.46 9.29-20.76 20.76-20.76 11.47 0 20.76 9.3 20.76 20.76v456.65c0 11.45-9.29 20.75-20.76 20.75z" fill="#515151" p-id="1071"></path><path d="M581.19 761.08H442.81c-11.47 0-20.76-9.3-20.76-20.76s9.29-20.76 20.76-20.76h138.38c11.47 0 20.76 9.3 20.76 20.76s-9.29 20.76-20.76 20.76z" fill="#515151" p-id="1072"></path></svg>

After

Width:  |  Height:  |  Size: 983 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742572284188" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2613" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M480 128h64v768h-64z" p-id="2614"></path></svg>

After

Width:  |  Height:  |  Size: 378 B

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