refactor: 悦码项目重构

This commit is contained in:
wangxuefeng
2025-02-19 13:42:56 +08:00
parent c8c9406fd5
commit eab709f94f
494 changed files with 50986 additions and 27639 deletions

View File

@@ -0,0 +1,9 @@
[*.{js, jsx, ts, tsx, vue, mjs}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
ij_javascript_spaces_within_imports = true
ij_html_do_not_indent_children_of_tags = html, body, thead, tbody, tfoot, script
ij_javascript_space_before_function_left_parenth = true
ij_javascript_use_semicolon_after_statement = true

33
apps/designer/.gitignore vendored Normal file
View File

@@ -0,0 +1,33 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
.history
# Project
package-lock.json
yarn-lock.json
pnpm-lock.yaml
tsconfig.tsbuildinfo
node_modules
coverage
dist
dist-ssr
*.local
.vtj/logs
.vtj/histories

15
apps/designer/.npmrc Normal file
View File

@@ -0,0 +1,15 @@
registry = https://registry.npmmirror.com
@sy:registry=http://sy-registry.shiyue.com
# 根据需要提升含有以下的依赖包到根 node_modules 目录下
# public-hoist-pattern[]=core-js
# public-hoist-pattern[]=*@vtj*
# 提升所有依赖到根 node_modules 目录下,相当于 public-hoist-pattern[]=*,与上面一种方式一般二选一使用
# 极不推荐用这样的方式解决依赖问题,这样没有充分利用 pnpm 依赖访问安全性的优势,又走回了 npm / yarn 的老路。
# shamefully-hoist=true
enable-pre-post-scripts=true
engine-strict=true
package-manager-strict=false

20
apps/designer/.prettierrc Normal file
View File

@@ -0,0 +1,20 @@
{
"arrowParens": "always",
"bracketSpacing": true,
"bracketSameLine": true,
"endOfLine": "lf",
"htmlWhitespaceSensitivity": "css",
"insertPragma": false,
"jsxBracketSameLine": true,
"jsxSingleQuote": true,
"printWidth": 80,
"proseWrap": "preserve",
"quoteProps": "as-needed",
"requirePragma": false,
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "none",
"useTabs": false,
"vueIndentScriptAndStyle": false
}

5
apps/designer/.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,5 @@
{
"recommendations": [
"vue.volar"
]
}

View File

@@ -0,0 +1,19 @@
{
"name": "Test",
"locked": false,
"inject": [],
"state": {},
"lifeCycles": {},
"methods": {},
"computed": {},
"watch": [],
"css": "",
"props": [],
"emits": [],
"slots": [],
"dataSources": {},
"__VTJ_BLOCK__": true,
"__VERSION__": "1739842497674",
"id": "45t7j3xqi",
"nodes": []
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,176 @@
{
"__VTJ_PROJECT__": true,
"id": "@sy/low-code-designer",
"platform": "web",
"name": "低代码编辑器",
"homepage": "",
"description": "低代码编辑器",
"dependencies": [
{
"package": "vue",
"version": "latest",
"library": "Vue",
"urls": [
"@vtj/materials/deps/vue/vue.global.prod.js"
],
"assetsLibrary": "VueMaterial",
"required": true,
"official": true,
"enabled": true
},
{
"package": "vue-router",
"version": "latest",
"library": "VueRouter",
"urls": [
"@vtj/materials/deps/vue-router/vue-router.global.prod.js"
],
"assetsLibrary": "VueRouterMaterial",
"required": true,
"official": true,
"enabled": true
},
{
"package": "@vtj/utils",
"version": "latest",
"library": "VtjUtils",
"urls": [
"@vtj/materials/deps/@vtj/utils/index.umd.js"
],
"required": true,
"official": true,
"enabled": true
},
{
"package": "@vtj/icons",
"version": "latest",
"library": "VtjIcons",
"urls": [
"@vtj/materials/deps/@vtj/icons/style.css",
"@vtj/materials/deps/@vtj/icons/index.umd.js"
],
"required": true,
"official": true,
"enabled": true
},
{
"package": "@vueuse/core",
"version": "latest",
"library": "VueUse",
"urls": [
"@vtj/materials/deps/@vueuse/shared/index.iife.min.js",
"@vtj/materials/deps/@vueuse/core/index.iife.min.js"
],
"required": false,
"official": true,
"enabled": true,
"platform": [
"web",
"h5"
]
},
{
"package": "element-plus",
"version": "latest",
"library": "ElementPlus",
"localeLibrary": "ElementPlusLocaleZhCn",
"urls": [
"@vtj/materials/deps/element-plus/dark/css-vars.css",
"@vtj/materials/deps/element-plus/index.css",
"@vtj/materials/deps/element-plus/zh-cn.js",
"@vtj/materials/deps/element-plus/index.full.min.js"
],
"assetsUrl": "@vtj/materials/assets/element/index.umd.js",
"assetsLibrary": "ElementPlusMaterial",
"required": false,
"official": true,
"enabled": true,
"platform": "web"
},
{
"package": "@vtj/ui",
"version": "latest",
"library": "VtjUI",
"urls": [
"@vtj/materials/deps/vxe-table/style.min.css",
"@vtj/materials/deps/@vtj/ui/style.css",
"@vtj/materials/deps/xe-utils/xe-utils.umd.min.js",
"@vtj/materials/deps/vxe-table/index.umd.min.js",
"@vtj/materials/deps/@vtj/ui/index.umd.js"
],
"assetsUrl": "@vtj/materials/assets/ui/index.umd.js",
"assetsLibrary": "VtjUIMaterial",
"required": false,
"official": true,
"enabled": false,
"platform": "web"
},
{
"package": "ant-design-vue",
"version": "latest",
"library": "antd",
"urls": [
"@vtj/materials/deps/ant-design-vue/reset.css",
"@vtj/materials/deps/ant-design-vue/dayjs/dayjs.min.js",
"@vtj/materials/deps/ant-design-vue/dayjs/plugin/customParseFormat.js",
"@vtj/materials/deps/ant-design-vue/dayjs/plugin/weekday.js",
"@vtj/materials/deps/ant-design-vue/dayjs/plugin/localeData.js",
"@vtj/materials/deps/ant-design-vue/dayjs/plugin/weekOfYear.js",
"@vtj/materials/deps/ant-design-vue/dayjs/plugin/weekYear.js",
"@vtj/materials/deps/ant-design-vue/dayjs/plugin/advancedFormat.js",
"@vtj/materials/deps/ant-design-vue/dayjs/plugin/quarterOfYear.js",
"@vtj/materials/deps/ant-design-vue/antd.min.js"
],
"assetsUrl": "@vtj/materials/assets/antdv/index.umd.js",
"assetsLibrary": "AntdvMaterial",
"required": false,
"official": true,
"enabled": false,
"platform": [
"web"
]
},
{
"package": "@vtj/charts",
"version": "latest",
"library": "VtjCharts",
"urls": [
"@vtj/materials/deps/echarts/echarts.min.js",
"@vtj/materials/deps/@vtj/charts/index.umd.js"
],
"assetsUrl": "@vtj/materials/assets/charts/index.umd.js",
"assetsLibrary": "VtjChartsMaterial",
"required": false,
"official": true,
"enabled": false,
"platform": [
"web",
"h5"
]
}
],
"pages": [
{
"dir": false,
"name": "Test",
"title": "1",
"icon": "",
"mask": true,
"hidden": false,
"raw": false,
"pure": false,
"meta": "",
"cache": false,
"id": "45t7j3xqi",
"type": "page"
}
],
"blocks": [],
"apis": [],
"meta": [],
"config": {
"title": "",
"themeSwitchable": false
},
"__BASE_PATH__": "/"
}

4
apps/designer/env.json Normal file
View File

@@ -0,0 +1,4 @@
{
"PORTAL_HOST": "sso-sit.newpearl.com",
"PORTAL_HOST_I": "soi-sit.newpearl.com"
}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

18
apps/designer/index.html Normal file
View File

@@ -0,0 +1,18 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="shortcut icon" href="/logo.svg" type="image/x-icon" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
http-equiv="Cache-Control"
content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<title>VTJ Web Project Template</title>
</head>
<body>
<div id="low-code-designer"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

View File

@@ -0,0 +1,35 @@
{
"name": "@sy/low-code-designer",
"description": "低代码编辑器",
"private": true,
"version": "1.0.0-1",
"type": "module",
"scripts": {
"dev": "cross-env ENV_TYPE=local vite",
"build": "npm run build:prod",
"build:sit": "vue-tsc && cross-env ENV_TYPE=sit vite build",
"build:uat": "vue-tsc && cross-env ENV_TYPE=uat vite build",
"build:pre": "vue-tsc && cross-env ENV_TYPE=pre vite build",
"build:prod": "cross-env ENV_TYPE=live vite build",
"preview": "vite preview",
"clean:lock": "rimraf pnpm-lock.yaml && rimraf package.lock.json",
"clean:lib": "rimraf node_modules"
},
"dependencies": {
"@vtj/materials": "^0.9.30",
"@vtj/renderer": "^0.9.30",
"@vtj/ui": "^0.9.30",
"@vtj/web": "^0.9.30",
"element-plus": "^2.9.4",
"vue": "~3.5.13",
"vue-router": "~4.5.0",
"core-js": "^3.40.0"
},
"devDependencies": {
"@sy/vite-plugin-http2-proxy": "workspace:*",
"@vtj/cli": "^0.9.8",
"@vtj/local": "^0.9.30",
"vite": "6.1.0",
"vite-plugin-mkcert": "^1.17.6"
}
}

View File

@@ -0,0 +1,7 @@
export default {
'/api': {
target: 'https://sso-sit.newpearl.com',
changeOrigin: true,
ws: true
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 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="1711803009570" class="icon" viewBox="0 0 1280 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1500" width="320" height="256" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M557.85 1023l-122-35.4c-12.8-3.6-20-17-16.4-29.8L692.45 17.4c3.6-12.8 17-20 29.8-16.4l122 35.4c12.8 3.6 20 17 16.4 29.8L587.65 1006.6c-3.8 12.8-17 20.2-29.8 16.4z m-228-224.4l87-92.8c9.2-9.8 8.6-25.4-1.6-34.4L234.05 512l181.2-159.4c10.2-9 11-24.6 1.6-34.4l-87-92.8c-9-9.6-24.2-10.2-34-1L7.65 494.4c-10.2 9.4-10.2 25.6 0 35l288.2 270.2c9.8 9.2 25 8.8 34-1z m654.4 1.2l288.2-270.2c10.2-9.4 10.2-25.6 0-35L984.25 224.2c-9.6-9-24.8-8.6-34 1L863.25 318c-9.2 9.8-8.6 25.4 1.6 34.4L1046.05 512l-181.2 159.4c-10.2 9-11 24.6-1.6 34.4l87 92.8c9 9.8 24.2 10.2 34 1.2z" fill="#0157fe" p-id="1501"></path></svg>

After

Width:  |  Height:  |  Size: 931 B

51
apps/designer/src/App.vue Normal file
View File

@@ -0,0 +1,51 @@
<template>
<ElConfigProvider :locale="zhCn">
<Suspense>
<XMask
:title="title"
:logo="logo || _logo"
:menus="menus"
:disabled="disabled"
:pure="pure"
:actions="actions"
@action-click="onActionClick"
:theme="themeSwitchable"></XMask>
</Suspense>
</ElConfigProvider>
</template>
<script setup lang="ts">
import { Suspense } from 'vue';
import { ElConfigProvider, ElMessage } from 'element-plus';
import {
XMask,
useMask,
Bell,
Lock,
SwitchButton,
type ActionBarItems,
type ActionProps
} from '@vtj/web';
import zhCn from 'element-plus/es/locale/lang/zh-cn';
import _logo from './assets/logo.svg';
const { disabled, title, menus, logo, themeSwitchable, pure } = useMask();
const actions: ActionBarItems = [
{
name: 'message',
icon: Bell,
badge: 1
},
{
name: 'lock',
icon: Lock
},
{
name: 'logout',
icon: SwitchButton
}
];
const onActionClick = (action: ActionProps) => {
ElMessage.success(`click: ${action.name}`);
};
</script>

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 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="1711803009570" class="icon" viewBox="0 0 1280 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1500" width="320" height="256" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M557.85 1023l-122-35.4c-12.8-3.6-20-17-16.4-29.8L692.45 17.4c3.6-12.8 17-20 29.8-16.4l122 35.4c12.8 3.6 20 17 16.4 29.8L587.65 1006.6c-3.8 12.8-17 20.2-29.8 16.4z m-228-224.4l87-92.8c9.2-9.8 8.6-25.4-1.6-34.4L234.05 512l181.2-159.4c10.2-9 11-24.6 1.6-34.4l-87-92.8c-9-9.6-24.2-10.2-34-1L7.65 494.4c-10.2 9.4-10.2 25.6 0 35l288.2 270.2c9.8 9.2 25 8.8 34-1z m654.4 1.2l288.2-270.2c10.2-9.4 10.2-25.6 0-35L984.25 224.2c-9.6-9-24.8-8.6-34 1L863.25 318c-9.2 9.8-8.6 25.4 1.6 34.4L1046.05 512l-181.2 159.4c-10.2 9-11 24.6-1.6 34.4l87 92.8c9 9.8 24.2 10.2 34 1.2z" fill="#0157fe" p-id="1501"></path></svg>

After

Width:  |  Height:  |  Size: 931 B

View File

@@ -0,0 +1,38 @@
<script setup lang="ts">
import { ref } from 'vue'
defineProps<{ msg: string }>()
const count = ref(0)
</script>
<template>
<h1>{{ msg }}</h1>
<div class="card">
<button type="button" @click="count++">count is {{ count }}</button>
<p>
Edit
<code>components/HelloWorld.vue</code> to test HMR
</p>
</div>
<p>
Check out
<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
>create-vue</a
>, the official Vue + Vite starter
</p>
<p>
Install
<a href="https://github.com/vuejs/language-tools" target="_blank">Volar</a>
in your IDE for a better DX
</p>
<p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
</template>
<style scoped>
.read-the-docs {
color: #888;
}
</style>

28
apps/designer/src/env.d.ts vendored Normal file
View File

@@ -0,0 +1,28 @@
/// <reference types="vite/client" />
declare module '*.vue' {
import type { DefineComponent } from 'vue';
const component: DefineComponent<{}, {}, any>;
export default component;
}
declare namespace NodeJS {
interface ProcessEnv {
[key: string]: any;
}
}
declare module global {
interface Window {}
}
declare module 'vue' {
interface ComponentCustomProperties {
$uploader: any;
$reqeust: any;
$apis: any;
$libs: any;
}
}
export {};

48
apps/designer/src/main.ts Normal file
View File

@@ -0,0 +1,48 @@
import {
createProvider,
LocalService,
createModules,
NodeEnv,
autoUpdate,
notify,
loading,
createAdapter,
createServiceRequest
} from '@vtj/web';
import { createApp } from 'vue';
import router from './router';
import App from './App.vue';
import { name, description } from '../package.json';
import './style/index.scss';
const app = createApp(App);
const adapter = createAdapter({ loading, notify });
const service = new LocalService(createServiceRequest(notify));
// const modules = createModules();
// console.log('modules', modules);
const { provider, onReady } = createProvider({
nodeEnv: process.env.NODE_ENV as NodeEnv,
modules: createModules(),
service,
adapter,
router,
dependencies: {
Vue: () => import('vue'),
VueRouter: () => import('vue-router')
},
project: {
id: name,
name: description
}
});
onReady(async () => {
app.use(router);
app.use(provider);
app.mount('#low-code-designer');
});
if (process.env.NODE_ENV === 'production') {
autoUpdate();
}

View File

@@ -0,0 +1,19 @@
import { createRouter, createWebHistory } from 'vue-router';
const router = createRouter({
history: createWebHistory(),
routes: [
{
path: '/unauthorized',
name: 'Unauthorized',
component: () => import('@/views/unauthorized.vue')
},
{
path: '/:pathMatch(.*)*',
name: 'NotFound',
component: () => import('@/views/not-found.vue')
}
]
});
export default router;

View File

@@ -0,0 +1,11 @@
@use '@vtj/web/src/index.scss';
html,
body,
#app {
padding: 0;
margin: 0;
font-size: 14px;
height: 100%;
overflow: hidden;
}

View File

@@ -0,0 +1,10 @@
<template>
<XContainer class="not-found" fit justify="center">
<ElEmpty description="找不到页面【404】"></ElEmpty>
</XContainer>
</template>
<script lang="ts" setup>
import { XContainer } from '@vtj/web';
import { ElEmpty } from 'element-plus';
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,10 @@
<template>
<XContainer class="unauthorized" fit justify="center">
<ElEmpty description="无权限访问该页面"></ElEmpty>
</XContainer>
</template>
<script lang="ts" setup>
import { XContainer } from '@vtj/ui';
import { ElEmpty } from 'element-plus';
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,27 @@
{
"extends": "./node_modules/@vtj/cli/config/tsconfig.web.json",
"compilerOptions": {
"noUnusedLocals": false,
"noUnusedParameters": false,
"baseUrl": "./",
"paths": {
"@/*": [
"src/*"
],
"$vtj/*": [
".vtj/*"
]
}
},
"include": [
"src"
],
"exclude": [
".vtj",
],
"references": [
{
"path": "./tsconfig.node.json"
}
]
}

View File

@@ -0,0 +1,13 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": [
"vite.config.ts",
"proxy.config.ts"
]
}

View File

@@ -0,0 +1,19 @@
import { createViteConfig } from '@vtj/cli';
import { createDevTools } from '@vtj/local';
import mkcert from 'vite-plugin-mkcert';
import Http2Proxy from '@sy/vite-plugin-http2-proxy';
import type { UserConfig, ConfigEnv } from 'vite';
const config = createViteConfig({
plugins: [createDevTools(), mkcert({ source: 'coding' }), Http2Proxy()]
});
// export default config;
export default ({ command, mode }: ConfigEnv): UserConfig => {
return {
...config,
server: {
cors: true
}
};
};

View File

@@ -0,0 +1,5 @@
> 1%
last 2 versions
not dead
not ie 11
chrome 79

View File

@@ -0,0 +1,19 @@
.DS_Store
node_modules/
dist/
.vscode/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
tests/**/coverage/
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln

8
apps/platform/.env Normal file
View File

@@ -0,0 +1,8 @@
# 项目名称
VITE_APP_TITLE = Admin
# 公共基础路径, 详见: https://cn.vitejs.dev/guide/build.html#public-base-path
VITE_BASE_URL = /
# enable mock in production
VITE_MOCK_IN_PROD = true

View File

@@ -0,0 +1,8 @@
# 只在开发模式中被载入
ENV = 'development'
# 公共基础路径, 详见: https://cn.vitejs.dev/guide/build.html#public-base-path
VITE_BASE_URL = /
# base api url
VITE_BASE_API_URL = 'http://8.134.216.72:8080/'

View File

@@ -0,0 +1,8 @@
# 只在生产模式中被载入
ENV = 'production'
# base api url
VITE_BASE_API_URL = 'http://127.0.0.1:8080/'
# 公共基础路径, 详见: https://cn.vitejs.dev/guide/build.html#public-base-path
VITE_BASE_URL = /

11
apps/platform/.gitattributes vendored Normal file
View File

@@ -0,0 +1,11 @@
# https://docs.github.com/cn/get-started/getting-started-with-git/configuring-git-to-handle-line-endings
# Automatically normalize line endings (to LF) for all text-based files.
* text=auto eol=lf
# Declare files that will always have CRLF line endings on checkout.
*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.{ico,png,jpg,jpeg,gif,webp,svg,woff,woff2} binary

35
apps/platform/.gitignore vendored Normal file
View File

@@ -0,0 +1,35 @@
node_modules
.DS_Store
dist
.cache
.turbo
.nx
.nx/cache
tests/server/static
tests/server/static/upload
.local
# local env files
.env.local
.env.*.local
.eslintcache
# 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?
# auto generate file
types/auto-imports.d.ts
types/components.d.ts

22
apps/platform/.npmrc Normal file
View File

@@ -0,0 +1,22 @@
# 使用淘宝镜像源
registry = https://registry.npmmirror.com
@sy:registry=http://sy-registry.shiyue.com
# 根据需要提升含有以下的依赖包到根 node_modules 目录下
# public-hoist-pattern[]=husky
# public-hoist-pattern[]=*eslint*
# public-hoist-pattern[]=@eslint*
# public-hoist-pattern[]=*prettier*
# public-hoist-pattern[]=lint-staged
# public-hoist-pattern[]=*stylelint*
# public-hoist-pattern[]=@commitlint*
# public-hoist-pattern[]=core-js
# 提升所有依赖到根 node_modules 目录下,相当于 public-hoist-pattern[]=*,与上面一种方式一般二选一使用
# 极不推荐用这样的方式解决依赖问题,这样没有充分利用 pnpm 依赖访问安全性的优势,又走回了 npm / yarn 的老路。
# shamefully-hoist=true
enable-pre-post-scripts=true
engine-strict=true
package-manager-strict=false

View File

@@ -0,0 +1,81 @@
# 1.1.0 (2022-09-02)
### Bug Fixes
- :bug: router navigation bug ([b550a7a](https://github.com/buqiyuan/vite-vue3-admin/commit/b550a7a01b486cfd161ccb8efd7bca9a0ed35627))
- :bug:生成路由出错问题 ([917e3f0](https://github.com/buqiyuan/vite-vue3-admin/commit/917e3f07209851a3df0b7e220e38df4df7612a68))
- :bug:修复某些权限码传参错误 ([47071ef](https://github.com/buqiyuan/vite-vue3-admin/commit/47071efa7beb2e210151405e2a1c7e74d6dff4f1))
- :bug:fix BASE_URL to VITE_BASE_URL ([3d32e82](https://github.com/buqiyuan/vite-vue3-admin/commit/3d32e82b838aea3c8a928989d2aa55c5d125a8ab))
- 面包屑导航和弹窗拖拽后宽度问题 ([ae96559](https://github.com/buqiyuan/vite-vue3-admin/commit/ae96559fb82a87908a40b425701eaa0ee1993aa7))
- 删除一些多余的旧代码 ([9eaa568](https://github.com/buqiyuan/vite-vue3-admin/commit/9eaa568a104e7ab1980c0d2069cbedddb4a4934b))
- add menu type judgment ([144a539](https://github.com/buqiyuan/vite-vue3-admin/commit/144a53942a9229cb5e0286ae3452b644d66621e6))
- **component:** :bug:修复 dynamicTable ts 类型错误 ([58b9275](https://github.com/buqiyuan/vite-vue3-admin/commit/58b9275758625f583aed644923431df72acb9687))
- **components:** [dynamic-table] initial fetchData did not carry the default value ([3aaedcf](https://github.com/buqiyuan/vite-vue3-admin/commit/3aaedcf3c0551477e05dec85fb86d4e5af62b193))
- **components:** [dynamic-table] parameter missing ([1e306d7](https://github.com/buqiyuan/vite-vue3-admin/commit/1e306d77d205cc9fe69fb19d860f5e014e8accc8))
- **dynamic-table:** add onChangeParams param for dataRequest ([f381c79](https://github.com/buqiyuan/vite-vue3-admin/commit/f381c793529b6711994e001d29d1b8e6dc016631))
- fix the aformPropsKeys ([#22](https://github.com/buqiyuan/vite-vue3-admin/issues/22)) ([e1c21be](https://github.com/buqiyuan/vite-vue3-admin/commit/e1c21bea3dddee1fefc9465142f390b0252ebcb4))
- invalid regular expression in safari ([3939f82](https://github.com/buqiyuan/vite-vue3-admin/commit/3939f8229561959cb46982f64c54f4348258a1bd)), closes [#20](https://github.com/buqiyuan/vite-vue3-admin/issues/20)
- isAsyncFunction ([71aca13](https://github.com/buqiyuan/vite-vue3-admin/commit/71aca13b8055cd38c9f49a4d370c935312fa4d6f))
- **pages:** about page link issues ([62c840c](https://github.com/buqiyuan/vite-vue3-admin/commit/62c840ccec3aa4b4237a182d750db933797c1c92))
- **projects:** 修复 tabs-view 下拉菜单溢出 ([a43353d](https://github.com/buqiyuan/vite-vue3-admin/commit/a43353dc89f8395278b6988f7a2dd8c372ff0d7f))
- remove topLevelAwait usage ([6653da6](https://github.com/buqiyuan/vite-vue3-admin/commit/6653da65f7a6d9738a39c955fb4dcb6d4f553235))
- router redirect error when logout ([4073cb6](https://github.com/buqiyuan/vite-vue3-admin/commit/4073cb651b3bf45c16ce5f965fb7dddd3fab3bcd))
- **router:** 第一次进入页面缓存失效问题 ([1b79adc](https://github.com/buqiyuan/vite-vue3-admin/commit/1b79adc072c1c9b6518cc4c05846dfd47c954989))
- **schema-form:** update props issue ([ff1da5e](https://github.com/buqiyuan/vite-vue3-admin/commit/ff1da5e4f9723392f8af6a5286131f8cbf3c2bf8))
- some css style issues ([9db10b0](https://github.com/buqiyuan/vite-vue3-admin/commit/9db10b058c8ba212cf51c94c10d2f37705ff7112))
- some route file path error ([c89b131](https://github.com/buqiyuan/vite-vue3-admin/commit/c89b131d77c0ee8036813a2d377774bb854c652d))
- some ts type issue ([60ea702](https://github.com/buqiyuan/vite-vue3-admin/commit/60ea702d7fe9cc88f85c07cdb0cd6fe5f3c56669))
- svg can not loaded ([6aec46a](https://github.com/buqiyuan/vite-vue3-admin/commit/6aec46a00412a2b02e4090faca6722717a739550))
- **utils:** [is] always false of isPromise ([8479111](https://github.com/buqiyuan/vite-vue3-admin/commit/84791110a87ab48f131c91e73508c2547fff8b25))
- xlsx.js not default export in new versions [#8](https://github.com/buqiyuan/vite-vue3-admin/issues/8) ([a0b0fc8](https://github.com/buqiyuan/vite-vue3-admin/commit/a0b0fc8c78e1cf75e5ed7e48aee03dc7ce364db4))
### Features
- 表格列设置工具栏 ([a934e12](https://github.com/buqiyuan/vite-vue3-admin/commit/a934e123426fab27fcbfbf47181f3355f584974a))
- 当前用户角色权限变更时实时更新权限菜单 ([89918a2](https://github.com/buqiyuan/vite-vue3-admin/commit/89918a2195b119f480f498d420bb29016d557846))
- 服务监控页面 ([0c3d61f](https://github.com/buqiyuan/vite-vue3-admin/commit/0c3d61fbdf4b0ecb1375990c06f5b039bed37085))
- 全局挂载 Reflect 反射对象 ([f6f4675](https://github.com/buqiyuan/vite-vue3-admin/commit/f6f4675fba8e94b8b8bb67eff79d1205e3b06fff))
- 新增按钮权限 ([5538d38](https://github.com/buqiyuan/vite-vue3-admin/commit/5538d387925b7bd53f332643903f9e4cacad0908))
- **components:** [dynamic-table] cell support defaultEditable ([125bb08](https://github.com/buqiyuan/vite-vue3-admin/commit/125bb08ef2563f4dd4f3883da679e739e3f80bad))
- **components:** [dynamic-table] support cell edit ([4411b0e](https://github.com/buqiyuan/vite-vue3-admin/commit/4411b0e49feeb93b3d1034fc038c9a778d7312af))
- **components:** [ProjectSetting] add layout mode ([815b0c2](https://github.com/buqiyuan/vite-vue3-admin/commit/815b0c2cdc063a848b88cfe35519b0755b279282))
- edit-row-table support save loading ([4d0eea6](https://github.com/buqiyuan/vite-vue3-admin/commit/4d0eea6d30d8b09d30cafb6e3bb4b80bb806c675))
- support for nested routes ([9d9e1d8](https://github.com/buqiyuan/vite-vue3-admin/commit/9d9e1d856f01e0164c88a18583957d20ace95654))
- **tools:** :art: add project config drawer ([c1f0de0](https://github.com/buqiyuan/vite-vue3-admin/commit/c1f0de05f25bbbadbcbc9f4a105e8d721b008bbb))
- update basic-form demo ([27f95ec](https://github.com/buqiyuan/vite-vue3-admin/commit/27f95ec4e7c1b57fca5af379165960167aea2e1b))
- **views:** add about page ([0a34802](https://github.com/buqiyuan/vite-vue3-admin/commit/0a34802b7ef2d2727df4b3b769bd4d664ace2bfa))
### Performance Improvements
- **tableColumns:** customRender is easy ([#10](https://github.com/buqiyuan/vite-vue3-admin/issues/10)) ([e069f3c](https://github.com/buqiyuan/vite-vue3-admin/commit/e069f3c164f92e414638cb2f681013c7dc7727a0))
- use vite-plugin-style-import replace unplugin-vue-components [#5](https://github.com/buqiyuan/vite-vue3-admin/issues/5) ([10540eb](https://github.com/buqiyuan/vite-vue3-admin/commit/10540eb1de36f4cd6048f86e5b0363109d571760))
## 1.0.2 (2022-03-15)
### Bug Fixes
- :bug: router navigation bug ([b550a7a](https://github.com/buqiyuan/vite-vue3-admin/commit/b550a7a01b486cfd161ccb8efd7bca9a0ed35627))
- :bug:生成路由出错问题 ([917e3f0](https://github.com/buqiyuan/vite-vue3-admin/commit/917e3f07209851a3df0b7e220e38df4df7612a68))
- :bug:修复某些权限码传参错误 ([47071ef](https://github.com/buqiyuan/vite-vue3-admin/commit/47071efa7beb2e210151405e2a1c7e74d6dff4f1))
- :bug:fix BASE_URL to VITE_BASE_URL ([3d32e82](https://github.com/buqiyuan/vite-vue3-admin/commit/3d32e82b838aea3c8a928989d2aa55c5d125a8ab))
- 面包屑导航和弹窗拖拽后宽度问题 ([ae96559](https://github.com/buqiyuan/vite-vue3-admin/commit/ae96559fb82a87908a40b425701eaa0ee1993aa7))
- 删除一些多余的旧代码 ([9eaa568](https://github.com/buqiyuan/vite-vue3-admin/commit/9eaa568a104e7ab1980c0d2069cbedddb4a4934b))
- **component:** :bug:修复 dynamicTable ts 类型错误 ([58b9275](https://github.com/buqiyuan/vite-vue3-admin/commit/58b9275758625f583aed644923431df72acb9687))
- remove topLevelAwait usage ([6653da6](https://github.com/buqiyuan/vite-vue3-admin/commit/6653da65f7a6d9738a39c955fb4dcb6d4f553235))
- **router:** 第一次进入页面缓存失效问题 ([1b79adc](https://github.com/buqiyuan/vite-vue3-admin/commit/1b79adc072c1c9b6518cc4c05846dfd47c954989))
- some route file path error ([c89b131](https://github.com/buqiyuan/vite-vue3-admin/commit/c89b131d77c0ee8036813a2d377774bb854c652d))
- svg can not loaded ([6aec46a](https://github.com/buqiyuan/vite-vue3-admin/commit/6aec46a00412a2b02e4090faca6722717a739550))
- xlsx.js not default export in new versions [#8](https://github.com/buqiyuan/vite-vue3-admin/issues/8) ([a0b0fc8](https://github.com/buqiyuan/vite-vue3-admin/commit/a0b0fc8c78e1cf75e5ed7e48aee03dc7ce364db4))
### Features
- 表格列设置工具栏 ([a934e12](https://github.com/buqiyuan/vite-vue3-admin/commit/a934e123426fab27fcbfbf47181f3355f584974a))
- 服务监控页面 ([0c3d61f](https://github.com/buqiyuan/vite-vue3-admin/commit/0c3d61fbdf4b0ecb1375990c06f5b039bed37085))
- 全局挂载 Reflect 反射对象 ([f6f4675](https://github.com/buqiyuan/vite-vue3-admin/commit/f6f4675fba8e94b8b8bb67eff79d1205e3b06fff))
- 新增按钮权限 ([5538d38](https://github.com/buqiyuan/vite-vue3-admin/commit/5538d387925b7bd53f332643903f9e4cacad0908))
- **views:** add about page ([0a34802](https://github.com/buqiyuan/vite-vue3-admin/commit/0a34802b7ef2d2727df4b3b769bd4d664ace2bfa))
### Performance Improvements
- **tableColumns:** customRender is easy ([#10](https://github.com/buqiyuan/vite-vue3-admin/issues/10)) ([e069f3c](https://github.com/buqiyuan/vite-vue3-admin/commit/e069f3c164f92e414638cb2f681013c7dc7727a0))
- use vite-plugin-style-import replace unplugin-vue-components [#5](https://github.com/buqiyuan/vite-vue3-admin/issues/5) ([10540eb](https://github.com/buqiyuan/vite-vue3-admin/commit/10540eb1de36f4cd6048f86e5b0363109d571760))

29
apps/platform/Dockerfile Normal file
View File

@@ -0,0 +1,29 @@
# https://stackoverflow.com/questions/53681522/share-variable-in-multi-stage-dockerfile-arg-before-from-not-substituted
ARG PROJECT_DIR=/vue3-antdv-admin
FROM node:20-slim as builder
ARG PROJECT_DIR
WORKDIR $PROJECT_DIR
# 安装pnpm
RUN npm install -g pnpm
COPY . ./
# 安装依赖
# 若网络不通,可以使用淘宝源
# RUN pnpm config set registry https://registry.npmmirror.com
RUN pnpm install
# 构建项目
ENV VITE_BASE_URL=/
RUN pnpm build
FROM nginx:alpine as production
ARG PROJECT_DIR
COPY --from=builder $PROJECT_DIR/dist/ /usr/share/nginx/html
# COPY --from=builder $PROJECT_DIR/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80

42
apps/platform/README.md Normal file
View File

@@ -0,0 +1,42 @@
## 安装使用
- 安装依赖
```bash
pnpm install
```
- 运行
```bash
pnpm dev
```
- 打包
```bash
pnpm build
```
## vscode 配置
安装项目根目录 `.vscode` 推荐的插件,再安装 `Volar`,并禁用 `Vetur`,重启 vscode 即可。
## Git 贡献提交规范
- 参考 [vue](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md) 规范 ([Angular](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular))
- `feat` 增加新功能
- `fix` 修复问题/BUG
- `style` 代码风格相关无影响运行结果的
- `perf` 优化/性能提升
- `refactor` 重构
- `revert` 撤销修改
- `test` 测试相关
- `docs` 文档/注释
- `chore` 依赖更新/脚手架配置修改等
- `workflow` 工作流改进
- `ci` 持续集成
- `types` 类型定义文件更改
- `wip` 开发中

View File

@@ -0,0 +1,34 @@
/** @type {import("@commitlint/types").UserConfig} */
export default {
ignores: [(commit) => commit.includes('init')],
extends: ['@commitlint/config-conventional'],
rules: {
'body-leading-blank': [2, 'always'],
'footer-leading-blank': [1, 'always'],
'header-max-length': [2, 'always', 108],
'subject-empty': [2, 'never'],
'type-empty': [2, 'never'],
'subject-case': [0],
'type-enum': [
2,
'always',
[
'feat',
'fix',
'perf',
'style',
'docs',
'test',
'refactor',
'build',
'ci',
'chore',
'revert',
'wip',
'workflow',
'types',
'release',
],
],
},
};

View File

@@ -0,0 +1,15 @@
version: '3'
services:
vue3-antdv-admin:
# 从当前路径构建镜像
build:
context: .
dockerfile: Dockerfile
target: production
image: buqiyuan/vue3-antdv-admin:latest
ports:
- '80:80'
env_file:
- .env
- .env.production

View File

@@ -0,0 +1,206 @@
import js from '@eslint/js';
import pluginVue from 'eslint-plugin-vue';
import * as parserVue from 'vue-eslint-parser';
import configPrettier from 'eslint-config-prettier';
import pluginPrettier from 'eslint-plugin-prettier';
import pluginImport from 'eslint-plugin-import';
import { defineFlatConfig } from 'eslint-define-config';
import * as parserTypeScript from '@typescript-eslint/parser';
import pluginTypeScript from '@typescript-eslint/eslint-plugin';
import unusedImports from 'eslint-plugin-unused-imports';
export default defineFlatConfig([
{
...js.configs.recommended,
plugins: {
prettier: pluginPrettier,
},
rules: {
...configPrettier.rules,
...pluginPrettier.configs.recommended.rules,
'no-debugger': 'off',
'no-unused-vars': [
'error',
{
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
},
],
'prettier/prettier': [
'error',
{
endOfLine: 'auto',
},
],
},
},
{
files: ['**/*.?([cm])ts', '**/*.?([cm])tsx'],
languageOptions: {
parser: parserTypeScript,
parserOptions: {
sourceType: 'module',
},
},
plugins: {
'@typescript-eslint': pluginTypeScript,
},
rules: {
...pluginTypeScript.configs.strict.rules,
'@typescript-eslint/ban-types': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-unused-expressions': 'off',
'@typescript-eslint/no-invalid-void-type': 'off',
'@typescript-eslint/no-redeclare': 'error',
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/prefer-ts-expect-error': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/prefer-as-const': 'warn',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-empty-object-type': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-import-type-side-effects': 'error',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/consistent-type-imports': [
'error',
{ disallowTypeAnnotations: false, fixStyle: 'inline-type-imports' },
],
'@typescript-eslint/prefer-literal-enum-member': ['error', { allowBitwiseExpressions: true }],
},
},
{
files: ['**/*.d.ts'],
rules: {
'eslint-comments/no-unlimited-disable': 'off',
'import/no-duplicates': 'off',
'unused-imports/no-unused-vars': 'off',
},
},
{
files: ['**/*.?([cm])js'],
rules: {
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/no-var-requires': 'off',
},
},
{
files: ['**/*.vue'],
languageOptions: {
parser: parserVue,
parserOptions: {
ecmaFeatures: {
jsx: true,
},
extraFileExtensions: ['.vue'],
parser: parserTypeScript,
sourceType: 'module',
},
},
plugins: {
vue: pluginVue,
},
processor: pluginVue.processors['.vue'],
rules: {
...pluginVue.configs.base.rules,
...pluginVue.configs['vue3-essential'].rules,
...pluginVue.configs['vue3-recommended'].rules,
'no-undef': 'off',
'no-unused-vars': 'off',
'vue/no-v-html': 'off',
'vue/require-default-prop': 'off',
'vue/require-explicit-emits': 'off',
'vue/multi-word-component-names': 'off',
'vue/no-setup-props-reactivity-loss': 'off',
'vue/html-self-closing': [
'error',
{
html: {
void: 'always',
normal: 'always',
component: 'always',
},
svg: 'always',
math: 'always',
},
],
},
},
{
files: ['**/*.vue', '**/*.?([cm])ts', '**/*.?([cm])tsx'],
plugins: {
import: pluginImport,
'unused-imports': unusedImports,
},
rules: {
'import/first': 'error',
'import/no-duplicates': 'error',
'import/order': [
'error',
{
groups: [
'builtin',
'external',
'internal',
'parent',
'sibling',
'index',
'object',
'type',
],
pathGroups: [
{
pattern: 'vue',
group: 'external',
position: 'before',
},
{
pattern: '@vue/**',
group: 'external',
position: 'before',
},
{
pattern: 'ant-design-vue',
group: 'internal',
},
],
pathGroupsExcludedImportTypes: ['type'],
},
],
'unused-imports/no-unused-imports': 'error',
// 如需保存时自动删除未引用代码,可注释掉该规则
'unused-imports/no-unused-vars': [
'warn',
{
vars: 'all',
varsIgnorePattern: '^_',
args: 'after-used',
argsIgnorePattern: '^_',
},
],
},
},
{
linterOptions: {
reportUnusedDisableDirectives: 'off',
},
ignores: [
'src/assets/**',
'*.sh',
'node_modules',
'*.md',
'*.woff',
'*.ttf',
'.vscode',
'.idea',
'dist',
'/public',
'/docs',
'.husky',
'.local',
'/bin',
'Dockerfile',
],
},
]);

17
apps/platform/index.html Normal file
View File

@@ -0,0 +1,17 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="referrer" content="origin" />
<link rel="icon" href="/favicon.ico" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=5.0"
/>
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

View File

@@ -0,0 +1,8 @@
/** @type {import('lint-staged').Config} */
export default {
'*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'],
'*.json': ['prettier --write'],
'*.vue': ['eslint --fix', 'prettier --write', 'stylelint --fix --allow-empty-input'],
'*.{scss,less,styl,html}': ['stylelint --fix --allow-empty-input', 'prettier --write'],
'*.md': ['prettier --write'],
};

View File

@@ -0,0 +1,104 @@
import { generateService } from '@umijs/openapi';
import type { RequestOptions } from './src/utils/request';
const re = /controller[-_ .](\w)/gi;
// swagger-typescript-api
generateService({
schemaPath: 'http://127.0.0.1:7001/api-docs-json',
serversPath: './src/api/backend',
requestOptionsType: 'RequestOptions',
// 自定义网络请求函数路径
requestImportStatement: `
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from "@/utils/request";
`,
hook: {
afterOpenApiDataInited(openAPIData) {
const schemas = openAPIData.components?.schemas;
if (schemas) {
Object.values(schemas).forEach((schema) => {
if ('$ref' in schema) {
return;
}
if (schema.properties) {
Object.values(schema.properties).forEach((prop) => {
if ('$ref' in prop) {
return;
}
// 匡正文件上传的参数类型
if (prop.format === 'binary') {
prop.type = 'object';
}
});
}
});
}
return openAPIData;
},
// @ts-ignore
customFunctionName(operationObject, apiPath) {
const { operationId } = operationObject;
if (!operationId) {
console.warn('[Warning] no operationId', apiPath);
return;
}
const funcName = operationId.replace(re, (_all, letter) => letter.toUpperCase());
operationObject.operationId = funcName;
return funcName;
},
// @ts-ignore
customFileNames(operationObject, apiPath) {
const { operationId } = operationObject;
if (!operationId) {
console.warn('[Warning] no operationId', apiPath);
return;
}
const controllerName = operationId.split(re)[0];
const moduleName = operationObject.tags?.[0].split(' - ')[0];
// 移除 query 参数的默认值
operationObject.parameters?.forEach((param) => {
if ('in' in param && param.in === 'query' && param.schema) {
if (!('$ref' in param.schema) && param.schema.default) {
Reflect.deleteProperty(param.schema, 'default');
}
}
});
if (moduleName === controllerName) {
return [controllerName];
} else if (moduleName && moduleName !== controllerName) {
return [`${moduleName}_${controllerName}`];
}
return;
},
customType(schemaObject, namespace, defaultGetType) {
const type = defaultGetType(schemaObject, namespace);
// 提取出 data 的类型
const regex = /API\.ResOp & { 'data'\?: (.+); }/;
return type.replace(regex, '$1');
},
customOptionsDefaultValue(data): RequestOptions {
const { summary } = data;
if (summary?.startsWith('创建') || summary?.startsWith('新增')) {
return { successMsg: '创建成功' };
} else if (summary?.startsWith('更新')) {
return { successMsg: '更新成功' };
} else if (summary?.startsWith('删除')) {
return { successMsg: '删除成功' };
}
return {};
},
},
});

120
apps/platform/package.json Normal file
View File

@@ -0,0 +1,120 @@
{
"name": "@sy/low-code-platform",
"version": "1.0.0-1",
"packageManager": "pnpm@9.4.0",
"type": "module",
"engines": {
"node": ">=20",
"pnpm": ">=9.0.2"
},
"author": {
"name": "wangxuefeng",
"email": "wangxuefeng@shiyue.com"
},
"scripts": {
"preinstall": "npx only-allow pnpm",
"serve": "npm run dev",
"dev": "vite dev",
"build": "rimraf dist && cross-env NODE_ENV=production vite build",
"build:watch": "rimraf dist && cross-env NODE_ENV=production vite build --watch",
"preview": "vite preview",
"preview:watch": "npm run build:watch && vite preview",
"clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite",
"test:gzip": "npx http-server dist --cors --gzip -c-1",
"test:br": "npx http-server dist --cors --brotli -c-1",
"clean:lock": "rimraf pnpm-lock.yaml && rimraf package.lock.json",
"clean:lib": "rimraf node_modules"
},
"dependencies": {
"@ant-design/icons-vue": "~7.0.1",
"@iconify/vue": "^4.3.0",
"@vueuse/core": "~11.1.0",
"ant-design-vue": "~4.2.6",
"axios": "~1.7.9",
"crypto-js": "^4.2.0",
"dayjs": "~1.11.13",
"file-saver": "~2.0.5",
"licia-es": "^1.46.0",
"lodash-es": "~4.17.21",
"mitt": "~3.0.1",
"nprogress": "1.0.0-1",
"pinia": "~2.2.8",
"pinia-plugin-persistedstate": "^4.2.0",
"qs": "~6.13.1",
"sortablejs": "~1.15.6",
"vue": "~3.5.13",
"vue-i18n": "^11.1.1",
"vue-router": "~4.4.5",
"vue-types": "~5.1.3",
"vue-virtual-scroller": "2.0.0-beta.8",
"wujie-vue3": "^1.0.24",
"xlsx": "~0.18.5",
"core-js": "^3.40.0"
},
"devDependencies": {
"@sy/vite-plugin-http2-proxy": "workspace:*",
"@commitlint/cli": "~19.5.0",
"@commitlint/config-conventional": "~19.5.0",
"@iconify-json/ant-design": "^1.2.5",
"@iconify-json/ep": "^1.2.2",
"@iconify/json": "^2.2.307",
"@sy/low-code-designer": "workspace:*",
"@types/crypto-js": "^4.2.2",
"@types/lodash-es": "~4.17.12",
"@types/node": "~22.7.9",
"@types/qs": "^6.9.18",
"@types/sortablejs": "^1.15.8",
"@typescript-eslint/eslint-plugin": "~8.11.0",
"@typescript-eslint/parser": "~8.11.0",
"@umijs/openapi": "^1.13.0",
"@vitejs/plugin-vue": "~5.1.5",
"@vitejs/plugin-vue-jsx": "~4.0.1",
"@vue/tsconfig": "^0.5.1",
"commitizen": "~4.3.1",
"conventional-changelog-cli": "~4.1.0",
"cross-env": "~7.0.3",
"eslint": "~9.13.0",
"eslint-config-prettier": "~9.1.0",
"eslint-define-config": "~2.1.0",
"eslint-plugin-import": "~2.31.0",
"eslint-plugin-prettier": "~5.2.3",
"eslint-plugin-unused-imports": "^4.1.4",
"eslint-plugin-vue": "~9.29.1",
"less": "~4.2.2",
"lint-staged": "~15.2.11",
"msw": "^2.7.0",
"postcss": "~8.4.49",
"postcss-html": "~1.7.0",
"postcss-less": "~6.0.0",
"prettier": "~3.3.3",
"rimraf": "~6.0.1",
"stylelint": "~16.10.0",
"stylelint-config-property-sort-order-smacss": "^10.0.0",
"stylelint-config-recommended": "~14.0.1",
"stylelint-config-recommended-vue": "~1.5.0",
"stylelint-config-standard": "~36.0.1",
"stylelint-order": "~6.0.4",
"stylelint-prettier": "^5.0.3",
"typescript": "~5.6.3",
"unocss": "^65.5.0",
"unplugin-vue-components": "~0.27.5",
"vite": "~6.1.0",
"vite-plugin-checker": "~0.8.0",
"vite-plugin-inspect": "^10.2.1",
"vite-plugin-mkcert": "^1.17.6",
"vite-plugin-svg-icons": "~2.0.1",
"vite-plugin-vue-inspector": "^5.3.1",
"vue-eslint-parser": "~9.4.3",
"vue-tsc": "~2.1.10"
},
"keywords": [
"vue",
"ant-design-vue",
"vue3",
"ts",
"tsx",
"admin",
"typescript"
],
"target": "web"
}

View File

@@ -0,0 +1,11 @@
/** @type {import('prettier').Config} */
export default {
printWidth: 100,
semi: true,
vueIndentScriptAndStyle: true,
singleQuote: true,
trailingComma: 'all',
proseWrap: 'never',
htmlWhitespaceSensitivity: 'strict',
endOfLine: 'auto',
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because one or more lines are too long

30
apps/platform/src/App.vue Normal file
View File

@@ -0,0 +1,30 @@
<template>
<ProConfigProvider
:theme="{
algorithm: [compactAlgorithm],
}"
>
<Suspense>
<router-view v-slot="{ Component }">
<transition>
<keep-alive v-if="route.meta.keepAlive">
<component :is="Component" v-if="route.meta.keepAlive" :key="route.path" />
</keep-alive>
<component :is="Component" v-else :key="route.path" />
</transition>
</router-view>
</Suspense>
<LockScreen />
</ProConfigProvider>
</template>
<script setup lang="ts">
import { theme } from 'ant-design-vue';
import { LockScreen } from '@/components/basic/lockscreen';
import { useRoute } from 'vue-router';
const route = useRoute();
const { compactAlgorithm } = theme;
</script>

View File

@@ -0,0 +1,64 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 账户登出 GET /api/account/logout */
export async function accountLogout(options?: RequestOptions) {
return request<any>('/api/account/logout', {
method: 'GET',
...(options || {}),
});
}
/** 获取菜单列表 GET /api/account/menus */
export async function accountMenu(options?: RequestOptions) {
return request<API.AccountMenus[]>('/api/account/menus', {
method: 'GET',
...(options || {}),
});
}
/** 更改账户密码 POST /api/account/password */
export async function accountPassword(body: API.PasswordUpdateDto, options?: RequestOptions) {
return request<any>('/api/account/password', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** 获取权限列表 GET /api/account/permissions */
export async function accountPermissions(options?: RequestOptions) {
return request<string[]>('/api/account/permissions', {
method: 'GET',
...(options || {}),
});
}
/** 获取账户资料 GET /api/account/profile */
export async function accountProfile(options?: RequestOptions) {
return request<API.AccountInfo>('/api/account/profile', {
method: 'GET',
...(options || {}),
});
}
/** 更改账户资料 PUT /api/account/update */
export async function accountUpdate(body: API.AccountUpdateDto, options?: RequestOptions) {
return request<any>('/api/account/update', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}

View File

@@ -0,0 +1,32 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 登录 POST /api/auth/login */
export async function authLogin(body: API.LoginDto, options?: RequestOptions) {
return request<API.LoginToken>('/api/auth/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** 注册 POST /api/auth/register */
export async function authRegister(body: API.RegisterDto, options?: RequestOptions) {
return request<any>('/api/auth/register', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}

View File

@@ -0,0 +1,20 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 发送邮箱验证码 POST /api/auth/email/send */
export async function emailSendEmailCode(body: API.SendEmailCodeDto, options?: RequestOptions) {
return request<any>('/api/auth/email/send', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}

View File

@@ -0,0 +1,82 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 获取Todo列表 GET /api/todos */
export async function todoList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.TodoListParams,
options?: RequestOptions,
) {
return request<API.TodoEntity[]>('/api/todos', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 创建Todo POST /api/todos */
export async function todoCreate(body: API.TodoDto, options?: RequestOptions) {
return request<any>('/api/todos', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || { successMsg: '创建成功' }),
});
}
/** 获取Todo详情 GET /api/todos/${param0} */
export async function todoInfo(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.TodoInfoParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<API.TodoEntity>(`/api/todos/${param0}`, {
method: 'GET',
params: { ...queryParams },
...(options || {}),
});
}
/** 更新Todo PUT /api/todos/${param0} */
export async function todoUpdate(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.TodoUpdateParams,
body: API.TodoUpdateDto,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/todos/${param0}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
params: { ...queryParams },
data: body,
...(options || { successMsg: '更新成功' }),
});
}
/** 删除Todo DELETE /api/todos/${param0} */
export async function todoDelete(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.TodoDeleteParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/todos/${param0}`, {
method: 'DELETE',
params: { ...queryParams },
...(options || { successMsg: '删除成功' }),
});
}

View File

@@ -0,0 +1,23 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 获取登录图片验证码 GET /api/auth/captcha/img */
export async function captchaCaptchaByImg(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.CaptchaCaptchaByImgParams,
options?: RequestOptions,
) {
return request<API.ImageCaptcha>('/api/auth/captcha/img', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}

View File

@@ -0,0 +1,73 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 此处后端没有提供注释 GET /api/health/database */
export async function healthCheckDatabase(options?: RequestOptions) {
return request<{
status?: string;
info?: Record<string, any>;
error?: Record<string, any>;
details?: Record<string, any>;
}>('/api/health/database', {
method: 'GET',
...(options || {}),
});
}
/** 此处后端没有提供注释 GET /api/health/disk */
export async function healthCheckDisk(options?: RequestOptions) {
return request<{
status?: string;
info?: Record<string, any>;
error?: Record<string, any>;
details?: Record<string, any>;
}>('/api/health/disk', {
method: 'GET',
...(options || {}),
});
}
/** 此处后端没有提供注释 GET /api/health/memory-heap */
export async function healthCheckMemoryHeap(options?: RequestOptions) {
return request<{
status?: string;
info?: Record<string, any>;
error?: Record<string, any>;
details?: Record<string, any>;
}>('/api/health/memory-heap', {
method: 'GET',
...(options || {}),
});
}
/** 此处后端没有提供注释 GET /api/health/memory-rss */
export async function healthCheckMemoryRss(options?: RequestOptions) {
return request<{
status?: string;
info?: Record<string, any>;
error?: Record<string, any>;
details?: Record<string, any>;
}>('/api/health/memory-rss', {
method: 'GET',
...(options || {}),
});
}
/** 此处后端没有提供注释 GET /api/health/network */
export async function healthCheckNetwork(options?: RequestOptions) {
return request<{
status?: string;
info?: Record<string, any>;
error?: Record<string, any>;
details?: Record<string, any>;
}>('/api/health/network', {
method: 'GET',
...(options || {}),
});
}

View File

@@ -0,0 +1,54 @@
// @ts-ignore
/* eslint-disable */
// API 更新时间:
// API 唯一标识:
import * as auth from './auth';
import * as account from './account';
import * as captcha from './captcha';
import * as authEmail from './authEmail';
import * as systemUser from './systemUser';
import * as systemRole from './systemRole';
import * as systemMenu from './systemMenu';
import * as systemParamConfig from './systemParamConfig';
import * as systemLog from './systemLog';
import * as systemDept from './systemDept';
import * as systemDictType from './systemDictType';
import * as systemDictItem from './systemDictItem';
import * as systemTask from './systemTask';
import * as systemOnline from './systemOnline';
import * as systemSse from './systemSse';
import * as systemServe from './systemServe';
import * as toolsStorage from './toolsStorage';
import * as systemEmail from './systemEmail';
import * as toolsUpload from './toolsUpload';
import * as health from './health';
import * as netDiskManage from './netDiskManage';
import * as netDiskOverview from './netDiskOverview';
import * as businessTodo from './businessTodo';
import * as user from './user';
export default {
auth,
account,
captcha,
authEmail,
systemUser,
systemRole,
systemMenu,
systemParamConfig,
systemLog,
systemDept,
systemDictType,
systemDictItem,
systemTask,
systemOnline,
systemSse,
systemServe,
toolsStorage,
systemEmail,
toolsUpload,
health,
netDiskManage,
netDiskOverview,
businessTodo,
user,
};

View File

@@ -0,0 +1,133 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 复制文件或文件夹,支持批量 POST /api/netdisk/manage/copy */
export async function netDiskManageCopy(body: API.FileOpDto, options?: RequestOptions) {
return request<any>('/api/netdisk/manage/copy', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** 剪切文件或文件夹,支持批量 POST /api/netdisk/manage/cut */
export async function netDiskManageCut(body: API.FileOpDto, options?: RequestOptions) {
return request<any>('/api/netdisk/manage/cut', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** 删除文件或文件夹 POST /api/netdisk/manage/delete */
export async function netDiskManageDelete(body: API.DeleteDto, options?: RequestOptions) {
return request<any>('/api/netdisk/manage/delete', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || { successMsg: '删除成功' }),
});
}
/** 获取下载链接,不支持下载文件夹 GET /api/netdisk/manage/download */
export async function netDiskManageDownload(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.NetDiskManageDownloadParams,
options?: RequestOptions,
) {
return request<string>('/api/netdisk/manage/download', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 获取文件详细信息 GET /api/netdisk/manage/info */
export async function netDiskManageInfo(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.NetDiskManageInfoParams,
options?: RequestOptions,
) {
return request<API.SFileInfoDetail>('/api/netdisk/manage/info', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 获取文件列表 GET /api/netdisk/manage/list */
export async function netDiskManageList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.NetDiskManageListParams,
options?: RequestOptions,
) {
return request<API.SFileList>('/api/netdisk/manage/list', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 添加文件备注 POST /api/netdisk/manage/mark */
export async function netDiskManageMark(body: API.MarkFileDto, options?: RequestOptions) {
return request<any>('/api/netdisk/manage/mark', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** 创建文件夹,支持多级 POST /api/netdisk/manage/mkdir */
export async function netDiskManageMkdir(body: API.MKDirDto, options?: RequestOptions) {
return request<any>('/api/netdisk/manage/mkdir', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || { successMsg: '创建成功' }),
});
}
/** 重命名文件或文件夹 POST /api/netdisk/manage/rename */
export async function netDiskManageRename(body: API.RenameDto, options?: RequestOptions) {
return request<any>('/api/netdisk/manage/rename', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** 获取上传Token无Token前端无法上传 GET /api/netdisk/manage/token */
export async function netDiskManageToken(options?: RequestOptions) {
return request<API.UploadToken>('/api/netdisk/manage/token', {
method: 'GET',
...(options || {}),
});
}

View File

@@ -0,0 +1,16 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 获取网盘空间数据统计 GET /api/netdisk/overview/desc */
export async function netDiskOverviewSpace(options?: RequestOptions) {
return request<API.OverviewSpaceInfo>('/api/netdisk/overview/desc', {
method: 'GET',
...(options || {}),
});
}

View File

@@ -0,0 +1,82 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 获取部门列表 GET /api/system/depts */
export async function deptList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.DeptListParams,
options?: RequestOptions,
) {
return request<API.DeptEntity[]>('/api/system/depts', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 创建部门 POST /api/system/depts */
export async function deptCreate(body: API.DeptDto, options?: RequestOptions) {
return request<any>('/api/system/depts', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || { successMsg: '创建成功' }),
});
}
/** 查询部门信息 GET /api/system/depts/${param0} */
export async function deptInfo(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.DeptInfoParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<API.DeptEntity>(`/api/system/depts/${param0}`, {
method: 'GET',
params: { ...queryParams },
...(options || {}),
});
}
/** 更新部门 PUT /api/system/depts/${param0} */
export async function deptUpdate(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.DeptUpdateParams,
body: API.DeptDto,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/depts/${param0}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
params: { ...queryParams },
data: body,
...(options || { successMsg: '更新成功' }),
});
}
/** 删除部门 DELETE /api/system/depts/${param0} */
export async function deptDelete(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.DeptDeleteParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/depts/${param0}`, {
method: 'DELETE',
params: { ...queryParams },
...(options || { successMsg: '删除成功' }),
});
}

View File

@@ -0,0 +1,91 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 获取字典项列表 GET /api/system/dict-item */
export async function dictItemList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.DictItemListParams,
options?: RequestOptions,
) {
return request<{
items?: API.DictItemEntity[];
meta?: {
itemCount?: number;
totalItems?: number;
itemsPerPage?: number;
totalPages?: number;
currentPage?: number;
};
}>('/api/system/dict-item', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 新增字典项 POST /api/system/dict-item */
export async function dictItemCreate(body: API.DictItemDto, options?: RequestOptions) {
return request<any>('/api/system/dict-item', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || { successMsg: '创建成功' }),
});
}
/** 查询字典项信息 GET /api/system/dict-item/${param0} */
export async function dictItemInfo(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.DictItemInfoParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<API.DictItemEntity>(`/api/system/dict-item/${param0}`, {
method: 'GET',
params: { ...queryParams },
...(options || {}),
});
}
/** 更新字典项 POST /api/system/dict-item/${param0} */
export async function dictItemUpdate(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.DictItemUpdateParams,
body: API.DictItemDto,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/dict-item/${param0}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
params: { ...queryParams },
data: body,
...(options || { successMsg: '更新成功' }),
});
}
/** 删除指定的字典项 DELETE /api/system/dict-item/${param0} */
export async function dictItemDelete(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.DictItemDeleteParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/dict-item/${param0}`, {
method: 'DELETE',
params: { ...queryParams },
...(options || { successMsg: '删除成功' }),
});
}

View File

@@ -0,0 +1,99 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 获取字典类型列表 GET /api/system/dict-type */
export async function dictTypeList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.DictTypeListParams,
options?: RequestOptions,
) {
return request<{
items?: API.DictTypeEntity[];
meta?: {
itemCount?: number;
totalItems?: number;
itemsPerPage?: number;
totalPages?: number;
currentPage?: number;
};
}>('/api/system/dict-type', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 新增字典类型 POST /api/system/dict-type */
export async function dictTypeCreate(body: API.DictTypeDto, options?: RequestOptions) {
return request<any>('/api/system/dict-type', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || { successMsg: '创建成功' }),
});
}
/** 查询字典类型信息 GET /api/system/dict-type/${param0} */
export async function dictTypeInfo(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.DictTypeInfoParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<API.DictTypeEntity>(`/api/system/dict-type/${param0}`, {
method: 'GET',
params: { ...queryParams },
...(options || {}),
});
}
/** 更新字典类型 POST /api/system/dict-type/${param0} */
export async function dictTypeUpdate(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.DictTypeUpdateParams,
body: API.DictTypeDto,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/dict-type/${param0}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
params: { ...queryParams },
data: body,
...(options || { successMsg: '更新成功' }),
});
}
/** 删除指定的字典类型 DELETE /api/system/dict-type/${param0} */
export async function dictTypeDelete(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.DictTypeDeleteParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/dict-type/${param0}`, {
method: 'DELETE',
params: { ...queryParams },
...(options || { successMsg: '删除成功' }),
});
}
/** 一次性获取所有的字典类型(不分页) GET /api/system/dict-type/select-options */
export async function dictTypeGetAll(options?: RequestOptions) {
return request<API.DictTypeEntity[]>('/api/system/dict-type/select-options', {
method: 'GET',
...(options || {}),
});
}

View File

@@ -0,0 +1,20 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 发送邮件 POST /api/tools/email/send */
export async function emailSend(body: API.EmailSendDto, options?: RequestOptions) {
return request<any>('/api/tools/email/send', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}

View File

@@ -0,0 +1,80 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 查询验证码日志列表 GET /api/system/log/captcha/list */
export async function logCaptchaList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.LogCaptchaListParams,
options?: RequestOptions,
) {
return request<{
items?: API.CaptchaLogEntity[];
meta?: {
itemCount?: number;
totalItems?: number;
itemsPerPage?: number;
totalPages?: number;
currentPage?: number;
};
}>('/api/system/log/captcha/list', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 查询登录日志列表 GET /api/system/log/login/list */
export async function logLoginLogPage(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.LogLoginLogPageParams,
options?: RequestOptions,
) {
return request<{
items?: API.LoginLogInfo[];
meta?: {
itemCount?: number;
totalItems?: number;
itemsPerPage?: number;
totalPages?: number;
currentPage?: number;
};
}>('/api/system/log/login/list', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 查询任务日志列表 GET /api/system/log/task/list */
export async function logTaskList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.LogTaskListParams,
options?: RequestOptions,
) {
return request<{
items?: API.TaskLogEntity[];
meta?: {
itemCount?: number;
totalItems?: number;
itemsPerPage?: number;
totalPages?: number;
currentPage?: number;
};
}>('/api/system/log/task/list', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}

View File

@@ -0,0 +1,90 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 获取所有菜单列表 GET /api/system/menus */
export async function menuList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.MenuListParams,
options?: RequestOptions,
) {
return request<API.MenuItemInfo[]>('/api/system/menus', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 新增菜单或权限 POST /api/system/menus */
export async function menuCreate(body: API.MenuDto, options?: RequestOptions) {
return request<any>('/api/system/menus', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || { successMsg: '创建成功' }),
});
}
/** 获取菜单或权限信息 GET /api/system/menus/${param0} */
export async function menuInfo(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.MenuInfoParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/menus/${param0}`, {
method: 'GET',
params: { ...queryParams },
...(options || {}),
});
}
/** 更新菜单或权限 PUT /api/system/menus/${param0} */
export async function menuUpdate(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.MenuUpdateParams,
body: API.MenuUpdateDto,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/menus/${param0}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
params: { ...queryParams },
data: body,
...(options || { successMsg: '更新成功' }),
});
}
/** 删除菜单或权限 DELETE /api/system/menus/${param0} */
export async function menuDelete(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.MenuDeleteParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/menus/${param0}`, {
method: 'DELETE',
params: { ...queryParams },
...(options || { successMsg: '删除成功' }),
});
}
/** 获取后端定义的所有权限集 GET /api/system/menus/permissions */
export async function menuGetPermissions(options?: RequestOptions) {
return request<string[]>('/api/system/menus/permissions', {
method: 'GET',
...(options || {}),
});
}

View File

@@ -0,0 +1,28 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 下线指定在线用户 POST /api/system/online/kick */
export async function onlineKick(body: API.KickDto, options?: RequestOptions) {
return request<any>('/api/system/online/kick', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** 查询当前在线用户 GET /api/system/online/list */
export async function onlineList(options?: RequestOptions) {
return request<API.OnlineUserInfo[]>('/api/system/online/list', {
method: 'GET',
...(options || {}),
});
}

View File

@@ -0,0 +1,91 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 获取参数配置列表 GET /api/system/param-config */
export async function paramConfigList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.ParamConfigListParams,
options?: RequestOptions,
) {
return request<{
items?: API.ParamConfigEntity[];
meta?: {
itemCount?: number;
totalItems?: number;
itemsPerPage?: number;
totalPages?: number;
currentPage?: number;
};
}>('/api/system/param-config', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 新增参数配置 POST /api/system/param-config */
export async function paramConfigCreate(body: API.ParamConfigDto, options?: RequestOptions) {
return request<any>('/api/system/param-config', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || { successMsg: '创建成功' }),
});
}
/** 查询参数配置信息 GET /api/system/param-config/${param0} */
export async function paramConfigInfo(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.ParamConfigInfoParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<API.ParamConfigEntity>(`/api/system/param-config/${param0}`, {
method: 'GET',
params: { ...queryParams },
...(options || {}),
});
}
/** 更新参数配置 POST /api/system/param-config/${param0} */
export async function paramConfigUpdate(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.ParamConfigUpdateParams,
body: API.ParamConfigDto,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/param-config/${param0}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
params: { ...queryParams },
data: body,
...(options || { successMsg: '更新成功' }),
});
}
/** 删除指定的参数配置 DELETE /api/system/param-config/${param0} */
export async function paramConfigDelete(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.ParamConfigDeleteParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/param-config/${param0}`, {
method: 'DELETE',
params: { ...queryParams },
...(options || { successMsg: '删除成功' }),
});
}

View File

@@ -0,0 +1,91 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 获取角色列表 GET /api/system/roles */
export async function roleList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.RoleListParams,
options?: RequestOptions,
) {
return request<{
items?: API.RoleEntity[];
meta?: {
itemCount?: number;
totalItems?: number;
itemsPerPage?: number;
totalPages?: number;
currentPage?: number;
};
}>('/api/system/roles', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 新增角色 POST /api/system/roles */
export async function roleCreate(body: API.RoleDto, options?: RequestOptions) {
return request<any>('/api/system/roles', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || { successMsg: '创建成功' }),
});
}
/** 获取角色信息 GET /api/system/roles/${param0} */
export async function roleInfo(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.RoleInfoParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<API.RoleInfo>(`/api/system/roles/${param0}`, {
method: 'GET',
params: { ...queryParams },
...(options || {}),
});
}
/** 更新角色 PUT /api/system/roles/${param0} */
export async function roleUpdate(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.RoleUpdateParams,
body: API.RoleUpdateDto,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/roles/${param0}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
params: { ...queryParams },
data: body,
...(options || { successMsg: '更新成功' }),
});
}
/** 删除角色 DELETE /api/system/roles/${param0} */
export async function roleDelete(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.RoleDeleteParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/roles/${param0}`, {
method: 'DELETE',
params: { ...queryParams },
...(options || { successMsg: '删除成功' }),
});
}

View File

@@ -0,0 +1,16 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 获取服务器运行信息 GET /api/system/serve/stat */
export async function serveStat(options?: RequestOptions) {
return request<API.ServeStatInfo>('/api/system/serve/stat', {
method: 'GET',
...(options || {}),
});
}

View File

@@ -0,0 +1,22 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 服务端推送消息 GET /api/sse/${param0} */
export async function sseSse(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.SseSseParams,
options?: RequestOptions,
) {
const { uid: param0, ...queryParams } = params;
return request<Record<string, any>>(`/api/sse/${param0}`, {
method: 'GET',
params: { ...queryParams },
...(options || {}),
});
}

View File

@@ -0,0 +1,133 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 获取任务列表 GET /api/system/tasks */
export async function taskList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.TaskListParams,
options?: RequestOptions,
) {
return request<{
items?: API.TaskEntity[];
meta?: {
itemCount?: number;
totalItems?: number;
itemsPerPage?: number;
totalPages?: number;
currentPage?: number;
};
}>('/api/system/tasks', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 添加任务 POST /api/system/tasks */
export async function taskCreate(body: API.TaskDto, options?: RequestOptions) {
return request<any>('/api/system/tasks', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** 查询任务详细信息 GET /api/system/tasks/${param0} */
export async function taskInfo(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.TaskInfoParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<API.TaskEntity>(`/api/system/tasks/${param0}`, {
method: 'GET',
params: { ...queryParams },
...(options || {}),
});
}
/** 更新任务 PUT /api/system/tasks/${param0} */
export async function taskUpdate(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.TaskUpdateParams,
body: API.TaskUpdateDto,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/tasks/${param0}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
params: { ...queryParams },
data: body,
...(options || { successMsg: '更新成功' }),
});
}
/** 删除任务 DELETE /api/system/tasks/${param0} */
export async function taskDelete(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.TaskDeleteParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/tasks/${param0}`, {
method: 'DELETE',
params: { ...queryParams },
...(options || { successMsg: '删除成功' }),
});
}
/** 手动执行一次任务 PUT /api/system/tasks/${param0}/once */
export async function taskOnce(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.TaskOnceParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/tasks/${param0}/once`, {
method: 'PUT',
params: { ...queryParams },
...(options || {}),
});
}
/** 启动任务 PUT /api/system/tasks/${param0}/start */
export async function taskStart(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.TaskStartParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/tasks/${param0}/start`, {
method: 'PUT',
params: { ...queryParams },
...(options || {}),
});
}
/** 停止任务 PUT /api/system/tasks/${param0}/stop */
export async function taskStop(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.TaskStopParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/tasks/${param0}/stop`, {
method: 'PUT',
params: { ...queryParams },
...(options || {}),
});
}

View File

@@ -0,0 +1,110 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 获取用户列表 GET /api/system/users */
export async function userList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.UserListParams,
options?: RequestOptions,
) {
return request<{
items?: API.UserEntity[];
meta?: {
itemCount?: number;
totalItems?: number;
itemsPerPage?: number;
totalPages?: number;
currentPage?: number;
};
}>('/api/system/users', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** 新增用户 POST /api/system/users */
export async function userCreate(body: API.UserDto, options?: RequestOptions) {
return request<any>('/api/system/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || { successMsg: '创建成功' }),
});
}
/** 查询用户 GET /api/system/users/${param0} */
export async function userRead(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.UserReadParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<API.UserEntity>(`/api/system/users/${param0}`, {
method: 'GET',
params: { ...queryParams },
...(options || {}),
});
}
/** 更新用户 PUT /api/system/users/${param0} */
export async function userUpdate(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.UserUpdateParams,
body: API.UserUpdateDto,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/users/${param0}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
params: { ...queryParams },
data: body,
...(options || { successMsg: '更新成功' }),
});
}
/** 删除用户 DELETE /api/system/users/${param0} */
export async function userDelete(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.UserDeleteParams,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/users/${param0}`, {
method: 'DELETE',
params: { ...queryParams },
...(options || { successMsg: '删除成功' }),
});
}
/** 更改用户密码 POST /api/system/users/${param0}/password */
export async function userPassword(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.UserPasswordParams,
body: API.UserPasswordDto,
options?: RequestOptions,
) {
const { id: param0, ...queryParams } = params;
return request<any>(`/api/system/users/${param0}/password`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
params: { ...queryParams },
data: body,
...(options || {}),
});
}

View File

@@ -0,0 +1,44 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 删除文件 POST /api/tools/storage/delete */
export async function storageDelete(body: API.StorageDeleteDto, options?: RequestOptions) {
return request<any>('/api/tools/storage/delete', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || { successMsg: '删除成功' }),
});
}
/** 获取本地存储列表 GET /api/tools/storage/list */
export async function storageList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.StorageListParams,
options?: RequestOptions,
) {
return request<{
items?: API.StorageInfo[];
meta?: {
itemCount?: number;
totalItems?: number;
itemsPerPage?: number;
totalPages?: number;
currentPage?: number;
};
}>('/api/tools/storage/list', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}

View File

@@ -0,0 +1,40 @@
// @ts-ignore
/* eslint-disable */
/**
* 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。
* */
import { request, type RequestOptions } from '@/utils/request';
/** 上传 POST /api/tools/upload */
export async function uploadUpload(body: API.FileUploadDto, file?: File, options?: RequestOptions) {
const formData = new FormData();
if (file) {
formData.append('file', file);
}
Object.keys(body).forEach((ele) => {
const item = (body as any)[ele];
if (item !== undefined && item !== null) {
if (typeof item === 'object' && !(item instanceof File)) {
if (item instanceof Array) {
item.forEach((f) => formData.append(ele, f || ''));
} else {
formData.append(ele, JSON.stringify(item));
}
} else {
formData.append(ele, item);
}
}
});
return request<any>('/api/tools/upload', {
method: 'POST',
data: formData,
requestType: 'form',
...(options || {}),
});
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,29 @@
import { request } from '@/utils/request';
enum Api {
Login = '/boyanghu/iotree-service/platform/login',
}
/**
* @description: 登录接口参数
*/
export interface LoginParams {
phone: string;
type: number; // 0短信 1密码
code?: string;
password?: string;
}
/**
* @description: 用户登录
*/
export function loginApi(params: LoginParams) {
return request({
url: Api.Login,
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
data: params,
});
}

View File

@@ -0,0 +1,11 @@
import { request } from '@/utils/request';
export type DictType = 'gender' | 'sell_status';
export async function getDictData(params: { type: DictType }) {
return request<LabelValueOptions>({
url: '/dict/data',
method: 'GET',
params,
});
}

View File

@@ -0,0 +1,33 @@
import { request } from '@/utils/request';
/**
* @description 获取王者荣耀英雄列表
*/
export function getWzryHeroList(query: API.PageParams) {
return request({
url: '/demo/wzry/hero_list',
method: 'get',
params: query,
});
}
/**
* @description 获取英雄联盟英雄列表
*/
export function getLolHeroList(query: API.PageParams) {
return request({
url: '/demo/lol/hero_list',
method: 'get',
params: query,
});
}
/**
* @description 获取英雄联盟英雄列表
*/
export function getLolHeroInfo({ id }) {
return request({
url: `/demo/lol/hero_info/${id}`,
method: 'get',
});
}

View File

@@ -0,0 +1,14 @@
import { request } from '@/utils/request';
interface DemoOptionsItem {
name: string;
id: string;
}
export async function optionsListApi(params?: Recordable) {
return request<DemoOptionsItem[]>({
url: '/select/getDemoOptions',
method: 'GET',
params,
});
}

View File

@@ -0,0 +1,26 @@
import { request } from '@/utils/request';
enum Api {
Login = '/boyanghu/iotree-service/platform/login',
}
/**
* @description: 登录接口参数
*/
export interface LoginParams {
phone: string;
password?: string;
code?: string;
type: number; // 0短信 1密码
}
/**
* @description: 用户登录
*/
export function loginApi(params: LoginParams) {
return request({
url: Api.Login,
method: 'POST',
data: params,
});
}

View File

@@ -0,0 +1,5 @@
import Api from './backend/api';
export { Api };
export default Api;

36
apps/platform/src/api/typings.d.ts vendored Normal file
View File

@@ -0,0 +1,36 @@
// @ts-ignore
/* eslint-disable */
declare namespace API {
/** 全局通过表格查询返回结果 */
type TableListResult<T = any> = {
items?: T;
meta?: PaginationResult;
};
/** 全局通用表格分页返回数据结构 */
type PaginationResult = {
itemCount?: number;
totalItems?: number;
itemsPerPage?: number;
totalPages?: number;
currentPage?: number;
};
/** 全局通用表格分页请求参数 */
type PageParams<T = any> = {
page?: number;
pageSize?: number;
} & {
[P in keyof T]?: T[P];
};
type ErrorResponse = {
/** 业务约定的错误码 */
errorCode: string;
/** 业务上的错误信息 */
errorMessage?: string;
/** 业务上的请求是否成功 */
success?: boolean;
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1">
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
<feMerge>
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
<feMergeNode in="SourceGraphic"></feMergeNode>
</feMerge>
</filter>
<rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
<filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4">
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
</filter>
</defs>
<g id="配置面板" width="48" height="40" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="setting-copy-2" width="48" height="40" transform="translate(-1190.000000, -136.000000)">
<g id="Group-8" width="48" height="40" transform="translate(1167.000000, 0.000000)">
<g id="Group-5-Copy-5" filter="url(#filter-1)" transform="translate(25.000000, 137.000000)">
<mask id="mask-3" fill="white">
<use xlink:href="#path-2"></use>
</mask>
<g id="Rectangle-18">
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
<use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use>
</g>
<rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
<rect id="Rectangle-18" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1 @@
<svg t="1619506354975" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2334" width="64" height="64"><path d="M137.90246 0.00041a48.573421 48.573421 0 0 0-35.589106 15.293433A53.964778 53.964778 0 0 0 87.0404 50.934149V968.345622a48.706541 48.706541 0 0 0 15.272954 35.640306 49.97118 49.97118 0 0 0 35.589106 15.293434h746.336982a48.639981 48.639981 0 0 0 35.589105-15.293434 50.37054 50.37054 0 0 0 15.272954-35.640306V288.717094L646.727857 0.00041H137.90246z" fill="#FF8976" p-id="2335"></path><path d="M935.101501 288.717094h-237.445025c-27.822069-0.6656-50.22718-23.075831-50.928619-50.93374V0.00041l288.373644 288.716684z" fill="#FFD0C8" p-id="2336"></path><path d="M415.257869 564.731064l-124.70267 49.26974 124.70267 49.27486v39.096305l-172.175291-68.756453v-39.096304l172.175291-68.756453v38.963185zM539.02358 451.686629h39.045104l-95.016922 254.801818h-38.978544l94.950362-254.801818z m67.860452 212.377515l124.702671-49.26974-124.702671-49.269741v-39.101424l172.175292 67.957733v39.895024l-172.175292 68.823012V664.064144z" fill="#FFFFFF" p-id="2337"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg t="1619506230415" class="icon" viewBox="0 0 1208 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1594" width="64" height="64"><path d="M132.51584 120.4736h879.4368c33.26976 0 60.2368 26.96704 60.2368 60.23168v409.6c0 33.26976-26.96704 60.2368-60.2368 60.2368H132.51584c-33.26464 0-60.23168-26.96704-60.23168-60.2368v-409.6c0-33.26464 26.96704-60.2368 60.23168-60.2368z" fill="#F9B552" p-id="1595"></path><path d="M469.8368 0c73.18528 0 132.51584 59.33056 132.51584 132.51584v84.3264h469.8368c73.18528 0 132.51584 59.33568 132.51584 132.52096v542.12096c0 73.18528-59.33056 132.51584-132.51584 132.51584H132.51584A132.51584 132.51584 0 0 1 0 891.48416V349.3632c0-4.03456 0.1792-8.06912 0.54272-12.04736A134.25664 134.25664 0 0 1 0 325.2736V132.51584C0 59.33056 59.33056 0 132.51584 0h337.32096z" fill="#FFCF5C" p-id="1596"></path></svg>

After

Width:  |  Height:  |  Size: 853 B

View File

@@ -0,0 +1 @@
<svg t="1619506254031" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1741" width="64" height="64"><path d="M594.944 0l335.12448 341.31968v563.2c0 65.9968-52.50048 119.48032-117.29408 119.48032H209.54624c-64.7936 0-117.2992-53.5296-117.2992-119.48032V119.48032C92.25216 53.48352 144.75776 0 209.55136 0H594.944z" fill="#5895FF" p-id="1742"></path><path d="M930.06848 341.31968h-211.9168c-64.74752 0-123.20768-59.48928-123.20768-125.4912V0l335.12448 341.31968z" fill="#FFFFFF" fill-opacity=".4" p-id="1743"></path><path d="M427.37664 725.31968V768H259.8144v-42.68032h167.56224zM594.944 640v42.68032H259.8144V640H594.944z m0-85.31968v42.63936H259.8144v-42.63936H594.944z m0-85.36064V512H259.8144v-42.68032H594.944z" fill="#FFFFFF" p-id="1744"></path></svg>

After

Width:  |  Height:  |  Size: 800 B

View File

@@ -0,0 +1 @@
<svg t="1619506332655" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2186" width="64" height="64"><path d="M594.944 0l335.12448 341.31968v563.2c0 65.9968-52.50048 119.48032-117.29408 119.48032H209.54624c-64.7936 0-117.2992-53.5296-117.2992-119.48032V119.48032C92.25216 53.48352 144.75776 0 209.55136 0H594.944z" fill="#1ABF74" p-id="2187"></path><path d="M930.06848 341.31968h-211.9168c-64.74752 0-123.20768-59.48928-123.20768-125.4912V0l335.12448 341.31968z" fill="#FFFFFF" fill-opacity=".4" p-id="2188"></path><path d="M594.61632 426.82368v0.2304h0.09216V768H566.8352v-0.0512h-83.968 0.04608H399.7696h0.0512-139.91936v-28.3904l0.0512-0.04608v-85.82656h-0.0512v-28.39552h0.0512v-85.82656h-0.09728v-28.39552l0.09216-0.04608V455.168h-0.09216v-28.3904h334.70976l0.04608 0.04608z m-222.62784 226.86208H287.88224v85.82656h84.10624v-85.82656z m83.08224 0h-55.2448v85.82656h55.19872v-85.82656h0.0512z m111.75936 0H482.90816v85.82656H566.784v-85.82656h0.04608z m-194.8416-114.2272H287.88224v85.83168h84.10624v-85.82656z m83.08224 0h-55.2448v85.83168h55.19872v-85.82656h0.0512z m111.75936 0H482.90816v85.83168H566.784v-85.82656h0.04608z m0-84.24448H287.88224v55.808H566.784V455.168l0.04608 0.0512z" fill="#FFFFFF" p-id="2189"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1 @@
<svg t="1619506370346" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2482" width="64" height="64"><path d="M137.90246 0.00041a48.573421 48.573421 0 0 0-35.589106 15.293433A53.964778 53.964778 0 0 0 87.0404 50.934149V968.345622a48.706541 48.706541 0 0 0 15.272954 35.640306 49.97118 49.97118 0 0 0 35.589106 15.293434h746.336982a48.639981 48.639981 0 0 0 35.589105-15.293434 50.37054 50.37054 0 0 0 15.272954-35.640306V288.717094L646.727857 0.00041H137.90246z" fill="#FF5562" p-id="2483"></path><path d="M935.101501 288.717094h-237.445025c-27.822069-0.6656-50.22718-23.075831-50.928619-50.93374V0.00041l288.373644 288.716684z" fill="#FFBBC0" p-id="2484"></path><path d="M772.290686 715.069564l-106.239957-164.766655a16.593913 16.593913 0 0 0-14.412794-7.649276 18.851832 18.851832 0 0 0-14.407675 7.649276l-56.837097 88.299485-127.221709-206.131117a16.527353 16.527353 0 0 0-14.407674-7.644157 18.851832 18.851832 0 0 0-14.412795 7.649277L249.656655 715.264123a15.447034 15.447034 0 0 0 0 16.957434 15.667194 15.667194 0 0 0 14.407675 8.509436h493.547322a18.851832 18.851832 0 0 0 15.272954-8.509436 16.977913 16.977913 0 0 0-0.7936-16.957434l0.19968-0.199679zM628.070584 403.149048a42.490863 42.490863 0 0 0 26.14271 39.306225 42.388463 42.388463 0 0 0 46.264301-9.169917 42.531823 42.531823 0 0 0 9.226236-46.310381 42.429423 42.429423 0 0 0-39.203824-26.24511c-23.408631 0-42.393583 18.979832-42.434543 42.419183z" fill="#FFFFFF" p-id="2485"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1 @@
<svg t="1619506298580" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2038" width="64" height="64"><path d="M594.944 0l335.12448 341.31968v563.2c0 65.9968-52.50048 119.48032-117.29408 119.48032H209.54624c-64.7936 0-117.2992-53.5296-117.2992-119.48032V119.48032C92.25216 53.48352 144.75776 0 209.55136 0H594.944z" fill="#FFC547" p-id="2039"></path><path d="M930.06848 341.31968h-211.9168c-64.74752 0-123.20768-59.48928-123.20768-125.4912V0l335.12448 341.31968z" fill="#FFFFFF" fill-opacity=".4" p-id="2040"></path><path d="M568.7808 446.464V675.84a27.2384 27.2384 0 0 1-6.79424 18.24768 45.66016 45.66016 0 0 1-17.31584 12.38016 112.64 112.64 0 0 1-20.80256 6.51776c-6.9376 1.43872-13.40416 2.18624-19.40992 2.18624-6.05184 0-12.52352-0.74752-19.40992-2.14016a112.45568 112.45568 0 0 1-20.80768-6.56384 45.70624 45.70624 0 0 1-17.31584-12.38016A27.22816 27.22816 0 0 1 440.08448 675.84c0-6.84032 2.3296-12.89216 6.84032-18.24768a45.70624 45.70624 0 0 1 17.31584-12.38016c6.98368-2.93376 13.91616-5.12 20.80768-6.51776 6.8864-1.4848 13.35808-2.18624 19.4048-2.18624 14.05952 0 26.95168 2.65216 38.63552 8.00768V534.528L388.608 583.07584v145.21856a27.22816 27.22816 0 0 1-6.79936 18.2016 45.66016 45.66016 0 0 1-17.31584 12.38016 112.64 112.64 0 0 1-20.80256 6.56384c-6.9376 1.39776-13.40416 2.14016-19.40992 2.14016-6.05184 0-12.52352-0.69632-19.40992-2.14016a112.50176 112.50176 0 0 1-20.80768-6.51776A45.70624 45.70624 0 0 1 266.752 746.496a27.23328 27.23328 0 0 1-6.84544-18.24768c0-6.79424 2.3296-12.89216 6.84544-18.19648a45.70624 45.70624 0 0 1 17.31072-12.38016c6.98368-2.93376 13.92128-5.12 20.80768-6.56384a94.80192 94.80192 0 0 1 19.4048-2.14016c14.05952 0 26.9568 2.65216 38.63552 7.95648V498.87232a19.87584 19.87584 0 0 1 13.68576-18.84672l167.28576-52.41344c1.80224-0.57856 3.6864-0.86016 5.5808-0.83968 5.4016 0 9.96352 1.90976 13.68576 5.72928 3.77344 3.86048 5.632 8.46848 5.632 13.96224z" fill="#FFFFFF" p-id="2041"></path></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1 @@
<svg t="1619506408333" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2778" width="64" height="64"><path d="M116.91008 0h552.05888l262.77376 257.70496V995.4304c0 15.7696-13.19936 28.5696-29.46048 28.5696H116.91008c-16.26112 0-29.45536-12.8-29.45536-28.5696V28.5696C87.4496 12.8 100.64896 0 116.91008 0z" fill="#4A8DFF" p-id="2779"></path><path d="M668.96896 0v229.13536c0 15.79008 13.19936 28.5696 29.46048 28.5696h233.31328L668.96896 0z" fill="#E5F0FF" p-id="2780"></path><path d="M722.7648 823.53664c25.3952 26.96192 71.7056 9.55392 71.7056-26.96704V371.44064h-82.51392v321.97632l-163.96288-174.1824c-7.81312-8.29952-18.87232-13.0304-30.464-13.0304-11.58656 0-22.64064 4.73088-30.45888 13.0304l-163.96288 174.1824v-321.9968H240.62976v425.14944c0 36.52096 46.31552 53.92896 71.71072 26.96704l205.2096-217.99424 205.2096 217.99424z" fill="#FFFFFF" p-id="2781"></path></svg>

After

Width:  |  Height:  |  Size: 919 B

View File

@@ -0,0 +1 @@
<svg t="1619506497326" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3076" width="64" height="64"><path d="M116.91008 0h552.05888l262.77376 257.70496V995.4304c0 15.7696-13.19936 28.5696-29.46048 28.5696H116.91008c-16.26112 0-29.45536-12.8-29.45536-28.5696V28.5696C87.4496 12.8 100.64896 0 116.91008 0z" fill="#FF4867" p-id="3077"></path><path d="M668.96896 0v229.13536c0 15.79008 13.19936 28.5696 29.46048 28.5696h233.31328L668.96896 0z" fill="#FF97A9" p-id="3078"></path><path d="M721.3056 854.87104c-52.31616 0-99.24608-87.0912-123.91936-143.70304-41.5232-16.80896-87.31648-32.512-131.77856-42.66496-38.912 24.89856-105.12384 62.17216-155.9808 62.17216-31.54944 0-54.26688-15.39584-62.60736-42.1888-6.38976-22.05184-0.98816-37.2736 5.87776-45.5168 13.40928-17.7664 41.0368-26.79296 82.4064-26.79296 33.52064 0 76.01664 5.69856 123.4432 16.7936a785.0496 785.0496 0 0 0 89.26208-71.3728c-12.2624-56.45824-25.67168-147.968 8.3456-190.1568 16.83456-20.14208 42.496-26.79808 73.5488-17.7664 34.01728 9.5232 46.93504 29.66016 50.85696 45.5168 14.39232 55.04-50.85696 129.25952-94.82752 172.88192 9.81504 37.7344 22.7328 77.55264 38.43072 114.0224 63.09888 27.2896 138.1376 68.0448 146.65216 112.47104 3.4304 15.36-1.4848 29.6448-14.39744 42.17344-11.12064 8.87296-22.87616 14.11072-35.31776 14.11072v0.02048z m-47.03744-96.02048c11.50464 24.85248 22.48704 36.57728 28.27776 36.57728 0.88064 0 2.14528-0.37888 3.92192-1.8944 2.1504-2.28864 2.1504-3.80928 1.792-5.20704-1.19296-6.51776-10.9056-17.23904-33.9968-29.47584zM342.07744 658.2784c-18.4064 0-23.4752 4.31616-25.00608 6.33344-0.44032 0.64512-1.76128 2.59072-0.44032 7.60832 1.09056 4.32128 4.1728 8.92928 13.70624 8.92928 11.95008 0 29.24544-6.5536 49.34144-18.26304-14.37696-3.08736-27.04384-4.608-37.60128-4.608z m180.18816-22.18496c10.99776 2.9696 22.4 6.8096 32.99328 10.752a280.9344 280.9344 0 0 1-9.58976-29.696 722.85696 722.85696 0 0 1-23.3984 18.944z m77.7216-214.3744a11.71456 11.71456 0 0 0-9.1136 4.00896c-7.28064 8.89344-8.0896 31.29856-2.4576 59.99104 21.3248-22.20544 32.9216-42.5984 30.03392-53.504-0.40448-1.60768-1.6384-6.48704-11.5968-9.30304a24.01792 24.01792 0 0 0-6.8608-1.19296z" fill="#FFFFFF" p-id="3079"></path></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1 @@
<svg t="1619506516185" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3224" width="64" height="64"><path d="M116.91008 0h552.05888l262.77376 257.70496V995.4304c0 15.7696-13.19936 28.5696-29.46048 28.5696H116.91008c-16.26112 0-29.45536-12.8-29.45536-28.5696V28.5696C87.4496 12.8 100.64896 0 116.91008 0z" fill="#FF7861" p-id="3225"></path><path d="M668.96896 0v229.13536c0 15.79008 13.19936 28.5696 29.46048 28.5696h233.31328L668.96896 0z" fill="#FFB0A4" p-id="3226"></path><path d="M695.59296 473.25696c9.18528 9.09824 14.0288 22.19008 14.0288 41.59488 0 19.42016-4.84352 32.512-14.0288 41.60512-9.79968 9.728-26.3936 16.9472-50.90816 20.6848h-363.9808c-22.784 0-41.25184 17.90976-41.25184 40.00768v179.42016c0 14.29504 7.8592 27.50464 20.62336 34.65216a42.35776 42.35776 0 0 0 41.24672 0c12.76416-7.14752 20.62848-20.35712 20.62336-34.65216v-139.43296h325.82144c1.93536 0 3.8912-0.12288 5.82144-0.39424 88.11008-12.20096 138.5216-62.22336 138.5216-141.89056 0-79.65184-50.41152-129.67424-138.5216-141.8752a42.04544 42.04544 0 0 0-5.82144-0.4096H280.69888c-22.784 0-41.24672 17.90976-41.24672 40.00256 0 22.0928 18.46784 40.00256 41.24672 40.00256h363.98592c24.51456 3.7376 41.10848 10.9568 50.90816 20.66944v0.01536z" fill="#FFFFFF" p-id="3227"></path></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1 @@
<svg t="1619506202991" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1446" width="64" height="64"><path d="M391.432258 376.567742h-67.716129v142.03871h67.716129c24.774194 0 42.941935-4.954839 54.503226-16.516129 11.56129-11.56129 16.516129-29.729032 16.516129-54.503226s-6.606452-42.941935-18.167742-52.851613-31.380645-18.167742-52.851613-18.167742z" fill="#169DFB" p-id="1447"></path><path d="M758.090323 36.335484L736.619355 14.864516h-545.032258c-46.245161 0-82.580645 36.335484-82.580645 82.580645v825.806452c0 46.245161 36.335484 82.580645 82.580645 82.580645h644.129032c46.245161 0 82.580645-36.335484 82.580645-82.580645V201.496774l-160.206451-165.16129zM391.432258 551.63871h-67.716129v113.96129c0 6.606452-1.651613 11.56129-4.954839 14.864516s-8.258065 4.954839-14.864516 4.954839-13.212903-1.651613-14.864516-4.954839c-3.303226-3.303226-4.954839-8.258065-4.954839-14.864516V365.006452c0-9.909677 1.651613-16.516129 4.954839-19.819355 3.303226-3.303226 11.56129-4.954839 23.122581-4.954839h77.625806c37.987097 0 64.412903 8.258065 82.580645 24.774194s26.425806 42.941935 26.425807 79.277419c1.651613 72.670968-34.683871 107.354839-107.354839 107.354839z m343.535484 74.32258c-4.954839 13.212903-13.212903 23.122581-21.470968 33.032258s-21.470968 16.516129-34.683871 21.470968c-13.212903 4.954839-28.077419 8.258065-44.593548 8.258065-13.212903 0-24.774194-1.651613-36.335484-4.954839-11.56129-3.303226-23.122581-6.606452-33.032258-11.56129-14.864516-6.606452-23.122581-14.864516-28.077419-23.122581-4.954839-8.258065-4.954839-14.864516 0-21.470968 3.303226-4.954839 8.258065-6.606452 13.212903-6.606451 4.954839 0 9.909677 1.651613 14.864516 6.606451 9.909677 6.606452 21.470968 11.56129 33.032258 16.516129 11.56129 4.954839 24.774194 6.606452 37.987097 6.606452 8.258065 0 16.516129-1.651613 24.774193-4.954839 8.258065-3.303226 14.864516-8.258065 21.470968-13.212903 6.606452-4.954839 11.56129-13.212903 14.864516-19.819355 3.303226-8.258065 4.954839-16.516129 4.954839-26.425806 0-9.909677-1.651613-18.167742-4.954839-24.774194-3.303226-8.258065-8.258065-14.864516-14.864516-19.819355l-19.819355-14.864516c-8.258065-3.303226-14.864516-8.258065-21.470968-9.909677-13.212903-4.954839-26.425806-11.56129-37.987096-16.516129-11.56129-4.954839-21.470968-11.56129-29.729033-19.819355-8.258065-6.606452-14.864516-16.516129-19.819354-26.425807-4.954839-9.909677-6.606452-23.122581-6.606452-36.335483 0-13.212903 3.303226-24.774194 8.258064-36.335484 4.954839-9.909677 11.56129-19.819355 21.470968-26.425807 8.258065-8.258065 18.167742-13.212903 29.729032-16.516129 11.56129-3.303226 23.122581-4.954839 36.335484-4.954839 13.212903 0 24.774194 1.651613 36.335484 4.954839 11.56129 3.303226 21.470968 8.258065 29.729032 13.212903 8.258065 4.954839 14.864516 11.56129 18.167742 16.516129 3.303226 6.606452 3.303226 13.212903 0 19.819355-3.303226 4.954839-6.606452 6.606452-13.212903 6.606452s-11.56129-1.651613-16.516129-4.954839c-6.606452-4.954839-14.864516-9.909677-24.774193-14.864516-9.909677-4.954839-19.819355-6.606452-31.380646-6.606452-16.516129 0-29.729032 4.954839-39.638709 14.864517-9.909677 9.909677-14.864516 21.470968-14.864516 36.335483 0 9.909677 1.651613 16.516129 6.606451 23.122581 4.954839 6.606452 9.909677 13.212903 16.516129 16.516129 6.606452 4.954839 14.864516 9.909677 24.774194 13.212903 8.258065 4.954839 18.167742 8.258065 28.077419 13.212904 13.212903 4.954839 23.122581 11.56129 33.032258 18.167741s18.167742 13.212903 24.774194 19.819355c6.606452 8.258065 11.56129 16.516129 16.516129 26.425807 3.303226 9.909677 4.954839 21.470968 4.954839 34.683871 1.651613 16.516129 0 29.729032-6.606452 41.290322z" fill="#169DFB" p-id="1448"></path><path d="M736.619355 14.864516h-3.303226v132.129032c0 16.516129 8.258065 52.851613 57.806452 52.851613h127.174193L736.619355 14.864516z" fill="#8BCEFD" p-id="1449"></path></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -0,0 +1 @@
<svg t="1619506392432" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2630" width="64" height="64"><path d="M137.90246 0.00041a48.573421 48.573421 0 0 0-35.589106 15.293433A53.964778 53.964778 0 0 0 87.0404 50.934149V968.345622a48.706541 48.706541 0 0 0 15.272954 35.640306 49.97118 49.97118 0 0 0 35.589106 15.293434h746.336982a48.639981 48.639981 0 0 0 35.589105-15.293434 50.37054 50.37054 0 0 0 15.272954-35.640306V288.717094L646.727857 0.00041H137.90246z" fill="#E5E5E5" p-id="2631"></path><path d="M935.101501 288.717094h-237.445025c-27.822069-0.6656-50.22718-23.075831-50.928619-50.93374V0.00041l288.373644 288.716684z" fill="#CCCCCC" p-id="2632"></path><path d="M248.125776 365.184264h220.518312a25.51807 25.51807 0 0 0 24.19199-25.49759 25.51807 25.51807 0 0 0-24.19711-25.50271H248.125776a25.51807 25.51807 0 0 0-24.19711 25.49759 25.51807 25.51807 0 0 0 24.19711 25.49759z m0 169.825212h525.82379a25.44639 25.44639 0 0 0 25.431029-25.46687 25.44639 25.44639 0 0 0-25.431029-25.46687h-525.82379a25.44639 25.44639 0 0 0-25.43103 25.46687 25.44639 25.44639 0 0 0 25.43103 25.46687z m525.82379 118.886352h-525.82379a25.51807 25.51807 0 0 0-24.19711 25.49759 25.51807 25.51807 0 0 0 24.19711 25.50271h525.82379a25.51807 25.51807 0 0 0 24.19711-25.49759 25.51807 25.51807 0 0 0-24.19711-25.49759z" fill="#FFFFFF" p-id="2633"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1 @@
<svg t="1619506160661" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1299" width="64" height="64"><path d="M758.090323 36.335484L736.619355 14.864516h-545.032258c-46.245161 0-82.580645 36.335484-82.580645 82.580645v825.806452c0 46.245161 36.335484 82.580645 82.580645 82.580645h644.129032c46.245161 0 82.580645-36.335484 82.580645-82.580645V201.496774l-160.206451-165.16129zM531.819355 715.148387c-6.606452 6.606452-16.516129 11.56129-26.425807 11.56129-11.56129 0-19.819355-3.303226-28.077419-11.56129-6.606452-6.606452-11.56129-16.516129-11.56129-26.425806 0-11.56129 3.303226-19.819355 11.56129-26.425807 6.606452-6.606452 16.516129-11.56129 28.077419-11.56129s19.819355 3.303226 26.425807 11.56129c6.606452 6.606452 11.56129 16.516129 11.56129 26.425807 0 9.909677-4.954839 18.167742-11.56129 26.425806z m87.535484-272.516129c-4.954839 13.212903-16.516129 28.077419-33.032258 42.941936-11.56129 9.909677-19.819355 19.819355-26.425807 26.425806-6.606452 8.258065-11.56129 14.864516-14.864516 21.470968-3.303226 6.606452-4.954839 11.56129-6.606452 18.167742-1.651613 6.606452-1.651613 13.212903-1.651612 19.819355 0 11.56129-3.303226 19.819355-9.909678 24.774193-6.606452 4.954839-14.864516 8.258065-24.774193 8.258065s-18.167742-3.303226-24.774194-8.258065c-6.606452-4.954839-9.909677-13.212903-9.909677-24.774193 0-6.606452 1.651613-13.212903 3.303225-21.470968s6.606452-18.167742 9.909678-28.07742c4.954839-9.909677 9.909677-19.819355 16.516129-29.729032s14.864516-19.819355 23.122581-28.077419c6.606452-6.606452 13.212903-13.212903 16.516129-18.167742s8.258065-11.56129 11.56129-16.516129c3.303226-4.954839 4.954839-9.909677 4.954839-14.864516 1.651613-4.954839 1.651613-11.56129 1.651612-16.516129 0-14.864516-4.954839-26.425806-13.212903-31.380645-8.258065-4.954839-18.167742-8.258065-31.380645-8.258065-11.56129 0-23.122581 3.303226-31.380645 6.606452-9.909677 4.954839-14.864516 11.56129-14.864516 21.470967 0 9.909677-4.954839 16.516129-13.212903 21.470968-8.258065 4.954839-18.167742 6.606452-26.425807 6.606452-11.56129 0-19.819355-3.303226-24.774193-8.258065-4.954839-4.954839-6.606452-11.56129-6.606452-21.470968 0-13.212903 3.303226-24.774194 9.909677-36.335483 6.606452-11.56129 14.864516-19.819355 24.774194-28.07742s23.122581-14.864516 37.987097-18.167742c14.864516-4.954839 29.729032-6.606452 46.245161-8.258064 16.516129 0 31.380645 1.651613 44.593548 6.606451 13.212903 4.954839 26.425806 11.56129 36.335484 19.819355 9.909677 8.258065 18.167742 19.819355 23.122581 33.032258 4.954839 13.212903 8.258065 28.077419 8.258064 46.245162 3.303226 14.864516 1.651613 29.729032-4.954838 42.941935z" fill="#DCDCDC" p-id="1300"></path><path d="M736.619355 14.864516h-3.303226v132.129032c0 16.516129 8.258065 52.851613 57.806452 52.851613h127.174193L736.619355 14.864516z" fill="#EEEEEE" p-id="1301"></path></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

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