Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
437f89193d |
@@ -1,21 +1,13 @@
|
||||
# 环境变量 (命名必须以 VITE_ 开头)
|
||||
|
||||
# 接口前缀
|
||||
VITE_API_PREFIX = '/api'
|
||||
|
||||
# 接口地址
|
||||
VITE_API_BASE_URL = 'http://localhost:8000'
|
||||
|
||||
# 接口地址 (WebSocket)
|
||||
VITE_API_WS_URL = 'ws://localhost:8000'
|
||||
|
||||
# 地址前缀
|
||||
VITE_BASE = '/'
|
||||
|
||||
# 是否开启开发者工具
|
||||
VITE_OPEN_DEVTOOLS = false
|
||||
|
||||
# 是否开启KKFileView
|
||||
FILE_OPEN_PREVIEW = true
|
||||
|
||||
# KKFileView服务器地址
|
||||
FILE_VIEW_SERVER_URL = 'http://192.168.122.209:8012'
|
||||
VITE_OPEN_DEVTOOLS = true
|
||||
|
||||
@@ -5,13 +5,6 @@ VITE_BUILD_MOCK = false
|
||||
|
||||
# 接口地址
|
||||
VITE_API_BASE_URL = 'https://api.continew.top'
|
||||
VITE_API_WS_URL = 'wss://api.continew.top'
|
||||
|
||||
# 地址前缀
|
||||
VITE_BASE = '/'
|
||||
|
||||
# 是否开启KKFileView
|
||||
FILE_OPEN_PREVIEW = false
|
||||
|
||||
# KKFileView服务器地址
|
||||
FILE_VIEW_SERVER_URL = 'http://localhost:8012'
|
||||
VITE_BASE = '/'
|
||||
@@ -14,9 +14,3 @@ VITE_BASE = '/test'
|
||||
|
||||
# 是否开启开发者工具
|
||||
VITE_OPEN_DEVTOOLS = true
|
||||
|
||||
# 是否开启KKFileView
|
||||
FILE_OPEN_PREVIEW = false
|
||||
|
||||
# KKFileView服务器地址
|
||||
FILE_VIEW_SERVER_URL = 'http://localhost:8012'
|
||||
2
.eslintignore
Normal file
@@ -0,0 +1,2 @@
|
||||
dist
|
||||
node_modules
|
||||
62
.eslintrc.cjs
Normal file
@@ -0,0 +1,62 @@
|
||||
/* eslint-env node */
|
||||
require('@rushstack/eslint-patch/modern-module-resolution')
|
||||
|
||||
// @see https://eslint.bootcss.com/docs/rules/
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
browser: true,
|
||||
es2021: true,
|
||||
node: true,
|
||||
jest: true
|
||||
},
|
||||
/* 指定如何解析语法 */
|
||||
parser: 'vue-eslint-parser',
|
||||
/** 优先级低于 parse 的语法解析配置 */
|
||||
parserOptions: {
|
||||
ecmaVersion: 'latest',
|
||||
sourceType: 'module',
|
||||
parser: '@typescript-eslint/parser',
|
||||
jsxPragma: 'React',
|
||||
ecmaFeatures: {
|
||||
jsx: true
|
||||
}
|
||||
},
|
||||
/* 继承已有的规则(全部规则默认是关闭的, 这个配置项开启推荐规则, 推荐规则参照文档) */
|
||||
extends: [
|
||||
'eslint:recommended', // 比如: 函数不能重名、对象不能出现重复key
|
||||
'plugin:vue/vue3-essential', // vue3语法规则
|
||||
'@vue/eslint-config-typescript/recommended', // ts语法规则
|
||||
'@vue/eslint-config-prettier'
|
||||
],
|
||||
plugins: ['vue', '@typescript-eslint'],
|
||||
/*
|
||||
* "off" 或 0 ==> 关闭规则
|
||||
* "warn" 或 1 ==> 打开的规则作为警告(不影响代码执行)
|
||||
* "error" 或 2 ==> 规则作为一个错误(代码不能执行,界面报错)
|
||||
*/
|
||||
rules: {
|
||||
// eslint(https://eslint.bootcss.com/docs/rules/)
|
||||
'no-var': 'error', // 要求使用 let 或 const 而不是 var
|
||||
'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行
|
||||
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
||||
'no-unexpected-multiline': 'error', // 禁止空余的多行
|
||||
'no-useless-escape': 'off', // 禁止不必要的转义字符
|
||||
|
||||
// typeScript (https://typescript-eslint.io/rules)
|
||||
'@typescript-eslint/no-unused-vars': 'error', // 禁止定义未使用的变量
|
||||
'@typescript-eslint/prefer-ts-expect-error': 'error', // 禁止使用 @ts-ignore
|
||||
'@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 类型
|
||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||
'@typescript-eslint/no-namespace': 'off', // 禁止使用自定义 TypeScript 模块和命名空间
|
||||
'@typescript-eslint/semi': 'off',
|
||||
|
||||
// eslint-plugin-vue (https://eslint.vuejs.org/rules/)
|
||||
'vue/multi-word-component-names': 'off', // 要求组件名称始终为 “-” 链接的单词
|
||||
'vue/script-setup-uses-vars': 'error', // 防止<script setup>使用的变量<template>被标记为未使用
|
||||
'vue/no-mutating-props': 'off', // 不允许组件 prop 的改变
|
||||
'vue/no-reserved-component-names': 'off', // 不允许在组件定义中使用保留名称
|
||||
'vue/attribute-hyphenation': 'off' // 对模板中的自定义组件强制执行属性命名样式
|
||||
}
|
||||
}
|
||||
46
.gitee/ISSUE_TEMPLATE.zh-CN.md
Normal file
@@ -0,0 +1,46 @@
|
||||
<!--
|
||||
感谢您使用 ContiNew Admin!请您花些时间填写这份 Issue 调查,非常感谢您的反馈!
|
||||
-->
|
||||
|
||||
<!-- 在 [] 中输入 x 来勾选) -->
|
||||
|
||||
## Issue 类型
|
||||
|
||||
- [ ] 缺陷报告(Bug)
|
||||
- [ ] 需求建议(Feature)
|
||||
|
||||
## Issue 描述
|
||||
|
||||
<!-- 清楚而简洁地描述您遇到的问题。例如:在使用 xxx 功能时发现 xxx 问题。另外,非常欢迎您对此 Issue 提交 PR。 -->
|
||||
|
||||
## 复现步骤(如果是提交 Feature Issue,请删除本项)
|
||||
|
||||
<!-- 条理清晰的步骤或演示视频可以帮助快速定位问题。例如:1、xxx; 2、xxx; -->
|
||||
|
||||
## 预期结果(如果是提交 Feature Issue,请删除本项)
|
||||
|
||||
<!-- 清楚而简洁地描述您期望的结果。 -->
|
||||
|
||||
## 环境信息(如果是提交 Feature Issue,请删除本项)
|
||||
|
||||
<!-- 描述清楚您所使用的相关环境,例如:Node 版本:xxxx;框架版本:v1.0.0;其他可能与该 issue 相关的依赖版本。 -->
|
||||
|
||||
## 解决方案(如果是提交 Bug Issue,请删除本项)
|
||||
|
||||
<!-- 清楚而简洁地描述您想要的解决方案。 -->
|
||||
|
||||
## 替代方案(如果是提交 Bug Issue,请删除本项)
|
||||
|
||||
<!-- 清楚而简洁地描述您考虑过的任何替代解决方案或功能。 -->
|
||||
|
||||
## 额外补充
|
||||
|
||||
<!-- Bug:添加您的完整报错信息或屏幕截图,以及一切能帮助定位问题的信息。 -->
|
||||
<!-- Feature:添加您在其他框架或场景遇见的效果截图或链接,以及一切能帮助理解 Feature 的信息。 -->
|
||||
|
||||
## 提交前确认
|
||||
|
||||
<!-- 在提交 issue 之前,请确保执行过以下操作。 -->
|
||||
|
||||
- [ ] 阅读[文档](https://continew.top/admin/other/faq.html)
|
||||
- [ ] 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)
|
||||
53
.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
Normal file
@@ -0,0 +1,53 @@
|
||||
<!--
|
||||
非常感谢您的 PR!在提交之前,请务必确保您 PR 的代码经过了完整测试,并且通过了代码规范检查。
|
||||
-->
|
||||
|
||||
<!-- 在 [] 中输入 x 来勾选) -->
|
||||
|
||||
## PR 类型
|
||||
|
||||
<!-- 您的 PR 引入了哪种类型的变更? -->
|
||||
<!-- 只支持选择一种类型,如果有多种类型,可以在更新日志中增加 “类型” 列。 -->
|
||||
|
||||
- [ ] 新 feature
|
||||
- [ ] Bug 修复
|
||||
- [ ] 功能增强
|
||||
- [ ] 文档变更
|
||||
- [ ] 代码样式变更
|
||||
- [ ] 重构
|
||||
- [ ] 性能改进
|
||||
- [ ] 单元测试
|
||||
- [ ] CI/CD
|
||||
- [ ] 其他
|
||||
|
||||
## PR 目的
|
||||
|
||||
<!-- 描述一下您的 PR 解决了什么问题。如果可以,请链接到相关 issues。 -->
|
||||
|
||||
## 解决方案
|
||||
|
||||
<!-- 详细描述您是如何解决的问题 -->
|
||||
|
||||
## PR 测试
|
||||
|
||||
<!-- 如果可以,请为您的 PR 添加或更新单元测试。 -->
|
||||
<!-- 请描述一下您是如何测试 PR 的。例如:创建/更新单元测试或添加相关的截图。 -->
|
||||
|
||||
## Changelog
|
||||
|
||||
| 模块 | Changelog | Related issues |
|
||||
|-----|-----------| -------------- |
|
||||
| | | |
|
||||
|
||||
<!-- 如果有多种类型的变更,可以在变更日志表中增加 “类型” 列,该列的值与上方 “PR 类型” 相同。 -->
|
||||
<!-- Related issues 格式为 fixes #<issue号>,或者 resolves #<issue号>。 -->
|
||||
|
||||
## 其他信息
|
||||
|
||||
<!-- 请描述一下还有哪些注意事项。例如:如果引入了一个不向下兼容的变更,请描述其影响。 -->
|
||||
|
||||
## 提交前确认
|
||||
|
||||
- [ ] PR 代码经过了完整测试,并且通过了代码规范检查
|
||||
- [ ] 已经完整填写 Changelog,并链接到了相关 issues
|
||||
- [ ] PR 代码将要提交到 dev 分支
|
||||
10
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,7 +1,6 @@
|
||||
name: "\U0001F41E Bug 报告"
|
||||
description: Create a report to help us improve
|
||||
title: "[Bug] "
|
||||
labels: ["bug"]
|
||||
labels: ['bug: pending triage']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
@@ -35,11 +34,8 @@ body:
|
||||
id: environment-info
|
||||
attributes:
|
||||
label: 环境信息
|
||||
description: |
|
||||
examples:
|
||||
- **ContiNew Admin version(s)**: v3.0.1
|
||||
value: "ContiNew Admin version(s):"
|
||||
render: markdown
|
||||
description: 描述清楚您所使用的相关环境,例如:Node 版本:xxxx;框架版本:v1.0.0;其他可能与该 issue 相关的依赖版本。
|
||||
placeholder: Node 版本, 框架版本等
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
|
||||
6
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@@ -1,7 +1,5 @@
|
||||
name: "\U0001F680 新 Feature 建议"
|
||||
description: Suggest an idea for this project
|
||||
title: "[Feature] "
|
||||
labels: ["feature"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
@@ -41,6 +39,4 @@ body:
|
||||
- label: 阅读[文档](https://continew.top/admin/intro/require.html)
|
||||
required: true
|
||||
- label: 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue)
|
||||
required: true
|
||||
- label: 您是否愿意为您提出的 Feature 提交 PR?
|
||||
required: false
|
||||
required: true
|
||||
9
.github/workflows/deploy.yml
vendored
@@ -34,15 +34,14 @@ jobs:
|
||||
run: pnpm build
|
||||
# 6、拷贝到服务器
|
||||
- name: Copy
|
||||
uses: appleboy/scp-action@v0.1.7
|
||||
uses: garygrossgarten/github-action-scp@release
|
||||
with:
|
||||
host: ${{ secrets.SERVER_HOST }}
|
||||
port: ${{ secrets.SERVER_PORT }}
|
||||
username: ${{ secrets.SERVER_USERNAME }}
|
||||
password: ${{ secrets.SERVER_PASSWORD }}
|
||||
source: ./dist/*
|
||||
target: /docker/continew-admin/tmp
|
||||
strip_components: 1
|
||||
local: ./dist
|
||||
remote: /docker/continew-admin/tmp
|
||||
# 7、重启 Nginx
|
||||
- name: Restart
|
||||
uses: appleboy/ssh-action@master
|
||||
@@ -54,4 +53,4 @@ jobs:
|
||||
script: |
|
||||
rm -rf /docker/continew-admin/html/*
|
||||
mv /docker/continew-admin/tmp/* /docker/continew-admin/html
|
||||
docker restart nginx
|
||||
docker restart nginx
|
||||
BIN
.idea/icon.png
generated
Normal file
|
After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 211 KiB After Width: | Height: | Size: 211 KiB |
|
Before Width: | Height: | Size: 116 KiB |
BIN
.image/screenshot/010账号管理.png
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
.image/screenshot/011安全设置.png
Normal file
|
After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 57 KiB |
BIN
.image/screenshot/012安全设置-修改邮箱.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 64 KiB |
7
.prettierignore
Normal file
@@ -0,0 +1,7 @@
|
||||
/dist/*
|
||||
.local
|
||||
/node_modules/**
|
||||
|
||||
**/*.sh
|
||||
|
||||
/public/*
|
||||
14
.prettierrc.js
Normal file
@@ -0,0 +1,14 @@
|
||||
module.exports = {
|
||||
printWidth: 120, // 单行字符数, 默认80
|
||||
tabWidth: 2, // 缩进字节数, 默认2
|
||||
semi: false, // 句尾使用分号, 默认true
|
||||
singleQuote: true, // 使用单引号代替双引号, 默认false
|
||||
trailingComma: 'none', // 多行时尽可能打印尾随逗号, 默认'none', 可选: ['none', 'es5', 'all']
|
||||
endOfLine: 'auto' // 结束行形式, 默认'auto', 结尾是 \n \r \n\r auto
|
||||
|
||||
// arrowParens: 'avoid', // 在单个箭头函数参数周围加上括号, 默认'avoid', 可选: ['avoid', 'always'] avoid: 尽可能 always: 始终
|
||||
// bracketSpacing: true, // 在对象文字中打印括号之间的空格, 默认true, 示例: true -- { name: 'abc' } false -- {name:'abc'}
|
||||
// useTabs: false, // 使用制表符 tab 缩进行而不是空格, 默认false
|
||||
// bracketSpacing: true, //在对象前后添加空格-obj: { foo: bar }
|
||||
// jsxSingleQuote: false, // 在JSX中使用单引号代替双引号, 默认false
|
||||
}
|
||||
54
.vscode/settings.json
vendored
@@ -1,47 +1,13 @@
|
||||
{
|
||||
// Enable the ESlint flat config support
|
||||
// (remove this if your ESLint extension above v3.0.5)
|
||||
"eslint.experimental.useFlatConfig": true,
|
||||
|
||||
// Disable the default formatter, use eslint instead
|
||||
"prettier.enable": false,
|
||||
"editor.formatOnSave": false,
|
||||
|
||||
// Auto fix
|
||||
// 配置该项, 新建文件时默认就是space: 2
|
||||
"editor.tabSize": 2,
|
||||
// 保存的时候自动格式化
|
||||
"editor.formatOnSave": true,
|
||||
// 默认格式化工具选择prettier
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
// 开启自动修复
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": "explicit",
|
||||
"source.organizeImports": "never"
|
||||
},
|
||||
|
||||
// Silent the stylistic rules in you IDE, but still auto fix them
|
||||
"eslint.rules.customizations": [
|
||||
{ "rule": "style/*", "severity": "off" },
|
||||
{ "rule": "format/*", "severity": "off" },
|
||||
{ "rule": "*-indent", "severity": "off" },
|
||||
{ "rule": "*-spacing", "severity": "off" },
|
||||
{ "rule": "*-spaces", "severity": "off" },
|
||||
{ "rule": "*-order", "severity": "off" },
|
||||
{ "rule": "*-dangle", "severity": "off" },
|
||||
{ "rule": "*-newline", "severity": "off" },
|
||||
{ "rule": "*quotes", "severity": "off" },
|
||||
{ "rule": "*semi", "severity": "off" }
|
||||
],
|
||||
|
||||
// Enable eslint for all supported languages
|
||||
"eslint.validate": [
|
||||
"javascript",
|
||||
"javascriptreact",
|
||||
"typescript",
|
||||
"typescriptreact",
|
||||
"vue",
|
||||
"html",
|
||||
"markdown",
|
||||
"json",
|
||||
"jsonc",
|
||||
"yaml",
|
||||
"toml",
|
||||
"gql",
|
||||
"graphql",
|
||||
"astro"
|
||||
]
|
||||
"source.fixAll": "never",
|
||||
"source.fixAll.eslint": "explicit"
|
||||
}
|
||||
}
|
||||
|
||||
153
CHANGELOG.md
@@ -1,149 +1,30 @@
|
||||
## [v3.3.0](https://github.com/continew-org/continew-admin-ui/compare/v3.2.0...v3.3.0) (2024-09-09)
|
||||
## [v3.0.1](https://github.com/Charles7c/continew-admin-ui/compare/v3.0.0...v3.0.1) (2024-05-03)
|
||||
|
||||
### ✨ 新特性
|
||||
|
||||
* GiForm 新增年\月\季度\周\范围、颜色选择器支持 ([ad53e1d](https://github.com/continew-org/continew-admin-ui/commit/ad53e1d419d8012fbeedc3f26943d3b36b133ee3))
|
||||
* GiTag 组件功能扩展,提供 color 属性,用于自定义颜色 ([050a171](https://github.com/continew-org/continew-admin-ui/commit/050a171e91ae8f62aeb17d108ccb4a3c7c49eb4b))
|
||||
* 代码生成字段配置列表支持拖拽排序 ([fcbc3eb](https://github.com/continew-org/continew-admin-ui/commit/fcbc3ebbff5cdbb555e594d73c94dce643c8e8ec))
|
||||
* 代码生成字段配置支持选择关联字典 ([6574181](https://github.com/continew-org/continew-admin-ui/commit/65741811103a848a38f0f637df02fb677b82f205))
|
||||
* 代码生成字段配置支持自定义名称、类型 ([b29960f](https://github.com/continew-org/continew-admin-ui/commit/b29960f3f534b3a83f62ec7c64f6302a1daf52bf))
|
||||
* 修改角色功能权限、数据权限支持衔接新增角色时的父子联动 ([5cfb0d7](https://github.com/continew-org/continew-admin-ui/commit/5cfb0d795a000393514109fdf057ce0c654dc0a9)) ([0f35d29](https://github.com/continew-org/continew-admin-ui/commit/0f35d292addd7498bcdeca432b3ae0591b613c30))
|
||||
* 新增表格全屏、尺寸工具 ([b8a84a3](https://github.com/Charles7c/continew-admin-ui/commit/b8a84a3a0890d4f6d0e39ecbe50c4f645bd0f106))
|
||||
* 新增验证码超时显示效果,超时后显示已过期请刷新 (GitHub#14) ([f99c8f1](https://github.com/Charles7c/continew-admin-ui/commit/f99c8f1b5a521f987b2822352f976fb0b1dc93b3))
|
||||
* 文件管理增加资源统计,统计总存储量、各类型文件存储占用 (GitHub#15) ([c70d1ad](https://github.com/Charles7c/continew-admin-ui/commit/c70d1adbf922d28853bf4e6cf8cc4e14ad5b0ac7))
|
||||
|
||||
### 💎 功能优化
|
||||
|
||||
- 适配后端接口响应 code 数据类型变动 ([f321030](https://github.com/continew-org/continew-admin-ui/commit/f321030c4c8b4f4493388fc73152a56f31bb2a6d))
|
||||
- 使用分步表单重构新增角色交互 (Gitee#18) ([fe25e1c](https://github.com/continew-org/continew-admin-ui/commit/fe25e1c698078a7ba609b24c730d00029429014c)) ([80de5b0](https://github.com/continew-org/continew-admin-ui/commit/80de5b0e5e13a5ad1a1cf816bbbc223a9d392e74))
|
||||
- 优化 apis 导入,随着模块和接口的增加,方便维护 ([8a80db0](https://github.com/continew-org/continew-admin-ui/commit/8a80db0f92a2c271594c8027559591f40c27f39b))
|
||||
- 优化 GiForm 组件代码 ([948158f](https://github.com/continew-org/continew-admin-ui/commit/948158f1fa65fe92bc3040fb0b70550a6ecefa0f))
|
||||
- 优化部分代码 ([cb03111](https://github.com/continew-org/continew-admin-ui/commit/cb03111c22164365f2e5198d5162bff172492ffe))
|
||||
- 消除搜索框歧义,明确可输入项 ([ab7ef15](https://github.com/continew-org/continew-admin-ui/commit/ab7ef153abe510aa1d32b27de2d630426d369d94))
|
||||
|
||||
### 🐛 问题修复
|
||||
|
||||
- 修复 Mix 布局下面包屑显示不全的问题 ([917cd43](https://github.com/continew-org/continew-admin-ui/commit/917cd43a0866a90b81b5af0d11ecc1c457b01f6b))
|
||||
- 修复用户管理,字典管理上一下二布局影响table表格溢出不显示问题 ([23ca50c](https://github.com/continew-org/continew-admin-ui/commit/23ca50c99dad206a97058006b071d1e921fca225))
|
||||
- 修复切换 tab 页签后参数丢失的问题 ([13181bb](https://github.com/continew-org/continew-admin-ui/commit/13181bbb8980eab8c1acc2da01d6027818e05c82))
|
||||
- 修复侧边栏宽度塌陷错误 ([1b01ced](https://github.com/continew-org/continew-admin-ui/commit/1b01cedae9f30e69fa7393e89223d382ca01a306))
|
||||
- 修复修改密码后不弹出跳转提示的问题 ([3f41306](https://github.com/continew-org/continew-admin-ui/commit/3f4130615498b2aa863f75577597b9a6500a192b))
|
||||
- 修复用户管理列设置未能正确禁用列的问题 ([eec9610](https://github.com/continew-org/continew-admin-ui/commit/eec9610e7004bc18dbc96dcf401d8d47ef275ce5))
|
||||
|
||||
## [v3.2.0](https://github.com/continew-org/continew-admin-ui/compare/v3.1.0...v3.2.0) (2024-08-05)
|
||||
|
||||
### ✨ 新特性
|
||||
|
||||
* 新增用户批量导入功能 (GitHub#23) ([f72b4b8](https://github.com/continew-org/continew-admin-ui/commit/f72b4b8d563acd6d2829018be0d079a835911f18))
|
||||
* 新增任务调度模块 SnailJob(灵活,可靠和快速的分布式任务重试和分布式任务调度平台) (Gitee#13) ([e8c1d4b](https://github.com/continew-org/continew-admin-ui/commit/e8c1d4b69b10a53f4adfaf8a2fd4b8280de965c7)) ([d7fc693](https://github.com/continew-org/continew-admin-ui/commit/d7fc693650259d8ad50aaf69504b991343f4694b)) ([edadea9](https://github.com/continew-org/continew-admin-ui/commit/edadea91edc74a7f95b67e7401aa7efb439f6ffd)) ([0a596f3](https://github.com/continew-org/continew-admin-ui/commit/0a596f3fdccc9fcecdb3d550889cb006450b30a3)) ([ff405d1](https://github.com/continew-org/continew-admin-ui/commit/ff405d12ab441f64c29b986fccb91caf727a5811))
|
||||
* 系统配置-基础配置 logo 及 favicon 改为 base64 存储 (Gitee#16) ([881c1ee](https://github.com/continew-org/continew-admin-ui/commit/881c1ee1e41805d5728648b1a72e50480199216b))
|
||||
* 新增支持 KKFileView 文件预览功能,需要自行部署文件预览服务器 (Gitee#17) ([99fa570](https://github.com/continew-org/continew-admin-ui/commit/99fa5709ee03a6f368c8297a7306c02872adfcb2))
|
||||
* 新增单页面通知公告编辑与查看 ([90693cb](https://github.com/continew-org/continew-admin-ui/commit/90693cb25d061af9d15b4579cf82db80a38cfc40))
|
||||
|
||||
### 💎 功能优化
|
||||
|
||||
- 优化部分代码格式 ([ed085c9](https://github.com/continew-org/continew-admin-ui/commit/ed085c92bdbf61bae6334ceaee4a3b7e5c605065))
|
||||
- 优化部分命名 ([805ae65](https://github.com/continew-org/continew-admin-ui/commit/805ae65556e7969cd0a1ac0ddee24b9a2c0be0ff))
|
||||
- 移除滚动条样式 ([b154375](https://github.com/continew-org/continew-admin-ui/commit/b15437537b0b8948e6ede22830852cd3eb778e84))
|
||||
- 回退用户管理部门树组件(此树查询不应该校验功能权限) ([ee6a6e4](https://github.com/continew-org/continew-admin-ui/commit/ee6a6e437d8f0806137ab49252c8d6f34337d3cd))
|
||||
- 优化子路由设置 ([f54caed](https://github.com/continew-org/continew-admin-ui/commit/f54caed4da38dc329c52e3e07419fca31f56bee7))
|
||||
- 路由切换时检测前端版本更新(原为定时器检测) ([5fdfada](https://github.com/continew-org/continew-admin-ui/commit/5fdfada11d6813ae2728797e0c5ef81387c39c6d))
|
||||
|
||||
### 🐛 问题修复
|
||||
|
||||
- 修复部分路由错误 ([92e773e](https://github.com/continew-org/continew-admin-ui/commit/92e773e621657946aab3a9149208139d98cac996))
|
||||
- 修复通知公告重叠问题 ([3364cb1](https://github.com/continew-org/continew-admin-ui/commit/3364cb185855541246a93f8663efe197597df170))
|
||||
- 解决代码生成页面丢失目录层级问题 (Gitee#12) ([fe08683](https://github.com/continew-org/continew-admin-ui/commit/fe086830dd6a50a0bbf7d1d59563b85a3bfa401c))
|
||||
- 修复表格固定操作列滚动时的错位样式问题 (Gitee#14) ([ce297c0](https://github.com/continew-org/continew-admin-ui/commit/ce297c0904f00ef6f93a9772b149f817a91a3f2a))
|
||||
- 修复文件管理没有文件时控制台报错 ([bad6e30](https://github.com/continew-org/continew-admin-ui/commit/bad6e30e4133507cd6e44de9f525c25d3ebc1adb))
|
||||
|
||||
## [v3.1.0](https://github.com/continew-org/continew-admin-ui/compare/v3.0.1...v3.1.0) (2024-06-16)
|
||||
|
||||
### ✨ 新特性
|
||||
|
||||
* 系统配置新增安全设置功能 ([395a564](https://github.com/continew-org/continew-admin-ui/commit/395a5642afbe3bac8b6b3f161949264a874033ba))
|
||||
* useTable 支持 “无分页” 列表 ([1421412](https://github.com/continew-org/continew-admin-ui/commit/1421412d678c926868b06ae8adeba292f390d3b1))
|
||||
* 图片文件支持缩略图 (GitHub#17) ([c82dc90](https://github.com/continew-org/continew-admin-ui/commit/c82dc9083bf7dbb9cccdd7c4daff6fe743eb9a0c))
|
||||
* 在线用户增加最后活跃时间显示 ([fff4de5](https://github.com/continew-org/continew-admin-ui/commit/fff4de56f30d3e3f777bd45b2f77be61bba3a555)) ([4eef0db](https://github.com/continew-org/continew-admin-ui/commit/4eef0db9f93cb73e10113c8f69ad547f502db621))
|
||||
* 新增行为验证码,行为验证码重新上线 (Gitee#7) ([778b3c6](https://github.com/continew-org/continew-admin-ui/commit/778b3c677fee14071d49355980936b52d16a7313))
|
||||
* 新增消息中心 ([fdd4b9a](https://github.com/continew-org/continew-admin-ui/commit/fdd4b9a4dfcb600e8455c5c402fc6f818b6f1507))
|
||||
* 新增 WebSocket 消息通知 (GitHub#20) ([adc6f64](https://github.com/continew-org/continew-admin-ui/commit/adc6f643b3ba481313b3f23e876eb4836d8753b4)) ([56b1fdd](https://github.com/continew-org/continew-admin-ui/commit/56b1fdd75521b08334b25e2d03f7cbcfe2014360)) ([c104ba5](https://github.com/continew-org/continew-admin-ui/commit/c104ba5445f1c990b08ec5fd3a8cf1d783d65c76))
|
||||
* 新增邮件配置 (Gitee#8) ([1ebfd11](https://github.com/continew-org/continew-admin-ui/commit/1ebfd115eb4f488a7a9464415ce061f9ad36eca0)) ([45cbabf](https://github.com/continew-org/continew-admin-ui/commit/45cbabf54503210305f7e74382fa7c4d702c359c)) ([66f89b4](https://github.com/continew-org/continew-admin-ui/commit/66f89b44d897b7e6874b9882e8708cadf5ab60aa)) ([6e520a3](https://github.com/continew-org/continew-admin-ui/commit/6e520a30720c418b7484f37c1736f189613e83ce))
|
||||
* 文件管理增加复制文件 URL 按钮 ([5c6d311](https://github.com/continew-org/continew-admin-ui/commit/5c6d3119eb4aab0f679aaeadcead7f96f6f1ea22))
|
||||
* 新增版权条显示配置 ([0f3d927](https://gitee.com/continew/continew-admin-ui/commit/0f3d927f9894e296e5dde83feb1738206c44b5b1)) ([d7e29e2](https://gitee.com/continew/continew-admin-ui/commit/d7e29e238ee31301807275be1147824295995650))
|
||||
* 新增密码过期修改页面逻辑 ([921d9c6](https://github.com/continew-org/continew-admin-ui/commit/921d9c63e955711473e1c911f59da4711cdc1197))
|
||||
* 新增前端简略版本更新提示 ([03d05e1](https://github.com/continew-org/continew-admin-ui/commit/03d05e1821a0360afa724d86ce34a51aedb9c07e))
|
||||
|
||||
### 💎 功能优化
|
||||
|
||||
- 路由多级缓存调整为扁平化方案 ([5f3dd93](https://github.com/continew-org/continew-admin-ui/commit/5f3dd93376ed62c803d6e26965f43812c86abee8))
|
||||
- 优化 ESLint 配置并更正问题代码(eslint src --fix) ([5d9fedc](https://github.com/continew-org/continew-admin-ui/commit/5d9fedc35406e00d88d8921ffe04b99a7c49cb8e))
|
||||
- 代码生成预览调整为以文件树结构形式显示 (Gitee#5) ([c9198b3](https://github.com/continew-org/continew-admin-ui/commit/c9198b315c25cb3e8fd7f769b543e98e131f878c))
|
||||
- 优化公告和字典项响应式窗口效果 ([4c2f36f](https://github.com/continew-org/continew-admin-ui/commit/4c2f36fe6b5254a613cabd686501e891cd8c7d1c))
|
||||
- 优化个人中心部分代码 ([eb11cae](https://github.com/continew-org/continew-admin-ui/commit/eb11cae635ff4a0661603509cec4e85a462f5a63))
|
||||
- 更换 ESLint 配置为 @antfu/eslint-config ([bfc8e42](https://github.com/continew-org/continew-admin-ui/commit/bfc8e42bad6777243fdca9bf37b0d95a92c75159))
|
||||
- 代码生成预览样式调整 (Gitee#6) ([fe656af](https://github.com/continew-org/continew-admin-ui/commit/fe656af1aa1afbc290cf6a6121347106adf5df60)) ([cc0840e](https://github.com/continew-org/continew-admin-ui/commit/cc0840e2ae7f25f25432c6a01781ac1a8112eea7))
|
||||
- 启动项目时,控制台增加应用信息打印 ([52e7682](https://github.com/continew-org/continew-admin-ui/commit/52e7682a4786ae6e3fae49dcbd8ee473f30d2cb5))
|
||||
- 优化部分弹框响应式效果 ([c1c5f7f](https://github.com/continew-org/continew-admin-ui/commit/c1c5f7f632827286982fdc0b9235cb115298e541))
|
||||
- 优化文件管理部分显示效果 ([7a2c66e](https://github.com/continew-org/continew-admin-ui/commit/7a2c66e6463eb50d8c7bee0dcd21c396fe642ceb))
|
||||
- 优化重置路由实现 ([7c1106e](https://github.com/continew-org/continew-admin-ui/commit/7c1106e8c26d3dc3c2ecee93f9f98bc56a171720))
|
||||
- 优化 copy 组件使用 ([c369b88](https://github.com/continew-org/continew-admin-ui/commit/c369b88185c85bb7782383617fd6debf1f6c16d9)) ([a8b5d97](https://github.com/continew-org/continew-admin-ui/commit/a8b5d97bfa0ed256205284deb7364bf50e18927a))
|
||||
- 优化用户角色名称展示 ([d4b9057](https://github.com/continew-org/continew-admin-ui/commit/d4b9057554f7bbe58d45429529d7279182100616))
|
||||
- 优化删除弹窗按钮样式 ([c2806c4](https://github.com/continew-org/continew-admin-ui/commit/c2806c469695adbe3ef1950957a33d48059c6cb6))
|
||||
- 优化表格页面样式及表格纵向滚动条 ([861f620](https://github.com/continew-org/continew-admin-ui/commit/861f6203cc0ebcdd7087434c9d8bafccf4360812))
|
||||
- 重构字典管理(左树右表) ([a175120](https://github.com/continew-org/continew-admin-ui/commit/a175120d699f5da099e7f027a6c5f0fba26705d8)) ([aac5899](https://github.com/continew-org/continew-admin-ui/commit/aac5899fe0a01fe0e91ffc1904c94ac9ecaa4885))
|
||||
- 重构用户管理部门树,支持部门管理 ([ca05fab](https://github.com/continew-org/continew-admin-ui/commit/ca05fabdec277965057f7901317edefca74cb258)) ([1be08f1](https://github.com/continew-org/continew-admin-ui/commit/1be08f10010654dc675d67b792f1fc870df5961e)) ([f8ded4b](https://github.com/continew-org/continew-admin-ui/commit/f8ded4b491a22369d43ff3e76f75c771130c4f1c))
|
||||
- 优化表格列表显示 ([ed7be3e](https://github.com/continew-org/continew-admin-ui/commit/ed7be3ef25a91d66bcd33bae6176ecb81c85ec44))
|
||||
- 优化文件管理分页 ([00da9ac](https://github.com/continew-org/continew-admin-ui/commit/00da9acdd09e4f2f8233ec22ae37408f9a027674))
|
||||
- 优化系统配置加载与切换问题 ([605ac4d](https://github.com/continew-org/continew-admin-ui/commit/605ac4d0865e2b7471583f3e0b5a14993bf25104))
|
||||
- 优化全局 loading 及 empty 配置 ([7e329fc](https://github.com/continew-org/continew-admin-ui/commit/7e329fcffacc58cb626b3b7a71a53d8decc170f7))
|
||||
- 适配系统参数 API 新的使用方式 ([1909b6e](https://github.com/continew-org/continew-admin-ui/commit/1909b6e907f8d8dd00d8e59eff8c2125914cad3f))
|
||||
- 存储管理S3存储配置填充默认域名 (GitHub#21) ([5897bde](https://github.com/continew-org/continew-admin-ui/commit/5897bde0c45dd61a94ac9bcf85b55f12a7fe5133))
|
||||
- 优化个人中心部分默认显示效果 ([f2206b7](https://github.com/continew-org/continew-admin-ui/commit/f2206b78012d594010bc6cee47a95a9ebab1ad1b))
|
||||
- 调整对话框默认可拖拽,表格默认可调整列宽 ([5581d3f](https://github.com/continew-org/continew-admin-ui/commit/5581d3fd8910997d61ca6e281cec50caef264ca3))
|
||||
- 目录下仅有一个菜单时平铺展示 ([dc4ae0f](https://github.com/continew-org/continew-admin-ui/commit/dc4ae0fb34a940030f4fc1841ede3557ccccb58c))
|
||||
- 统一性别约束/统一上级部门为必填 ([5264cf2](https://github.com/Charles7c/continew-admin-ui/commit/5264cf226fa3acd1398d9309e6a97d4d45b64850))
|
||||
- 一级部门不能修改上级部门 ([b2a1658](https://github.com/Charles7c/continew-admin-ui/commit/b2a1658e3730078cf2fbeb3032c23c0922544594))
|
||||
- 优化根据选中部门查询用户的点击效果 ([ca25285](https://github.com/Charles7c/continew-admin-ui/commit/ca252852373840b000c1f65ab925d18335a71fcb)) ([99c37d7](https://github.com/Charles7c/continew-admin-ui/commit/99c37d7de4a245836f89c29cf4b638032efae31f))
|
||||
- 登录页面,H5 端排版更换 ([05ab89d](https://github.com/Charles7c/continew-admin-ui/commit/05ab89d03fe6401994698ad9ecdeb8540ec49553))
|
||||
- 优化 queryForm 的 Query 类型使用 ([5b71369](https://github.com/Charles7c/continew-admin-ui/commit/5b713692516db586f2d401a163192c62a963137a))
|
||||
|
||||
|
||||
### 🐛 问题修复
|
||||
|
||||
- 修复用户列表禁用列错误 ([1e5a50c](https://github.com/continew-org/continew-admin-ui/commit/1e5a50c37bc8dbc18d917e523b0a215a510f57db))
|
||||
- 修复菜单管理列表滚动问题 ([5101dd1](https://github.com/continew-org/continew-admin-ui/commit/5101dd12d9769d8927afb40619fb68d696c22a82))
|
||||
- 修复打包部署后或 preview 模式下,布局切换及页签显示异常 ([68d8f0f](https://github.com/continew-org/continew-admin-ui/commit/68d8f0f5b36be162a0c64d500d845388c239c4a7))
|
||||
- 修复文件管理图表加载错误 ([d1af509](https://github.com/continew-org/continew-admin-ui/commit/d1af509a1aaa7d1a6982f3dcdadb7202b71b9475))
|
||||
- 字典编码不允许修改 ([0a6cd6e](https://github.com/continew-org/continew-admin-ui/commit/0a6cd6ef989309a450a810852cbd74e35ed29b6a))
|
||||
- 修复字典重复请求问题 ([6705027](https://github.com/continew-org/continew-admin-ui/commit/6705027273e098cde57792743c3a0bdacb559449)) ([30222b0](https://github.com/continew-org/continew-admin-ui/commit/30222b08ab6539552f3679f4cb9442f477f4df55))
|
||||
- 代码生成配置表单校验错误自动跳转回错误 tab ([a015d9f](https://github.com/continew-org/continew-admin-ui/commit/a015d9f843cb72aeb99674a271914044a4e00794))
|
||||
- 修复文件管理左侧‘全部’查询问题 ([d6c5b89](https://github.com/continew-org/continew-admin-ui/commit/d6c5b8988c84d6d33474d51162bad12973b86c91))
|
||||
- 修复导出报 400 的问题 ([377a1ff](https://github.com/continew-org/continew-admin-ui/commit/377a1ff1b74fa357545c3298e5b9c480b0f3f0d3))
|
||||
- 修复用户管理排序参数错误 ([bcbe106](https://github.com/continew-org/continew-admin-ui/commit/bcbe10660fbfdab5a7c7b17c9353aba3adc12638))
|
||||
- 修复初始值使用错误 ([fd55ad4](https://github.com/continew-org/continew-admin-ui/commit/fd55ad422888f74ea2deda679172db0cff923c9f))
|
||||
- 修复第三方登录错误 ([a775b86](https://github.com/continew-org/continew-admin-ui/commit/a775b86e2e0973a16e6b9a1945acbd904773b876))
|
||||
- 修复验证码长度限制错误 ([8702be4](https://github.com/continew-org/continew-admin-ui/commit/8702be45ed64dde39f443c2e5570fd2474821e6b))
|
||||
|
||||
## [v3.0.1](https://github.com/continew-org/continew-admin-ui/compare/v3.0.0...v3.0.1) (2024-05-03)
|
||||
|
||||
### ✨ 新特性
|
||||
|
||||
* 新增表格全屏、尺寸工具 ([b8a84a3](https://github.com/continew-org/continew-admin-ui/commit/b8a84a3a0890d4f6d0e39ecbe50c4f645bd0f106))
|
||||
* 新增验证码超时显示效果,超时后显示已过期请刷新 (GitHub#14) ([f99c8f1](https://github.com/continew-org/continew-admin-ui/commit/f99c8f1b5a521f987b2822352f976fb0b1dc93b3))
|
||||
* 文件管理增加资源统计,统计总存储量、各类型文件存储占用 (GitHub#15) ([c70d1ad](https://github.com/continew-org/continew-admin-ui/commit/c70d1adbf922d28853bf4e6cf8cc4e14ad5b0ac7))
|
||||
|
||||
### 💎 功能优化
|
||||
|
||||
- 统一性别约束/统一上级部门为必填 ([5264cf2](https://github.com/continew-org/continew-admin-ui/commit/5264cf226fa3acd1398d9309e6a97d4d45b64850))
|
||||
- 一级部门不能修改上级部门 ([b2a1658](https://github.com/continew-org/continew-admin-ui/commit/b2a1658e3730078cf2fbeb3032c23c0922544594))
|
||||
- 优化根据选中部门查询用户的点击效果 ([ca25285](https://github.com/continew-org/continew-admin-ui/commit/ca252852373840b000c1f65ab925d18335a71fcb)) ([99c37d7](https://github.com/continew-org/continew-admin-ui/commit/99c37d7de4a245836f89c29cf4b638032efae31f))
|
||||
- 登录页面,H5 端排版更换 ([05ab89d](https://github.com/continew-org/continew-admin-ui/commit/05ab89d03fe6401994698ad9ecdeb8540ec49553))
|
||||
- 优化 queryForm 的 Query 类型使用 ([5b71369](https://github.com/continew-org/continew-admin-ui/commit/5b713692516db586f2d401a163192c62a963137a))
|
||||
|
||||
|
||||
### 🐛 问题修复
|
||||
|
||||
- 修复 Markdown 样式加载错误,改为全局统一加载 (GitHub#9) ([64648d0](https://github.com/continew-org/continew-admin-ui/commit/64648d0c1d897d6e426199e7924ede9dfb40e8b8))
|
||||
- 修复由于文件组件名称错误导致的侧边栏筛选功能失效 ([81dbea8](https://github.com/continew-org/continew-admin-ui/commit/81dbea879377054e3646c2d07b51c3352501bbce))
|
||||
- 修复文件管理数据不刷新和批量操作选中问题 (GitHub#13) ([724f60e](https://github.com/continew-org/continew-admin-ui/commit/724f60eaf6b076cfb165ca0b1028c461146495ad))
|
||||
- 修复文件重命名时不能回显原值的问题 ([3dfa97e](https://github.com/continew-org/continew-admin-ui/commit/3dfa97e785acb42edd3798117f7e8eea326b4b64))
|
||||
- 修复修改公告时保存按钮点击无效的问题 ([c0a5c2d](https://github.com/continew-org/continew-admin-ui/commit/c0a5c2dffe50905b8610fbd066b8eecd5a4cbe89))
|
||||
- 修复账号管理、安全设置路由处理错误 ([c0c5ba8](https://github.com/continew-org/continew-admin-ui/commit/c0c5ba8efdab009e7e38ad9a8f68a655aba28718))
|
||||
- 修复首页卡片显示问题 ([39465dc](https://github.com/continew-org/continew-admin-ui/commit/39465dcaa38c9d79c820583a1dd82978e5588dec))
|
||||
- 修复 H5 下登录页面错位显示 ([9d570a8](https://github.com/continew-org/continew-admin-ui/commit/9d570a808ce1a15a1513eac0e9ec355d683febef))
|
||||
- 修复 Markdown 样式加载错误,改为全局统一加载 (GitHub#9) ([64648d0](https://github.com/Charles7c/continew-admin-ui/commit/64648d0c1d897d6e426199e7924ede9dfb40e8b8))
|
||||
- 修复由于文件组件名称错误导致的侧边栏筛选功能失效 ([81dbea8](https://github.com/Charles7c/continew-admin-ui/commit/81dbea879377054e3646c2d07b51c3352501bbce))
|
||||
- 修复文件管理数据不刷新和批量操作选中问题 (GitHub#13) ([724f60e](https://github.com/Charles7c/continew-admin-ui/commit/724f60eaf6b076cfb165ca0b1028c461146495ad))
|
||||
- 修复文件重命名时不能回显原值的问题 ([3dfa97e](https://github.com/Charles7c/continew-admin-ui/commit/3dfa97e785acb42edd3798117f7e8eea326b4b64))
|
||||
- 修复修改公告时保存按钮点击无效的问题 ([c0a5c2d](https://github.com/Charles7c/continew-admin-ui/commit/c0a5c2dffe50905b8610fbd066b8eecd5a4cbe89))
|
||||
- 修复账号管理、安全设置路由处理错误 ([c0c5ba8](https://github.com/Charles7c/continew-admin-ui/commit/c0c5ba8efdab009e7e38ad9a8f68a655aba28718))
|
||||
- 修复首页卡片显示问题 ([39465dc](https://github.com/Charles7c/continew-admin-ui/commit/39465dcaa38c9d79c820583a1dd82978e5588dec))
|
||||
- 修复 H5 下登录页面错位显示 ([9d570a8](https://github.com/Charles7c/continew-admin-ui/commit/9d570a808ce1a15a1513eac0e9ec355d683febef))
|
||||
|
||||
## v3.0.0 (2024-04-27)
|
||||
|
||||
|
||||
120
README.md
@@ -4,7 +4,7 @@
|
||||
<img src="https://img.shields.io/badge/License-Apache--2.0-blue.svg" alt="License" />
|
||||
</a>
|
||||
<a href="https://github.com/Charles7c/continew-admin-ui" target="_blank">
|
||||
<img src="https://img.shields.io/badge/RELEASE-v3.3.0-%23ff3f59.svg" alt="Release" />
|
||||
<img src="https://img.shields.io/badge/RELEASE-v3.0.1-%23ff3f59.svg" alt="Release" />
|
||||
</a>
|
||||
<a href="https://github.com/Charles7c/continew-admin" target="_blank">
|
||||
<img src="https://img.shields.io/github/stars/Charles7c/continew-admin?style=social" alt="GitHub stars" />
|
||||
@@ -37,17 +37,9 @@
|
||||
|
||||
全新 3.0 版本,基于 Gi Demo 前端模板开发的 ContiNew Admin 前端适配项目。
|
||||
|
||||
ContiNew Admin(Continue New Admin)持续迭代优化的前后端分离中后台管理系统框架。开箱即用,重视每一处代码规范,重视每一种解决方案细节,持续提供舒适的前、后端开发体验。
|
||||
ContiNew Admin(Continue New Admin)持续迭代优化的前后端分离中后台管理系统框架。开箱即用,持续提供舒适的开发体验,依托开源协作模式,提升技术透明度、放大集体智慧、共创优秀实践,源源不断地为企业级项目开发提供助力。
|
||||
|
||||
当前采用的技术栈:Spring Boot3(Java17)、Vue3 & Arco Design & TS & Vite、Sa-Token、MyBatis Plus、Redisson、JetCache、JustAuth、Crane4j、EasyExcel、Liquibase、Hutool 等。
|
||||
|
||||
## 项目源码
|
||||
|
||||
| | 前端 | 后端 |
|
||||
| :------ | :----------------------------------------------------------- | :----------------------------------------------------------- |
|
||||
| Gitee | [continew/continew-admin-ui](https://gitee.com/continew/continew-admin-ui) | [continew/continew-admin](https://gitee.com/continew/continew-admin) |
|
||||
| GitCode | [continew/continew-admin-ui](https://gitcode.com/continew/continew-admin-ui) | [continew/continew-admin](https://gitcode.com/continew/continew-admin) |
|
||||
| GitHub | [continew-org/continew-admin-ui](https://github.com/continew-org/continew-admin-ui) | [continew-org/continew-admin](https://github.com/continew-org/continew-admin) |
|
||||
当前采用的技术栈:Spring Boot3(Java17)、Vue3 & TS & Vite5 & Arco Design Vue、Sa-Token、MyBatisPlus、Redisson、JetCache、JustAuth、Crane4j、EasyExcel、Liquibase、Hutool 等。
|
||||
|
||||
## 项目起源
|
||||
|
||||
@@ -57,81 +49,48 @@ ContiNew Admin(Continue New Admin)持续迭代优化的前后端分离中后
|
||||
|
||||
技术的发展,导致这些雏形程序的生命周期很是短暂,它们有别于我归档的其他数据,有时由于工作的原因,没有时间很好的去沉淀它们,在使用时变得越来越不顺手。所以,某段时间,我放弃了维护,而是去采用一些更为成熟的框架。
|
||||
|
||||
不过,在陆续几年使用了一些成熟框架后,我前后遇到了一些困难:
|
||||
不过,在陆续几年使用了一些同类框架之后,我前后遇到了一些困难:
|
||||
|
||||
1. 代码洁癖想要找到一个**扩展性佳,代码规范良好,开发体验舒适**的框架很不容易,总是差些什么
|
||||
2. 项目上手困难或是基础版功能不全,需要的全在专业版,亦或者代码阅读性差,文档收费
|
||||
3. 部分解决方案缺失,已有解决方案也过于偏向样板化,无法形成良好的逻辑闭环
|
||||
4. 好不容易找到一些相较合适的,没过多久,部分作者可能暂时没法对外发“电”了,随着了解深入,很多 Bug 或新技术趋势还是需要自己研究解决
|
||||
1. 想要找到一个扩展性佳,代码规范良好,开发体验舒适的框架很不容易,总是差些什么
|
||||
2. 对于初始使用似乎过度设计,上手困难?或是功能不全,全在专业版(收费)?更甚者,代码阅读性差,文档还要收费
|
||||
3. 好不容易找到一些相较合适的,没过“多久”,部分作者可能谈恋爱了,没法对外发“电”了
|
||||
4. 提 PR 可能又和原作者理念不一致,对部分框架进行二开,但又会囿于原始设计
|
||||
5. 在工作中,很多想法/设计受限于客户需求、开发工期,必须优先以交付为导向,想要依靠工作来完善一个脚手架,既不现实也不甚美妙
|
||||
|
||||
在工作中,很多想法/设计受限于客户需求、开发工期,必须优先以交付为导向,但一些优秀的实践需要花时间持续进行沉淀,只要我没跳出这个圈子,我还是需要一直去做好程序归档。“种一棵树最好的时间是十年前,其次是现在”,最终,我选择在业余时间更加正视这件事,从头归档沉淀,从添加每一个依赖开始,我希望它能持续的迭代优化、演进,所以我把它命名为 **ContiNew(Continue New)**。并且这次我选择了开源,我希望它不仅仅能吸收我的需求和沉淀,而是依托开源协作模式,及时发现更多的问题,接受更多的可能性,沉淀更优秀的思考,设计。
|
||||
“种一棵树最好的时间是十年前,其次是现在”。最终,我选择自己在业余时间从头写一个试试,从添加每一个依赖开始,我希望它能持续的迭代优化、演进,所以我把它命名为 **ContiNew(Continue New)**。我希望它不仅仅能吸收我的需求,而是依托开源协作模式,接受更多的可能性,沉淀更优秀的思考,设计。另外,开源出来,如果能为更广泛的小伙伴提供舒适的开发体验那就更好了。
|
||||
|
||||
## 为什么选我们?
|
||||
## 项目源码
|
||||
|
||||
> [!TIP]
|
||||
> 更为完整的图文描述请查阅[《在线文档》](https://continew.top/admin/intro/why.html)。
|
||||
|
||||
1.**甄选技术栈:** ContiNew(Continue New) 项目致力于持续迭代优化,让技术不掉队。在技术选型时,进行深度广泛地调研,从流行度、成熟度和发展潜力等多方面甄选技术栈。
|
||||
|
||||
2.**Starter 组件:** 从 v2.1.0 版本开始,抽取并封装后端基础组件及各框架集成配置到 ContiNew Starter 项目,且 **[已发布至 Maven 中央仓库](https://central.sonatype.com/search?q=continew-starter&namespace=top.continew)**,可在你的任意项目中直接引入所需依赖使用。即使你不用脚手架项目,难道能让你搭项目框架更快、更爽、更省力的 Starter 也要 Say No 吗?
|
||||
|
||||
3.**CRUD 套件:** 封装通用增删改查套件,适配后端各分层,几分钟即可提供一套 CRUD API,包括新增、修改、批量删除、查询详情、分页列表查询、全部列表查询、树型列表查询、导出到 Excel,且 API 支持按实际所需开放或扩展。
|
||||
```java
|
||||
@Tag(name = "部门管理 API")
|
||||
@RestController
|
||||
@CrudRequestMapping(value = "/system/dept", api = {Api.TREE, Api.GET, Api.ADD, Api.UPDATE, Api.DELETE, Api.EXPORT})
|
||||
public class DeptController extends BaseController<DeptService, DeptResp, DeptDetailResp, DeptQuery, DeptReq> {}
|
||||
```
|
||||
|
||||
4.**代码生成器:** 提供代码生成器,已配套前、后端代码生成模板,数据表设计完之后,简单配置一下即可生成前、后端 80% 的代码,包含 CRUD API、权限控制、参数校验、接口文档等内容。如果业务不复杂,也可能就是 95% 的代码。
|
||||
|
||||
5.**改善开发体验:** 持续优化及适配能改善开发体验的组件。
|
||||
- 适配 ContiNew Starter 组件,针对多数框架进行了深度封装的 starter,改善你在开发每个 Spring Boot Web 项目的体验。
|
||||
- 适配 Crane4j 数据填充组件,减少因为一个用户名而产生的联表回填;
|
||||
- 适配 P6Spy SQL 性能分析组件,开发期间方便监控 SQL 执行;
|
||||
- 适配 TLog 链路追踪组件,方便在杂乱的日志文件中追踪你某次请求的日志记录;
|
||||
- 适配 JetCache 缓存框架(比 Spring Cache 更强大易用),通过注解声明即可快速实现方法级缓存,极大改善编码式缓存体验,且支持灵活的二级缓存配置、分布式自动刷新等能力;
|
||||
- 前端适配 Vue Devtools(Vue 官方提供的调试浏览器插件),极大提高 Vue 开发及调试效率
|
||||
|
||||
6.**Almost最佳后端规范:** 后端严格遵循阿里巴巴 Java 编码规范,注释覆盖率 > 45%,接口参数示例 100%,代码分层使用体验佳,变量、方法命名清晰统一,前端代码也使用严格的 ESLint、StyleLint 等检查。良好的设计,代码复用率极高!写代码时,让你有一种无需多写,理应如此的感觉。我是代码洁癖,我实际写的时候很清楚这到底是不是乱吹。
|
||||
|
||||
7.**卓越工程:** 后端采用模块化工程结构,并适配了统一项目版本号、编译项目自动代码格式化、代码混淆等插件,提供了自定义打包部署结构配置(配置文件、三方依赖和主程序分离),提供全套环境及应用的 Docker Compose 部署脚本。为了减少您开发新项目时的改造耗时,项目品牌配置持续进行深度聚合,简单的配置和结构修改即可快速开始独属于你的新项目。
|
||||
|
||||
8.**业务脚手架:** 有颜有料,不止是说说而已,持续打磨 UI 设计与色彩主题。提供基于 RBAC 的权限控制、通用数据权限,包含丰富的通用业务功能:第三方登录,邮箱、短信(生产级炸弹漏洞处理方案),个人中心、用户管理、角色管理、部门管理、系统配置(基础站点配置、邮件配置、安全配置)、系统日志、消息中心、通知公告等,设计用心,逻辑合理闭环。
|
||||
> 一个好的脚手架项目,不仅仅是提供一系列组件集成与配置,也不仅仅是封装一堆好用的工具,还更应该提供一系列通用基础业务解决方案及设计,为初创团队项目减负。
|
||||
|
||||
9.**质量与安全:** CI 已集成 Sonar、Codacy,Push 即扫描代码质量,定期扫描 CVE 漏洞,及时解决潜在问题。封装数据库字段加密、JSON 脱敏、XSS 过滤等工具,提供诸多安全解决方案。
|
||||
|
||||
由于篇幅有限,且项目正处于高速发展期,更多功能正在陆续上线(敬请关注仓库或群内动态)。另外像最基本的统一异常、错误处理,基础线程池等配置就不在此赘述,细节优化详情请 clone 代码查看。
|
||||
> Talk is cheap, show the code.
|
||||
| | Gitee | GitHub |
|
||||
|----------|-------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|
|
||||
| 前端 | [gitee.com/continew/continew-admin-ui](https://gitee.com/continew/continew-admin-ui) | [github.com/Charles7c/continew-admin-ui](https://github.com/Charles7c/continew-admin-ui) |
|
||||
| 后端 | [gitee.com/continew/continew-admin](https://gitee.com/continew/continew-admin) | [github.com/Charles7c/continew-admin](https://github.com/Charles7c/continew-admin) |
|
||||
| 2.5 版本前端 | [gitee.com/continew/continew-admin-ui-arco](https://gitee.com/continew/continew-admin-ui-arco) | [github.com/Charles7c/continew-admin-ui-arco](https://github.com/Charles7c/continew-admin-ui-arco) |
|
||||
|
||||
## 系统功能
|
||||
|
||||
> [!TIP]
|
||||
> **Note**
|
||||
> 更多功能和优化正在赶来💦,最新项目计划、进展请进群或关注 [任务清单](https://continew.top/admin/intro/require.html#任务清单) 和 [更新日志](https://continew.top/admin/other/changelog.html)。
|
||||
|
||||
- 个人中心:支持基础信息修改、密码修改、邮箱绑定、手机号绑定(并提供行为验证码、短信限流等安全处理)、第三方账号绑定/解绑、头像裁剪上传
|
||||
- 消息中心:提供站内信消息统一查看、标记已读、全部已读、删除等功能
|
||||
- 用户管理:提供用户的相关配置,新增、修改、删除、重置密码、导出
|
||||
- 部门管理:可配置系统组织架构,并以树形表格展示
|
||||
- 个人中心:支持基础信息修改、安全设置(密码修改、邮箱绑定、手机号绑定(并提供行为验证码、短信限流等安全处理)、第三方账号绑定/解绑)、头像裁剪上传等能力
|
||||
- 用户管理:提供系统用户的新增维护,支持禁用登录及重置指定用户密码
|
||||
- 角色管理:对权限与菜单进行分配,可根据部门设置角色的数据权限
|
||||
- 菜单管理:已实现菜单动态路由,后端可配置化,支持多级菜单
|
||||
- 通知公告:提供公告的发布、查看和删除等功能。管理员可以在后台发布公告,并可以设置公告的生效时间、终止时间,以 markdown-it 为内核渲染 Markdown 格式内容显示
|
||||
- 部门管理:可配置系统组织架构,以树形表格展示
|
||||
- 公告管理:提供公告的发布、查看和删除等功能。管理员可以在后台发布公告,并可以设置公告的生效时间、终止时间,以 markdown-it 为内核渲染 Markdown 格式内容显示
|
||||
- 消息管理:提供消息查看、标记已读、全部已读、删除等功能(适配对接导航栏站内信功能)(v3.1 重构,v2.5 版可用)
|
||||
- 字典管理:提供对系统公用数据字典的维护,例如:公告类型,支持字典标签背景色和排序等配置
|
||||
- 文件管理:提供文件上传、下载、预览(目前支持图片、音视频)、重命名、切换视图(列表、网格)等功能
|
||||
- 存储管理:提供文件存储库新增、编辑、删除等功能,支持本地存储、兼容 S3 协议存储
|
||||
- 系统配置:
|
||||
- 基础配置:提供修改系统标题、Logo、favicon、版权信息等基础配置功能,以方便用户系统与其自身品牌形象保持一致
|
||||
- 邮件配置:提供系统发件箱配置,也支持通过配置文件指定
|
||||
- 安全配置:提供密码策略修改,支持丰富的密码策略设定,包括但不限于 `密码有效期`、`密码重复次数`、`密码错误锁定账号次数、时间` 等
|
||||
- 代码生成:提供根据数据库表自动生成相应的前后端 CRUD 代码的功能,支持同步最新表结构及代码生成预览
|
||||
- 系统配置:提供修改系统标题、Logo、favicon 等基础配置功能,以方便用户系统与其自身品牌形象保持一致(v3.1 支持邮件配置)
|
||||
- 代码生成:提供根据数据库表自动生成相应的前后端 CRUD 代码的功能
|
||||
- 在线用户:管理当前登录用户,可一键踢下线
|
||||
- 日志管理:提供登录日志、操作日志管理功能,可查看指定日志的详细请求及响应信息
|
||||
- 系统日志:提供登录日志、操作日志管理功能,可查看指定日志的详细请求及响应信息
|
||||
|
||||
## 系统截图
|
||||
|
||||
> [!TIP]
|
||||
> 受篇幅长度及功能更新频率影响,下方仅为系统 **部分** 功能于 **2024年6月13日** 进行的截图,更多新增功能及细节请登录演示环境或 clone 代码到本地启动查看。
|
||||
> 受篇幅长度及功能更新频率影响,下方仅为系统 **部分** 功能于 **2024年5月3日** 进行的截图,更多新增功能及细节请登录演示环境或 clone 代码到本地启动查看。
|
||||
|
||||
<table border="1" cellpadding="1" cellspacing="1" style="width: 500px">
|
||||
<tbody>
|
||||
@@ -141,15 +100,15 @@ public class DeptController extends BaseController<DeptService, DeptResp, DeptDe
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src=".image/screenshot/002仪表盘-查看公告.png" alt="仪表盘-查看公告" width="1920" /></td>
|
||||
<td><img src=".image/screenshot/010个人中心.png" alt="个人中心" width="1920" /></td>
|
||||
<td><img src=".image/screenshot/010账号管理.png" alt="账号管理" width="1920" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src=".image/screenshot/011消息中心.png" alt="消息中心" width="1920" /></td>
|
||||
<td><img src=".image/screenshot/012安全设置-修改邮箱-邮箱验证码.png" alt="安全设置-修改邮箱-邮箱验证码" width="1920" /></td>
|
||||
<td><img src=".image/screenshot/011安全设置.png" alt="安全设置" width="1920" /></td>
|
||||
<td><img src=".image/screenshot/012安全设置-修改邮箱.png" alt="安全设置-修改邮箱" width="1920" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src=".image/screenshot/013安全设置-修改邮箱-邮箱验证码.png" alt="安全设置-修改邮箱-邮箱验证码" width="1920" /></td>
|
||||
<td><img src=".image/screenshot/060系统管理-系统配置.png" alt="系统管理-系统配置" width="1920" /></td>
|
||||
<td><img src=".image/screenshot/061系统管理-安全配置.png" alt="系统管理-安全配置" width="1920" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src=".image/screenshot/020系统管理-用户管理-列表.png" alt="系统管理-用户管理-列表" width="1920" /></td>
|
||||
@@ -224,9 +183,9 @@ pnpm dev
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
continew-admin-ui
|
||||
├─ config # Vite 插件配置
|
||||
├─ public # 公共静态资源(favicon.ico、logo.svg)
|
||||
continew-admin-ui # 前端项目
|
||||
├─ config # Vite 插件配置
|
||||
├─ public # 公共静态资源(favicon.ico、logo.svg)
|
||||
├─ src
|
||||
│ ├─ apis # 请求接口
|
||||
│ │ ├─ auth # 认证模块
|
||||
@@ -261,6 +220,7 @@ continew-admin-ui
|
||||
│ │ │ └─ online # 在线用户
|
||||
│ │ ├─ setting # 设置
|
||||
│ │ │ ├─ profile # 账号管理
|
||||
│ │ │ └─ security # 安全设置
|
||||
│ │ ├─ tool # 系统工具
|
||||
│ │ │ └─ generator # 代码生成
|
||||
│ │ └─ system # 系统管理
|
||||
@@ -275,10 +235,13 @@ continew-admin-ui
|
||||
│ │ └─ user # 用户管理
|
||||
│ ├─ App.vue
|
||||
│ └─ main.ts
|
||||
├─ .env.development # 开发环境配置
|
||||
├─ .env.production # 生产环境配置
|
||||
├─ .env.test # 测试环境配置
|
||||
├─ eslint.config.js # ESLint 配置
|
||||
├─ .env.development
|
||||
├─ .env.production
|
||||
├─ .env.test
|
||||
├─ .eslintignore
|
||||
├─ .eslintrc.cjs
|
||||
├─ .prettierignore
|
||||
├─ .prettierrc.js
|
||||
├─ index.html
|
||||
├─ package.json
|
||||
├─ package-lock.json
|
||||
@@ -286,6 +249,7 @@ continew-admin-ui
|
||||
├─ tsconfig.json
|
||||
├─ vite.config.ts
|
||||
├─ .gitignore(Git 忽略文件相关配置文件)
|
||||
├─ .gitee(Gitee 相关配置目录,实际开发时直接删除)
|
||||
├─ .github(GitHub 相关配置目录,实际开发时直接删除)
|
||||
├─ .idea
|
||||
│ └─ icon.png(IDEA 项目图标,实际开发时直接删除)
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
import boxen from 'boxen'
|
||||
import picocolors from 'picocolors'
|
||||
import type { Plugin } from 'vite'
|
||||
|
||||
export default function appInfo(): Plugin {
|
||||
return {
|
||||
name: 'appInfo',
|
||||
apply: 'serve',
|
||||
async buildStart() {
|
||||
const { bold, green, cyan, bgGreen, underline } = picocolors
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(
|
||||
boxen(
|
||||
`${bold(green(`${bgGreen('ContiNew Admin v3.3.0')}`))}\n${cyan('在线文档:')}${underline('https://continew.top')}\n${cyan('持续迭代优化的前后端分离中后台管理系统框架。')}`,
|
||||
{
|
||||
padding: 1,
|
||||
margin: 1,
|
||||
borderStyle: 'double',
|
||||
textAlignment: 'center'
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ export default function createAutoImport() {
|
||||
imports: [
|
||||
'vue',
|
||||
'vue-router',
|
||||
'pinia'
|
||||
'pinia',
|
||||
],
|
||||
dts: './src/types/auto-imports.d.ts'
|
||||
})
|
||||
|
||||
@@ -6,6 +6,6 @@ export default function createComponents() {
|
||||
dirs: ['src/components'],
|
||||
extensions: ['vue', 'tsx'],
|
||||
// 配置文件生成位置
|
||||
dts: './src/types/components.d.ts'
|
||||
dts: './src/types/components.d.ts',
|
||||
})
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ import type { PluginOption } from 'vite'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import vueJsx from '@vitejs/plugin-vue-jsx'
|
||||
|
||||
import appInfo from './app-info'
|
||||
import createDevtools from './devtools'
|
||||
import createAutoImport from './auto-import'
|
||||
import createComponents from './components'
|
||||
@@ -10,7 +9,7 @@ import createSvgIcon from './svg-icon'
|
||||
import createMock from './mock'
|
||||
|
||||
export default function createVitePlugins(viteEnv, isBuild = false) {
|
||||
const vitePlugins: (PluginOption | PluginOption[])[] = [appInfo(), vue(), vueJsx()]
|
||||
const vitePlugins: (PluginOption | PluginOption[])[] = [vue(), vueJsx()]
|
||||
vitePlugins.push(createDevtools(viteEnv))
|
||||
vitePlugins.push(createAutoImport())
|
||||
vitePlugins.push(createComponents())
|
||||
|
||||
@@ -8,6 +8,6 @@ export default function createSvgIcon(isBuild) {
|
||||
iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
|
||||
// 指定 symbolId 格式
|
||||
symbolId: 'icon-[dir]-[name]',
|
||||
svgoOptions: isBuild
|
||||
svgoOptions: isBuild,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
import antfu from '@antfu/eslint-config'
|
||||
|
||||
// https://github.com/antfu/eslint-config
|
||||
export default antfu(
|
||||
{
|
||||
vue: true,
|
||||
typescript: true,
|
||||
ignores: [
|
||||
'README.md',
|
||||
'src/types/shims-vue.d.ts'
|
||||
]
|
||||
},
|
||||
{
|
||||
// Remember to specify the file glob here, otherwise it might cause the vue plugin to handle non-vue files
|
||||
files: ['**/*.vue'],
|
||||
rules: {
|
||||
'vue/block-order': [2, {
|
||||
order: [['script', 'template'], 'style']
|
||||
}], // 强制组件顶级元素的顺序
|
||||
'vue/html-self-closing': [0, {
|
||||
html: {
|
||||
void: 'never',
|
||||
normal: 'always',
|
||||
component: 'never'
|
||||
}
|
||||
}], // 强制自结束样式
|
||||
'vue/custom-event-name-casing': [2, 'kebab-case'], // 对自定义事件名称强制使用特定大小写
|
||||
'vue/singleline-html-element-content-newline': 0, // 要求在单行元素的内容前后换行
|
||||
'vue/first-attribute-linebreak': 0, // 强制第一个属性的位置
|
||||
'vue/define-macros-order': [2, {
|
||||
order: ['defineOptions', 'defineModel', 'defineProps', 'defineEmits', 'defineSlots'],
|
||||
defineExposeLast: false
|
||||
}], // 强制执行定义限制和定义弹出编译器宏的顺序
|
||||
'vue/html-indent': 0, // 在《模板》中强制一致的缩进
|
||||
'vue/html-closing-bracket-newline': 0 // 要求或不允许在标记的右括号前换行
|
||||
}
|
||||
},
|
||||
{
|
||||
// Without `files`, they are general rules for all files
|
||||
rules: {
|
||||
'curly': [0, 'all'], // 对所有控制语句强制使用一致的大括号样式
|
||||
'dot-notation': 0, // 尽可能强制使用点表示法。 在 JavaScript 中,可以使用点表示法 (foo.bar) 或方括号表示法 (foo["bar"]) 访问属性
|
||||
'no-new': 0, // 不允许在赋值或比较之外使用 new 运算符
|
||||
// 'no-console': 2, // 禁止使用 console
|
||||
'no-process-env': 0,
|
||||
'style/arrow-parens': [2, 'always'], // 箭头函数参数需要括号
|
||||
'style/brace-style': [2, '1tbs', { allowSingleLine: true }], // 对块执行一致的大括号样式
|
||||
'style/comma-dangle': [2, 'never'], // 要求或不允许尾随逗号
|
||||
'ts/consistent-type-definitions': 0,
|
||||
'ts/no-unused-expressions': 0,
|
||||
'node/prefer-global/process': 0,
|
||||
'antfu/top-level-function': 0,
|
||||
'antfu/if-newline': 0
|
||||
}
|
||||
}
|
||||
)
|
||||
@@ -7,7 +7,7 @@
|
||||
<link rel="stylesheet" href="/static/css/loading.css" type="text/css" />
|
||||
<title></title>
|
||||
</head>
|
||||
|
||||
|
||||
<body>
|
||||
<div id="app">
|
||||
<section class="init-box">
|
||||
|
||||
10351
package-lock.json
generated
Normal file
23
package.json
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"name": "continew-admin-ui",
|
||||
"type": "module",
|
||||
"version": "3.3.0",
|
||||
"version": "3.0.1",
|
||||
"private": "true",
|
||||
"scripts": {
|
||||
"dev": "vite --host",
|
||||
@@ -10,12 +9,12 @@
|
||||
"preview": "vite preview --port 5050",
|
||||
"typecheck": "vue-tsc --noEmit",
|
||||
"lint": "eslint src",
|
||||
"lint:fix": "eslint src --fix"
|
||||
"fix": "eslint src --fix"
|
||||
},
|
||||
"dependencies": {
|
||||
"@amap/amap-jsapi-loader": "^1.0.1",
|
||||
"@arco-design/color": "^0.4.0",
|
||||
"@arco-themes/vue-gi-demo": "^0.0.51",
|
||||
"@arco-themes/vue-gi-demo": "^0.0.45",
|
||||
"@codemirror/lang-javascript": "^6.2.1",
|
||||
"@codemirror/lang-vue": "^0.1.2",
|
||||
"@codemirror/theme-one-dark": "^6.1.2",
|
||||
@@ -24,7 +23,6 @@
|
||||
"@vueuse/core": "^10.5.0",
|
||||
"@wangeditor/editor": "^5.1.1",
|
||||
"@wangeditor/editor-for-vue": "^5.1.12",
|
||||
"aieditor": "^1.0.13",
|
||||
"animate.css": "^4.1.1",
|
||||
"axios": "^0.27.2",
|
||||
"codemirror": "^6.0.1",
|
||||
@@ -51,24 +49,27 @@
|
||||
"vue-draggable-plus": "^0.3.5",
|
||||
"vue-echarts": "^6.5.5",
|
||||
"vue-json-pretty": "^2.4.0",
|
||||
"vue-router": "^4.3.3",
|
||||
"vue-router": "^4.2.2",
|
||||
"xe-utils": "^3.5.7",
|
||||
"xgplayer": "^2.31.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "^2.16.3",
|
||||
"@arco-design/web-vue": "^2.56.0",
|
||||
"@arco-design/web-vue": "^2.55.0",
|
||||
"@rushstack/eslint-patch": "^1.3.1",
|
||||
"@types/crypto-js": "^4.2.2",
|
||||
"@types/lodash": "^4.14.195",
|
||||
"@types/node": "^20.2.5",
|
||||
"@types/query-string": "^6.3.0",
|
||||
"@vitejs/plugin-vue": "^5.0.4",
|
||||
"@vitejs/plugin-vue-jsx": "^3.1.0",
|
||||
"@vue/eslint-config-prettier": "^7.1.0",
|
||||
"@vue/eslint-config-typescript": "^11.0.3",
|
||||
"@vue/tsconfig": "^0.1.3",
|
||||
"boxen": "^7.1.1",
|
||||
"eslint": "^9.0.0",
|
||||
"eslint": "^8.41.0",
|
||||
"eslint-plugin-vue": "^9.13.0",
|
||||
"less": "^4.1.3",
|
||||
"less-loader": "^11.0.0",
|
||||
"picocolors": "^1.0.0",
|
||||
"prettier": "^2.8.8",
|
||||
"sass": "^1.62.1",
|
||||
"sass-loader": "^13.2.2",
|
||||
"typescript": "~5.0.4",
|
||||
|
||||
11856
pnpm-lock.yaml
generated
11
src/App.vue
@@ -1,9 +1,7 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as Area from './type'
|
||||
|
||||
/** @desc 获取地区列表 */
|
||||
export const getAreaList = (params: { type: 'province' | 'city' | 'area', code?: string }) => {
|
||||
return http.get<T.AreaItem>('/area/list', params)
|
||||
export const getAreaList = (params: { type: 'province' | 'city' | 'area'; code?: string }) => {
|
||||
return http.get<Area.AreaItem>('/area/list', params)
|
||||
}
|
||||
|
||||
@@ -1,33 +1,31 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as Auth from './type'
|
||||
|
||||
const BASE_URL = '/auth'
|
||||
|
||||
/** @desc 账号登录 */
|
||||
export function accountLogin(req: T.AccountLoginReq) {
|
||||
return http.post<T.LoginResp>(`${BASE_URL}/account`, req)
|
||||
export function accountLogin(req: Auth.AccountLoginReq) {
|
||||
return http.post<Auth.LoginResp>(`${BASE_URL}/account`, req)
|
||||
}
|
||||
|
||||
/** @desc 手机号登录 */
|
||||
export function phoneLogin(req: T.PhoneLoginReq) {
|
||||
return http.post<T.LoginResp>(`${BASE_URL}/phone`, req)
|
||||
export function phoneLogin(req: Auth.PhoneLoginReq) {
|
||||
return http.post<Auth.LoginResp>(`${BASE_URL}/phone`, req)
|
||||
}
|
||||
|
||||
/** @desc 邮箱登录 */
|
||||
export function emailLogin(req: T.EmailLoginReq) {
|
||||
return http.post<T.LoginResp>(`${BASE_URL}/email`, req)
|
||||
export function emailLogin(req: Auth.EmailLoginReq) {
|
||||
return http.post<Auth.LoginResp>(`${BASE_URL}/email`, req)
|
||||
}
|
||||
|
||||
/** @desc 三方账号登录 */
|
||||
export function socialLogin(source: string, req: any) {
|
||||
return http.post<T.LoginResp>(`/oauth/${source}`, req)
|
||||
return http.post<Auth.LoginResp>(`/oauth/${source}`, req)
|
||||
}
|
||||
|
||||
/** @desc 三方账号登录授权 */
|
||||
export function socialAuth(source: string) {
|
||||
return http.get<T.SocialAuthAuthorizeResp>(`/oauth/${source}`)
|
||||
return http.get<Auth.SocialAuthAuthorizeResp>(`/oauth/${source}`)
|
||||
}
|
||||
|
||||
/** @desc 退出登录 */
|
||||
@@ -37,10 +35,10 @@ export function logout() {
|
||||
|
||||
/** @desc 获取用户信息 */
|
||||
export const getUserInfo = () => {
|
||||
return http.get<T.UserInfo>(`${BASE_URL}/user/info`)
|
||||
return http.get<Auth.UserInfo>(`${BASE_URL}/user/info`)
|
||||
}
|
||||
|
||||
/** @desc 获取路由信息 */
|
||||
export const getUserRoute = () => {
|
||||
return http.get<T.RouteItem[]>(`${BASE_URL}/route`)
|
||||
return http.get<Auth.RouteItem[]>(`${BASE_URL}/route`)
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ export interface UserInfo {
|
||||
phone: string
|
||||
avatar: string
|
||||
pwdResetTime: string
|
||||
pwdExpired: boolean
|
||||
registrationDate: string
|
||||
deptName: string
|
||||
roles: string[]
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as Common from './type'
|
||||
|
||||
const BASE_URL = '/captcha'
|
||||
|
||||
/** @desc 获取图片验证码 */
|
||||
export function getImageCaptcha() {
|
||||
return http.get<T.ImageCaptchaResp>(`${BASE_URL}/image`)
|
||||
return http.get<Common.ImageCaptchaResp>(`${BASE_URL}/image`)
|
||||
}
|
||||
|
||||
/** @desc 获取短信验证码 */
|
||||
@@ -19,13 +17,3 @@ export function getSmsCaptcha(query: { phone: string }) {
|
||||
export function getEmailCaptcha(query: { email: string }) {
|
||||
return http.get<boolean>(`${BASE_URL}/mail`, query)
|
||||
}
|
||||
|
||||
/** @desc 获取行为验证码 */
|
||||
export function getBehaviorCaptcha(req: any) {
|
||||
return http.get<T.BehaviorCaptchaResp>(`${BASE_URL}/behavior`, req)
|
||||
}
|
||||
|
||||
/** @desc 校验行为验证码 */
|
||||
export function checkBehaviorCaptcha(req: any) {
|
||||
return http.post<T.CheckBehaviorCaptchaResp>(`${BASE_URL}/behavior`, req)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { TreeNodeData } from '@arco-design/web-vue'
|
||||
import http from '@/utils/http'
|
||||
import type { LabelValueState } from '@/types/global'
|
||||
import type { TreeNodeData } from '@arco-design/web-vue'
|
||||
import type { OptionQuery } from '@/apis'
|
||||
|
||||
const BASE_URL = '/common'
|
||||
@@ -16,7 +16,7 @@ export function listMenuTree(query: { description: string }) {
|
||||
}
|
||||
|
||||
/** @desc 查询角色列表 */
|
||||
export function listRoleDict(query?: { name: string, status: number }) {
|
||||
export function listRoleDict(query?: { name: string; status: number }) {
|
||||
return http.get<LabelValueState[]>(`${BASE_URL}/dict/role`, query)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as Common from './type'
|
||||
|
||||
const BASE_URL = '/dashboard'
|
||||
|
||||
/** @desc 查询访问趋势 */
|
||||
export function listDashboardAccessTrend(days: number) {
|
||||
return http.get<T.DashboardAccessTrendResp[]>(`${BASE_URL}/access/trend/${days}`)
|
||||
return http.get<Common.DashboardAccessTrendResp[]>(`${BASE_URL}/access/trend/${days}`)
|
||||
}
|
||||
|
||||
/** @desc 查询公告列表 */
|
||||
export function listDashboardNotice() {
|
||||
return http.get<T.DashboardNoticeResp[]>(`${BASE_URL}/notice`)
|
||||
return http.get<Common.DashboardNoticeResp[]>(`${BASE_URL}/notice`)
|
||||
}
|
||||
|
||||
@@ -18,21 +18,3 @@ export interface DashboardNoticeResp {
|
||||
title: string
|
||||
type: number
|
||||
}
|
||||
|
||||
/* 行为验证码类型 */
|
||||
export interface BehaviorCaptchaResp {
|
||||
originalImageBase64: string
|
||||
point: {
|
||||
x: number
|
||||
y: number
|
||||
}
|
||||
jigsawImageBase64: string
|
||||
token: string
|
||||
secretKey: string
|
||||
wordList: string[]
|
||||
}
|
||||
|
||||
export interface CheckBehaviorCaptchaResp {
|
||||
repCode: string
|
||||
repMsg: string
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ export * from './common'
|
||||
export * from './monitor'
|
||||
export * from './system'
|
||||
export * from './tool'
|
||||
export * from './schedule'
|
||||
|
||||
export * from './area/type'
|
||||
export * from './auth/type'
|
||||
@@ -12,4 +11,3 @@ export * from './common/type'
|
||||
export * from './monitor/type'
|
||||
export * from './system/type'
|
||||
export * from './tool/type'
|
||||
export * from './schedule/type'
|
||||
|
||||
@@ -1,26 +1,24 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as Monitor from './type'
|
||||
|
||||
const BASE_URL = '/system/log'
|
||||
|
||||
/** @desc 查询日志列表 */
|
||||
export function listLog(query: T.LogPageQuery) {
|
||||
return http.get<PageRes<T.LogResp[]>>(`${BASE_URL}`, query)
|
||||
export function listLog(query: Monitor.LogPageQuery) {
|
||||
return http.get<PageRes<Monitor.LogResp[]>>(`${BASE_URL}`, query)
|
||||
}
|
||||
|
||||
/** @desc 查询日志详情 */
|
||||
export function getLog(id: string) {
|
||||
return http.get<T.LogDetailResp>(`${BASE_URL}/${id}`)
|
||||
return http.get<Monitor.LogDetailResp>(`${BASE_URL}/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 导出登录日志 */
|
||||
export function exportLoginLog(query: T.LogQuery) {
|
||||
export function exportLoginLog(query: Monitor.LogQuery) {
|
||||
return http.download<any>(`${BASE_URL}/export/login`, query)
|
||||
}
|
||||
|
||||
/** @desc 导出操作日志 */
|
||||
export function exportOperationLog(query: T.LogQuery) {
|
||||
export function exportOperationLog(query: Monitor.LogQuery) {
|
||||
return http.download<any>(`${BASE_URL}/export/operation`, query)
|
||||
}
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as Monitor from './type'
|
||||
|
||||
const BASE_URL = '/monitor/online'
|
||||
|
||||
/** @desc 查询在线用户列表 */
|
||||
export function listOnlineUser(query: T.OnlineUserPageQuery) {
|
||||
return http.get<PageRes<T.OnlineUserResp[]>>(`${BASE_URL}`, query)
|
||||
export function listOnlineUser(query: Monitor.OnlineUserPageQuery) {
|
||||
return http.get<PageRes<Monitor.OnlineUserResp[]>>(`${BASE_URL}`, query)
|
||||
}
|
||||
|
||||
/** @desc 强退在线用户 */
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
export * from '../schedule/job'
|
||||
export * from '../schedule/log'
|
||||
@@ -1,41 +0,0 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
|
||||
const BASE_URL = '/schedule/job'
|
||||
|
||||
/** @desc 查询任务组列表 */
|
||||
export function listGroup() {
|
||||
return http.get(`${BASE_URL}/group`)
|
||||
}
|
||||
|
||||
/** @desc 查询任务列表 */
|
||||
export function listJob(query: T.JobPageQuery) {
|
||||
return http.get<PageRes<T.JobResp[]>>(`${BASE_URL}`, query)
|
||||
}
|
||||
|
||||
/** @desc 新增任务 */
|
||||
export function addJob(data: any) {
|
||||
return http.post(`${BASE_URL}`, data)
|
||||
}
|
||||
|
||||
/** @desc 修改任务 */
|
||||
export function updateJob(data: any, id: number) {
|
||||
return http.put(`${BASE_URL}/${id}`, data)
|
||||
}
|
||||
|
||||
/** @desc 修改任务状态 */
|
||||
export function updateJobStatus(data: any, id: number) {
|
||||
return http.patch(`${BASE_URL}/${id}/status`, data)
|
||||
}
|
||||
|
||||
/** @desc 删除任务 */
|
||||
export function deleteJob(id: number) {
|
||||
return http.del(`${BASE_URL}/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 执行任务 */
|
||||
export function triggerJob(id: number) {
|
||||
return http.post(`${BASE_URL}/trigger/${id}`)
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
|
||||
const BASE_URL = '/schedule/log'
|
||||
|
||||
/** @desc 查询任务日志列表 */
|
||||
export function listJobLog(query: T.JobLogPageQuery) {
|
||||
return http.get<PageRes<T.JobLogResp[]>>(`${BASE_URL}`, query)
|
||||
}
|
||||
|
||||
/** @desc 查询任务日志详情 */
|
||||
export function getJobLogDetail(id: number) {
|
||||
return http.get<boolean>(`${BASE_URL}/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 停止任务 */
|
||||
export function stopJob(id: number) {
|
||||
return http.post(`${BASE_URL}/stop/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 重试任务 */
|
||||
export function retryJob(id: number) {
|
||||
return http.post(`${BASE_URL}/retry/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 查询任务实例列表 */
|
||||
export function listJobInstance(query: T.JobInstanceQuery) {
|
||||
return http.get<T.JobInstanceResp[]>(`${BASE_URL}/instance`, query)
|
||||
}
|
||||
|
||||
/** @desc 查询任务实例日志列表 */
|
||||
export function listJobInstanceLog(query: T.JobInstanceLogQuery) {
|
||||
return http.get<T.JobInstanceLogResp>(`${BASE_URL}/instance/log`, query)
|
||||
}
|
||||
@@ -1,85 +0,0 @@
|
||||
/** 任务类型 */
|
||||
export interface JobResp {
|
||||
id: number
|
||||
groupName: string
|
||||
jobName: string
|
||||
description?: string
|
||||
triggerType: number
|
||||
triggerInterval: string | number
|
||||
executorType: number
|
||||
taskType: number
|
||||
executorInfo: string
|
||||
argsStr?: string
|
||||
argsType?: string
|
||||
routeKey: number
|
||||
blockStrategy: number
|
||||
executorTimeout: number
|
||||
maxRetryTimes: number
|
||||
retryInterval: number
|
||||
parallelNum: number
|
||||
jobStatus: number
|
||||
nextTriggerAt?: Date
|
||||
createDt?: Date
|
||||
updateDt?: Date
|
||||
}
|
||||
export interface JobQuery {
|
||||
groupName: string
|
||||
jobName?: string
|
||||
jobStatus?: number
|
||||
}
|
||||
export interface JobPageQuery extends JobQuery, PageQuery {}
|
||||
|
||||
/** 任务日志类型 */
|
||||
export interface JobLogResp {
|
||||
id: number
|
||||
groupName: string
|
||||
jobName: string
|
||||
jobId: number
|
||||
taskBatchStatus: number
|
||||
operationReason: number
|
||||
executorType: number
|
||||
executorInfo: string
|
||||
executionAt: string
|
||||
createDt: string
|
||||
}
|
||||
export interface JobLogQuery {
|
||||
jobId?: number
|
||||
groupName?: string
|
||||
jobName?: string
|
||||
taskBatchStatus?: number
|
||||
datetimeRange?: Array<string>
|
||||
}
|
||||
export interface JobLogPageQuery extends JobLogQuery, PageQuery {}
|
||||
|
||||
/** 任务实例类型 */
|
||||
export interface JobInstanceResp {
|
||||
id: number
|
||||
groupName: string
|
||||
jobId: number
|
||||
taskBatchId: number
|
||||
taskStatus: number
|
||||
retryCount: number
|
||||
resultMessage: string
|
||||
clientInfo: string
|
||||
}
|
||||
export interface JobInstanceQuery {
|
||||
jobId?: string | number
|
||||
taskBatchId?: number | string
|
||||
}
|
||||
|
||||
/** 任务实例日志类型 */
|
||||
export interface JobInstanceLogResp {
|
||||
id: number
|
||||
message: any[]
|
||||
finished: number
|
||||
fromIndex: number
|
||||
nextStartId: number
|
||||
}
|
||||
export interface JobInstanceLogQuery {
|
||||
taskBatchId: number
|
||||
jobId: number
|
||||
taskId: number
|
||||
startId: number
|
||||
fromIndex: number
|
||||
size: number
|
||||
}
|
||||
@@ -1,18 +1,16 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as System from './type'
|
||||
|
||||
const BASE_URL = '/system/dept'
|
||||
|
||||
/** @desc 查询部门列表 */
|
||||
export function listDept(query: T.DeptQuery) {
|
||||
return http.get<T.DeptResp[]>(`${BASE_URL}/tree`, query)
|
||||
export function listDept(query: System.DeptQuery) {
|
||||
return http.get<System.DeptResp[]>(`${BASE_URL}/tree`, query)
|
||||
}
|
||||
|
||||
/** @desc 查询部门详情 */
|
||||
export function getDept(id: string) {
|
||||
return http.get<T.DeptResp>(`${BASE_URL}/${id}`)
|
||||
return http.get<System.DeptResp>(`${BASE_URL}/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 新增部门 */
|
||||
@@ -31,6 +29,6 @@ export function deleteDept(id: string) {
|
||||
}
|
||||
|
||||
/** @desc 导出部门 */
|
||||
export function exportDept(query: T.DeptQuery) {
|
||||
export function exportDept(query: System.DeptQuery) {
|
||||
return http.download<any>(`${BASE_URL}/export`, query)
|
||||
}
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as System from './type'
|
||||
|
||||
const BASE_URL = '/system/dict'
|
||||
|
||||
/** @desc 查询字典列表 */
|
||||
export function listDict(query: T.DictQuery) {
|
||||
return http.get<T.DictResp[]>(`${BASE_URL}/list`, query)
|
||||
export function listDict(query: System.DictPageQuery) {
|
||||
return http.get<PageRes<System.DictResp[]>>(`${BASE_URL}`, query)
|
||||
}
|
||||
|
||||
/** @desc 查询字典详情 */
|
||||
export function getDict(id: string) {
|
||||
return http.get<T.DictResp>(`${BASE_URL}/${id}`)
|
||||
return http.get<System.DictResp>(`${BASE_URL}/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 新增字典 */
|
||||
@@ -31,13 +29,13 @@ export function deleteDict(id: string) {
|
||||
}
|
||||
|
||||
/** @desc 查询字典项列表 */
|
||||
export function listDictItem(query: T.DictItemPageQuery) {
|
||||
return http.get<PageRes<T.DictItemResp[]>>(`${BASE_URL}/item`, query)
|
||||
export function listDictItem(query: System.DictItemPageQuery) {
|
||||
return http.get<PageRes<System.DictItemResp[]>>(`${BASE_URL}/item`, query)
|
||||
}
|
||||
|
||||
/** @desc 查询字典项详情 */
|
||||
export function getDictItem(id: string) {
|
||||
return http.get<T.DictItemResp>(`${BASE_URL}/item/${id}`)
|
||||
return http.get<System.DictItemResp>(`${BASE_URL}/item/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 新增字典项 */
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as System from './type'
|
||||
|
||||
const BASE_URL = '/system/file'
|
||||
|
||||
/** @desc 查询文件列表 */
|
||||
export function listFile(query: T.FilePageQuery) {
|
||||
return http.get<PageRes<T.FileItem[]>>(`${BASE_URL}`, query)
|
||||
export function listFile(query: System.FilePageQuery) {
|
||||
return http.get<PageRes<System.FileItem[]>>(`${BASE_URL}`, query)
|
||||
}
|
||||
|
||||
/** @desc 修改文件 */
|
||||
@@ -22,5 +20,5 @@ export function deleteFile(ids: string | Array<string>) {
|
||||
|
||||
/** @desc 查询文件资源统计统计 */
|
||||
export function getFileStatistics() {
|
||||
return http.get<T.FileStatisticsResp>(`${BASE_URL}/statistics`)
|
||||
return http.get<System.FileStatisticsResp>(`${BASE_URL}/statistics`)
|
||||
}
|
||||
|
||||
@@ -8,4 +8,3 @@ export * from './file'
|
||||
export * from './storage'
|
||||
export * from './option'
|
||||
export * from './user-center'
|
||||
export * from './message'
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as System from './type'
|
||||
|
||||
const BASE_URL = '/system/menu'
|
||||
|
||||
/** @desc 查询菜单列表 */
|
||||
export function listMenu(query: T.MenuQuery) {
|
||||
return http.get<T.MenuResp[]>(`${BASE_URL}/tree`, query)
|
||||
export function listMenu(query: System.MenuQuery) {
|
||||
return http.get<System.MenuResp[]>(`${BASE_URL}/tree`, query)
|
||||
}
|
||||
|
||||
/** @desc 查询菜单详情 */
|
||||
export function getMenu(id: string) {
|
||||
return http.get<T.MenuResp>(`${BASE_URL}/${id}`)
|
||||
return http.get<System.MenuResp>(`${BASE_URL}/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 新增菜单 */
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
|
||||
const BASE_URL = '/system/message'
|
||||
|
||||
/** @desc 查询消息列表 */
|
||||
export function listMessage(query: T.MessagePageQuery) {
|
||||
return http.get<PageRes<T.MessageResp[]>>(`${BASE_URL}`, query)
|
||||
}
|
||||
|
||||
/** @desc 删除消息 */
|
||||
export function deleteMessage(ids: string | Array<string>) {
|
||||
return http.del(`${BASE_URL}/${ids}`)
|
||||
}
|
||||
|
||||
/** @desc 标记已读 */
|
||||
export function readMessage(ids?: string | Array<string>) {
|
||||
return http.patch(`${BASE_URL}/read`, ids)
|
||||
}
|
||||
|
||||
/** @desc 查询未读消息数量 */
|
||||
export function getUnreadMessageCount() {
|
||||
return http.get(`${BASE_URL}/unread`)
|
||||
}
|
||||
@@ -1,18 +1,16 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as System from './type'
|
||||
|
||||
const BASE_URL = '/system/notice'
|
||||
|
||||
/** @desc 查询公告列表 */
|
||||
export function listNotice(query: T.NoticePageQuery) {
|
||||
return http.get<PageRes<T.NoticeResp[]>>(`${BASE_URL}`, query)
|
||||
export function listNotice(query: System.NoticePageQuery) {
|
||||
return http.get<PageRes<System.NoticeResp[]>>(`${BASE_URL}`, query)
|
||||
}
|
||||
|
||||
/** @desc 查询公告详情 */
|
||||
export function getNotice(id: string) {
|
||||
return http.get<T.NoticeResp>(`${BASE_URL}/${id}`)
|
||||
return http.get<System.NoticeResp>(`${BASE_URL}/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 新增公告 */
|
||||
|
||||
@@ -1,21 +1,19 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as System from './type'
|
||||
|
||||
const BASE_URL = '/system/option'
|
||||
|
||||
/** @desc 查询参数列表 */
|
||||
export function listOption(query: T.OptionQuery) {
|
||||
return http.get<T.OptionResp[]>(`${BASE_URL}`, query)
|
||||
export function listOption(query: System.OptionQuery) {
|
||||
return http.get<System.OptionResp[]>(`${BASE_URL}`, query)
|
||||
}
|
||||
|
||||
/** @desc 修改参数 */
|
||||
export function updateOption(data: any) {
|
||||
return http.put(`${BASE_URL}`, data)
|
||||
return http.patch(`${BASE_URL}`, data)
|
||||
}
|
||||
|
||||
/** @desc 重置参数 */
|
||||
export function resetOptionValue(query: T.OptionQuery) {
|
||||
export function resetOptionValue(query: System.OptionQuery) {
|
||||
return http.patch(`${BASE_URL}/value`, query)
|
||||
}
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as System from './type'
|
||||
|
||||
const BASE_URL = '/system/role'
|
||||
|
||||
/** @desc 查询角色列表 */
|
||||
export function listRole(query: T.RolePageQuery) {
|
||||
return http.get<PageRes<T.RoleResp[]>>(`${BASE_URL}`, query)
|
||||
export function listRole(query: System.RolePageQuery) {
|
||||
return http.get<PageRes<System.RoleResp[]>>(`${BASE_URL}`, query)
|
||||
}
|
||||
|
||||
/** @desc 查询角色详情 */
|
||||
export function getRole(id: string) {
|
||||
return http.get<T.RoleDetailResp>(`${BASE_URL}/${id}`)
|
||||
return http.get<System.RoleDetailResp>(`${BASE_URL}/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 新增角色 */
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as System from './type'
|
||||
|
||||
const BASE_URL = '/system/storage'
|
||||
|
||||
/** @desc 查询存储列表 */
|
||||
export function listStorage(query: T.StoragePageQuery) {
|
||||
return http.get<PageRes<T.StorageResp[]>>(`${BASE_URL}`, query)
|
||||
export function listStorage(query: System.StoragePageQuery) {
|
||||
return http.get<PageRes<System.StorageResp[]>>(`${BASE_URL}`, query)
|
||||
}
|
||||
|
||||
/** @desc 查询存储详情 */
|
||||
export function getStorage(id: string) {
|
||||
return http.get<T.StorageResp>(`${BASE_URL}/${id}`)
|
||||
return http.get<System.StorageResp>(`${BASE_URL}/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 新增存储 */
|
||||
|
||||
@@ -16,33 +16,20 @@ export interface UserResp {
|
||||
updateTime: string
|
||||
deptId: string
|
||||
deptName: string
|
||||
roleIds: Array<number>
|
||||
roleNames: Array<string>
|
||||
disabled: boolean
|
||||
}
|
||||
|
||||
export type UserDetailResp = UserResp & {
|
||||
roleIds?: Array<number>
|
||||
roleNames: string
|
||||
pwdResetTime?: string
|
||||
}
|
||||
|
||||
export interface UserImportResp {
|
||||
importKey: string
|
||||
totalRows: number
|
||||
validRows: number
|
||||
duplicateUserRows: number
|
||||
duplicateEmailRows: number
|
||||
duplicatePhoneRows: number
|
||||
}
|
||||
|
||||
export interface UserQuery {
|
||||
description?: string
|
||||
status?: number
|
||||
deptId?: string
|
||||
sort: Array<string>
|
||||
}
|
||||
|
||||
export interface UserPageQuery extends UserQuery, PageQuery {
|
||||
}
|
||||
export interface UserPageQuery extends UserQuery, PageQuery {}
|
||||
|
||||
/** 系统角色类型 */
|
||||
export interface RoleResp {
|
||||
@@ -59,7 +46,6 @@ export interface RoleResp {
|
||||
updateTime: string
|
||||
disabled: boolean
|
||||
}
|
||||
|
||||
export interface RoleDetailResp {
|
||||
id: string
|
||||
name: string
|
||||
@@ -70,22 +56,17 @@ export interface RoleDetailResp {
|
||||
dataScope: number
|
||||
deptIds: Array<number>
|
||||
isSystem: boolean
|
||||
menuCheckStrictly: boolean
|
||||
deptCheckStrictly: boolean
|
||||
createUserString: string
|
||||
createTime: string
|
||||
updateUserString: string
|
||||
updateTime: string
|
||||
disabled: boolean
|
||||
}
|
||||
|
||||
export interface RoleQuery {
|
||||
description?: string
|
||||
sort: Array<string>
|
||||
}
|
||||
|
||||
export interface RolePageQuery extends RoleQuery, PageQuery {
|
||||
}
|
||||
export interface RolePageQuery extends RoleQuery, PageQuery {}
|
||||
|
||||
/** 系统菜单类型 */
|
||||
export interface MenuResp {
|
||||
@@ -110,7 +91,6 @@ export interface MenuResp {
|
||||
updateTime: string
|
||||
children: MenuResp[]
|
||||
}
|
||||
|
||||
export interface MenuQuery {
|
||||
title?: string
|
||||
status?: number
|
||||
@@ -132,7 +112,6 @@ export interface DeptResp {
|
||||
parentId: string
|
||||
children: DeptResp[]
|
||||
}
|
||||
|
||||
export interface DeptQuery {
|
||||
description?: string
|
||||
status?: number
|
||||
@@ -151,12 +130,11 @@ export interface DictResp {
|
||||
updateUserString: string
|
||||
updateTime: string
|
||||
}
|
||||
|
||||
export interface DictQuery {
|
||||
description?: string
|
||||
sort: Array<string>
|
||||
}
|
||||
|
||||
export interface DictPageQuery extends DictQuery, PageQuery {}
|
||||
export type DictItemResp = {
|
||||
id: string
|
||||
label: string
|
||||
@@ -171,16 +149,13 @@ export type DictItemResp = {
|
||||
updateUserString: string
|
||||
updateTime: string
|
||||
}
|
||||
|
||||
export interface DictItemQuery {
|
||||
description?: string
|
||||
status?: number
|
||||
sort: Array<string>
|
||||
dictId: string
|
||||
}
|
||||
|
||||
export interface DictItemPageQuery extends DictItemQuery, PageQuery {
|
||||
}
|
||||
export interface DictItemPageQuery extends DictItemQuery, PageQuery {}
|
||||
|
||||
/** 系统公告类型 */
|
||||
export interface NoticeResp {
|
||||
@@ -196,15 +171,12 @@ export interface NoticeResp {
|
||||
updateUserString: string
|
||||
updateTime: string
|
||||
}
|
||||
|
||||
export interface NoticeQuery {
|
||||
title?: string
|
||||
type?: string
|
||||
sort: Array<string>
|
||||
}
|
||||
|
||||
export interface NoticePageQuery extends NoticeQuery, PageQuery {
|
||||
}
|
||||
export interface NoticePageQuery extends NoticeQuery, PageQuery {}
|
||||
|
||||
/** 系统文件类型 */
|
||||
export type FileItem = {
|
||||
@@ -212,35 +184,27 @@ export type FileItem = {
|
||||
name: string
|
||||
size: number
|
||||
url: string
|
||||
thumbnailSize: number
|
||||
thumbnailUrl: string
|
||||
extension: string
|
||||
type: number
|
||||
storageId: string
|
||||
storageName: string
|
||||
createUserString: string
|
||||
createTime: string
|
||||
updateUserString: string
|
||||
updateTime: string
|
||||
}
|
||||
|
||||
/** 文件资源统计信息 */
|
||||
export interface FileStatisticsResp {
|
||||
type: string
|
||||
size: any
|
||||
size: number
|
||||
number: number
|
||||
unit: string
|
||||
data: Array<FileStatisticsResp>
|
||||
}
|
||||
|
||||
export interface FileQuery {
|
||||
name?: string
|
||||
type?: string
|
||||
sort: Array<string>
|
||||
}
|
||||
|
||||
export interface FilePageQuery extends FileQuery, PageQuery {
|
||||
}
|
||||
export interface FilePageQuery extends FileQuery, PageQuery {}
|
||||
|
||||
/** 系统存储类型 */
|
||||
export type StorageResp = {
|
||||
@@ -262,96 +226,33 @@ export type StorageResp = {
|
||||
updateUserString: string
|
||||
updateTime: string
|
||||
}
|
||||
|
||||
export interface StorageQuery {
|
||||
description?: string
|
||||
status?: number
|
||||
sort: Array<string>
|
||||
}
|
||||
|
||||
export interface StoragePageQuery extends StorageQuery, PageQuery {
|
||||
}
|
||||
export interface StoragePageQuery extends StorageQuery, PageQuery {}
|
||||
|
||||
/** 系统参数类型 */
|
||||
export interface OptionResp {
|
||||
id: string
|
||||
name: string
|
||||
code: string
|
||||
value: string
|
||||
description: string
|
||||
}
|
||||
|
||||
export interface OptionQuery {
|
||||
code?: Array<string>
|
||||
category?: string
|
||||
code: Array<string>
|
||||
}
|
||||
|
||||
/** 基础配置类型 */
|
||||
export interface BasicConfig {
|
||||
SITE_FAVICON: string
|
||||
SITE_LOGO: string
|
||||
SITE_TITLE: string
|
||||
SITE_COPYRIGHT: string
|
||||
SITE_BEIAN: string
|
||||
export interface BasicConfigResp {
|
||||
site_favicon: string
|
||||
site_logo: string
|
||||
site_title: string
|
||||
site_copyright: string
|
||||
}
|
||||
|
||||
/** 基础配置类型 */
|
||||
export interface SiteConfig {
|
||||
SITE_FAVICON: OptionResp
|
||||
SITE_LOGO: OptionResp
|
||||
SITE_TITLE: OptionResp
|
||||
SITE_DESCRIPTION: OptionResp
|
||||
SITE_COPYRIGHT: OptionResp
|
||||
SITE_BEIAN: OptionResp
|
||||
}
|
||||
|
||||
/** 邮箱配置类型 */
|
||||
export interface MailConfig {
|
||||
MAIL_PROTOCOL: OptionResp
|
||||
MAIL_HOST: OptionResp
|
||||
MAIL_PORT: OptionResp
|
||||
MAIL_USERNAME: OptionResp
|
||||
MAIL_PASSWORD: OptionResp
|
||||
MAIL_SSL_ENABLED: OptionResp
|
||||
MAIL_SSL_PORT: OptionResp
|
||||
}
|
||||
|
||||
/** 安全配置类型 */
|
||||
export interface SecurityConfig {
|
||||
PASSWORD_ERROR_LOCK_COUNT: OptionResp
|
||||
PASSWORD_ERROR_LOCK_MINUTES: OptionResp
|
||||
PASSWORD_EXPIRATION_DAYS: OptionResp
|
||||
PASSWORD_EXPIRATION_WARNING_DAYS: OptionResp
|
||||
PASSWORD_REPETITION_TIMES: OptionResp
|
||||
PASSWORD_MIN_LENGTH: OptionResp
|
||||
PASSWORD_ALLOW_CONTAIN_USERNAME: OptionResp
|
||||
PASSWORD_REQUIRE_SYMBOLS: OptionResp
|
||||
}
|
||||
|
||||
/** 绑定三方账号信息 */
|
||||
/** 绑定三方账号信息*/
|
||||
export interface BindSocialAccountRes {
|
||||
source: string
|
||||
description: string
|
||||
}
|
||||
|
||||
/** 系统消息类型 */
|
||||
export interface MessageResp {
|
||||
id: string
|
||||
title: string
|
||||
content: string
|
||||
type: number
|
||||
isRead: boolean
|
||||
readTime?: string
|
||||
createUserString?: string
|
||||
createTime: string
|
||||
}
|
||||
|
||||
export interface MessageQuery {
|
||||
title?: string
|
||||
type?: number
|
||||
isRead?: boolean
|
||||
sort: Array<string>
|
||||
}
|
||||
|
||||
export interface MessagePageQuery extends MessageQuery, PageQuery {
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type * as System from './type'
|
||||
import http from '@/utils/http'
|
||||
import type * as System from '@/apis/system/type'
|
||||
|
||||
const BASE_URL = '/system/user'
|
||||
|
||||
@@ -9,22 +9,22 @@ export function uploadAvatar(data: FormData) {
|
||||
}
|
||||
|
||||
/** @desc 修改用户基本信息 */
|
||||
export function updateUserBaseInfo(data: { nickname: string, gender: number }) {
|
||||
export function updateUserBaseInfo(data: { nickname: string; gender: number }) {
|
||||
return http.patch(`${BASE_URL}/basic/info`, data)
|
||||
}
|
||||
|
||||
/** @desc 修改密码 */
|
||||
export function updateUserPassword(data: { oldPassword: string, newPassword: string }) {
|
||||
export function updateUserPassword(data: { oldPassword: string; newPassword: string }) {
|
||||
return http.patch(`${BASE_URL}/password`, data)
|
||||
}
|
||||
|
||||
/** @desc 修改手机号 */
|
||||
export function updateUserPhone(data: { phone: string, captcha: string, oldPassword: string }) {
|
||||
export function updateUserPhone(data: { newPhone: string; captcha: string; currentPassword: string }) {
|
||||
return http.patch(`${BASE_URL}/phone`, data)
|
||||
}
|
||||
|
||||
/** @desc 修改邮箱 */
|
||||
export function updateUserEmail(data: { email: string, captcha: string, oldPassword: string }) {
|
||||
export function updateUserEmail(data: { newEmail: string; captcha: string; currentPassword: string }) {
|
||||
return http.patch(`${BASE_URL}/email`, data)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
|
||||
export type * from './type'
|
||||
import type * as System from './type'
|
||||
|
||||
const BASE_URL = '/system/user'
|
||||
|
||||
/** @desc 查询用户列表 */
|
||||
export function listUser(query: T.UserPageQuery) {
|
||||
return http.get<PageRes<T.UserResp[]>>(`${BASE_URL}`, query)
|
||||
export function listUser(query: System.UserPageQuery) {
|
||||
return http.get<PageRes<System.UserResp[]>>(`${BASE_URL}`, query)
|
||||
}
|
||||
|
||||
/** @desc 查询用户详情 */
|
||||
export function getUser(id: string) {
|
||||
return http.get<T.UserDetailResp>(`${BASE_URL}/${id}`)
|
||||
return http.get<System.UserDetailResp>(`${BASE_URL}/${id}`)
|
||||
}
|
||||
|
||||
/** @desc 新增用户 */
|
||||
@@ -31,26 +29,11 @@ export function deleteUser(ids: string | Array<string>) {
|
||||
}
|
||||
|
||||
/** @desc 导出用户 */
|
||||
export function exportUser(query: T.UserQuery) {
|
||||
return http.download(`${BASE_URL}/export`, query)
|
||||
export function exportUser(query: System.UserQuery) {
|
||||
return http.download<any>(`${BASE_URL}/export`, query)
|
||||
}
|
||||
|
||||
/** @desc 重置密码 */
|
||||
export function resetUserPwd(data: any, id: string) {
|
||||
return http.patch(`${BASE_URL}/${id}/password`, data)
|
||||
}
|
||||
|
||||
/** @desc 下载用户导入模板 */
|
||||
export function downloadImportUserTemplate() {
|
||||
return http.download(`${BASE_URL}/downloadImportUserTemplate`)
|
||||
}
|
||||
|
||||
/** @desc 解析用户导入数据 */
|
||||
export function parseImportUser(data: FormData) {
|
||||
return http.post(`${BASE_URL}/parseImportUser`, data)
|
||||
}
|
||||
|
||||
/** @desc 导入用户 */
|
||||
export function importUser(data: any) {
|
||||
return http.post(`${BASE_URL}/import`, data)
|
||||
}
|
||||
|
||||
@@ -1,34 +1,31 @@
|
||||
import type * as T from './type'
|
||||
import http from '@/utils/http'
|
||||
import type { LabelValueState } from '@/types/global'
|
||||
|
||||
export type * from './type'
|
||||
import type * as Tool from './type'
|
||||
|
||||
const BASE_URL = '/generator'
|
||||
|
||||
/** @desc 查询代码生成列表 */
|
||||
export function listGenerator(query: T.TablePageQuery) {
|
||||
return http.get<PageRes<T.TableResp[]>>(`${BASE_URL}/table`, query)
|
||||
export function listGenerator(query: Tool.TablePageQuery) {
|
||||
return http.get<PageRes<Tool.TableResp[]>>(`${BASE_URL}/table`, query)
|
||||
}
|
||||
|
||||
/** @desc 查询字段配置列表 */
|
||||
export function listFieldConfig(tableName: string, requireSync: boolean) {
|
||||
return http.get<T.FieldConfigResp[]>(`${BASE_URL}/field/${tableName}?requireSync=${requireSync}`)
|
||||
return http.get<Tool.FieldConfigResp[]>(`${BASE_URL}/field/${tableName}?requireSync=${requireSync}`)
|
||||
}
|
||||
|
||||
/** @desc 查询生成配置信息 */
|
||||
export function getGenConfig(tableName: string) {
|
||||
return http.get<T.GenConfigResp>(`${BASE_URL}/config/${tableName}`)
|
||||
return http.get<Tool.GenConfigResp>(`${BASE_URL}/config/${tableName}`)
|
||||
}
|
||||
|
||||
/** @desc 保存配置信息 */
|
||||
export function saveGenConfig(tableName: string, req: T.GeneratorConfigResp) {
|
||||
export function saveGenConfig(tableName: string, req: Tool.GeneratorConfigResp) {
|
||||
return http.post(`${BASE_URL}/config/${tableName}`, req)
|
||||
}
|
||||
|
||||
/** @desc 生成预览 */
|
||||
export function genPreview(tableName: string) {
|
||||
return http.get<T.GeneratePreviewResp[]>(`${BASE_URL}/preview/${tableName}`)
|
||||
return http.get<Tool.GeneratePreviewResp[]>(`${BASE_URL}/preview/${tableName}`)
|
||||
}
|
||||
|
||||
/** @desc 生成代码 */
|
||||
@@ -39,8 +36,3 @@ export function generate(tableNames: Array<string>) {
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
|
||||
/** @desc 查询字典列表 */
|
||||
export function listFieldConfigDict() {
|
||||
return http.get<LabelValueState[]>(`${BASE_URL}/dict`)
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ export interface TableQuery {
|
||||
tableName?: string
|
||||
}
|
||||
export interface TablePageQuery extends PageQuery, TableQuery {}
|
||||
|
||||
export interface FieldConfigResp {
|
||||
tableName: string
|
||||
columnName: string
|
||||
@@ -27,7 +26,6 @@ export interface FieldConfigResp {
|
||||
showInQuery: boolean
|
||||
formType: string
|
||||
queryType: string
|
||||
dictCode: string
|
||||
createTime?: string
|
||||
}
|
||||
export interface GenConfigResp {
|
||||
@@ -46,7 +44,6 @@ export interface GeneratorConfigResp {
|
||||
fieldConfigs: FieldConfigResp[]
|
||||
}
|
||||
export interface GeneratePreviewResp {
|
||||
path: string
|
||||
fileName: string
|
||||
content: string
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
<svg t="1657792221683" class="icon" viewBox="0 0 1228 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="45354" width="200" height="200">
|
||||
<path
|
||||
d="M1196.987733 212.5824v540.0576c0 39.594667-34.474667 71.3728-76.765866 71.3728H323.242667c-51.780267 0-88.746667-46.762667-73.250134-92.808533l126.737067-375.808H70.417067C31.675733 355.362133 0 326.4512 0 291.089067V98.372267C0 63.044267 31.675733 34.0992 70.417067 34.0992h378.811733c26.7264 0 51.029333 13.9264 63.010133 35.703467l39.048534 71.406933H1120.256c42.257067 0 76.8 32.119467 76.8 71.3728"
|
||||
fill="#5398DF" p-id="45355"></path>
|
||||
<path
|
||||
d="M1128.721067 997.853867H68.266667a68.266667 68.266667 0 0 1-68.266667-68.266667V280.3712a68.266667 68.266667 0 0 1 68.266667-68.266667h1060.4544a68.266667 68.266667 0 0 1 68.266666 68.266667V929.5872a68.266667 68.266667 0 0 1-68.266666 68.266667"
|
||||
fill="#85BCFF" p-id="45356"></path>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 917 B |
@@ -1,12 +0,0 @@
|
||||
<svg t="1657792062684" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="34419" width="200" height="200">
|
||||
<path
|
||||
d="M0 128a51.2 51.2 0 0 1 51.2-51.2h350.24a51.2 51.2 0 0 1 47.0592 31.0336L473.6 166.4h499.2a51.2 51.2 0 0 1 51.2 51.2v537.6a51.2 51.2 0 0 1-51.2 51.2H51.2a51.2 51.2 0 0 1-51.2-51.2V128z"
|
||||
fill="#5398DF" p-id="34420"></path>
|
||||
<path
|
||||
d="M89.6 249.6m51.2 0l742.4 0q51.2 0 51.2 51.2l0 460.8q0 51.2-51.2 51.2l-742.4 0q-51.2 0-51.2-51.2l0-460.8q0-51.2 51.2-51.2Z"
|
||||
fill="#FFFFFF" p-id="34421"></path>
|
||||
<path
|
||||
d="M0 332.8m51.2 0l921.6 0q51.2 0 51.2 51.2l0 512q0 51.2-51.2 51.2l-921.6 0q-51.2 0-51.2-51.2l0-512q0-51.2 51.2-51.2Z"
|
||||
fill="#85BCFF" p-id="34422"></path>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 745 B |
@@ -1,12 +0,0 @@
|
||||
<svg t="1657792062684" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="34419" width="200" height="200">
|
||||
<path
|
||||
d="M0 128a51.2 51.2 0 0 1 51.2-51.2h350.24a51.2 51.2 0 0 1 47.0592 31.0336L473.6 166.4h499.2a51.2 51.2 0 0 1 51.2 51.2v537.6a51.2 51.2 0 0 1-51.2 51.2H51.2a51.2 51.2 0 0 1-51.2-51.2V128z"
|
||||
fill="#FFA000" p-id="34420"></path>
|
||||
<path
|
||||
d="M89.6 249.6m51.2 0l742.4 0q51.2 0 51.2 51.2l0 460.8q0 51.2-51.2 51.2l-742.4 0q-51.2 0-51.2-51.2l0-460.8q0-51.2 51.2-51.2Z"
|
||||
fill="#FFFFFF" p-id="34421"></path>
|
||||
<path
|
||||
d="M0 332.8m51.2 0l921.6 0q51.2 0 51.2 51.2l0 512q0 51.2-51.2 51.2l-921.6 0q-51.2 0-51.2-51.2l0-512q0-51.2 51.2-51.2Z"
|
||||
fill="#FFCA28" p-id="34422"></path>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 745 B |
@@ -1,9 +0,0 @@
|
||||
<svg t="1657792221683" class="icon" viewBox="0 0 1228 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="45354" width="200" height="200">
|
||||
<path
|
||||
d="M1196.987733 212.5824v540.0576c0 39.594667-34.474667 71.3728-76.765866 71.3728H323.242667c-51.780267 0-88.746667-46.762667-73.250134-92.808533l126.737067-375.808H70.417067C31.675733 355.362133 0 326.4512 0 291.089067V98.372267C0 63.044267 31.675733 34.0992 70.417067 34.0992h378.811733c26.7264 0 51.029333 13.9264 63.010133 35.703467l39.048534 71.406933H1120.256c42.257067 0 76.8 32.119467 76.8 71.3728"
|
||||
fill="#FFA000" p-id="45355"></path>
|
||||
<path
|
||||
d="M1128.721067 997.853867H68.266667a68.266667 68.266667 0 0 1-68.266667-68.266667V280.3712a68.266667 68.266667 0 0 1 68.266667-68.266667h1060.4544a68.266667 68.266667 0 0 1 68.266666 68.266667V929.5872a68.266667 68.266667 0 0 1-68.266666 68.266667"
|
||||
fill="#FFCA28" p-id="45356"></path>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 917 B |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1718188609387" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8734" width="32" height="32" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M558.08 472.064c48.128 53.248-13.312 103.424-13.312 103.424s119.808-61.44 65.536-139.264c-51.2-71.68-91.136-107.52 122.88-232.448 0 1.024-335.872 86.016-175.104 268.288" fill="#FF0000" p-id="8735"></path><path d="M610.304 5.12s101.376 101.376-96.256 258.048C356.352 389.12 478.208 460.8 514.048 543.744 420.864 459.776 354.304 386.048 399.36 317.44 463.872 216.064 651.264 166.912 610.304 5.12" fill="#FF0000" p-id="8736"></path><path d="M720.896 757.76c183.296-95.232 98.304-188.416 39.936-175.104-15.36 3.072-21.504 5.12-21.504 5.12s5.12-8.192 16.384-11.264c117.76-40.96 207.872 120.832-37.888 186.368-1.024 0 2.048-3.072 3.072-5.12m-337.92 38.912s-37.888 21.504 26.624 29.696c76.8 8.192 117.76 8.192 202.752-8.192 0 0 23.552 15.36 53.248 26.624-191.488 80.896-433.152-5.12-282.624-48.128m-23.552-106.496s-43.008 31.744 23.552 37.888c82.944 8.192 149.504 10.24 261.12-13.312 0 0 16.384 16.384 40.96 24.576-231.424 68.608-490.496 5.12-325.632-49.152" fill="#6699FF" p-id="8737"></path><path d="M811.008 876.544s27.648 23.552-31.744 40.96c-111.616 34.816-460.8 45.056-558.08 2.048-34.816-15.36 31.744-35.84 51.2-40.96 21.504-5.12 34.816-3.072 34.816-3.072-38.912-28.672-251.904 52.224-107.52 75.776 390.144 62.464 712.704-28.672 611.328-74.752M400.384 578.56s-178.176 43.008-63.488 56.32c49.152 6.144 146.432 5.12 235.52-3.072 73.728-6.144 147.456-19.456 147.456-19.456s-26.624 11.264-45.056 24.576c-181.248 48.128-530.432 26.624-430.08-23.552 88.064-39.936 155.648-34.816 155.648-34.816" fill="#6699FF" p-id="8738"></path><path d="M418.816 1015.808c176.128 11.264 446.464-6.144 453.632-90.112 0 0-13.312 31.744-146.432 56.32-150.528 27.648-336.896 24.576-446.464 6.144 2.048 1.024 24.576 20.48 139.264 27.648" fill="#6699FF" p-id="8739"></path></svg>
|
||||
|
Before Width: | Height: | Size: 2.0 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1718198141833" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1501" width="32" height="32" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M238.592 155.648H399.36v450.56C399.36 809.984 302.08 880.64 146.432 880.64c-37.888 0-87.04-6.144-118.784-17.408l18.432-130.048c22.528 7.168 51.2 12.288 82.944 12.288 67.584 0 110.592-30.72 110.592-141.312V155.648h-1.024z m301.056 547.84c41.984 22.528 110.592 44.032 179.2 44.032 73.728 0 113.664-30.72 113.664-78.848 0-43.008-33.792-69.632-119.808-99.328-118.784-40.96-197.632-107.52-197.632-211.968C515.072 235.52 617.472 143.36 785.408 143.36c81.92 0 139.264 16.384 182.272 35.84L931.84 308.224c-27.648-13.312-79.872-33.792-148.48-33.792-69.632 0-103.424 32.768-103.424 68.608 0 45.056 38.912 65.536 132.096 101.376 125.952 46.08 184.32 112.64 184.32 214.016 0 119.808-91.136 221.184-286.72 221.184-81.92 0-161.792-22.528-201.728-44.032l31.744-132.096z" fill="#F4DE51" p-id="1502"></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1718198196448" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1559" width="32" height="32" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M172.0576 206.4128L51.2 810.2656h165.9392l75.4176-404.352s65.3568-57.0112 115.6352-51.84c50.2784 5.1968 50.2784 57.472 50.2784 57.472L388.096 810.752h166.016l80.384-404.8128s55.296-57.0112 110.592-51.84c55.3216 5.1968 45.2608 62.6688 45.2608 62.6688l-75.4176 393.5232h170.9568l85.4784-460.928c10.0608-73.0112-33.024-136.192-90.496-142.9248-57.472-6.7072-115.6608 7.68-165.9392 39.2448-50.2784 31.5648-80.4608 72.576-80.4608 72.576S608.512 213.12 528.896 206.4128c-79.6416-6.7072-115.6608 12.8768-150.8352 33.6128a208.8192 208.8192 0 0 0-55.296 47.104l13.824-80.7168z" fill="#389FD6" p-id="1560"></path></svg>
|
||||
|
Before Width: | Height: | Size: 939 B |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1718198445579" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6888" width="32" height="32" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M847.872 240.128v688c0 26.56-21.408 48-48 48h-576c-26.56 0-48-21.44-48-48v-832c0-26.592 21.44-48 48-48h432z" fill="#E9EDED" p-id="6889"></path><path d="M160 768.128v160c0 35.456 28.544 64 64 64h576c35.456 0 64-28.544 64-64v-160H160z" fill="#F8B84E" p-id="6890"></path><path d="M847.872 240.128h-144c-26.56 0-48-21.44-48-48v-144" fill="#F8B84E" p-id="6891"></path><path d="M336 288v48H288v32h48V416h32v-48H416v-32h-48V288h-32z m96 96c-13.344 0-24.8 6.176-33.312 14.688-8.512 8.512-14.688 19.968-14.688 33.312v32c0 12.704 5.664 23.616 13.568 32-7.904 8.384-13.568 19.296-13.568 32v32c0 12.704 5.664 23.616 13.568 32-7.904 8.384-13.568 19.296-13.568 32v32c0 13.344 6.176 24.8 14.688 33.312 8.512 8.512 19.968 14.688 33.312 14.688h160c13.344 0 24.8-6.176 33.312-14.688 8.512-8.512 14.688-19.968 14.688-33.312v-32c0-12.704-5.664-23.616-13.568-32 7.904-8.384 13.568-19.296 13.568-32v-32c0-12.704-5.664-23.616-13.568-32 7.904-8.384 13.568-19.296 13.568-32v-32c0-13.344-6.176-24.8-14.688-33.312-8.512-8.512-19.968-14.688-33.312-14.688h-160z m0 32h160c2.656 0 7.2 1.824 10.688 5.312 3.488 3.488 5.312 8 5.312 10.688v32a17.44 17.44 0 0 1-5.312 10.688 17.408 17.408 0 0 1-10.688 5.312h-160a17.408 17.408 0 0 1-10.688-5.312A17.408 17.408 0 0 1 416 464v-32c0-2.656 1.824-7.2 5.312-10.688A17.408 17.408 0 0 1 432 416z m0 96h160c2.656 0 7.2 1.824 10.688 5.312 3.488 3.488 5.312 8 5.312 10.688v32a17.44 17.44 0 0 1-5.312 10.688 17.408 17.408 0 0 1-10.688 5.312h-160a17.408 17.408 0 0 1-10.688-5.312A17.408 17.408 0 0 1 416 560v-32c0-2.656 1.824-7.2 5.312-10.688A17.408 17.408 0 0 1 432 512z m0 96h160c2.656 0 7.2 1.824 10.688 5.312 3.488 3.488 5.312 8 5.312 10.688v32a17.44 17.44 0 0 1-5.312 10.688 17.408 17.408 0 0 1-10.688 5.312h-160a17.408 17.408 0 0 1-10.688-5.312A17.408 17.408 0 0 1 416 656v-32c0-2.656 1.824-7.2 5.312-10.688A17.408 17.408 0 0 1 432 608z" fill="#F8B84E" p-id="6892"></path><path d="M623.872 799.936a16 16 0 0 0-15.744 16.256v126.432a16 16 0 0 0 0.256 4.32 16 16 0 0 0 0 0.064 16 16 0 0 0 0.352 1.44 16 16 0 0 0 0 0.064 16 16 0 0 0 0.128 0.416 16 16 0 0 0 0.448 1.12 16 16 0 0 0 0.864 1.824 16 16 0 0 0 0.64 0.992 16 16 0 0 0 1.76 2.144 16 16 0 0 0 0.352 0.416 16 16 0 0 0 0.192 0.192 16 16 0 0 0 1.056 0.896 16 16 0 0 0 0.384 0.32 16 16 0 0 0 1.12 0.736 16 16 0 0 0 2.432 1.248 16 16 0 0 0 0.896 0.32 16 16 0 0 0 5.376 0.864H688a16 16 0 1 0 0-32h-47.872v-111.808a16 16 0 0 0-16.256-16.256zM496.128 800a80.256 80.256 0 0 0-80 80c0 44 36 80 80 80 16.224 0 31.296-4.992 43.936-13.376l8.576 8.576a16 16 0 1 0 22.624-22.624l-8.512-8.512c8.416-12.672 13.376-27.808 13.376-44.064 0-44-36-80-80-80z m-193.6 0.128a16 16 0 0 0-2.016 0.384c-24.64 1.92-44.384 22.528-44.384 47.616 0 25.28 20.064 46.08 44.992 47.68a16 16 0 0 0 3.008 0.32h32c9.152 0 16 6.848 16 16 0 9.152-6.848 16-16 16h-64a16 16 0 1 0 0 32h64a16 16 0 0 0 3.296-0.384 48.096 48.096 0 0 0 44.704-47.616c0-25.152-19.84-45.888-44.576-47.68a16 16 0 0 0-3.424-0.32h-30.88a16 16 0 0 0-1.12 0 15.616 15.616 0 0 1-16-16c0-9.152 6.848-16 16-16h64a16 16 0 1 0 0-32H305.248a16 16 0 0 0-1.12 0 16 16 0 0 0-1.6 0z m193.6 31.872a47.776 47.776 0 0 1 43.2 68.672 16 16 0 0 0-11.2-4.672 16 16 0 0 0-11.456 27.264 47.744 47.744 0 0 1-68.576-43.264c0-26.688 21.344-48 48-48z" fill="#E9EDED" p-id="6893"></path></svg>
|
||||
|
Before Width: | Height: | Size: 3.5 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1718188583912" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6620" width="32" height="32" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M94.208 94.208v835.584h835.584V94.208H94.208z m634.92096 405.85216v0.012288c8.011776 0.024576 17.119232 0.436224 23.967744 1.179648 27.891712 3.016704 49.6128 15.050752 68.091904 37.715968 9.201664 11.290624 12.34944 16.2304 11.679744 18.343936-0.432128 1.363968-6.746112 5.885952-26.820608 19.21024-19.720192 13.092864-26.07104 17.014784-27.5456 17.014784-1.497088 0-4.614144-3.207168-9.105408-9.365504-8.6528-11.855872-17.485824-17.266688-31.13984-19.070976-14.68416-1.9456-27.856896 2.68288-34.308096 12.058624-5.515264 8.011776-6.3488 20.901888-1.96608 30.26944 5.07904 10.848256 14.270464 16.846848 49.494016 32.290816 40.624128 17.813504 61.210624 30.005248 76.204032 45.13792 16.146432 16.293888 24.326144 35.106816 26.83904 61.718528 1.226752 12.972032-0.272384 28.34432-3.98336 40.843264-9.10336 30.640128-33.66912 53.075968-69.67296 63.635456-9.95328 2.9184-19.214336 4.661248-28.37504 5.332992-13.985792 1.030144-34.002944 0.462848-46.051328-1.29024-30.482432-4.442112-64.892928-22.17984-82.051072-42.2912-8.423424-9.873408-19.177472-26.12224-19.177472-28.9792 0-1.380352 0.684032-2.164736 3.391488-3.885056 8.032256-5.103616 54.054912-31.412224 54.94784-31.412224 0.540672 0 2.945024 2.832384 5.341184 6.295552 5.429248 7.839744 18.78016 21.313536 25.567232 25.808896 5.543936 3.672064 12.634112 6.619136 21.051392 8.747008 4.820992 1.202176 7.3728 1.417216 17.891328 1.417216 10.747904-0.004096 12.951552-0.18432 17.760256-1.476608 12.71808-3.422208 22.644736-10.50624 26.851328-19.156992 1.8432-3.7376 1.880064-4.204544 1.880064-13.27104v-9.40032l-2.260992-4.48512c-5.474304-10.866688-17.270784-18.323456-54.56896-34.47808-17.13152-7.421952-38.11328-17.885184-46.30528-23.0912-18.696192-11.880448-31.653888-25.462784-40.157184-42.088448-8.45824-16.533504-9.71776-22.687744-9.73824-47.548416-0.02048-19.462144-0.053248-19.222528 3.975168-31.643648 3.65568-11.272192 11.139072-23.863296 19.400704-32.64512 16.4864-17.524736 40.577024-28.788736 66.367488-31.029248 3.29728-0.313344 7.716864-0.434176 12.52352-0.41984z m-221.92128 3.844096h0.008192c49.670144 0.024576 78.143488 0.196608 78.600192 0.483328 0.86016 0.53248 0.968704 4.855808 0.968704 32.444416v31.827968l-49.563648 0.180224-49.563648 0.180224v140.724224c0 77.400064-0.157696 141.185024-0.372736 141.748224-0.350208 0.948224-4.163584 1.019904-36.41344 1.019904h-36.018176l-0.372736-1.45408c-0.239616-0.79872-0.415744-64.587776-0.41984-141.750272l-0.012288-140.296192-49.5616-0.176128-49.565696-0.180224v-31.451136c0-24.94464 0.172032-31.625216 0.837632-32.288768 0.681984-0.702464 25.976832-0.882688 134.967296-0.991232 21.01248-0.02048 39.92576-0.03072 56.48384-0.02048z" fill="#0288D1" p-id="6621"></path></svg>
|
||||
|
Before Width: | Height: | Size: 2.9 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1718188596978" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7659" width="32" height="32" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M615.6 123.6h165.5L512 589.7 242.9 123.6H63.5L512 900.4l448.5-776.9z" fill="#41B883" p-id="7660"></path><path d="M781.1 123.6H615.6L512 303 408.4 123.6H242.9L512 589.7z" fill="#34495E" p-id="7661"></path></svg>
|
||||
|
Before Width: | Height: | Size: 541 B |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1718198382067" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3842" width="32" height="32" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M590.222222 73.955556L859.022222 342.254933V876.088889c0 37.700267-30.5664 68.266667-68.266666 68.266667H233.244444c-37.700267 0-68.266667-30.5664-68.266666-68.266667V142.222222c0-37.700267 30.5664-68.266667 68.266666-68.266666h356.977778z m-11.764622 28.444444H233.244444a39.822222 39.822222 0 0 0-39.799466 38.456889L193.422222 142.222222v733.866667a39.822222 39.822222 0 0 0 38.456889 39.799467L233.244444 915.911111h557.511112a39.822222 39.822222 0 0 0 39.799466-38.456889L830.577778 876.088889V354.053689L578.4576 102.4z" fill="#FFC069" p-id="3843"></path><path d="M854.755556 370.648178h-215.1424c-45.528178 0-82.551467-36.431644-83.5072-81.737956l-0.017067-1.792V73.955556h28.444444v213.162666c0 29.895111 23.819378 54.232178 53.515378 55.062756l1.564445 0.022755h215.1424v28.444445z" fill="#FFC069" p-id="3844"></path><path d="M56.888889 489.244444m28.444444 0l853.333334 0q28.444444 0 28.444444 28.444445l0 284.444444q0 28.444444-28.444444 28.444445l-853.333334 0q-28.444444 0-28.444444-28.444445l0-284.444444q0-28.444444 28.444444-28.444445Z" fill="#FFC069" p-id="3845"></path><path d="M293.916444 756.622222l16.384-37.12c4.352-9.984 8.704-19.968 13.056-31.744h1.024c5.12 11.776 9.472 21.76 14.08 31.744L356.124444 756.622222h50.944l-52.48-96 49.152-94.72h-48.384l-13.824 34.304a503.443911 503.443911 0 0 0-12.288 31.232h-1.024c-5.376-12.288-9.472-22.272-13.824-31.232l-15.36-34.304H248.092444l49.408 92.672L245.276444 756.622222h48.64z m179.2 0v-65.28c0-18.944-3.584-47.36-5.888-66.048h1.024l15.36 45.568 25.856 69.632h25.088l25.6-69.632 15.872-45.568h1.28c-2.56 18.688-6.144 47.104-6.144 66.048V756.622222h41.728V565.902222h-49.664l-29.184 82.432c-3.584 11.008-6.656 23.04-10.496 34.56h-1.28c-3.584-11.52-6.656-23.552-10.496-34.56l-30.208-82.432h-49.408V756.622222h40.96z m303.616 0v-38.4h-74.24V565.902222h-45.824V756.622222h120.064z" fill="#FFFFFF" p-id="3846"></path></svg>
|
||||
|
Before Width: | Height: | Size: 2.2 KiB |
@@ -1 +0,0 @@
|
||||
<svg class="force-icon force-icon-loading arco-icon-loading" width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="font-size: 40px;"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.7998 5.85002C12.4998 5.45002 11.0998 5.50002 9.79984 6.00002C8.49984 6.50002 7.39984 7.35002 6.64984 8.50002C5.89984 9.65002 5.54984 11 5.59984 12.4C5.64984 13.8 6.19984 15.1 7.09984 16.15C7.99984 17.2 9.19984 17.95 10.5498 18.25C11.8998 18.55 13.2998 18.45 14.5498 17.85C15.4498 17.45 16.4998 17.85 16.8998 18.75C17.2998 19.65 16.8998 20.7 15.9998 21.1C14.0498 21.95 11.8498 22.2 9.74984 21.7C7.64984 21.2 5.74984 20.05 4.34984 18.45C2.99984 16.85 2.14984 14.8 1.99984 12.65C1.89984 10.5 2.44984 8.35002 3.59984 6.55002C4.79984 4.75002 6.49984 3.35002 8.54984 2.65002C10.5498 1.90002 12.7998 1.85002 14.8498 2.45002C16.8998 3.05002 18.7498 4.30002 19.9998 6.00002C21.2998 7.75002 21.9998 9.80002 21.9998 12C21.9998 13 21.1998 13.8 20.1998 13.8C19.1998 13.8 18.3998 13 18.3998 12C18.3998 10.6 17.9498 9.30002 17.1498 8.15002C16.2998 7.05002 15.1498 6.25002 13.7998 5.85002Z" fill="url(#svg_2fc1cd5fdf__paint0_linear_118545_226288)"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M13.7998 5.85002C12.4998 5.45002 11.0998 5.50002 9.79984 6.00002C8.49984 6.50002 7.39984 7.35002 6.64984 8.50002C5.89984 9.65002 5.54984 11 5.59984 12.4C5.64984 13.8 6.19984 15.1 7.09984 16.15C7.99984 17.2 9.19984 17.95 10.5498 18.25C11.8998 18.55 13.2998 18.45 14.5498 17.85C15.4498 17.45 16.4998 17.85 16.8998 18.75C17.2998 19.65 16.8998 20.7 15.9998 21.1C14.0498 21.95 11.8498 22.2 9.74984 21.7C7.64984 21.2 5.74984 20.05 4.34984 18.45C2.99984 16.85 2.14984 14.8 1.99984 12.65C1.89984 10.5 2.44984 8.35002 3.59984 6.55002C4.79984 4.75002 6.49984 3.35002 8.54984 2.65002C10.5498 1.90002 12.7998 1.85002 14.8498 2.45002C16.8998 3.05002 18.7498 4.30002 19.9998 6.00002C21.2998 7.75002 21.9998 9.80002 21.9998 12C21.9998 13 21.1998 13.8 20.1998 13.8C19.1998 13.8 18.3998 13 18.3998 12C18.3998 10.6 17.9498 9.30002 17.1498 8.15002C16.2998 7.05002 15.1498 6.25002 13.7998 5.85002Z" fill="url(#svg_2fc1cd5fdf__paint1_linear_118545_226288)"></path><defs><linearGradient id="svg_2fc1cd5fdf__paint0_linear_118545_226288" x1="13.215" y1="6.907" x2="10.715" y2="16.282" gradientUnits="userSpaceOnUse"><stop stop-color="#1765FF"></stop><stop offset=".031" stop-color="#1765FF" stop-opacity=".969"></stop><stop offset="1" stop-color="#1765FF" stop-opacity="0"></stop></linearGradient><linearGradient id="svg_2fc1cd5fdf__paint1_linear_118545_226288" x1="-.574" y1="9.566" x2="18.802" y2="13.316" gradientUnits="userSpaceOnUse"><stop stop-color="#ADC9FF"></stop><stop offset="1" stop-color="#8AB1FF" stop-opacity="0"></stop></linearGradient></defs></svg>
|
||||
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 846 B After Width: | Height: | Size: 846 B |
@@ -4,9 +4,8 @@
|
||||
<span
|
||||
v-if="item.redirect === 'noRedirect' || item.redirect === '' || index === breadcrumbList.length - 1"
|
||||
class="gi_line_1"
|
||||
>{{ item.meta.title }}</span
|
||||
>
|
||||
{{ item.meta.title }}
|
||||
</span>
|
||||
<span v-else class="gi_line_1 breadcrumb-item-title" @click="handleLink(item)">{{ item.meta.title }}</span>
|
||||
</a-breadcrumb-item>
|
||||
</a-breadcrumb>
|
||||
@@ -14,32 +13,19 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import type { RouteLocationMatched } from 'vue-router'
|
||||
import { findTree } from 'xe-utils'
|
||||
import { useRouteStore } from '@/stores'
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const { routes } = useRouteStore()
|
||||
|
||||
let home: RouteLocationMatched | null = null
|
||||
const getHome = () => {
|
||||
if (!home) {
|
||||
const cloneRoutes = JSON.parse(JSON.stringify(routes)) as RouteLocationMatched[]
|
||||
const obj = findTree(cloneRoutes, (i) => i.path === '/home')
|
||||
home = obj.item
|
||||
}
|
||||
}
|
||||
|
||||
const breadcrumbList = ref<RouteLocationMatched[]>([])
|
||||
function getBreadcrumbList() {
|
||||
getHome()
|
||||
const cloneRoutes = JSON.parse(JSON.stringify(routes)) as RouteLocationMatched[]
|
||||
const obj = findTree(cloneRoutes, (i) => i.path === route.path)
|
||||
// 获取当前节点的所有上级节点集合,包含当前节点
|
||||
const arr = obj ? obj.nodes.filter((item) => item.meta && item.meta.title && item.meta.breadcrumb !== false) : []
|
||||
if (home) {
|
||||
breadcrumbList.value = [home, ...arr]
|
||||
// 只显示有title标题的
|
||||
const matched = route.matched.filter((item) => item.meta && item.meta.title)
|
||||
const first = matched[0]
|
||||
if (!isHome(first)) {
|
||||
matched.unshift({ path: '/', meta: { title: '首页' } } as RouteLocationMatched)
|
||||
}
|
||||
breadcrumbList.value = matched.filter((item) => item.meta && item.meta.title && item.meta.breadcrumb !== false)
|
||||
}
|
||||
getBreadcrumbList()
|
||||
|
||||
@@ -48,6 +34,13 @@ watchEffect(() => {
|
||||
getBreadcrumbList()
|
||||
})
|
||||
|
||||
// 判断是否为首页
|
||||
function isHome(route: RouteLocationMatched) {
|
||||
const name = (route?.name as string) || ''
|
||||
if (!name) return false
|
||||
return name.trim() === 'Home'
|
||||
}
|
||||
|
||||
// 路由跳转
|
||||
function handleLink(item: RouteLocationMatched) {
|
||||
const { redirect, path } = item
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
:shortcuts="shortcuts"
|
||||
shortcuts-position="left"
|
||||
style="height: 32px"
|
||||
:allow-clear="allowClear"
|
||||
/>
|
||||
</template>
|
||||
|
||||
@@ -28,10 +27,6 @@ defineProps({
|
||||
placeholder: {
|
||||
type: Array as PropType<string[]>,
|
||||
default: (): string[] => ['开始时间', '结束时间']
|
||||
},
|
||||
allowClear: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -11,6 +11,12 @@
|
||||
<script lang="ts" setup>
|
||||
defineOptions({ name: 'GiCellAvatar' })
|
||||
|
||||
interface Props {
|
||||
avatar: string
|
||||
name: string
|
||||
isLink?: boolean
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
avatar: '',
|
||||
name: '',
|
||||
@@ -20,12 +26,6 @@ const props = withDefaults(defineProps<Props>(), {
|
||||
const emit = defineEmits<{
|
||||
(e: 'click'): void
|
||||
}>()
|
||||
|
||||
interface Props {
|
||||
avatar: string
|
||||
name: string
|
||||
isLink?: boolean
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
<script lang="ts" setup>
|
||||
defineOptions({ name: 'GiCellGender' })
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
gender: 1
|
||||
})
|
||||
|
||||
interface Props {
|
||||
gender: 1 | 2 | 0
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
gender: 1
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
<script lang="ts" setup>
|
||||
defineOptions({ name: 'GiCellStatus' })
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
status: 1
|
||||
})
|
||||
|
||||
interface Props {
|
||||
status: 0 | 1
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
status: 1
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<template>
|
||||
<span v-if="!dictItem"></span>
|
||||
<span v-else-if="!dictItem.extend">{{ dictItem.label }}</span>
|
||||
<a-tag v-else-if="dictItem.extend === 'primary'" color="arcoblue">{{ dictItem.label }}</a-tag>
|
||||
<a-tag v-else-if="dictItem.extend === 'success'" color="green">{{ dictItem.label }}</a-tag>
|
||||
<a-tag v-else-if="dictItem.extend === 'warning'" color="orangered">{{ dictItem.label }}</a-tag>
|
||||
<a-tag v-else-if="dictItem.extend === 'error'" color="red">{{ dictItem.label }}</a-tag>
|
||||
<a-tag v-else-if="dictItem.extend === 'default'" color="gray">{{ dictItem.label }}</a-tag>
|
||||
<a-tag v-else :color="dictItem.extend">{{ dictItem.label }}</a-tag>
|
||||
<span v-else-if="!dictItem.color">{{ dictItem.label }}</span>
|
||||
<a-tag v-else-if="dictItem.color === 'primary'" color="arcoblue">{{ dictItem.label }}</a-tag>
|
||||
<a-tag v-else-if="dictItem.color === 'success'" color="green">{{ dictItem.label }}</a-tag>
|
||||
<a-tag v-else-if="dictItem.color === 'warning'" color="orangered">{{ dictItem.label }}</a-tag>
|
||||
<a-tag v-else-if="dictItem.color === 'error'" color="red">{{ dictItem.label }}</a-tag>
|
||||
<a-tag v-else-if="dictItem.color === 'default'" color="gray">{{ dictItem.label }}</a-tag>
|
||||
<a-tag v-else :color="dictItem.color">{{ dictItem.label }}</a-tag>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
@@ -25,15 +25,9 @@ const props = defineProps({
|
||||
}
|
||||
})
|
||||
|
||||
const dictItem = computed((): LabelValueState => {
|
||||
try {
|
||||
return props.dict.find(
|
||||
(d) => d.value === String(props.value) || d.value === Number(props.value)
|
||||
) || { label: '', value: '' }
|
||||
} catch (error) {
|
||||
return { label: '', value: '' }
|
||||
}
|
||||
})
|
||||
const dictItem = computed(() =>
|
||||
props.dict.find((d) => d.value === String(props.value) || d.value === Number(props.value))
|
||||
)
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
<script lang="ts" setup>
|
||||
defineOptions({ name: 'GiCellTags' })
|
||||
|
||||
withDefaults(defineProps<Props>(), {
|
||||
data: () => []
|
||||
})
|
||||
|
||||
interface Props {
|
||||
data: string[]
|
||||
}
|
||||
|
||||
withDefaults(defineProps<Props>(), {
|
||||
data: () => []
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
|
||||
@@ -17,10 +17,6 @@ import { githubLight } from '@ddietr/codemirror-themes/github-light'
|
||||
import { oneDark } from '@codemirror/theme-one-dark'
|
||||
import { useAppStore } from '@/stores'
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
type: 'javascript',
|
||||
codeJson: ''
|
||||
})
|
||||
const appStore = useAppStore()
|
||||
const isDark = computed(() => appStore.theme === 'dark')
|
||||
|
||||
@@ -28,6 +24,11 @@ interface Props {
|
||||
type?: 'javascript' | 'vue'
|
||||
codeJson: string
|
||||
}
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
type: 'javascript',
|
||||
codeJson: ''
|
||||
})
|
||||
|
||||
const defaultConfig = {
|
||||
tabSize: 2,
|
||||
basic: true,
|
||||
@@ -37,6 +38,11 @@ const defaultConfig = {
|
||||
const config = defaultConfig
|
||||
|
||||
const codeValue = computed(() => props.codeJson)
|
||||
const visible = ref(false)
|
||||
// 打开
|
||||
const open = () => {
|
||||
visible.value = true
|
||||
}
|
||||
|
||||
const extensions = computed(() => {
|
||||
const arr = [isDark.value ? oneDark : githubLight]
|
||||
@@ -48,6 +54,8 @@ const extensions = computed(() => {
|
||||
}
|
||||
return arr
|
||||
})
|
||||
|
||||
defineExpose({ open })
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { type PropType, defineComponent } from 'vue'
|
||||
import { defineComponent, type PropType } from 'vue'
|
||||
import './dot.scss'
|
||||
|
||||
type TPropsType = 'primary' | 'success' | 'warning' | 'danger' | 'info'
|
||||
|
||||
@@ -9,22 +9,22 @@ import type { CSSProperties } from 'vue'
|
||||
|
||||
defineOptions({ name: 'GiFlexibleBox' })
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
modelValue: false,
|
||||
direction: 'right'
|
||||
})
|
||||
|
||||
interface Props {
|
||||
modelValue: boolean
|
||||
direction: 'left' | 'right'
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
modelValue: false,
|
||||
direction: 'right'
|
||||
})
|
||||
|
||||
const BoxRef = ref<HTMLElement | null>()
|
||||
|
||||
const style = computed(() => {
|
||||
const obj: CSSProperties = {}
|
||||
obj[`margin-${props.direction}`]
|
||||
= !props.modelValue && BoxRef.value && BoxRef.value.clientWidth ? `-${BoxRef.value.clientWidth}px` : 0
|
||||
obj[`margin-${props.direction}`] =
|
||||
!props.modelValue && BoxRef.value && BoxRef.value.clientWidth ? `-${BoxRef.value.clientWidth}px` : 0
|
||||
return obj
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
<template>
|
||||
<div class="gi-footer">{{ appStore.getCopyright() }}{{ appStore.getForRecord() ? ` · ${appStore.getForRecord()}` : '' }}</div>
|
||||
<div class="gi-footer">{{ appStore.getCopyright() }}</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { useAppStore } from '@/stores'
|
||||
|
||||
defineOptions({ name: 'GiFooter' })
|
||||
|
||||
const appStore = useAppStore()
|
||||
|
||||
defineOptions({ name: 'GiFooter' })
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.gi-footer {
|
||||
height: 40px;
|
||||
font-size: 13px;
|
||||
height: 50px;
|
||||
font-size: 12px;
|
||||
color: var(--color-text-3);
|
||||
background-color: var(--color-bg-1);
|
||||
border-top: 1px solid var(--color-neutral-3);
|
||||
margin-top: 12px;
|
||||
border-top: 1px dashed var(--color-neutral-3);
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
<template v-for="(item, index) in columns" :key="item.field">
|
||||
<a-col
|
||||
v-if="!isHide(item.hide)"
|
||||
v-show="index <= (options.fold?.index || 0) || (index >= (options.fold?.index || 0) && !collapsed)"
|
||||
:span="item.span || 12"
|
||||
v-bind="item.col || item.span ? item.col : options.col"
|
||||
v-show="index <= (options.fold?.index || 0) || (index >= (options.fold?.index || 0) && !collapsed)"
|
||||
>
|
||||
<a-form-item
|
||||
v-bind="item.item"
|
||||
@@ -104,7 +104,7 @@
|
||||
|
||||
<template v-if="item.type === 'date-picker'">
|
||||
<a-date-picker
|
||||
placeholder="请选择日期"
|
||||
:placeholder="`请选择日期`"
|
||||
v-bind="(item.props as A.DatePickerInstance['$props'])"
|
||||
:model-value="modelValue[item.field as keyof typeof modelValue]"
|
||||
@update:model-value="valueChange($event, item.field)"
|
||||
@@ -113,7 +113,7 @@
|
||||
|
||||
<template v-if="item.type === 'time-picker'">
|
||||
<a-time-picker
|
||||
placeholder="请选择时间"
|
||||
:placeholder="`请选择时间`"
|
||||
v-bind="(item.props as A.TimePickerInstance['$props'])"
|
||||
:model-value="modelValue[item.field as keyof typeof modelValue]"
|
||||
@update:model-value="valueChange($event, item.field)"
|
||||
@@ -121,48 +121,6 @@
|
||||
</a-time-picker>
|
||||
</template>
|
||||
|
||||
<template v-if="item.type === 'year-picker'">
|
||||
<a-year-picker
|
||||
v-bind="(item.props as A.YearPickerInstance['$props'])"
|
||||
:model-value="modelValue[item.field as keyof typeof modelValue]"
|
||||
@update:model-value="valueChange($event, item.field)"></a-year-picker>
|
||||
</template>
|
||||
|
||||
<template v-if="item.type === 'month-picker'">
|
||||
<a-month-picker
|
||||
v-bind="(item.props as A.MonthPickerInstance['$props'])"
|
||||
:model-value="modelValue[item.field as keyof typeof modelValue]"
|
||||
@update:model-value="valueChange($event, item.field)"></a-month-picker>
|
||||
</template>
|
||||
|
||||
<template v-if="item.type === 'quarter-picker'">
|
||||
<a-quarter-picker
|
||||
v-bind="(item.props as A.QuarterPickerInstance['$props'])"
|
||||
:model-value="modelValue[item.field as keyof typeof modelValue]"
|
||||
@update:model-value="valueChange($event, item.field)"></a-quarter-picker>
|
||||
</template>
|
||||
|
||||
<template v-if="item.type === 'week-picker'">
|
||||
<a-week-picker
|
||||
v-bind="(item.props as A.WeekPickerInstance['$props'])"
|
||||
:model-value="modelValue[item.field as keyof typeof modelValue]"
|
||||
@update:model-value="valueChange($event, item.field)"></a-week-picker>
|
||||
</template>
|
||||
|
||||
<template v-if="item.type === 'range-picker'">
|
||||
<a-range-picker
|
||||
v-bind="(item.props as A.RangePickerInstance['$props'])"
|
||||
:model-value="modelValue[item.field as keyof typeof modelValue]"
|
||||
@update:model-value="valueChange($event, item.field)"></a-range-picker>
|
||||
</template>
|
||||
|
||||
<template v-if="item.type === 'color-picker'">
|
||||
<a-color-picker
|
||||
v-bind="(item.props as A.ColorPickerInstance['$props'])"
|
||||
:model-value="modelValue[item.field as keyof typeof modelValue]"
|
||||
@update:model-value="valueChange($event, item.field)"></a-color-picker>
|
||||
</template>
|
||||
|
||||
<template v-if="item.type === 'rate'">
|
||||
<a-rate
|
||||
v-bind="(item.props as A.RateInstance['$props'])"
|
||||
@@ -190,7 +148,7 @@
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</template>
|
||||
<a-col v-if="!options.btns?.hide" :span="options.btns?.span || 12" v-bind="options.btns?.col">
|
||||
<a-col :span="options.btns?.span || 12" v-bind="options.btns?.col" v-if="!options.btns?.hide">
|
||||
<a-space wrap>
|
||||
<slot name="suffix">
|
||||
<a-button type="primary" @click="emit('search')">
|
||||
@@ -213,9 +171,9 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Options, Columns, ColumnsItemHide, ColumnsItemDisabled, ColumnsItem } from './type'
|
||||
import type * as A from '@arco-design/web-vue'
|
||||
import { cloneDeep } from 'lodash-es'
|
||||
import type { Columns, ColumnsItem, ColumnsItemDisabled, ColumnsItemHide, Options } from './type'
|
||||
|
||||
interface Props {
|
||||
modelValue: any
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { reactive } from 'vue'
|
||||
import { cloneDeep } from 'lodash-es'
|
||||
import { Message } from '@arco-design/web-vue'
|
||||
import type { Columns, ColumnsItem, ColumnsItemPropsKey } from './type'
|
||||
import { Message } from '@arco-design/web-vue'
|
||||
|
||||
export function useGiForm(initValue: Columns) {
|
||||
const getInitValue = () => cloneDeep(initValue)
|
||||
|
||||
@@ -8,19 +8,12 @@ export type FormType =
|
||||
| 'textarea'
|
||||
| 'date-picker'
|
||||
| 'time-picker'
|
||||
| 'year-picker'
|
||||
| 'quarter-picker'
|
||||
| 'week-picker'
|
||||
| 'range-picker'
|
||||
| 'month-picker'
|
||||
| 'color-picker'
|
||||
| 'input-number'
|
||||
| 'rate'
|
||||
| 'switch'
|
||||
| 'slider'
|
||||
| 'cascader'
|
||||
| 'tree-select'
|
||||
| 'input-password'
|
||||
|
||||
export type ColumnsItemPropsKey =
|
||||
| keyof A.InputInstance['$props']
|
||||
@@ -28,15 +21,9 @@ export type ColumnsItemPropsKey =
|
||||
| keyof A.TextareaInstance['$props']
|
||||
| keyof A.DatePickerInstance['$props']
|
||||
| keyof A.TimePickerInstance['$props']
|
||||
| keyof A.YearPickerInstance['$props']
|
||||
| keyof A.MonthPickerInstance['$props']
|
||||
| keyof A.QuarterPickerInstance['$props']
|
||||
| keyof A.WeekPickerInstance['$props']
|
||||
| keyof A.RangePickerInstance['$props']
|
||||
| keyof A.RadioGroupInstance['$props']
|
||||
| keyof A.CheckboxGroupInstance['$props']
|
||||
| keyof A.InputNumberInstance['$props']
|
||||
| keyof A.ColorPickerInstance['$props']
|
||||
| keyof A.RateInstance['$props']
|
||||
| keyof A.SwitchInstance['$props']
|
||||
| keyof A.SliderInstance['$props']
|
||||
@@ -49,11 +36,11 @@ export type ColumnsItemRequest<F = any> = (form: F) => Promise<any>
|
||||
export type ColumnsItemFormat<T = any> = (
|
||||
res: T
|
||||
) =>
|
||||
| A.SelectInstance['$props']['options']
|
||||
| A.RadioGroupInstance['$props']['options']
|
||||
| A.CheckboxGroupInstance['$props']['options']
|
||||
| A.CascaderInstance['$props']['options']
|
||||
| A.TreeSelectInstance['$props']['data']
|
||||
| A.SelectInstance['$props']['options']
|
||||
| A.RadioGroupInstance['$props']['options']
|
||||
| A.CheckboxGroupInstance['$props']['options']
|
||||
| A.CascaderInstance['$props']['options']
|
||||
| A.TreeSelectInstance['$props']['data']
|
||||
|
||||
export type ColumnsItemOptionsOrData =
|
||||
| A.SelectInstance['$props']['options']
|
||||
@@ -70,19 +57,19 @@ export interface ColumnsItem<F = any> {
|
||||
col?: A.ColProps // a-col的props, 响应式布局, 优先级大于span
|
||||
item?: Omit<A.FormItemInstance['$props'], 'label' | 'field'> // a-form-item的props
|
||||
props?:
|
||||
& A.InputInstance['$props']
|
||||
& A.SelectInstance['$props']
|
||||
& A.TextareaInstance['$props']
|
||||
& A.DatePickerInstance['$props']
|
||||
& A.TimePickerInstance['$props']
|
||||
& A.RadioGroupInstance['$props']
|
||||
& A.CheckboxGroupInstance['$props']
|
||||
& A.InputNumberInstance['$props']
|
||||
& A.RateInstance['$props']
|
||||
& A.SwitchInstance['$props']
|
||||
& A.SliderInstance['$props']
|
||||
& A.CascaderInstance['$props']
|
||||
& A.TreeSelectInstance['$props']
|
||||
| A.InputInstance['$props']
|
||||
| A.SelectInstance['$props']
|
||||
| A.TextareaInstance['$props']
|
||||
| A.DatePickerInstance['$props']
|
||||
| A.TimePickerInstance['$props']
|
||||
| A.RadioGroupInstance['$props']
|
||||
| A.CheckboxGroupInstance['$props']
|
||||
| A.InputNumberInstance['$props']
|
||||
| A.RateInstance['$props']
|
||||
| A.SwitchInstance['$props']
|
||||
| A.SliderInstance['$props']
|
||||
| A.CascaderInstance['$props']
|
||||
| A.TreeSelectInstance['$props']
|
||||
rules?: A.FormItemInstance['$props']['rules'] // 表单校验规则
|
||||
// 下拉列表|复选框组|单选框组|级联选择组件的options
|
||||
options?:
|
||||
@@ -104,8 +91,8 @@ export interface Options {
|
||||
form: Omit<A.FormInstance['$props'], 'model'>
|
||||
row?: Partial<typeof import('@arco-design/web-vue')['Row']['__defaults']>
|
||||
col?: A.ColProps
|
||||
btns?: { hide?: boolean, span?: number, col?: A.ColProps, searchBtnText?: string }
|
||||
fold?: { enable?: boolean, index?: number, defaultCollapsed?: boolean }
|
||||
btns?: { hide?: boolean; span?: number; col?: A.ColProps; searchBtnText?: string }
|
||||
fold?: { enable?: boolean; index?: number; defaultCollapsed?: boolean }
|
||||
}
|
||||
|
||||
export type Columns<F = any> = ColumnsItem<F>[]
|
||||
|
||||