refactor: 悦码项目重构
5
apps/platform/.browserslistrc
Normal file
@@ -0,0 +1,5 @@
|
||||
> 1%
|
||||
last 2 versions
|
||||
not dead
|
||||
not ie 11
|
||||
chrome 79
|
||||
19
apps/platform/.dockerignore
Normal 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
@@ -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
|
||||
8
apps/platform/.env.development
Normal 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/'
|
||||
8
apps/platform/.env.production
Normal 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
@@ -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
@@ -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
@@ -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
|
||||
81
apps/platform/CHANGELOG.md
Normal 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
@@ -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
@@ -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` 开发中
|
||||
34
apps/platform/commitlint.config.mjs
Normal 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',
|
||||
],
|
||||
],
|
||||
},
|
||||
};
|
||||
15
apps/platform/docker-compose.yml
Normal 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
|
||||
206
apps/platform/eslint.config.mjs
Normal 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
@@ -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>
|
||||
8
apps/platform/lint-staged.config.mjs
Normal 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'],
|
||||
};
|
||||
104
apps/platform/openapi.config.ts
Normal 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
@@ -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"
|
||||
}
|
||||
11
apps/platform/prettier.config.mjs
Normal 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',
|
||||
};
|
||||
BIN
apps/platform/public/favicon.ico
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
1
apps/platform/public/iconfont.js
Normal file
30
apps/platform/src/App.vue
Normal 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>
|
||||
64
apps/platform/src/api/backend/api/account.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
32
apps/platform/src/api/backend/api/auth.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
20
apps/platform/src/api/backend/api/authEmail.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
82
apps/platform/src/api/backend/api/businessTodo.ts
Normal 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: '删除成功' }),
|
||||
});
|
||||
}
|
||||
23
apps/platform/src/api/backend/api/captcha.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
73
apps/platform/src/api/backend/api/health.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
54
apps/platform/src/api/backend/api/index.ts
Normal 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,
|
||||
};
|
||||
133
apps/platform/src/api/backend/api/netDiskManage.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
16
apps/platform/src/api/backend/api/netDiskOverview.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
82
apps/platform/src/api/backend/api/systemDept.ts
Normal 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: '删除成功' }),
|
||||
});
|
||||
}
|
||||
91
apps/platform/src/api/backend/api/systemDictItem.ts
Normal 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: '删除成功' }),
|
||||
});
|
||||
}
|
||||
99
apps/platform/src/api/backend/api/systemDictType.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
20
apps/platform/src/api/backend/api/systemEmail.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
80
apps/platform/src/api/backend/api/systemLog.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
90
apps/platform/src/api/backend/api/systemMenu.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
28
apps/platform/src/api/backend/api/systemOnline.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
91
apps/platform/src/api/backend/api/systemParamConfig.ts
Normal 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: '删除成功' }),
|
||||
});
|
||||
}
|
||||
91
apps/platform/src/api/backend/api/systemRole.ts
Normal 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: '删除成功' }),
|
||||
});
|
||||
}
|
||||
16
apps/platform/src/api/backend/api/systemServe.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
22
apps/platform/src/api/backend/api/systemSse.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
133
apps/platform/src/api/backend/api/systemTask.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
110
apps/platform/src/api/backend/api/systemUser.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
44
apps/platform/src/api/backend/api/toolsStorage.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
40
apps/platform/src/api/backend/api/toolsUpload.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
1284
apps/platform/src/api/backend/api/typings.d.ts
vendored
Normal file
29
apps/platform/src/api/backend/api/user.ts
Normal 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,
|
||||
});
|
||||
}
|
||||
11
apps/platform/src/api/demo/dict.ts
Normal 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,
|
||||
});
|
||||
}
|
||||
33
apps/platform/src/api/demo/hero.ts
Normal 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',
|
||||
});
|
||||
}
|
||||
14
apps/platform/src/api/demo/select.ts
Normal 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,
|
||||
});
|
||||
}
|
||||
26
apps/platform/src/api/demo/user.ts
Normal 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,
|
||||
});
|
||||
}
|
||||
5
apps/platform/src/api/index.ts
Normal 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
@@ -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;
|
||||
};
|
||||
}
|
||||
BIN
apps/platform/src/assets/404.gif
Normal file
|
After Width: | Height: | Size: 160 KiB |
1
apps/platform/src/assets/analysis.svg
Normal file
|
After Width: | Height: | Size: 12 KiB |
39
apps/platform/src/assets/icons/dark.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-code.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-dir.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-docx.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-excel.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-img.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-music.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-office.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-pdf.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-ppt.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-psd.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-txt.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-unknown.svg
Normal 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 |
1
apps/platform/src/assets/icons/file-type-video.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg t="1619506277769" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1889" 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="#627CFE" p-id="1890"></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="1891"></path><path d="M519.68 606.62784v66.42176l120.832 73.40032v-213.0432z" fill="#FFFFFF" opacity=".99" p-id="1892"></path><path d="M534.528 512.13824H282.25024a22.48192 22.48192 0 0 0-22.2976 22.62016v210.52928c0 12.38016 9.91744 22.66624 22.25152 22.66624h252.50816a22.48192 22.48192 0 0 0 22.25152-22.66624v-210.7136a22.62016 22.62016 0 0 0-22.43584-22.43584zM356.2496 719.36v-158.81216L483.328 639.9488 356.2496 719.36z" fill="#FFFFFF" opacity=".99" p-id="1893"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
1
apps/platform/src/assets/icons/file-type-zip.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg t="1619506466646" class="icon" viewBox="0 0 1140 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2926" width="64" height="64"><path d="M1079.048591 1022.302497H56.746094c-31.187329 0-56.746094-21.778899-56.746094-48.224215V681.537289h1135.574765v292.389798c0 26.452188-25.565638 48.231087-56.746094 48.231087l0.21992 0.144323z" fill="#5ACC9B" p-id="2927"></path><path d="M56.746094 0H1079.048591c31.187329 0 56.746094 21.785772 56.746094 48.224215v292.540993H0.219919V48.382282C0.219919 21.923221 25.785557 0.151195 56.972886 0.151195L56.746094 0z" fill="#6CCBFF" p-id="2928"></path><path d="M0.219919 340.840805h1135.423571v340.620886H0.219919z" fill="#FFD766" p-id="2929"></path><path d="M378.694443 0.219919h378.474523v1021.862658H378.694443z" fill="#FF5562" p-id="2930"></path><path d="M487.444617 56.972886h75.714148v56.814819H487.444617V56.966013zM563.158765 0.213047H638.86604V56.972886H563.158765V0.219919z m0 113.567785H638.86604v56.5949H563.158765v-56.5949z m-75.714148 56.5949h75.714148v56.746094H487.444617v-56.746094z m75.714148 56.746094H638.86604v56.821691H563.158765v-56.821691z m-75.714148 56.821691h75.714148v56.814819H487.444617v-56.814819z m75.714148 56.746094H638.86604v56.746094H563.158765v-56.746094zM487.444617 397.435705h75.714148v56.814818H487.444617v-56.814818z m75.714148 56.814818H638.86604v56.897289H563.158765v-56.897289z m-75.714148 56.897289h75.714148v56.746094H487.444617v-56.746094z m75.714148 56.746094H638.86604V624.708725H563.158765v-56.814819zM487.444617 624.708725h75.714148v56.821691H487.444617V624.708725z m75.714148 56.746094H638.86604v56.746094H563.158765v-56.746094z m-75.714148 56.746094h75.714148v56.821691H487.444617v-56.821691z m75.714148 56.821691H638.86604v56.890416H563.158765v-56.890416z m-75.714148 56.890416h75.714148v56.746094H487.444617v-56.746094z m0 113.567785h75.714148v56.814819H487.444617v-56.814819z m75.714148-56.821691H638.86604v56.821691H563.158765v-56.821691z" fill="#FFFFFF" p-id="2931"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
39
apps/platform/src/assets/icons/light.svg
Normal 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="配置面板" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="setting-copy-2" transform="translate(-1254.000000, -136.000000)">
|
||||
<g id="Group-8" transform="translate(1167.000000, 0.000000)">
|
||||
<g id="Group-5" filter="url(#filter-1)" transform="translate(89.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-18" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect>
|
||||
<rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
14
apps/platform/src/assets/icons/locale.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
viewBox="0 0 24 24"
|
||||
focusable="false"
|
||||
width="1em"
|
||||
height="1em"
|
||||
fill="currentColor"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<path d="M0 0h24v24H0z" fill="none" />
|
||||
<path
|
||||
d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z "
|
||||
className="css-c4d79v"
|
||||
/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 645 B |
68
apps/platform/src/assets/icons/login.svg
Normal file
@@ -0,0 +1,68 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1361px" height="609px" viewBox="0 0 1361 609" version="1.1">
|
||||
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Group 21</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs/>
|
||||
<g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="账户密码登录-校验" transform="translate(-79.000000, -82.000000)">
|
||||
<g id="Group-21" transform="translate(77.000000, 73.000000)">
|
||||
<g id="Group-18" opacity="0.8" transform="translate(74.901416, 569.699158) rotate(-7.000000) translate(-74.901416, -569.699158) translate(4.901416, 525.199158)">
|
||||
<ellipse id="Oval-11" fill="#CFDAE6" opacity="0.25" cx="63.5748792" cy="32.468367" rx="21.7830479" ry="21.766008"/>
|
||||
<ellipse id="Oval-3" fill="#CFDAE6" opacity="0.599999964" cx="5.98746479" cy="13.8668601" rx="5.2173913" ry="5.21330997"/>
|
||||
<path d="M38.1354514,88.3520215 C43.8984227,88.3520215 48.570234,83.6838647 48.570234,77.9254015 C48.570234,72.1669383 43.8984227,67.4987816 38.1354514,67.4987816 C32.3724801,67.4987816 27.7006688,72.1669383 27.7006688,77.9254015 C27.7006688,83.6838647 32.3724801,88.3520215 38.1354514,88.3520215 Z" id="Oval-3-Copy" fill="#CFDAE6" opacity="0.45"/>
|
||||
<path d="M64.2775582,33.1704963 L119.185836,16.5654915" id="Path-12" stroke="#CFDAE6" stroke-width="1.73913043" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M42.1431708,26.5002681 L7.71190162,14.5640702" id="Path-16" stroke="#E0B4B7" stroke-width="0.702678964" opacity="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"/>
|
||||
<path d="M63.9262187,33.521561 L43.6721326,69.3250951" id="Path-15" stroke="#BACAD9" stroke-width="0.702678964" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"/>
|
||||
<g id="Group-17" transform="translate(126.850922, 13.543654) rotate(30.000000) translate(-126.850922, -13.543654) translate(117.285705, 4.381889)" fill="#CFDAE6">
|
||||
<ellipse id="Oval-4" opacity="0.45" cx="9.13482653" cy="9.12768076" rx="9.13482653" ry="9.12768076"/>
|
||||
<path d="M18.2696531,18.2553615 C18.2696531,13.2142826 14.1798519,9.12768076 9.13482653,9.12768076 C4.08980114,9.12768076 0,13.2142826 0,18.2553615 L18.2696531,18.2553615 Z" id="Oval-4" transform="translate(9.134827, 13.691521) scale(-1, -1) translate(-9.134827, -13.691521) "/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group-14" transform="translate(216.294700, 123.725600) rotate(-5.000000) translate(-216.294700, -123.725600) translate(106.294700, 35.225600)">
|
||||
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.25" cx="29.1176471" cy="29.1402439" rx="29.1176471" ry="29.1402439"/>
|
||||
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.3" cx="29.1176471" cy="29.1402439" rx="21.5686275" ry="21.5853659"/>
|
||||
<ellipse id="Oval-2-Copy" stroke="#CFDAE6" opacity="0.4" cx="179.019608" cy="138.146341" rx="23.7254902" ry="23.7439024"/>
|
||||
<ellipse id="Oval-2" fill="#BACAD9" opacity="0.5" cx="29.1176471" cy="29.1402439" rx="10.7843137" ry="10.7926829"/>
|
||||
<path d="M29.1176471,39.9329268 L29.1176471,18.347561 C23.1616351,18.347561 18.3333333,23.1796097 18.3333333,29.1402439 C18.3333333,35.1008781 23.1616351,39.9329268 29.1176471,39.9329268 Z" id="Oval-2" fill="#BACAD9"/>
|
||||
<g id="Group-9" opacity="0.45" transform="translate(172.000000, 131.000000)" fill="#E6A1A6">
|
||||
<ellipse id="Oval-2-Copy-2" cx="7.01960784" cy="7.14634146" rx="6.47058824" ry="6.47560976"/>
|
||||
<path d="M0.549019608,13.6219512 C4.12262681,13.6219512 7.01960784,10.722722 7.01960784,7.14634146 C7.01960784,3.56996095 4.12262681,0.670731707 0.549019608,0.670731707 L0.549019608,13.6219512 Z" id="Oval-2-Copy-2" transform="translate(3.784314, 7.146341) scale(-1, 1) translate(-3.784314, -7.146341) "/>
|
||||
</g>
|
||||
<ellipse id="Oval-10" fill="#CFDAE6" cx="218.382353" cy="138.685976" rx="1.61764706" ry="1.61890244"/>
|
||||
<ellipse id="Oval-10-Copy-2" fill="#E0B4B7" opacity="0.35" cx="179.558824" cy="175.381098" rx="1.61764706" ry="1.61890244"/>
|
||||
<ellipse id="Oval-10-Copy" fill="#E0B4B7" opacity="0.35" cx="180.098039" cy="102.530488" rx="2.15686275" ry="2.15853659"/>
|
||||
<path d="M28.9985381,29.9671598 L171.151018,132.876024" id="Path-11" stroke="#CFDAE6" opacity="0.8"/>
|
||||
</g>
|
||||
<g id="Group-10" opacity="0.799999952" transform="translate(1054.100635, 36.659317) rotate(-11.000000) translate(-1054.100635, -36.659317) translate(1026.600635, 4.659317)">
|
||||
<ellipse id="Oval-7" stroke="#CFDAE6" stroke-width="0.941176471" cx="43.8135593" cy="32" rx="11.1864407" ry="11.2941176"/>
|
||||
<g id="Group-12" transform="translate(34.596774, 23.111111)" fill="#BACAD9">
|
||||
<ellipse id="Oval-7" opacity="0.45" cx="9.18534718" cy="8.88888889" rx="8.47457627" ry="8.55614973"/>
|
||||
<path d="M9.18534718,17.4450386 C13.8657264,17.4450386 17.6599235,13.6143199 17.6599235,8.88888889 C17.6599235,4.16345787 13.8657264,0.332739156 9.18534718,0.332739156 L9.18534718,17.4450386 Z" id="Oval-7"/>
|
||||
</g>
|
||||
<path d="M34.6597385,24.809694 L5.71666084,4.76878945" id="Path-2" stroke="#CFDAE6" stroke-width="0.941176471"/>
|
||||
<ellipse id="Oval" stroke="#CFDAE6" stroke-width="0.941176471" cx="3.26271186" cy="3.29411765" rx="3.26271186" ry="3.29411765"/>
|
||||
<ellipse id="Oval-Copy" fill="#F7E1AD" cx="2.79661017" cy="61.1764706" rx="2.79661017" ry="2.82352941"/>
|
||||
<path d="M34.6312443,39.2922712 L5.06366663,59.785082" id="Path-10" stroke="#CFDAE6" stroke-width="0.941176471"/>
|
||||
</g>
|
||||
<g id="Group-19" opacity="0.33" transform="translate(1282.537219, 446.502867) rotate(-10.000000) translate(-1282.537219, -446.502867) translate(1142.537219, 327.502867)">
|
||||
<g id="Group-17" transform="translate(141.333539, 104.502742) rotate(275.000000) translate(-141.333539, -104.502742) translate(129.333539, 92.502742)" fill="#BACAD9">
|
||||
<circle id="Oval-4" opacity="0.45" cx="11.6666667" cy="11.6666667" r="11.6666667"/>
|
||||
<path d="M23.3333333,23.3333333 C23.3333333,16.8900113 18.1099887,11.6666667 11.6666667,11.6666667 C5.22334459,11.6666667 0,16.8900113 0,23.3333333 L23.3333333,23.3333333 Z" id="Oval-4" transform="translate(11.666667, 17.500000) scale(-1, -1) translate(-11.666667, -17.500000) "/>
|
||||
</g>
|
||||
<circle id="Oval-5-Copy-6" fill="#CFDAE6" cx="201.833333" cy="87.5" r="5.83333333"/>
|
||||
<path d="M143.5,88.8126685 L155.070501,17.6038544" id="Path-17" stroke="#BACAD9" stroke-width="1.16666667"/>
|
||||
<path d="M17.5,37.3333333 L127.466252,97.6449735" id="Path-18" stroke="#BACAD9" stroke-width="1.16666667"/>
|
||||
<polyline id="Path-19" stroke="#CFDAE6" stroke-width="1.16666667" points="143.902597 120.302281 174.935455 231.571342 38.5 147.510847 126.366941 110.833333"/>
|
||||
<path d="M159.833333,99.7453842 L195.416667,89.25" id="Path-20" stroke="#E0B4B7" stroke-width="1.16666667" opacity="0.6"/>
|
||||
<path d="M205.333333,82.1372105 L238.719406,36.1666667" id="Path-24" stroke="#BACAD9" stroke-width="1.16666667"/>
|
||||
<path d="M266.723424,132.231988 L207.083333,90.4166667" id="Path-25" stroke="#CFDAE6" stroke-width="1.16666667"/>
|
||||
<circle id="Oval-5" fill="#C1D1E0" cx="156.916667" cy="8.75" r="8.75"/>
|
||||
<circle id="Oval-5-Copy-3" fill="#C1D1E0" cx="39.0833333" cy="148.75" r="5.25"/>
|
||||
<circle id="Oval-5-Copy-2" fill-opacity="0.6" fill="#D1DEED" cx="8.75" cy="33.25" r="8.75"/>
|
||||
<circle id="Oval-5-Copy-4" fill-opacity="0.6" fill="#D1DEED" cx="243.833333" cy="30.3333333" r="5.83333333"/>
|
||||
<circle id="Oval-5-Copy-5" fill="#E0B4B7" cx="175.583333" cy="232.75" r="5.25"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<div xmlns="" id="divScriptsUsed" style="display: none"/><script xmlns="" id="globalVarsDetection" src="chrome-extension://cmkdbmfndkfgebldhnkbfhlneefdaaip/js/wrs_env.js"/></svg>
|
||||
|
After Width: | Height: | Size: 8.5 KiB |
48
apps/platform/src/assets/icons/logo.svg
Normal file
@@ -0,0 +1,48 @@
|
||||
<svg width="182" height="166" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Generator: Sketch 54 (76480) - https://sketchapp.com -->
|
||||
<title>未命名</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<linearGradient x1="0.00542331488%" y1="50.0074349%" x2="100.011743%" y2="50.0074349%" id="linearGradient-1">
|
||||
<stop stop-color="#3668E7" offset="0.3030465%"/>
|
||||
<stop stop-color="#44BAE1" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="0.0117592657%" y1="50.0044985%" x2="100.006481%" y2="50.0044985%" id="linearGradient-2">
|
||||
<stop stop-color="#44BCE1" offset="0%"/>
|
||||
<stop stop-color="#44BAE1" offset="36.72%"/>
|
||||
<stop stop-color="#43B2E2" offset="54.5%"/>
|
||||
<stop stop-color="#41A5E2" offset="68.19%"/>
|
||||
<stop stop-color="#3F93E4" offset="79.8%"/>
|
||||
<stop stop-color="#3C7BE5" offset="89.99%"/>
|
||||
<stop stop-color="#385EE7" offset="99.21%"/>
|
||||
<stop stop-color="#385BE7" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="0.0148416278%" y1="50.0005568%" x2="100.005996%" y2="50.0005568%" id="linearGradient-3">
|
||||
<stop stop-color="#44BCE1" offset="0%"/>
|
||||
<stop stop-color="#43B6E1" offset="14.76%"/>
|
||||
<stop stop-color="#41A4E2" offset="34.89%"/>
|
||||
<stop stop-color="#3E88E4" offset="58.12%"/>
|
||||
<stop stop-color="#3960E7" offset="83.49%"/>
|
||||
<stop stop-color="#385BE7" offset="86.36%"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<title>background</title>
|
||||
<rect x="-1" y="-1" width="184" height="168" id="canvas_background" fill="none"/>
|
||||
</g>
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<g id="logo3-01的副本" fill-rule="nonzero" stroke="null" transform="rotate(-1 88.74440002441469,82.13372802734358) ">
|
||||
<g id="图层_2" stroke="null" transform="rotate(-1 88.74440002441469,82.13372802734358) ">
|
||||
<g id="XMLID_5_" stroke="null">
|
||||
<g id="编组" stroke="null">
|
||||
<path d="m85.59977,58.69808c-18.60016,1.68406 -33.15083,17.00902 -33.15083,35.70211c0,19.80456 16.36951,35.83683 36.51396,35.83683c0,0 74.57221,12.15893 56.93295,-76.69217c10.15802,16.70589 19.42378,33.51283 19.42378,33.51283c0,0 22.64964,38.36292 -2.47087,61.80507c0,0 -14.585,13.40513 -41.55865,13.40513c-7.41261,0 -16.30088,0 -25.36073,0c-47.22107,-8.15086 -51.20191,-49.17461 -51.20191,-49.17461c-3.26018,-52.74481 40.8723,-54.5636 40.8723,-54.5636l0,0.16841z" id="路径" fill="url(#linearGradient-1)" stroke="null" stroke-width="0"/>
|
||||
<path d="m145.89585,53.54485c17.63926,88.8511 -56.93295,76.69217 -56.93295,76.69217c20.17877,0 36.51396,-16.03227 36.51396,-35.83683c0,-3.33445 -0.48045,-6.56784 -1.33839,-9.63284c0,0 0,-0.03368 0,-0.03368c-0.37749,-1.91983 -6.0399,-28.3596 -33.52833,-38.63238c-12.52593,-4.68169 -26.35594,-4.34488 -38.91619,0.20209c-8.81963,3.19972 -19.18356,8.75712 -26.83639,18.32259l19.04629,-32.90656c4.35833,-7.51092 10.05506,-14.17981 16.98722,-19.50144c12.11413,-9.22866 31.19473,-16.97534 52.91779,-0.97676c0,0 6.52035,3.63758 19.86991,23.13901c3.84358,5.62477 8.13328,12.3947 12.21708,19.16463z" id="路径" fill="url(#linearGradient-2)" stroke="null" stroke-width="0"/>
|
||||
<path d="m124.13847,84.73367c0.85794,3.06499 1.33839,6.29839 1.33839,9.63284c0,19.80456 -16.36951,35.83683 -36.51396,35.83683c-20.14445,0 -36.51396,-16.03227 -36.51396,-35.83683c0,-18.69309 14.55067,-34.01805 33.15083,-35.70212c1.09817,-0.10104 2.23065,-0.13472 3.36313,-0.13472c16.747,0 30.88587,11.08113 35.17557,26.204c0,0 0,0 0,0z" id="路径" fill="#FFFFFF" stroke="null" stroke-width="0"/>
|
||||
<path d="m44.72747,113.09327c0,0 3.94653,41.02375 51.20191,49.17461c-15.47726,0 -31.332,0 -40.63208,0c-10.39824,0 -20.69353,-2.35769 -29.85634,-7.20779c-12.21708,-6.50048 -24.64006,-18.38995 -22.3751,-39.44073c1.64725,-15.32496 20.79649,-49.24196 20.79649,-49.24196l0.99521,-1.71775c0,0 0,0 0,-0.03368c7.61851,-9.59915 17.98244,-15.12287 26.83639,-18.32259c12.56025,-4.54697 26.39026,-4.88378 38.91619,-0.20209c27.48843,10.30646 33.15084,36.74623 33.52833,38.63238c-4.2897,-15.08919 -18.42857,-26.17032 -35.17557,-26.17032c-1.13249,0 -2.26497,0.06736 -3.36313,0.13472l0,-0.13472c0,-0.03368 -44.13248,1.78511 -40.8723,54.52992z" id="路径" fill="url(#linearGradient-3)" stroke="null" stroke-width="0"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
1
apps/platform/src/assets/icons/moon.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12S6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938A7.999 7.999 0 0 0 4 12z"/></svg>
|
||||
|
After Width: | Height: | Size: 366 B |
39
apps/platform/src/assets/icons/realDark.svg
Normal 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="#001529d9" fill-rule="evenodd" xlink:href="#path-2"></use>
|
||||
</g>
|
||||
<rect id="Rectangle-11" fill="#001529d9" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
|
||||
<rect id="Rectangle-18" fill="#001529a6" 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 |
39
apps/platform/src/assets/icons/sidemenu.svg
Normal 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 |
1
apps/platform/src/assets/icons/sun.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M12 18a6 6 0 1 1 0-12a6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8a4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636L5.636 7.05L3.515 4.93zM16.95 18.364l1.414-1.414l2.121 2.121l-1.414 1.414l-2.121-2.121zm2.121-14.85l1.414 1.415l-2.121 2.121l-1.414-1.414l2.121-2.121zM5.636 16.95l1.414 1.414l-2.121 2.121l-1.414-1.414l2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></svg>
|
||||
|
After Width: | Height: | Size: 571 B |
39
apps/platform/src/assets/icons/topmenu.svg
Normal 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="white" 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-18" fill="#f0f2f5" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect>
|
||||
<rect id="Rectangle-11" fill="#001529" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
BIN
apps/platform/src/assets/images/logo.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
apps/platform/src/assets/images/no-preview.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
apps/platform/src/assets/images/tool.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
68
apps/platform/src/assets/login.svg
Normal file
@@ -0,0 +1,68 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1361px" height="609px" viewBox="0 0 1361 609" version="1.1">
|
||||
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Group 21</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs/>
|
||||
<g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="账户密码登录-校验" transform="translate(-79.000000, -82.000000)">
|
||||
<g id="Group-21" transform="translate(77.000000, 73.000000)">
|
||||
<g id="Group-18" opacity="0.8" transform="translate(74.901416, 569.699158) rotate(-7.000000) translate(-74.901416, -569.699158) translate(4.901416, 525.199158)">
|
||||
<ellipse id="Oval-11" fill="#CFDAE6" opacity="0.25" cx="63.5748792" cy="32.468367" rx="21.7830479" ry="21.766008"/>
|
||||
<ellipse id="Oval-3" fill="#CFDAE6" opacity="0.599999964" cx="5.98746479" cy="13.8668601" rx="5.2173913" ry="5.21330997"/>
|
||||
<path d="M38.1354514,88.3520215 C43.8984227,88.3520215 48.570234,83.6838647 48.570234,77.9254015 C48.570234,72.1669383 43.8984227,67.4987816 38.1354514,67.4987816 C32.3724801,67.4987816 27.7006688,72.1669383 27.7006688,77.9254015 C27.7006688,83.6838647 32.3724801,88.3520215 38.1354514,88.3520215 Z" id="Oval-3-Copy" fill="#CFDAE6" opacity="0.45"/>
|
||||
<path d="M64.2775582,33.1704963 L119.185836,16.5654915" id="Path-12" stroke="#CFDAE6" stroke-width="1.73913043" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M42.1431708,26.5002681 L7.71190162,14.5640702" id="Path-16" stroke="#E0B4B7" stroke-width="0.702678964" opacity="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"/>
|
||||
<path d="M63.9262187,33.521561 L43.6721326,69.3250951" id="Path-15" stroke="#BACAD9" stroke-width="0.702678964" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"/>
|
||||
<g id="Group-17" transform="translate(126.850922, 13.543654) rotate(30.000000) translate(-126.850922, -13.543654) translate(117.285705, 4.381889)" fill="#CFDAE6">
|
||||
<ellipse id="Oval-4" opacity="0.45" cx="9.13482653" cy="9.12768076" rx="9.13482653" ry="9.12768076"/>
|
||||
<path d="M18.2696531,18.2553615 C18.2696531,13.2142826 14.1798519,9.12768076 9.13482653,9.12768076 C4.08980114,9.12768076 0,13.2142826 0,18.2553615 L18.2696531,18.2553615 Z" id="Oval-4" transform="translate(9.134827, 13.691521) scale(-1, -1) translate(-9.134827, -13.691521) "/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group-14" transform="translate(216.294700, 123.725600) rotate(-5.000000) translate(-216.294700, -123.725600) translate(106.294700, 35.225600)">
|
||||
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.25" cx="29.1176471" cy="29.1402439" rx="29.1176471" ry="29.1402439"/>
|
||||
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.3" cx="29.1176471" cy="29.1402439" rx="21.5686275" ry="21.5853659"/>
|
||||
<ellipse id="Oval-2-Copy" stroke="#CFDAE6" opacity="0.4" cx="179.019608" cy="138.146341" rx="23.7254902" ry="23.7439024"/>
|
||||
<ellipse id="Oval-2" fill="#BACAD9" opacity="0.5" cx="29.1176471" cy="29.1402439" rx="10.7843137" ry="10.7926829"/>
|
||||
<path d="M29.1176471,39.9329268 L29.1176471,18.347561 C23.1616351,18.347561 18.3333333,23.1796097 18.3333333,29.1402439 C18.3333333,35.1008781 23.1616351,39.9329268 29.1176471,39.9329268 Z" id="Oval-2" fill="#BACAD9"/>
|
||||
<g id="Group-9" opacity="0.45" transform="translate(172.000000, 131.000000)" fill="#E6A1A6">
|
||||
<ellipse id="Oval-2-Copy-2" cx="7.01960784" cy="7.14634146" rx="6.47058824" ry="6.47560976"/>
|
||||
<path d="M0.549019608,13.6219512 C4.12262681,13.6219512 7.01960784,10.722722 7.01960784,7.14634146 C7.01960784,3.56996095 4.12262681,0.670731707 0.549019608,0.670731707 L0.549019608,13.6219512 Z" id="Oval-2-Copy-2" transform="translate(3.784314, 7.146341) scale(-1, 1) translate(-3.784314, -7.146341) "/>
|
||||
</g>
|
||||
<ellipse id="Oval-10" fill="#CFDAE6" cx="218.382353" cy="138.685976" rx="1.61764706" ry="1.61890244"/>
|
||||
<ellipse id="Oval-10-Copy-2" fill="#E0B4B7" opacity="0.35" cx="179.558824" cy="175.381098" rx="1.61764706" ry="1.61890244"/>
|
||||
<ellipse id="Oval-10-Copy" fill="#E0B4B7" opacity="0.35" cx="180.098039" cy="102.530488" rx="2.15686275" ry="2.15853659"/>
|
||||
<path d="M28.9985381,29.9671598 L171.151018,132.876024" id="Path-11" stroke="#CFDAE6" opacity="0.8"/>
|
||||
</g>
|
||||
<g id="Group-10" opacity="0.799999952" transform="translate(1054.100635, 36.659317) rotate(-11.000000) translate(-1054.100635, -36.659317) translate(1026.600635, 4.659317)">
|
||||
<ellipse id="Oval-7" stroke="#CFDAE6" stroke-width="0.941176471" cx="43.8135593" cy="32" rx="11.1864407" ry="11.2941176"/>
|
||||
<g id="Group-12" transform="translate(34.596774, 23.111111)" fill="#BACAD9">
|
||||
<ellipse id="Oval-7" opacity="0.45" cx="9.18534718" cy="8.88888889" rx="8.47457627" ry="8.55614973"/>
|
||||
<path d="M9.18534718,17.4450386 C13.8657264,17.4450386 17.6599235,13.6143199 17.6599235,8.88888889 C17.6599235,4.16345787 13.8657264,0.332739156 9.18534718,0.332739156 L9.18534718,17.4450386 Z" id="Oval-7"/>
|
||||
</g>
|
||||
<path d="M34.6597385,24.809694 L5.71666084,4.76878945" id="Path-2" stroke="#CFDAE6" stroke-width="0.941176471"/>
|
||||
<ellipse id="Oval" stroke="#CFDAE6" stroke-width="0.941176471" cx="3.26271186" cy="3.29411765" rx="3.26271186" ry="3.29411765"/>
|
||||
<ellipse id="Oval-Copy" fill="#F7E1AD" cx="2.79661017" cy="61.1764706" rx="2.79661017" ry="2.82352941"/>
|
||||
<path d="M34.6312443,39.2922712 L5.06366663,59.785082" id="Path-10" stroke="#CFDAE6" stroke-width="0.941176471"/>
|
||||
</g>
|
||||
<g id="Group-19" opacity="0.33" transform="translate(1282.537219, 446.502867) rotate(-10.000000) translate(-1282.537219, -446.502867) translate(1142.537219, 327.502867)">
|
||||
<g id="Group-17" transform="translate(141.333539, 104.502742) rotate(275.000000) translate(-141.333539, -104.502742) translate(129.333539, 92.502742)" fill="#BACAD9">
|
||||
<circle id="Oval-4" opacity="0.45" cx="11.6666667" cy="11.6666667" r="11.6666667"/>
|
||||
<path d="M23.3333333,23.3333333 C23.3333333,16.8900113 18.1099887,11.6666667 11.6666667,11.6666667 C5.22334459,11.6666667 0,16.8900113 0,23.3333333 L23.3333333,23.3333333 Z" id="Oval-4" transform="translate(11.666667, 17.500000) scale(-1, -1) translate(-11.666667, -17.500000) "/>
|
||||
</g>
|
||||
<circle id="Oval-5-Copy-6" fill="#CFDAE6" cx="201.833333" cy="87.5" r="5.83333333"/>
|
||||
<path d="M143.5,88.8126685 L155.070501,17.6038544" id="Path-17" stroke="#BACAD9" stroke-width="1.16666667"/>
|
||||
<path d="M17.5,37.3333333 L127.466252,97.6449735" id="Path-18" stroke="#BACAD9" stroke-width="1.16666667"/>
|
||||
<polyline id="Path-19" stroke="#CFDAE6" stroke-width="1.16666667" points="143.902597 120.302281 174.935455 231.571342 38.5 147.510847 126.366941 110.833333"/>
|
||||
<path d="M159.833333,99.7453842 L195.416667,89.25" id="Path-20" stroke="#E0B4B7" stroke-width="1.16666667" opacity="0.6"/>
|
||||
<path d="M205.333333,82.1372105 L238.719406,36.1666667" id="Path-24" stroke="#BACAD9" stroke-width="1.16666667"/>
|
||||
<path d="M266.723424,132.231988 L207.083333,90.4166667" id="Path-25" stroke="#CFDAE6" stroke-width="1.16666667"/>
|
||||
<circle id="Oval-5" fill="#C1D1E0" cx="156.916667" cy="8.75" r="8.75"/>
|
||||
<circle id="Oval-5-Copy-3" fill="#C1D1E0" cx="39.0833333" cy="148.75" r="5.25"/>
|
||||
<circle id="Oval-5-Copy-2" fill-opacity="0.6" fill="#D1DEED" cx="8.75" cy="33.25" r="8.75"/>
|
||||
<circle id="Oval-5-Copy-4" fill-opacity="0.6" fill="#D1DEED" cx="243.833333" cy="30.3333333" r="5.83333333"/>
|
||||
<circle id="Oval-5-Copy-5" fill="#E0B4B7" cx="175.583333" cy="232.75" r="5.25"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<div xmlns="" id="divScriptsUsed" style="display: none"/><script xmlns="" id="globalVarsDetection" src="chrome-extension://cmkdbmfndkfgebldhnkbfhlneefdaaip/js/wrs_env.js"/></svg>
|
||||
|
After Width: | Height: | Size: 8.5 KiB |
6
apps/platform/src/components/basic/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
### 基础组件(目录说明)
|
||||
|
||||
| 组件名称 | 描述 | 是否全局组件 | 使用建议 |
|
||||
| --- | --- | --- | --- |
|
||||
| button | `按钮组件`基于 a-button 二次封装,主要扩展了按钮的颜色,基本使用方式与 antdv 的 a-button 保持一致 | 是 | -- |
|
||||
| check-box | `复选框`基于 a-checkbox 二次封装,基本使用方式与 antdv 的 a-checkbox 保持一致 | 否 | -- |
|
||||
1
apps/platform/src/components/basic/basic-arrow/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export { default as BasicArrow } from './index.vue';
|
||||
24
apps/platform/src/components/basic/basic-arrow/index.vue
Normal file
@@ -0,0 +1,24 @@
|
||||
<template>
|
||||
<DownOutlined class="collapse-icon" />
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { DownOutlined } from '@ant-design/icons-vue';
|
||||
|
||||
const props = defineProps({
|
||||
expand: { type: Boolean },
|
||||
});
|
||||
|
||||
/**
|
||||
* @description 展开/收起 图标旋转转数
|
||||
*/
|
||||
const turn = computed(() => `${props.expand ? 0 : 0.5}turn`);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.collapse-icon {
|
||||
transform: rotate(v-bind(turn));
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
</style>
|
||||
94
apps/platform/src/components/basic/basic-help/index.vue
Normal file
@@ -0,0 +1,94 @@
|
||||
<script lang="tsx">
|
||||
import { defineComponent, computed, unref } from 'vue';
|
||||
import { InfoCircleOutlined } from '@ant-design/icons-vue';
|
||||
import { Tooltip } from 'ant-design-vue';
|
||||
import type { CSSProperties, PropType } from 'vue';
|
||||
import { isString, isArray } from '@/utils/is';
|
||||
import { getSlot } from '@/utils/helper/tsxHelper';
|
||||
|
||||
const props = {
|
||||
/**
|
||||
* Help text max-width
|
||||
* @default: 600px
|
||||
*/
|
||||
maxWidth: { type: String, default: '600px' },
|
||||
/**
|
||||
* Whether to display the serial number
|
||||
* @default: false
|
||||
*/
|
||||
showIndex: { type: Boolean },
|
||||
/**
|
||||
* Help text font color
|
||||
* @default: #ffffff
|
||||
*/
|
||||
color: { type: String, default: '#ffffff' },
|
||||
/**
|
||||
* Help text font size
|
||||
* @default: 14px
|
||||
*/
|
||||
fontSize: { type: String, default: '14px' },
|
||||
/**
|
||||
* Help text list
|
||||
*/
|
||||
placement: { type: String, default: 'right' },
|
||||
/**
|
||||
* Help text list
|
||||
*/
|
||||
text: { type: [Array, String] as PropType<string[] | string> },
|
||||
};
|
||||
|
||||
export default defineComponent({
|
||||
name: 'BasicHelp',
|
||||
components: { Tooltip },
|
||||
props,
|
||||
setup(props, { slots }) {
|
||||
const getTooltipStyle = computed(
|
||||
(): CSSProperties => ({ color: props.color, fontSize: props.fontSize }),
|
||||
);
|
||||
|
||||
const getOverlayStyle = computed((): CSSProperties => ({ maxWidth: props.maxWidth }));
|
||||
|
||||
function renderTitle() {
|
||||
const textList = props.text;
|
||||
|
||||
if (isString(textList)) {
|
||||
return <p>{textList}</p>;
|
||||
}
|
||||
|
||||
if (isArray(textList)) {
|
||||
return textList.map((text, index) => {
|
||||
return (
|
||||
<p key={text}>
|
||||
<>
|
||||
{props.showIndex ? `${index + 1}. ` : ''}
|
||||
{text}
|
||||
</>
|
||||
</p>
|
||||
);
|
||||
});
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
return () => {
|
||||
return (
|
||||
<Tooltip
|
||||
overlayClassName="basic-help__wrap"
|
||||
title={<div style={unref(getTooltipStyle)}>{renderTitle()}</div>}
|
||||
autoAdjustOverflow={true}
|
||||
overlayStyle={unref(getOverlayStyle)}
|
||||
placement={props.placement as 'right'}
|
||||
>
|
||||
<span class="basic-help">{getSlot(slots) || <InfoCircleOutlined />}</span>
|
||||
</Tooltip>
|
||||
);
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.basic-help__wrap p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
22
apps/platform/src/components/basic/button/button.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import buttonProps from 'ant-design-vue/es/button/buttonTypes';
|
||||
import { theme } from 'ant-design-vue';
|
||||
import type { ButtonType as AButtonType } from 'ant-design-vue/es/button/buttonTypes';
|
||||
import type { ExtractPropTypes } from 'vue';
|
||||
|
||||
const { defaultSeed } = theme;
|
||||
|
||||
export declare type ButtonProps = Partial<ExtractPropTypes<typeof buttonProps>>;
|
||||
|
||||
export type ButtonType = AButtonType | 'warning' | 'success' | 'error';
|
||||
|
||||
/** 这里自定义颜色 */
|
||||
export const buttonColorPrimary = {
|
||||
success: defaultSeed.colorSuccess,
|
||||
warning: defaultSeed.colorWarning,
|
||||
error: defaultSeed.colorError,
|
||||
} as const;
|
||||
|
||||
export const aButtonTypes = ['default', 'primary', 'ghost', 'dashed', 'link', 'text'];
|
||||
|
||||
export type { AButtonType };
|
||||
export { buttonProps };
|
||||
55
apps/platform/src/components/basic/button/button.vue
Normal file
@@ -0,0 +1,55 @@
|
||||
<template>
|
||||
<ProConfigProvider :theme="btnTheme">
|
||||
<component :is="h(Button, { ...$attrs, ...props, type: buttonType }, $slots)" />
|
||||
</ProConfigProvider>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { computed, h } from 'vue';
|
||||
|
||||
import { useConfigContextInject } from 'ant-design-vue/es/config-provider/context';
|
||||
|
||||
import { Button } from 'ant-design-vue';
|
||||
|
||||
import { buttonProps, buttonColorPrimary, aButtonTypes } from './button';
|
||||
|
||||
import type { ButtonType, AButtonType } from './button';
|
||||
|
||||
const { theme: globalTheme } = useConfigContextInject();
|
||||
|
||||
defineOptions({
|
||||
name: 'AButton',
|
||||
});
|
||||
|
||||
const props = defineProps({
|
||||
...buttonProps(),
|
||||
type: {
|
||||
type: String as PropType<ButtonType>,
|
||||
},
|
||||
// 自定义按钮颜色
|
||||
color: String,
|
||||
});
|
||||
|
||||
const isCustomType = computed(() => Reflect.has(buttonColorPrimary, props.type!));
|
||||
|
||||
const buttonType = computed<AButtonType>(() => {
|
||||
if (props.type && aButtonTypes.includes(props.type)) {
|
||||
return props.type as AButtonType;
|
||||
} else if (props.color || isCustomType.value) {
|
||||
return 'primary';
|
||||
}
|
||||
return 'default';
|
||||
});
|
||||
|
||||
const btnTheme = computed(() => {
|
||||
const type = props.type!;
|
||||
if (props.color || isCustomType.value) {
|
||||
return {
|
||||
...globalTheme.value,
|
||||
token: {
|
||||
colorPrimary: props.color || buttonColorPrimary[type],
|
||||
},
|
||||
};
|
||||
}
|
||||
return globalTheme.value;
|
||||
});
|
||||
</script>
|
||||
9
apps/platform/src/components/basic/button/index.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import AButton from './button.vue';
|
||||
|
||||
export default AButton;
|
||||
|
||||
export const Button = AButton;
|
||||
|
||||
export * from './button';
|
||||
|
||||
export { AButton };
|
||||
54
apps/platform/src/components/basic/check-box/index.vue
Normal file
@@ -0,0 +1,54 @@
|
||||
<template>
|
||||
<Checkbox v-bind="getProps" v-model:checked="checkedModel" @change="handleChange">
|
||||
<slot />
|
||||
</Checkbox>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { checkboxProps } from 'ant-design-vue/es/checkbox';
|
||||
import { omit } from 'lodash-es';
|
||||
import { Checkbox } from 'ant-design-vue';
|
||||
|
||||
defineOptions({
|
||||
inheritAttrs: false,
|
||||
});
|
||||
|
||||
const props = defineProps({
|
||||
...checkboxProps(),
|
||||
trueValue: {
|
||||
type: [Number, Boolean, String],
|
||||
default: true,
|
||||
},
|
||||
falseValue: {
|
||||
type: [Number, Boolean, String],
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:checked', 'change']);
|
||||
|
||||
const getProps = computed(() => {
|
||||
return omit(props, ['onUpdate:checked', 'onChange']);
|
||||
});
|
||||
|
||||
const checkedModel = computed<boolean>({
|
||||
get() {
|
||||
return props.checked === props.trueValue;
|
||||
},
|
||||
set(val) {
|
||||
emit('update:checked', val ? props.trueValue : props.falseValue);
|
||||
},
|
||||
});
|
||||
|
||||
const handleChange = (e) => {
|
||||
const evt = {
|
||||
...e,
|
||||
target: {
|
||||
...e.target,
|
||||
checked: e.target.checked ? props.trueValue : props.falseValue,
|
||||
},
|
||||
};
|
||||
emit('change', evt);
|
||||
};
|
||||
</script>
|
||||
3
apps/platform/src/components/basic/context-menu/index.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export { createContextMenu, destroyContextMenu } from './src/createContextMenu';
|
||||
|
||||
export * from './src/typing';
|
||||
@@ -0,0 +1,136 @@
|
||||
<script lang="tsx">
|
||||
import { defineComponent, computed, ref, unref } from 'vue';
|
||||
import { Menu, Dropdown } from 'ant-design-vue';
|
||||
import type { ContextMenuItem, ItemContentProps, Axis } from './typing';
|
||||
import type { FunctionalComponent, CSSProperties, PropType } from 'vue';
|
||||
import { IconFont } from '@/components/basic/icon';
|
||||
|
||||
const props = {
|
||||
width: { type: Number, default: 156 },
|
||||
customEvent: { type: Object as PropType<Event>, default: null },
|
||||
styles: { type: Object as PropType<CSSProperties> },
|
||||
showIcon: { type: Boolean, default: true },
|
||||
axis: {
|
||||
// The position of the right mouse button click
|
||||
type: Object as PropType<Axis>,
|
||||
default() {
|
||||
return { x: 0, y: 0 };
|
||||
},
|
||||
},
|
||||
items: {
|
||||
// The most important list, if not, will not be displayed
|
||||
type: Array as PropType<ContextMenuItem[]>,
|
||||
default() {
|
||||
return [];
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const ItemContent: FunctionalComponent<ItemContentProps> = (props) => {
|
||||
const { item } = props;
|
||||
return (
|
||||
<span
|
||||
style="display: inline-block; width: 100%; "
|
||||
class="px-4"
|
||||
onClick={props.handler.bind(null, item)}
|
||||
>
|
||||
{props.showIcon && item.icon && <IconFont class="mr-2" type={item.icon} />}
|
||||
<span>{item.label}</span>
|
||||
</span>
|
||||
);
|
||||
};
|
||||
|
||||
export default defineComponent({
|
||||
name: 'ContextMenu',
|
||||
props,
|
||||
setup(props, { expose }) {
|
||||
const open = ref(true);
|
||||
|
||||
const getStyle = computed((): CSSProperties => {
|
||||
const { axis, items, styles, width } = props;
|
||||
const { x, y } = axis || { x: 0, y: 0 };
|
||||
const menuHeight = (items || []).length * 40;
|
||||
const menuWidth = width;
|
||||
const body = document.body;
|
||||
|
||||
const left = body.clientWidth < x + menuWidth ? x - menuWidth : x;
|
||||
const top = body.clientHeight < y + menuHeight ? y - menuHeight : y;
|
||||
return {
|
||||
position: 'absolute',
|
||||
width: `${width}px`,
|
||||
left: `${left + 1}px`,
|
||||
top: `${top + 1}px`,
|
||||
...styles,
|
||||
};
|
||||
});
|
||||
|
||||
const close = () => {
|
||||
open.value = false;
|
||||
};
|
||||
|
||||
function handleAction(item: ContextMenuItem, e: MouseEvent) {
|
||||
const { handler, disabled } = item;
|
||||
if (disabled) {
|
||||
return;
|
||||
}
|
||||
e?.stopPropagation();
|
||||
e?.preventDefault();
|
||||
handler?.();
|
||||
close();
|
||||
}
|
||||
|
||||
function renderMenuItem(items: ContextMenuItem[]) {
|
||||
const visibleItems = items.filter((item) => !item.hidden);
|
||||
return visibleItems.map((item) => {
|
||||
const { disabled, label, children, divider = false } = item;
|
||||
|
||||
const contentProps = {
|
||||
item,
|
||||
handler: handleAction,
|
||||
showIcon: props.showIcon,
|
||||
};
|
||||
|
||||
if (!children || children.length === 0) {
|
||||
return (
|
||||
<>
|
||||
<Menu.Item disabled={disabled} key={label}>
|
||||
<ItemContent {...contentProps} />
|
||||
</Menu.Item>
|
||||
{divider ? <Menu.Divider key={`d-${label}`} /> : null}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Menu.SubMenu key={label} disabled={disabled}>
|
||||
{{
|
||||
title: () => <ItemContent {...contentProps} />,
|
||||
default: () => renderMenuItem(children),
|
||||
}}
|
||||
</Menu.SubMenu>
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
expose({
|
||||
close,
|
||||
});
|
||||
|
||||
return () => {
|
||||
const { items } = props;
|
||||
return (
|
||||
<Dropdown open={open.value}>
|
||||
{{
|
||||
default: () => <div style={unref(getStyle)}></div>,
|
||||
overlay: () => (
|
||||
<Menu inlineIndent={12} mode="vertical">
|
||||
{renderMenuItem(items)}
|
||||
</Menu>
|
||||
),
|
||||
}}
|
||||
</Dropdown>
|
||||
);
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,80 @@
|
||||
import { createVNode, render } from 'vue';
|
||||
import contextMenuVue from './ContextMenu.vue';
|
||||
import type { CreateContextOptions, ContextMenuProps } from './typing';
|
||||
import { isClient } from '@/utils/is';
|
||||
|
||||
const menuManager: {
|
||||
domList: Element[];
|
||||
resolve: Fn;
|
||||
} = {
|
||||
domList: [],
|
||||
resolve: () => {},
|
||||
};
|
||||
|
||||
export const createContextMenu = function (options: CreateContextOptions) {
|
||||
const { event } = options || {};
|
||||
|
||||
event && event?.preventDefault();
|
||||
|
||||
if (!isClient) {
|
||||
return;
|
||||
}
|
||||
return new Promise((resolve) => {
|
||||
const body = document.body;
|
||||
|
||||
const container = document.createElement('div');
|
||||
const propsData: Partial<ContextMenuProps> = {
|
||||
getPopupContainer: () => container,
|
||||
};
|
||||
if (options.styles) {
|
||||
propsData.styles = options.styles;
|
||||
}
|
||||
|
||||
if (options.items) {
|
||||
propsData.items = options.items;
|
||||
}
|
||||
|
||||
if (options.event) {
|
||||
propsData.customEvent = event;
|
||||
propsData.axis = { x: event.clientX, y: event.clientY };
|
||||
}
|
||||
|
||||
const vm = createVNode(contextMenuVue, propsData);
|
||||
render(vm, container);
|
||||
|
||||
const handleClick = function () {
|
||||
menuManager.resolve('');
|
||||
};
|
||||
|
||||
menuManager.domList.push(container);
|
||||
|
||||
const remove = function () {
|
||||
menuManager.domList.forEach((dom: Element) => {
|
||||
try {
|
||||
dom && body.removeChild(dom);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
});
|
||||
body.removeEventListener('click', handleClick);
|
||||
body.removeEventListener('scroll', handleClick);
|
||||
};
|
||||
|
||||
menuManager.resolve = function (arg) {
|
||||
vm.component?.exposed?.close();
|
||||
remove();
|
||||
resolve(arg);
|
||||
};
|
||||
remove();
|
||||
body.appendChild(container);
|
||||
body.addEventListener('click', handleClick);
|
||||
body.addEventListener('scroll', handleClick);
|
||||
});
|
||||
};
|
||||
|
||||
export const destroyContextMenu = function () {
|
||||
if (menuManager) {
|
||||
menuManager.resolve('');
|
||||
menuManager.domList = [];
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,38 @@
|
||||
import type { DropdownProps } from 'ant-design-vue/es/dropdown';
|
||||
|
||||
export interface Axis {
|
||||
x: number;
|
||||
y: number;
|
||||
}
|
||||
|
||||
export interface ContextMenuItem {
|
||||
label: string;
|
||||
icon?: string;
|
||||
hidden?: boolean;
|
||||
disabled?: boolean;
|
||||
handler?: Fn;
|
||||
divider?: boolean;
|
||||
children?: ContextMenuItem[];
|
||||
}
|
||||
export interface CreateContextOptions {
|
||||
event: MouseEvent;
|
||||
icon?: string;
|
||||
styles?: any;
|
||||
items?: ContextMenuItem[];
|
||||
}
|
||||
|
||||
export interface ContextMenuProps extends DropdownProps {
|
||||
event?: MouseEvent;
|
||||
styles?: any;
|
||||
items: ContextMenuItem[];
|
||||
customEvent?: MouseEvent;
|
||||
axis?: Axis;
|
||||
width?: number;
|
||||
showIcon?: boolean;
|
||||
}
|
||||
|
||||
export interface ItemContentProps {
|
||||
showIcon: boolean | undefined;
|
||||
item: ContextMenuItem;
|
||||
handler: Fn;
|
||||
}
|
||||
8
apps/platform/src/components/basic/excel/index.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import impExcel from './src/ImportExcel.vue';
|
||||
import { withInstall } from '@/utils';
|
||||
export { useExportExcelModal } from './src/ExportExcelModal';
|
||||
|
||||
export const ImpExcel = withInstall(impExcel);
|
||||
// export const ExpExcelModal = withInstall(expExcelModal);
|
||||
export * from './src/typing';
|
||||
export * from './src/Export2Excel';
|
||||
59
apps/platform/src/components/basic/excel/src/Export2Excel.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
import { utils, writeFile } from 'xlsx';
|
||||
import type { WorkBook } from 'xlsx';
|
||||
import type { JsonToSheet, AoAToSheet } from './typing';
|
||||
|
||||
const DEF_FILE_NAME = 'excel-list.xlsx';
|
||||
|
||||
export function jsonToSheetXlsx<T = any>({
|
||||
data,
|
||||
header,
|
||||
filename = DEF_FILE_NAME,
|
||||
json2sheetOpts = {},
|
||||
write2excelOpts = { bookType: 'xlsx' },
|
||||
}: JsonToSheet<T>) {
|
||||
let arrData = [...data];
|
||||
if (header) {
|
||||
arrData.unshift(header);
|
||||
const filterKeys = Object.keys(header);
|
||||
arrData = arrData.map((item) => filterKeys.reduce<any>((p, k) => ((p[k] = item[k]), p), {}));
|
||||
json2sheetOpts.skipHeader = true;
|
||||
}
|
||||
|
||||
const worksheet = utils.json_to_sheet(arrData, json2sheetOpts);
|
||||
|
||||
/* add worksheet to workbook */
|
||||
const workbook: WorkBook = {
|
||||
SheetNames: [filename],
|
||||
Sheets: {
|
||||
[filename]: worksheet,
|
||||
},
|
||||
};
|
||||
/* output format determined by filename */
|
||||
writeFile(workbook, filename, write2excelOpts);
|
||||
/* at this point, out.xlsb will have been downloaded */
|
||||
}
|
||||
|
||||
export function aoaToSheetXlsx<T = any>({
|
||||
data,
|
||||
header,
|
||||
filename = DEF_FILE_NAME,
|
||||
write2excelOpts = { bookType: 'xlsx' },
|
||||
}: AoAToSheet<T>) {
|
||||
const arrData = [...data];
|
||||
if (header) {
|
||||
arrData.unshift(header);
|
||||
}
|
||||
|
||||
const worksheet = utils.aoa_to_sheet(arrData);
|
||||
|
||||
/* add worksheet to workbook */
|
||||
const workbook: WorkBook = {
|
||||
SheetNames: [filename],
|
||||
Sheets: {
|
||||
[filename]: worksheet,
|
||||
},
|
||||
};
|
||||
/* output format determined by filename */
|
||||
writeFile(workbook, filename, write2excelOpts);
|
||||
/* at this point, out.xlsb will have been downloaded */
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
import type { ExportModalResult } from './typing';
|
||||
import type { FormSchema } from '@/components/core/schema-form/';
|
||||
import { useI18n } from '@/hooks/useI18n';
|
||||
|
||||
import { useFormModal } from '@/hooks/useModal/';
|
||||
|
||||
export type OpenModalOptions = {
|
||||
onOk: (val: ExportModalResult) => any;
|
||||
};
|
||||
|
||||
const getSchemas = (t): FormSchema<ExportModalResult>[] => [
|
||||
{
|
||||
field: 'filename',
|
||||
component: 'Input',
|
||||
label: t('component.excel.fileName'),
|
||||
rules: [{ required: true }],
|
||||
},
|
||||
{
|
||||
field: 'bookType',
|
||||
component: 'Select',
|
||||
label: t('component.excel.fileType'),
|
||||
defaultValue: 'xlsx',
|
||||
rules: [{ required: true }],
|
||||
componentProps: {
|
||||
options: [
|
||||
{
|
||||
label: 'xlsx',
|
||||
value: 'xlsx',
|
||||
key: 'xlsx',
|
||||
},
|
||||
{
|
||||
label: 'html',
|
||||
value: 'html',
|
||||
key: 'html',
|
||||
},
|
||||
{
|
||||
label: 'csv',
|
||||
value: 'csv',
|
||||
key: 'csv',
|
||||
},
|
||||
{
|
||||
label: 'txt',
|
||||
value: 'txt',
|
||||
key: 'txt',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
export const useExportExcelModal = () => {
|
||||
const { t } = useI18n();
|
||||
const [showModal] = useFormModal();
|
||||
|
||||
const openModal = ({ onOk }: OpenModalOptions) => {
|
||||
showModal<ExportModalResult>({
|
||||
modalProps: {
|
||||
title: t('component.excel.exportModalTitle'),
|
||||
onFinish: async (values) => {
|
||||
const { filename, bookType } = values;
|
||||
|
||||
onOk({
|
||||
filename: `${filename.split('.').shift()}.${bookType}`,
|
||||
bookType,
|
||||
});
|
||||
},
|
||||
},
|
||||
formProps: {
|
||||
labelWidth: 100,
|
||||
schemas: getSchemas(t),
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
return {
|
||||
openModal,
|
||||
};
|
||||
};
|
||||
159
apps/platform/src/components/basic/excel/src/ImportExcel.vue
Normal file
@@ -0,0 +1,159 @@
|
||||
<template>
|
||||
<div>
|
||||
<input
|
||||
v-show="false"
|
||||
ref="inputRef"
|
||||
type="file"
|
||||
accept=".xlsx, .xls"
|
||||
@change="handleInputClick"
|
||||
/>
|
||||
<div @click="handleUpload">
|
||||
<slot />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent, ref, unref } from 'vue';
|
||||
import { read, utils } from 'xlsx';
|
||||
import type { WorkSheet, WorkBook } from 'xlsx';
|
||||
import type { ExcelData } from './typing';
|
||||
import { dateUtil } from '@/utils/dateUtil';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'ImportExcel',
|
||||
props: {
|
||||
// 日期时间格式。如果不提供或者提供空值,将返回原始Date对象
|
||||
dateFormat: {
|
||||
type: String,
|
||||
},
|
||||
// 时区调整。实验性功能,仅为了解决读取日期时间值有偏差的问题。目前仅提供了+08:00时区的偏差修正值
|
||||
// https://github.com/SheetJS/sheetjs/issues/1470#issuecomment-501108554
|
||||
timeZone: {
|
||||
type: Number,
|
||||
default: 8,
|
||||
},
|
||||
},
|
||||
emits: ['success', 'error'],
|
||||
setup(props, { emit }) {
|
||||
const inputRef = ref<HTMLInputElement | null>(null);
|
||||
const loadingRef = ref<Boolean>(false);
|
||||
|
||||
/**
|
||||
* @description: 第一行作为头部
|
||||
*/
|
||||
function getHeaderRow(sheet: WorkSheet) {
|
||||
if (!sheet || !sheet['!ref']) return [];
|
||||
const headers: string[] = [];
|
||||
// A3:B7=>{s:{c:0, r:2}, e:{c:1, r:6}}
|
||||
const range = utils.decode_range(sheet['!ref']);
|
||||
|
||||
const R = range.s.r;
|
||||
/* start in the first row */
|
||||
for (let C = range.s.c; C <= range.e.c; ++C) {
|
||||
/* walk every column in the range */
|
||||
const cell = sheet[utils.encode_cell({ c: C, r: R })];
|
||||
/* find the cell in the first row */
|
||||
let hdr = `UNKNOWN ${C}`; // <-- replace with your desired default
|
||||
if (cell && cell.t) hdr = utils.format_cell(cell);
|
||||
headers.push(hdr);
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description: 获得excel数据
|
||||
*/
|
||||
function getExcelData(workbook: WorkBook) {
|
||||
const excelData: ExcelData[] = [];
|
||||
const { dateFormat, timeZone } = props;
|
||||
for (const sheetName of workbook.SheetNames) {
|
||||
const worksheet = workbook.Sheets[sheetName];
|
||||
const header: string[] = getHeaderRow(worksheet);
|
||||
let results = utils.sheet_to_json(worksheet, {
|
||||
raw: true,
|
||||
dateNF: dateFormat, //Not worked
|
||||
}) as object[];
|
||||
results = results.map((row: object) => {
|
||||
for (const field in row) {
|
||||
if (row[field] instanceof Date) {
|
||||
if (timeZone === 8) {
|
||||
row[field].setSeconds(row[field].getSeconds() + 43);
|
||||
}
|
||||
if (dateFormat) {
|
||||
row[field] = dateUtil(row[field]).format(dateFormat);
|
||||
}
|
||||
}
|
||||
}
|
||||
return row;
|
||||
});
|
||||
|
||||
excelData.push({
|
||||
header,
|
||||
results,
|
||||
meta: {
|
||||
sheetName,
|
||||
},
|
||||
});
|
||||
}
|
||||
return excelData;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description: 读取excel数据
|
||||
*/
|
||||
function readerData(rawFile: File) {
|
||||
loadingRef.value = true;
|
||||
const { promise, resolve, reject } = Promise.withResolvers();
|
||||
const reader = new FileReader();
|
||||
|
||||
reader.onload = async (e) => {
|
||||
try {
|
||||
const data = e.target && e.target.result;
|
||||
const workbook = read(data, { type: 'array', cellDates: true });
|
||||
// console.log(workbook);
|
||||
/* DO SOMETHING WITH workbook HERE */
|
||||
const excelData = getExcelData(workbook);
|
||||
emit('success', excelData);
|
||||
resolve('');
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
emit('error');
|
||||
} finally {
|
||||
loadingRef.value = false;
|
||||
}
|
||||
};
|
||||
reader.readAsArrayBuffer(rawFile);
|
||||
return promise;
|
||||
}
|
||||
|
||||
async function upload(rawFile: File) {
|
||||
const inputRefDom = unref(inputRef);
|
||||
if (inputRefDom) {
|
||||
// fix can't select the same excel
|
||||
inputRefDom.value = '';
|
||||
}
|
||||
await readerData(rawFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description: 触发选择文件管理器
|
||||
*/
|
||||
function handleInputClick(e: Event) {
|
||||
const files = e && (e.target as HTMLInputElement).files;
|
||||
const rawFile = files && files[0]; // only setting files[0]
|
||||
if (!rawFile) return;
|
||||
upload(rawFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description: 点击上传按钮
|
||||
*/
|
||||
function handleUpload() {
|
||||
const inputRefDom = unref(inputRef);
|
||||
inputRefDom && inputRefDom.click();
|
||||
}
|
||||
|
||||
return { handleUpload, handleInputClick, inputRef };
|
||||
},
|
||||
});
|
||||
</script>
|
||||