first commit

main
刘政 3 weeks ago
commit 67699bc2ee

@ -0,0 +1,7 @@
root = true
[*]
end_of_line = lf
charset = utf-8
indent_style = space
indent_size = 2

12
.env

@ -0,0 +1,12 @@
# title
VITE_APP_TITLE='重庆电力公司'
# 本地运行端口号
VITE_PORT=9848
# 启动时自动打开浏览器
VITE_OPEN=true
# clientId
VITE_APP_CLIENT_ID ="195da9fcce574852b850068771cde034"
# 请求最大超时时间ms120s
VITE_APP_HTTP_TIMEOUT=120000

@ -0,0 +1,16 @@
# 本地环境
VITE_USER_NODE_ENV=development
# 公共基础路径
VITE_PUBLIC_PATH=/
# 开发环境接口地址
VITE_API_URL=http://127.0.0.1:9991/api
## 启用WebSocket连接
## 若需启用WebSocket请设置VITE_SOCKET_URL为有效的WebSocket地址
## 若不设置或留空WebSocket功能将不会启用。例
# VITE_SOCKET_URL=ws://127.0.0.1:9993/socket
VITE_SOCKET_URL=ws://127.0.0.1:9993/socket
VITE_APP_CLIENT_ID ="195da9fcce574852b850068771cde034"
# 是否对admin超管用户放行前端按钮权限验证默认放行
VITE_ADMIN_BYPASS_PERMISSION=true

@ -0,0 +1,15 @@
# 线上环境
VITE_USER_NODE_ENV=production
# 公共基础路径
VITE_PUBLIC_PATH=/
# 线上环境接口地址
## 这里的线上环境使用了nginx 反向代理来实现了 api 和 websocket的转发
## 具体请结合/nginx/default.conf 文件查看使用方式
VITE_API_URL="/api"
VITE_APP_CLIENT_ID ="195da9fcce574852b850068771cde034"
# 是否对admin超管用户放行前端按钮权限验证默认放行
VITE_ADMIN_BYPASS_PERMISSION=true
# 是否启用websocket如不需要请注释
VITE_SOCKET_URL="/socket"

@ -0,0 +1,139 @@
name: Docker Sz-Admin CI
on:
push:
branches: [ "preview" ]
pull_request:
branches: [ "preview" ]
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: ubuntu-latest
env:
# 项目服务名(容器名)
APP_NAME: sz-admin
# 应用运行环境
RUNNING_ACTIVE: preview
# 服务监听端口(注意需与 Dockerfile 中 EXPOSE 保持一致)
SERVICE_PORT: 9800
# 可选nginx配置目录挂载到容器的 /etc/nginx/conf.d
NGINX_CONF_DIR: /home/conf/sz-admin-nginx/conf.d
# 阿里云 Docker 仓库域名
ACR_DOMAIN: registry.cn-beijing.aliyuncs.com
# 阿里云命名空间(仓库分组)
ACR_ZONE: sz-action
# 镜像版本号(预览环境固定为 latest
VERSION: latest
# 可选:容器启动脚本存放目录
SHELL_RUN_DIR: /home/run
# 前端预览环境标识(某些 feature 会被禁用)
VITE_PREVIEW: true
# 可选docker-compose 目录路径
DOCKER_COMPOSE_PATH: /home/docker-compose/sz-admin
steps:
# 1. 拉取代码
- name: Checkout source code
uses: actions/checkout@v4
# 2. 配置 Node.js 环境
- name: Set up Node.js 20.x
uses: actions/setup-node@v4
with:
node-version: '20'
# 3. 安装 pnpm 包管理工具
- name: Install pnpm globally
run: npm install -g pnpm
# 4. 安装依赖
- name: Install dependencies
run: pnpm install
# 5. 构建前端项目
- name: Build frontend project
env:
VITE_PREVIEW: ${{ env.VITE_PREVIEW }}
run: pnpm run build
# 6. 安装 sshpass用于非 GitHub Action ssh 操作,可选)
- name: Install sshpass
run: sudo apt-get update && sudo apt-get install -y sshpass
# --- 下面内容为docker可选若你未启用自动 nginx 配置则可忽略 ---
# 检查远程 default.conf 是否存在
# - name: Check remote default.conf
# id: check-file
# run: |
# file_exists=$(sshpass -p ${{ secrets.REMOTE_PASSWORD }} \
# ssh -o StrictHostKeyChecking=no \
# ${{ secrets.REMOTE_USER }}@${{ secrets.REMOTE_HOST }} \
# "if [ -f ${{ env.NGINX_CONF_DIR }}/default.conf ]; then echo true; else echo false; fi")
# echo "file_exists=$file_exists" >> $GITHUB_ENV
# 上传 default.conf 到远程
# - name: Upload default.conf if missing
# if: ${{ env.file_exists == 'false' }}
# run: sshpass -p ${{ secrets.REMOTE_PASSWORD }} \
# scp -o StrictHostKeyChecking=no ./nginx/default.conf \
# ${{ secrets.REMOTE_USER }}@${{ secrets.REMOTE_HOST }}:${{ env.NGINX_CONF_DIR }}
# 7. 构建 Docker 镜像
- name: Build Docker image
run: docker build -t ${{ env.APP_NAME }}:${{ env.VERSION }} .
# 8. 登录阿里云 ACR 仓库
- name: Login to Aliyun Container Registry
run: echo "${{ secrets.ACR_PASSWORD }}" | docker login --username=${{ secrets.ACR_USERNAME }} ${{ env.ACR_DOMAIN }} --password-stdin
# 9. 镜像打标签(推送前命名规范)
- name: Tag Docker image for ACR
run: docker tag ${{ env.APP_NAME }}:${{ env.VERSION }} ${{ env.ACR_DOMAIN }}/${{ env.ACR_ZONE }}/${{ env.APP_NAME }}:${{ env.VERSION }}
# 10. 推送镜像到 ACR
- name: Push Docker image to ACR
run: docker push ${{ env.ACR_DOMAIN }}/${{ env.ACR_ZONE }}/${{ env.APP_NAME }}:${{ env.VERSION }}
# 11. (选用) 使用 docker-compose 自动部署(推荐,与 sz-deploy-v3 脚本结合)
- name: Deploy using docker-compose on remote server
uses: appleboy/ssh-action@v1.2.0
with:
host: ${{ secrets.REMOTE_HOST }}
username: ${{ secrets.REMOTE_USER }}
password: ${{ secrets.REMOTE_PASSWORD }}
script: |
cd ${{ env.DOCKER_COMPOSE_PATH }}
bash upgrade.sh
# 12. (可选) 直接在远程主机用 docker 启动容器
# - name: Deploy container on remote server (direct docker)
# uses: appleboy/ssh-action@v1.2.0
# with:
# host: ${{ secrets.REMOTE_HOST }}
# username: ${{ secrets.REMOTE_USER }}
# password: ${{ secrets.REMOTE_PASSWORD }}
# script: |
# docker pull ${{ env.ACR_DOMAIN }}/${{ env.ACR_ZONE }}/${{ env.APP_NAME }}:${{ env.VERSION }}
# echo "========= 生成容器启动脚本 ========="
# mkdir -p ${{ env.SHELL_RUN_DIR }}
# START_SCRIPT="${{ env.SHELL_RUN_DIR }}/docker_run_${{ env.APP_NAME }}_${{ env.RUNNING_ACTIVE }}.sh"
# cat > $START_SCRIPT <<EOL
# #!/bin/bash
# echo "========= 停止旧容器 ========="
# docker stop ${{ env.APP_NAME }} || true
# docker rm ${{ env.APP_NAME }} || true
# docker image prune -f
# docker builder prune -f
# echo "========= 启动新容器 ========="
# docker run -itd \
# --name ${{ env.APP_NAME }} \
# --restart always \
# -p ${{ env.SERVICE_PORT }}:${{ env.SERVICE_PORT }} \
# -e TZ=Asia/Shanghai \
# -v ${{ env.NGINX_CONF_DIR }}:/etc/nginx/conf.d \
# ${{ env.ACR_DOMAIN }}/${{ env.ACR_ZONE }}/${{ env.APP_NAME }}:${{ env.VERSION }}
# EOL
# chmod +x $START_SCRIPT
# echo "启动脚本已生成:$START_SCRIPT"
# echo "可执行该脚本手动启动容器:"
# echo "bash $START_SCRIPT"
# bash $START_SCRIPT

@ -0,0 +1,106 @@
name: Docker Sz-Admin Test CI
on:
push:
branches: [ "test" ]
pull_request:
branches: [ "test" ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
env:
# 服务名
APP_NAME: sz-admin
# 运行环境变量
RUNNING_ACTIVE: preview
# 端口。若修改端口,请保持与 Dockerfile中的 EXPOSE属性一致
SERVICE_PORT: 9800
# nginx配置文件路径
NGINX_CONF_DIR: /home/conf/sz-admin-nginx/conf.d
# Docker 仓库域名
ACR_DOMAIN: registry.cn-beijing.aliyuncs.com
# 命名空间
ACR_ZONE: sz-action
VERSION: test
SHELL_RUN_DIR: /home/run
# 预览环境标识(预览环境某些功能将禁用)
VITE_PREVIEW: true
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install pnpm
run: npm install -g pnpm
- name: Install dependencies
run: pnpm install
- name: Build project
env:
VITE_PREVIEW: ${{ env.VITE_PREVIEW }}
run: pnpm run build
- name: Install sshpass
run: sudo apt-get update && sudo apt-get install -y sshpass
- name: Check if default.conf exists on remote
id: check-file
run: |
file_exists=$(sshpass -p ${{ secrets.REMOTE_PASSWORD_TEST }} ssh -o StrictHostKeyChecking=no ${{ secrets.REMOTE_USER_TEST }}@${{ secrets.REMOTE_HOST_TEST }} "if [ -f ${{ env.NGINX_CONF_DIR }}/default.conf ]; then echo true; else echo false; fi")
echo "file_exists=$file_exists" >> $GITHUB_ENV
- name: Upload default.conf if needed
if: ${{ env.file_exists == 'false' }}
run: sshpass -p ${{ secrets.REMOTE_PASSWORD_TEST }} scp -o StrictHostKeyChecking=no ./nginx/default.conf ${{ secrets.REMOTE_USER_TEST }}@${{ secrets.REMOTE_HOST_TEST }}:${{ env.NGINX_CONF_DIR }}
- name: Build Docker image
run: docker build -t ${{ env.APP_NAME }}:${{ env.VERSION }} .
- name: Log in to ACR
run: echo "${{ secrets.ACR_PASSWORD }}" | docker login --username=${{ secrets.ACR_USERNAME }} ${{ env.ACR_DOMAIN }} --password-stdin
- name: Tag Docker image
run: docker tag ${{ env.APP_NAME }}:${{ env.VERSION }} ${{ env.ACR_DOMAIN }}/${{ env.ACR_ZONE }}/${{ env.APP_NAME }}:${{ env.VERSION }}
- name: Push Docker image to ACR
run: docker push ${{ env.ACR_DOMAIN }}/${{ env.ACR_ZONE }}/${{ env.APP_NAME }}:${{ env.VERSION }}
- name: Deploy to remote server
uses: appleboy/ssh-action@v1.2.0
with:
host: ${{ secrets.REMOTE_HOST_TEST }}
username: ${{ secrets.REMOTE_USER_TEST }}
password: ${{ secrets.REMOTE_PASSWORD_TEST }}
script: |
docker pull ${{ env.ACR_DOMAIN }}/${{ env.ACR_ZONE }}/${{ env.APP_NAME }}:${{ env.VERSION }}
echo "==================== 生成启动命令脚本 ===================="
mkdir -p ${{ env.SHELL_RUN_DIR }}
START_SCRIPT="${{ env.SHELL_RUN_DIR }}/docker_run_${{ env.APP_NAME }}_${{ env.RUNNING_ACTIVE }}-${{ env.VERSION }}.sh"
cat > $START_SCRIPT <<EOL
#!/bin/bash
echo "==================== 停止旧应用容器 ===================="
docker stop ${{ env.APP_NAME }} || true
docker rm ${{ env.APP_NAME }} || true
docker image prune -f
docker builder prune -f
echo "==================== 启动应用容器 ===================="
docker run -itd \\
--name ${{ env.APP_NAME }} \\
--restart always \\
-p ${{ env.SERVICE_PORT }}:${{ env.SERVICE_PORT }} \\
-e TZ=Asia/Shanghai \\
-v ${{ env.NGINX_CONF_DIR }}:/etc/nginx/conf.d \\
${{ env.ACR_DOMAIN }}/${{ env.ACR_ZONE }}/${{ env.APP_NAME }}:${{ env.VERSION }}
EOL
chmod +x $START_SCRIPT
echo "启动脚本已生成:$START_SCRIPT"
echo "可以运行以下命令手动启动容器:"
echo "bash $START_SCRIPT"
bash $START_SCRIPT

28
.gitignore vendored

@ -0,0 +1,28 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

@ -0,0 +1,9 @@
/dist/*
.local
/node_modules/**
**/*.svg
**/*.sh
/public/*
stats.html

@ -0,0 +1,41 @@
// @see: https://www.prettier.cn
module.exports = {
// 指定最大换行长度
printWidth: 130,
// 缩进制表符宽度 | 空格数
tabWidth: 2,
// 使用制表符而不是空格缩进行 (true制表符false空格)
useTabs: false,
// 结尾不用分号 (truefalse没有)
semi: true,
// 使用单引号 (true单引号false双引号)
singleQuote: true,
// 在对象字面量中决定是否将属性名用引号括起来 可选值 "<as-needed|consistent|preserve>"
quoteProps: 'as-needed',
// 在JSX中使用单引号而不是双引号 (true单引号false双引号)
jsxSingleQuote: false,
// 多行时尽可能打印尾随逗号 可选值"<none|es5|all>"
trailingComma: 'none',
// 在对象,数组括号与文字之间加空格 "{ foo: bar }" (truefalse没有)
bracketSpacing: true,
// 将 > 多行元素放在最后一行的末尾,而不是单独放在下一行 (true放末尾false单独一行)
bracketSameLine: false,
// (x) => {} 箭头函数参数只有一个时是否要有小括号 (avoid省略括号always不省略括号)
arrowParens: 'avoid',
// 指定要使用的解析器,不需要写文件开头的 @prettier
requirePragma: false,
// 可以在文件顶部插入一个特殊标记,指定该文件已使用 Prettier 格式化
insertPragma: false,
// 用于控制文本是否应该被换行以及如何进行换行
proseWrap: 'preserve',
// 在html中空格是否是敏感的 "css" - 遵守 CSS 显示属性的默认值, "strict" - 空格被认为是敏感的 "ignore" - 空格被认为是不敏感的
htmlWhitespaceSensitivity: 'css',
// 控制在 Vue 单文件组件中 <script> 和 <style> 标签内的代码缩进方式
vueIndentScriptAndStyle: false,
// 换行符使用 lf 结尾是 可选值 "<auto|lf|crlf|cr>"
endOfLine: 'lf',
// 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码 (rangeStart开始rangeEnd结束)
rangeStart: 0,
rangeEnd: Infinity
};

File diff suppressed because it is too large Load Diff

@ -0,0 +1,12 @@
# 使用官方的 Nginx 镜像作为基础镜像
FROM nginx:1.27.3
LABEL authors="sz"
# 将前端项目静态文件复制到容器中
COPY ./dist /usr/share/nginx/sz-admin
# 暴露 9800 端口
EXPOSE 9800
# 启动 Nginx 服务
CMD ["nginx", "-g", "daemon off;"]

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [2024] [升职哦sz]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

@ -0,0 +1,156 @@
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">Sz-Admin</h1>
<h4 align="center">基于SpringBoot3、Vue3的轻量级脚手架</h4>
<p align="center">
<a href="https://github.com/feiyuchuixue/sz-boot-parent/stargazers"><img src="https://img.shields.io/github/stars/feiyuchuixue/sz-boot-parent?style=flat-square&logo=GitHub"></a>
<a href="https://github.com/feiyuchuixue/sz-boot-parent/network/members"><img src="https://img.shields.io/github/forks/feiyuchuixue/sz-boot-parent?style=flat-square&logo=GitHub"></a>
<a href='https://gitee.com/feiyuchuixue/sz-boot-parent/stargazers'><img src='https://gitee.com/feiyuchuixue/sz-boot-parent/badge/star.svg?theme=dark' alt='star'></img></a>
<a href='https://gitee.com/feiyuchuixue/sz-boot-parent/members'><img src='https://gitee.com/feiyuchuixue/sz-boot-parent/badge/fork.svg?theme=dark' alt='fork'></img></a>
<a href="https://github.com/feiyuchuixue/sz-boot-parent/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache_2.0-blue.svg"></a>
<a href="https://deepwiki.com/feiyuchuixue/sz-admin"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
</p>
# 简介
> 接触了很多优秀的开源和闭源项目,在使用过程中也发现一些问题,不甘满足的我遂产生了想法:于是利用休息时间编写了一套后台管理系统,它**灵活、简洁、高效**,拥抱最新的技术,因此**Sz-Admin**便诞生了也意为升职Admin升职加薪节节高。
**[Sz Admin](https://szadmin.cn/)** ,一个基于 Spring Boot 3、Vue 3 和 Element-Plus 的开源中后台管理框架,致力于为您提供一个流畅、直观且功能强大的开发框架。它不仅融合了最新的技术趋势,而且通过精心设计,确保了系统的简洁性和高效,让使用者可以专注业务。
## 在线体验
- **官网地址**[szadmin.cn](https://szadmin.cn)
- **文档地址**[开始使用文档](https://szadmin.cn/md/Help/doc/info/start.html)
- **预览地址**[preview.szadmin.cn](https://preview.szadmin.cn)
---
### 代码仓库
#### 前端
- **Github**[sz-admin](https://github.com/feiyuchuixue/sz-admin.git)
- **Gitee**[sz-admin](https://gitee.com/feiyuchuixue/sz-admin.git)
#### 后端
- **Github**[sz-boot-parent](https://github.com/feiyuchuixue/sz-boot-parent.git)
- **Gitee**[sz-boot-parent](https://gitee.com/feiyuchuixue/sz-boot-parent.git)
#### 部署脚本
**方式一Shell**
- **Github**[sz-deploy](https://github.com/feiyuchuixue/sz-deploy.git)
- **Gitee**[sz-deploy](https://gitee.com/feiyuchuixue/sz-deploy.git)
**方式二Docker + Docker Compose 一键部署**
- **Github**[sz-deploy-v3](https://github.com/feiyuchuixue/sz-deploy-v3.git)
- **Gitee**[sz-deploy-v3](https://gitee.com/feiyuchuixue/sz-deploy-v3.git)
## 系统要求
- JDK >= 21
- MySQL >= 8.0.34
- Maven >= 3.8
- Node >= 18.x
## 核心技术
- **SpringBoot 3.x** 最新的Spring Boot版本提供更优的性能和更丰富的特性。
- **Sa-Token**:一个轻量级 Java 权限认证框架,简化权限认证,保障应用的安全性。
- **Mybatis Flex**:一个优雅的 `MyBatis` 增强框架,它非常轻量、同时拥有极高的性能与灵活性。
- ~~[**Flyway**](https://flywaydb.org/)`数据库版本控制`工具,专注于数据库迁移的稳定性与安全性,长期以来为众多开发者所青睐,但其功能拓展性有限,难以很好地满足多人协作开发中的复杂需求。~~<font color=green>**【计划于v1.3.0-beta版本停用】**</font>
- [**Liquibase**](https://www.liquibase.com/):功能全面且灵活的`数据库版本控制`工具,支持多种数据格式(如 XML、YAML、JSON 等)定义变更集,具备更广泛的数据库兼容性、细致的回滚机制以及与 CI/CD 深度集成能力。**在多人同时开发时Liquibase 通过变更日志文件的精细管理,可避免冲突并保障变更的一致性,使团队协作更加高效流畅**。
- **Knife4j**:一个为 `Swagger` 接口文档增强的工具,提供了更直观的 API 文档展示和更便捷的接口测试体验。
- ~~**Minio**:一个开源的对象存储服务,提供高性能、分布式存储解决方案,兼容 S3 API。~~
- **AWS S3** 一个广泛兼容的存储解决方案。通过采用 AWS S3 协议,我们的服务现在能够无缝集成并兼容多种对象存储服务,包括但不限于 MinIO、阿里云OSS和腾讯云OSS等。
- **HikariCP**:选择 `HikariCP` 作为 JDBC 连接池,提供快速且高效的数据库连接管理。
- **Vue 3.x**:采用 `Vue 3.x`Vue.js 的最新稳定版本,提供更强的性能和更丰富的功能,构建响应式用户界面。
- **Vite 6.x**:使用 `Vite 6.x` 作为前端开发和构建工具,它利用现代浏览器的原生 ES 模块导入特性,提供了快速的冷启动和即时模块热更新。
- **TypeScript**:通过 `TypeScript` 的集成,引入静态类型检查,增强了代码的可维护性和可读性,提前避免潜在的错误。
- **Pinia**:状态管理采用 `Pinia`,这是 Vue 3 的解构式状态管理库,它简单、灵活且易于使用,优化了应用的状态管理。
- **Element-Plus**:一个基于 Vue 3 的组件库,提供了一系列高质量的 UI 组件,帮助开发者快速构建美观、功能完备的用户界面。
## 功能列表
- **账户管理**:负责管理系统用户的创建、配置及权限分配,确保用户身份的合法性和操作的合规性。
- **角色管理**:实现角色与权限的精细绑定,通过角色分配简化用户权限管理,提高系统安全性和灵活性。
- **菜单管理**:定制化系统导航结构,通过权限细分确保用户仅访问授权的操作界面,增强操作的直观性和可控性。
- **字典管理**:维护系统内静态数据字典,如配置项、枚举值等,以统一管理和优化数据的一致性。
- **参数管理**:动态调整系统运行参数,无需重启即可实时生效,提升系统响应速度和运维效率。
- **客户端管理**:监管客户端接入,确保客户端的合法性和安全性,维护系统的整体稳定性。
- **部门管理**:构建组织架构,通过树状结构展示,支持数据权限的层级化管理,加强信息的有序性和安全性。
- **代码生成器**自动化生成前后端代码模板支持CRUD操作加速开发周期提升开发效率。
- **WebSocket**提供WebSocket支持。
- **数据权限支持**:通过精细控制和灵活配置,确保用户仅访问授权的数据,强化数据安全性和系统响应性。
- **接口防抖**:通过限制短时间内的重复请求,防止脏数据产生,确保数据的准确性和系统稳定性。
## 系统美照
<table>
<tr>
<td><img alt="登录页" src="https://minioapi.szadmin.cn/public/img/login.webp"/></td>
<td><img alt="home页" src="https://minioapi.szadmin.cn/public/img/home.webp"/></td>
</tr>
<tr>
<td><img alt="账户管理" src="https://minioapi.szadmin.cn/public/img/account.webp"/></td>
<td><img alt="角色管理" src="https://minioapi.szadmin.cn/public/img/role.webp"/></td>
</tr>
<tr>
<td><img alt="菜单管理" src="https://minioapi.szadmin.cn/public/img/menu.webp"/></td>
<td><img alt="字典管理" src="https://minioapi.szadmin.cn/public/img/dict.webp"/></td>
</tr>
<tr>
<td><img alt="配置管理" src="https://minioapi.szadmin.cn/public/img/config.webp"/></td>
<td><img alt="客户端管理" src="https://minioapi.szadmin.cn/public/img/client.webp"/></td>
</tr>
<tr>
<td><img alt="部门管理" src="https://minioapi.szadmin.cn/public/img/dept.webp"/></td>
<td><img alt="代码预览" src="https://minioapi.szadmin.cn/public/img/gen-preview.webp"/></td>
</tr>
<tr>
<td><img alt="代码生成配置1" src="https://minioapi.szadmin.cn/public/img/gen-editor.webp"/></td>
<td><img alt="代码生成配置2" src="https://minioapi.szadmin.cn/public/img/gen-editor2.webp"/></td>
</tr>
<tr>
<td><img alt="角色权限控制" src="https://minioapi.szadmin.cn/public/img/role-detail.webp"/></td>
<td><img alt="多维选择器" src="https://minioapi.szadmin.cn/public/img/duowei-select.webp"/></td>
</tr>
<tr>
<td><img alt="用户登录日志" src="https://minioapi.szadmin.cn/public/img/user-login-log.webp"/></td>
<td><img alt="多维选择器" src="https://minioapi.szadmin.cn/public/img/system-msg.webp"/></td>
</tr>
</table>
----
## 参与讨论
<img alt="加入群聊" src="https://minioapi.szadmin.cn/public/img/wechat.webp"/>
## 捐赠支持 🍵
Sz-Admin是基于[Apache License Version 2.0](https://github.com/feiyuchuixue/sz-boot-parent/blob/main/LICENSE)的开源项目。我们深知,开源精神是社区共享知识和创新的基石。然而,维护这样一个项目需要投入大量的时间、精力和资源。
我们相信爱和热情是推动我们前进的动力但为了确保Sz-Admin能够持续发展并为大家提供更优质的服务我们需要您的支持。如果您觉得Sz-Admin为您的工作或项目带来了便利我们非常欢迎您以任何形式表达您的支持。
以下是一些您可以支持我们的方式:
- **社区互动**:在 [GitHub](https://github.com/feiyuchuixue) | [Gitee](https://gitee.com/feiyuchuixue/sz-boot-parent) 上为我们的项目**Star**、**Fork**、或**Watch**,这不仅能帮助我们扩大影响力,也是对我们工作的认可。🚀
- **捐赠**:如果您愿意,可以通过微信或支付宝进行一次性捐赠。每一笔捐赠都是对作者莫大的鼓励和支持。❤
![请sz-admin作者喝咖啡](https://szadmin.cn/assets/pick.D4fNWjno.webp)
----
## 联系方式
- 微信:`xxmmly010` **(非诚勿扰)**
- 邮箱:`feiyuchuixue@163.com`

@ -0,0 +1,697 @@
# 第三方库和许可证
本项目中引用了以下第三方开源项目及其许可证信息:
## 项目列表
### **[Geeker-Admin](https://github.com/HalseySpicy/Geeker-Admin)**
- **仓库地址**: https://github.com/HalseySpicy/Geeker-Admin
- **许可证类型**: MIT License
- **许可证内容:**
```
MIT License
Copyright (c) 2022 Halsey
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
### [Sa-Token](https://github.com/dromara/Sa-Token)
- **仓库地址**: https://github.com/dromara/Sa-Token
- **许可证类型**: Apache License 2.0
- **许可证内容:**
```
Apache License
Version 2.0, January 2004
https://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2011-2019 hubin.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
### **[mybatis-flex](https://github.com/mybatis-flex/mybatis-flex)**
- **仓库地址**: https://github.com/mybatis-flex/mybatis-flex
- **许可证类型**: Apache License 2.0
- **许可证内容:**
```
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
### [knife4j](https://github.com/xiaoymin/knife4j)
- **仓库地址**: https://github.com/xiaoymin/knife4j
- **许可证类型**: Apache License 2.0
- **许可证内容:**
```
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.
3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.
4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.
5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.
6. Trademarks.
This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.
8. Limitation of Liability.
In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work
To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "{}" replaced with your own
identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included on
the same "printed page" as the copyright notice for easier identification within
third-party archives.
Copyright 2017 小明
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
### [fastexcel](https://github.com/fast-excel/fastexcel)
- **仓库地址**: https://github.com/fast-excel/fastexcel
- **许可证类型**: MIT License
- **许可证内容:**
```
MIT License
Copyright (c) 2024 CodePhiliaX
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
## 其他
请确保您遵循每个项目的许可证要求,并在必要时进行相应的说明和归属。

12
env.d.ts vendored

@ -0,0 +1,12 @@
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_APP_CLIENT_ID: string;
readonly VITE_APP_HTTP_TIMEOUT: number;
readonly VITE_SOCKET_URL: string;
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}
declare const __APP_VERSION__: string;

@ -0,0 +1,227 @@
// import globals from 'globals';
// import pluginJs from '@eslint/js';
// import tseslint from 'typescript-eslint';
// import pluginVue from 'eslint-plugin-vue';
// import vueParser from 'vue-eslint-parser';
// import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
//
// /** @type {import('eslint').Linter.Config[]} */
// export default [
// {
// ignores: ['**/node_modules', '**/dist', '*/*/types', '.gitignore', '.npmrc', '.DS_Store']
// },
// // {languageOptions: { globals: {...globals.browser, ...globals.node} }},
// /** js推荐配置 */
// pluginJs.configs.recommended,
// /** ts推荐配置 */
// ...tseslint.configs.recommended,
// /** vue推荐配置 */
// ...pluginVue.configs['flat/essential'],
// /** prettier 配置 */
// eslintPluginPrettierRecommended,
//
// /** javascript 规则 */
// {
// files: ['**/*.{js,mjs,cjs,ts,vue,jsx,tsx}'],
// rules: {
// "*": "off"
// // 对象结尾逗号
// 'comma-dangle': 'off',
// // 关闭未定义变量
// 'no-undef': 'off',
// // 确保 Prettier 的行为不会被 ESLint 覆盖
// quotes: ['error', 'single', { allowTemplateLiterals: true }],
// // 关闭对未定义变量的警告
// 'no-undefined': 'off',
// //不使用的变量不报错
// 'no-unused-vars': 'off',
// // 禁止使用不规范的空格
// 'no-irregular-whitespace': 'off',
// // 函数括号前的空格
// 'space-before-function-paren': 0,
// // 箭头函数的空格
// 'arrow-spacing': [
// 2,
// {
// before: true,
// after: true
// }
// ],
// // 代码块的空格
// 'block-spacing': [2, 'always'],
// // 大括号风格
// 'brace-style': [
// 2,
// '1tbs',
// {
// allowSingleLine: true
// }
// ],
// // 对象属性换行
// 'object-property-newline': 'off',
// // JSX 引号风格 <'prefer-double', 'prefer-single'>
// 'jsx-quotes': [2, 'prefer-double'],
// // 对象键值对之间的空格
// 'key-spacing': [
// 2,
// {
// beforeColon: false,
// afterColon: true
// }
// ],
// // 关键字之间的空格
// 'keyword-spacing': [
// 2,
// {
// before: true,
// after: true
// }
// ],
// // 构造函数首字母大写
// 'new-cap': [
// 2,
// {
// newIsCap: true,
// capIsNew: false
// }
// ],
// // new 操作符使用时需要括号
// 'new-parens': 2,
// // 禁止使用 Array 构造函数
// 'no-array-constructor': 2,
// // 禁止调用 caller 和 callee
// 'no-caller': 2,
// // 禁止重新分配类名
// 'no-class-assign': 2,
// // 禁止条件中的赋值操作
// 'no-cond-assign': 2,
// // 禁止 const 重新分配
// 'no-const-assign': 2,
// // 正则表达式中的控制字符
// 'no-control-regex': 0,
// // 禁止删除变量
// 'no-delete-var': 2,
// // 禁止在函数参数中使用重复名称
// 'no-dupe-args': 2,
// // 禁止在类中使用重复名称的成员
// 'no-dupe-class-members': 2,
// // 禁止在对象字面量中使用重复的键
// 'no-dupe-keys': 2,
// // 禁止重复的 case 标签
// 'no-duplicate-case': 2,
// // 禁止空的字符类
// 'no-empty-character-class': 2,
// // 禁止空的解构模式
// 'no-empty-pattern': 2,
// // 禁止使用 eval
// 'no-eval': 2,
// // 不允许出现空的代码块
// 'no-empty': 2,
// // 禁止不必要的布尔转换
// 'no-extra-boolean-cast': 2,
// // 禁止不必要的括号
// 'no-extra-parens': [2, 'functions'],
// // 禁止 case 语句落空
// 'no-fallthrough': 2,
// // 禁止在数字后面添加小数点
// 'no-floating-decimal': 2,
// // 禁止对函数声明重新赋值
// 'no-func-assign': 2,
// // 禁止出现歧义多行表达式
// 'no-unexpected-multiline': 2,
// // 禁止不需要的转义
// 'no-useless-escape': 0,
// // 数组的括号前后的间距
// 'array-bracket-spacing': [2, 'never']
// }
// },
// /** vue 规则 */
// {
// files: ['**/*.vue'],
// languageOptions: {
// parser: vueParser,
// globals: { ...globals.browser, ...globals.node },
// parserOptions: {
// /** typescript项目需要用到这个 */
// parser: tseslint.parser,
// ecmaVersion: 'latest',
// /** 允许在.vue 文件中使用 JSX */
// ecmaFeatures: {
// jsx: true
// }
// }
// },
// rules: {
// 'vue/component-definition-name-casing': 'off',
// 'vue/singleline-html-element-content-newline': ['off'],
// 'vue/no-mutating-props': [
// 'error',
// {
// shallowOnly: true
// }
// ],
// // 要求组件名称始终为 “-” 链接的单词
// 'vue/multi-word-component-names': 'off',
// // 关闭 index.html 文件报 clear 错误
// 'vue/comment-directive': 'off',
// // 关闭对 defineProps 的有效性检查
// 'vue/valid-define-props': 'off',
// // 允许在一个文件中定义多个组件
// 'vue/one-component-per-file': 'off',
// // 关闭 Prop 类型要求的警告
// 'vue/require-prop-types': 'off',
// // 关闭属性顺序要求
// 'vue/attributes-order': 'off',
// // 关闭对默认 Prop 的要求
// 'vue/require-default-prop': 'off',
// // 关闭连字符命名检验
// 'vue/attribute-hyphenation': 'off',
// // 关闭自闭合标签的要求
// 'vue/html-self-closing': 'off',
// // 禁止在关闭的括号前有换行
// 'vue/html-closing-bracket-newline': 'off',
// // 允许使用 v-html 指令
// 'vue/no-v-html': 'off'
// }
// },
//
// {
// /**
// * "off" 或 0 ==> 关闭规则
// * "warn" 或 1 ==> 打开的规则作为警告(不影响代码执行)
// * "error" 或 2 ==> 规则作为一个错误(代码不能执行,界面报错)
// */
// rules: {
// // eslint (http://eslint.cn/docs/rules)
// // 'no-var': 'error', // 要求使用 let 或 const 而不是 var
// // 'no-multiple-empty-lines': ['error', { max: 1 }], // 不允许多个空行
// // 'prefer-const': 'off', // 使用 let 关键字声明但在初始分配后从未重新分配的变量,要求使用 const
// // 'no-use-before-define': 'off', // 禁止在 函数/类/变量 定义之前使用它们
//
// // typeScript (https://typescript-eslint.io/rules)
// // '@typescript-eslint/no-unused-vars': 'error', // 禁止定义未使用的变量
// // '@typescript-eslint/prefer-ts-expect-error': 'error', // 禁止使用 @ts-ignore
// // '@typescript-eslint/ban-ts-comment': 'error', // 禁止 @ts-<directive> 使用注释或要求在指令后进行描述
// // '@typescript-eslint/no-inferrable-types': 'off', // 可以轻松推断的显式类型可能会增加不必要的冗长
// // '@typescript-eslint/no-namespace': 'off', // 禁止使用自定义 TypeScript 模块和命名空间
// '@typescript-eslint/no-explicit-any': 'off' // 禁止使用 any 类型
// // '@typescript-eslint/ban-types': 'off', // 禁止使用特定类型
// // '@typescript-eslint/no-var-requires': 'off', // 允许使用 require() 函数导入模块
// // '@typescript-eslint/no-empty-function': 'off', // 禁止空函数
// // '@typescript-eslint/no-non-null-assertion': 'off', // 不允许使用后缀运算符的非空断言(!)
//
// // vue (https://eslint.vuejs.org/rules)
// // 'vue/script-setup-uses-vars': 'error', // 防止<script setup>使用的变量<template>被标记为未使用此规则仅在启用该no-unused-vars规则时有效
// // 'vue/v-slot-style': 'error', // 强制执行 v-slot 指令样式
// // 'vue/no-mutating-props': 'error', // 不允许改变组件 prop
// // 'vue/custom-event-name-casing': 'error', // 为自定义事件名称强制使用特定大小写
// // 'vue/html-closing-bracket-newline': 'error', // 在标签的右括号之前要求或禁止换行
// // 'vue/attribute-hyphenation': 'error', // 对模板中的自定义组件强制执行属性命名样式my-prop="prop"
// // 'vue/attributes-order': 'off', // vue api使用顺序强制执行属性顺序
// // 'vue/no-v-html': 'off', // 禁止使用 v-html
// // 'vue/require-default-prop': 'off', // 此规则要求为每个 prop 为必填时,必须提供默认值
// // 'vue/multi-word-component-names': 'off' // 要求组件名称始终为 “-” 链接的单词
// // 'vue/no-setup-props-destructure': 'off' // 禁止解构 props 传递给 setup
// }
// }
// ];

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 KiB

@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Sz-Admin</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

@ -0,0 +1,41 @@
server {
listen 9800;
listen [::]:9800;
server_name localhost;
access_log /var/log/nginx/default.access.log;
error_log /var/log/nginx/default.error.log;
location / {
root /usr/share/nginx/sz-admin;
try_files $uri $uri/ /index.html;
index index.html;
}
location /api {
client_max_body_size 200M; # 设置最大文件上传大小
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_pass $NGINX_PROXY_PASS;
proxy_pass http://sz-service-admin:9991/api;
}
# websocket 支持,如不需要请手动注释
location /socket {
proxy_pass http://sz-service-websocket:9993; # 后端 WebSocket 服务器的地址
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 3600s; # 设置为1小时
proxy_send_timeout 3600s; # 设置为1小时
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/sz-admin;
}
}

18189
package-lock.json generated

File diff suppressed because it is too large Load Diff

7
package.d.ts vendored

@ -0,0 +1,7 @@
// 在 package.d.ts 文件中
declare module 'package.json' {
const content: {
version: string;
};
export = content;
}

@ -0,0 +1,72 @@
{
"name": "sz-admin",
"version": "1.3.2-beta",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "run-p type-check \"build-only {@}\" --",
"preview": "vite preview",
"build-only": "vite build",
"type-check": "vue-tsc --noEmit -p tsconfig.app.json --composite false",
"lint": "eslint --fix",
"format": "prettier --write src/"
},
"dependencies": {
"@element-plus/icons-vue": "^2.3.2",
"@eslint/js": "^9.39.1",
"@highlightjs/vue-plugin": "^2.1.0",
"@rushstack/eslint-patch": "^1.15.0",
"@vueuse/core": "^10.11.1",
"ace-builds": "^1.43.6",
"animate.css": "^4.1.1",
"axios": "^1.13.2",
"canvg": "^4.0.1",
"element-plus": "^2.11.9",
"eslint-plugin-prettier": "^5.5.4",
"eslint-plugin-vue": "^10.6.2",
"globals": "^16.5.0",
"highlight.js": "^11.11.1",
"html2canvas": "^1.4.1",
"jodit": "^4.7.9",
"lodash.merge": "^4.6.2",
"mitt": "^3.0.1",
"nprogress": "^0.2.0",
"pinia": "^2.3.1",
"pinia-plugin-persistedstate": "^3.2.3",
"screenfull": "^6.0.2",
"sortablejs": "^1.15.6",
"typescript-eslint": "^8.48.0",
"vite-plugin-svg-icons": "^2.0.1",
"vue": "^3.5.25",
"vue-eslint-parser": "^10.2.0",
"vue-i18n": "^9.14.5",
"vue-router": "^4.6.3",
"vue3-ace-editor": "^2.2.4"
},
"devDependencies": {
"@tsconfig/node18": "^18.2.6",
"@types/lodash.merge": "^4.6.9",
"@types/node": "^18.19.130",
"@types/node-forge": "^1.3.14",
"@types/nprogress": "^0.2.3",
"@types/sortablejs": "^1.15.9",
"@vitejs/plugin-vue": "^6.0.2",
"@vitejs/plugin-vue-jsx": "^5.1.2",
"@vue/eslint-config-prettier": "^8.0.0",
"@vue/eslint-config-typescript": "^12.0.0",
"@vue/tsconfig": "^0.5.1",
"eslint": "^9.39.1",
"less": "^4.6.3",
"node-forge": "^1.3.2",
"npm-run-all2": "^6.2.6",
"prettier": "^3.7.3",
"sass": "~1.87.0",
"typescript": "~5.2.2",
"unocss": "^66.6.6",
"vite": "6.3.4",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-vue-devtools": "^7.7.9",
"vue-tsc": "^2.2.12"
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,140 @@
{
"canvasCfg": {
"width": 1920,
"height": 1080,
"scale": 1,
"color": "",
"img": "",
"guide": true,
"adsorp": true,
"adsorp_diff": 5,
"transform_origin": {
"x": 0,
"y": 0
},
"drag_offset": {
"x": 0,
"y": 0
}
},
"gridCfg": {
"enabled": true,
"align": true,
"size": 10
},
"json": [
{
"id": "vue-my-regulator-iwEp1KifC7",
"title": "vue谣调",
"type": "vue",
"binfo": {
"left": 129.98797607421875,
"top": 70,
"width": 50,
"height": 50,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {
"moduleType": "遥测",
"moduleId": ""
},
"tag": "vue-my-regulator",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
},
{
"id": "vue-my-switch-info-XZmvJDTfd8",
"title": "vue遥控",
"type": "vue",
"binfo": {
"left": 240,
"top": 70,
"width": 50,
"height": 50,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {
"moduleType": "遥控",
"moduleId": ""
},
"tag": "vue-my-switch-info",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
},
{
"id": "vue-my-num-info-W1j7n1WBMs",
"title": "vue谣测",
"type": "vue",
"binfo": {
"left": 180,
"top": 70,
"width": 50,
"height": 50,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {
"moduleType": "遥测",
"moduleId": ""
},
"tag": "vue-my-num-info",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
},
{
"id": "vue-my-signal-info-VFdTsqHrqK",
"title": "vue遥信01",
"type": "vue",
"binfo": {
"left": 70,
"top": 140,
"width": 430,
"height": 210,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {},
"tag": "vue-my-signal-info",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
}
]
}

@ -0,0 +1,139 @@
{
"canvasCfg": {
"width": 1920,
"height": 1080,
"scale": 1,
"color": "",
"img": "",
"guide": true,
"adsorp": true,
"adsorp_diff": 5,
"transform_origin": {
"x": 0,
"y": 0
},
"drag_offset": {
"x": 0,
"y": 0
}
},
"gridCfg": {
"enabled": true,
"align": true,
"size": 10
},
"json": [
{
"id": "vue-my-regulator-iwEp1KifC7",
"title": "vue谣调",
"type": "vue",
"binfo": {
"left": 129.98797607421875,
"top": 70,
"width": 50,
"height": 50,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {
"moduleType": "遥测",
"moduleId": ""
},
"tag": "vue-my-regulator",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
},
{
"id": "vue-my-num-info-W1j7n1WBMs",
"title": "vue谣测",
"type": "vue",
"binfo": {
"left": 330,
"top": 380,
"width": 50,
"height": 50,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {
"moduleType": "遥测",
"moduleId": ""
},
"tag": "vue-my-num-info",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
},
{
"id": "vue-my-signal-info-VFdTsqHrqK",
"title": "vue遥信01",
"type": "vue",
"binfo": {
"left": 70,
"top": 140,
"width": 430,
"height": 210,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {},
"tag": "vue-my-signal-info",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
},
{
"id": "vue-my-img-DLxtEt9t9A",
"title": "vue图形组件",
"type": "vue",
"binfo": {
"left": 64.97598266601562,
"top": 370,
"width": 130,
"height": 100,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {
"maxWidth": ""
},
"tag": "vue-my-img",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
}
]
}

@ -0,0 +1,147 @@
{
"canvasCfg": {
"width": 1920,
"height": 1080,
"scale": 1,
"color": "",
"img": "",
"guide": true,
"adsorp": true,
"adsorp_diff": 5,
"transform_origin": {
"x": 0,
"y": 0
},
"drag_offset": {
"x": 0,
"y": 0
}
},
"gridCfg": {
"enabled": true,
"align": true,
"size": 10
},
"json": [
{
"id": "vue-my-signal-info-VFdTsqHrqK",
"title": "vue遥信01",
"type": "vue",
"binfo": {
"left": 50,
"top": 50,
"width": 430,
"height": 210,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {},
"tag": "vue-my-signal-info",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
},
{
"id": "vue-my-run-info-QOvDKecsyZ",
"title": "vue运行信息",
"type": "vue",
"binfo": {
"left": 500,
"top": 50,
"width": 240,
"height": 180,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {
"fontFamily": "Segoe UI",
"fontSize": 14,
"testColor": "#000000"
},
"tag": "vue-my-run-info",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
},
{
"id": "vue-my-multi-type-info-V5rhA1U1PF",
"title": "vue运行状态信息",
"type": "vue",
"binfo": {
"left": 490,
"top": 240,
"width": 270,
"height": 180,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {
"headline": "11111",
"fontFamily": "Segoe UI",
"fontSize": 14,
"dataSource": "ultraVires",
"testColor": "#000000"
},
"tag": "vue-my-multi-type-info",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
},
{
"id": "vue-my-multi-type-info-OMI6pUcsA9",
"title": "vue运行状态信息",
"type": "vue",
"binfo": {
"left": 110,
"top": 270,
"width": 310,
"height": 200,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {
"headline": "2222",
"fontFamily": "Segoe UI",
"fontSize": 14,
"dataSource": "ultraVires",
"testColor": "#000000"
},
"tag": "vue-my-multi-type-info",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
}
]
}

@ -0,0 +1,113 @@
{
"canvasCfg": {
"width": 1920,
"height": 1080,
"scale": 1,
"color": "",
"img": "",
"guide": true,
"adsorp": true,
"adsorp_diff": 5,
"transform_origin": {
"x": 0,
"y": 0
},
"drag_offset": {
"x": 0,
"y": 0
}
},
"gridCfg": {
"enabled": true,
"align": true,
"size": 10
},
"json": [
{
"id": "vue-my-signal-info-VFdTsqHrqK11111",
"title": "vue遥信01",
"type": "vue",
"binfo": {
"left": 50,
"top": 50,
"width": 430,
"height": 210,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {},
"tag": "vue-my-signal-info",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
},
{
"id": "vue-my-run-info-QOvDKecsyZ",
"title": "vue运行信息",
"type": "vue",
"binfo": {
"left": 500,
"top": 50,
"width": 240,
"height": 180,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {
"fontFamily": "Segoe UI",
"fontSize": 14,
"testColor": "#000000"
},
"tag": "vue-my-run-info",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
},
{
"id": "vue-my-tableOnly-a6n14qu2iO",
"title": "单一功能表单",
"type": "vue",
"binfo": {
"left": 40,
"top": 270,
"width": 620,
"height": 250,
"angle": 0
},
"resize": true,
"rotate": true,
"lock": false,
"active": false,
"hide": false,
"props": {
"fontFamily": "黑体",
"fontSize": 12,
"testColor": "#767676"
},
"tag": "vue-my-tableOnly",
"common_animations": {
"val": "",
"delay": "delay-0s",
"speed": "slow",
"repeat": "infinite"
},
"events": []
}
]
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,19 @@
[
{
"id":"1",
"name":"fireControlAlarmFloor.json"
},
{
"id":"2",
"name":"fireControlAlarmHost.json"
},{
"id":"3",
"name":"fireControlAlarmIndex.json"
},{
"id":"4",
"name":"fireControlIndex.json"
},{
"id":"5",
"name":"homeOverview.json"
}
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 950 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 584 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 681 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 800 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

@ -0,0 +1,48 @@
-----BEGIN CERTIFICATE-----
MIIDOTCCAiGgAwIBAgIUMlpmdzEzz0WD0PUO0QkP8fLZNgkwDQYJKoZIhvcNAQEL
BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDA4MzAwODQzMTNaFw0zNDA4
MjgwODQzMTNaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw
HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQCzSYo9nAVhEGB5eg7qq7Hu0sQ4wAJI9v154Vy3VDzX
OQ/kQIBEslzuITwe/k+SlbN7PL5QwG1ZHT5koMhpgIdwZL09+wajebCExxFbyyWs
5ZkFinMocD64VJXh1gflYAoFH6koYspJ1KaVCnden7Pp07dPAGA/HtYZ/NTfdaSc
zdODDMjwAigxb+MW0x3XNTrFkOXZCQr8xjnToT4vzxmqD6pnzSUOYc6TSlDP9jya
SZYnuoi1/fcPXtRwF59hqK8CqZLNuNuBZFjqs+Xtm8P9V4LvWWou/8rrAhjyPJSA
ExbMG9rwdvzLEfKKtxeAy1edY6FN9BPEU/8ouvciFeIXAgMBAAGjITAfMB0GA1Ud
DgQWBBShVuuuBF2x6n++4kQSQ2G5ShT2EjANBgkqhkiG9w0BAQsFAAOCAQEAJwiY
XmwpOedDYHyffk5ILhxE/aHp1FnCYEbdVzXY7cct9uYGFefCNT8FRTUzG+obPn9N
Cqm5Yw/jcETOe4PIEDP2/mcRnjOKXMJtiPlcKTMtMM2nfo56sfA7WKihwjI/JpX+
Ea4E4b18Z4xyCcvs6+sxcK+1D/8deeS/CJ8MvEokLRGudKG86gNaP4AMF6uHkAYh
bwssuuIehpzwDOd6OwT3+8XlKI30lSN+1JNP2PCz/tvOBVDo81RhacYQA3Xrf30c
E/zqnB3/xFIVvb1Z4UCgYpNGkDCD4tMp7gVrPDn5MvrCPAnoGJ76vblyAo0zNqer
lfI9n4JDwJkxbrgfew==
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCzSYo9nAVhEGB5
eg7qq7Hu0sQ4wAJI9v154Vy3VDzXOQ/kQIBEslzuITwe/k+SlbN7PL5QwG1ZHT5k
oMhpgIdwZL09+wajebCExxFbyyWs5ZkFinMocD64VJXh1gflYAoFH6koYspJ1KaV
Cnden7Pp07dPAGA/HtYZ/NTfdaSczdODDMjwAigxb+MW0x3XNTrFkOXZCQr8xjnT
oT4vzxmqD6pnzSUOYc6TSlDP9jyaSZYnuoi1/fcPXtRwF59hqK8CqZLNuNuBZFjq
s+Xtm8P9V4LvWWou/8rrAhjyPJSAExbMG9rwdvzLEfKKtxeAy1edY6FN9BPEU/8o
uvciFeIXAgMBAAECggEADsAuL4N2rdW7GkOAlq4ppYyRuFmT1oz7rdts1WiI2OxI
8m6cHwrNuonheGtUAKtwaONGhT5PwNU3HPBdjNCWVBj1uPO+SBTrAQGf2/2Ky/7X
6CzL7LfPcTsEWeBSJf0Q1fsU383A9vIYAosp5w8crlBM9KMDSC4xT1IN8ZSsRnpF
TfB+tozVJKeIwZzuUT8tA3Sq/m6aYhe986KEfuG3HN7rdrs0Jf7VpdeTlFt46cWS
9hitSodewmtBhFPonq4MBf28kIhKE/ZsI/9LmM6XHEh83DyCsDeLKgkpQ3jC0WVI
LxaxFps4GWY6Jqsz5pF9LfV0v2Cl13mdpK4nloKrAQKBgQDs/i4AT2MJlCBwaWkL
gGqp2vXtu1+8hzT7Uy6VbzfyFFW5oc+Mp8t2KwI55zvIeQVf51oprST6mBDpr0me
m4hllTLknj4pTsnh7Vhus45pMNCI0PS1NKVbg0sIANCdgqg+HafGAgEsfQ7ZaHr8
cHzfre6UQdWlk+ByGMzcQ0tfPwKBgQDBqpO85fXsaEsDVckHymBMbGy0XEGTjcZq
x9UG4bhLWvKEorr9YF5WqoCdjyKniWjUdoSsXbTXidHofnVFBNwrnBkfdGBdS6Xa
xJnGms2Ma0/ZOtCgn3hH1COJ4uRzFtxWkyjeXYslKmNnhkDr4bZcnUph5eFpPukN
hd/ZUcUfKQKBgQC8naOA7a3VzsVukgZfeAnsO28lkM4mHrnFGLPnjMfK6/I6NpUX
zee5mYtBCE7lQ6RKarewmbPnmaVERxThncmVh4QkveidOa6lGCAcot1BzO77JMrN
eSPtzHWn3fYqlfVO0o1XovrKLJHn6CaRyPkpkKVj622dRS8Jv8EzwH85QwKBgH9z
vMqiJFgywrstJ6HC4+Ensdp4pIdw1FXNsTpYLisZbWUwmxLI6wzqJL6MRmgvnBfG
78Vn3e3DO6tgHdkQO71Pe5Ehy5FaiYoRvInhsshojyIM/OPYTxYmXEUQVvwO3W70
Zf8BXONWpBirV+pkntkQgrUuzkuvJTzLD+g7UhkRAoGBANRCYeVuOoinozZUkPL7
BiX06UDPFSB0IXSLvRSmZTMgj4OR0F+/yNzyxQ8SMFJfubFLxnwJtYcK7ibYaIS7
3afQT5IUj4vJ8xwTpm7/QmJlf7iOdd9gyFYvbToR9mZm9RDh/ECZ50g49IHZfAiW
cXI7DAoiCdJEup9jwBGKf8iX
-----END PRIVATE KEY-----

@ -0,0 +1,21 @@
<svg width="557" height="554" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<g>
<path
d="m279,38.19467a238.80533,238.80533 0 1 1 -238.80533,238.80533a238.80533,238.80533 0 0 1 238.80533,-238.80533m0,-38.528a277.33333,277.33333 0 1 0 277.33333,277.33333a277.33333,277.33333 0 0 0 -277.33333,-277.33333z"
id="circle1"
/>
<path
id="line1"
d="m436.15733,143.928a14.67733,14.67733 0 0 0 -12.8,7.44533a96,96 0 0 1 -137.10933,24.66134a125.09867,125.09867 0 0 0 -188.032,24.14933a14.208,14.208 0 0 0 -1.28,2.13333a5.80267,5.80267 0 0 0 -0.66133,1.408a14.656,14.656 0 0 0 24.14933,15.68a6.272,6.272 0 0 0 1.28,-1.49333a96.832,96.832 0 0 1 13.248,-16.49067a95.76533,95.76533 0 0 1 124.62933,-9.30133a125.07733,125.07733 0 0 0 189.26934,-26.176a5.824,5.824 0 0 0 0.68266,-1.49333a14.63467,14.63467 0 0 0 -13.44,-20.43734l0.064,-0.08533z"
/>
<path
id="line2"
d="m440.15733,239.928a14.67733,14.67733 0 0 0 -12.8,7.44533a96,96 0 0 1 -137.10933,24.66134a125.09867,125.09867 0 0 0 -188.032,24.14933a14.208,14.208 0 0 0 -1.28,2.13333a5.80267,5.80267 0 0 0 -0.66133,1.408a14.656,14.656 0 0 0 24.14933,15.68a6.272,6.272 0 0 0 1.28,-1.49333a96.832,96.832 0 0 1 13.248,-16.49067a95.76533,95.76533 0 0 1 124.62933,-9.30133a125.07733,125.07733 0 0 0 189.26934,-26.176a5.824,5.824 0 0 0 0.68266,-1.49333a14.63467,14.63467 0 0 0 -13.44,-20.43734l0.064,-0.08533z"
/>
<path
id="line3"
d="m444.15733,336.928a14.67733,14.67733 0 0 0 -12.8,7.44533a96,96 0 0 1 -137.10933,24.66134a125.09867,125.09867 0 0 0 -188.032,24.14933a14.208,14.208 0 0 0 -1.28,2.13333a5.80267,5.80267 0 0 0 -0.66133,1.408a14.656,14.656 0 0 0 24.14933,15.68a6.272,6.272 0 0 0 1.28,-1.49333a96.832,96.832 0 0 1 13.248,-16.49067a95.76533,95.76533 0 0 1 124.62933,-9.30133a125.07733,125.07733 0 0 0 189.26934,-26.176a5.824,5.824 0 0 0 0.68266,-1.49333a14.63467,14.63467 0 0 0 -13.44,-20.43734l0.064,-0.08533z"
/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1 @@
<svg t="1770361287574" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3048" width="200" height="200"><path d="M938.666667 553.92V768c0 64.8-52.533333 117.333333-117.333334 117.333333H202.666667c-64.8 0-117.333333-52.533333-117.333334-117.333333V256c0-64.8 52.533333-117.333333 117.333334-117.333333h618.666666c64.8 0 117.333333 52.533333 117.333334 117.333333v297.92z m-64-74.624V256a53.333333 53.333333 0 0 0-53.333334-53.333333H202.666667a53.333333 53.333333 0 0 0-53.333334 53.333333v344.48A290.090667 290.090667 0 0 1 192 597.333333a286.88 286.88 0 0 1 183.296 65.845334C427.029333 528.384 556.906667 437.333333 704 437.333333c65.706667 0 126.997333 16.778667 170.666667 41.962667z m0 82.24c-5.333333-8.32-21.130667-21.653333-43.648-32.917333C796.768 511.488 753.045333 501.333333 704 501.333333c-121.770667 0-229.130667 76.266667-270.432 188.693334-2.730667 7.445333-7.402667 20.32-13.994667 38.581333-7.68 21.301333-34.453333 28.106667-51.370666 13.056-16.437333-14.634667-28.554667-25.066667-36.138667-31.146667A222.890667 222.890667 0 0 0 192 661.333333c-14.464 0-28.725333 1.365333-42.666667 4.053334V768a53.333333 53.333333 0 0 0 53.333334 53.333333h618.666666a53.333333 53.333333 0 0 0 53.333334-53.333333V561.525333zM320 480a96 96 0 1 1 0-192 96 96 0 0 1 0 192z m0-64a32 32 0 1 0 0-64 32 32 0 0 0 0 64z" fill="#000000" p-id="3049"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1 @@
<svg t="1770362060130" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12390" width="200" height="200"><path d="M602.144 64a16 16 0 0 1 10.688 4.096l277.856 249.28a16 16 0 0 1 5.312 11.904V864a96 96 0 0 1-96 96H224a96 96 0 0 1-96-96V160a96 96 0 0 1 96-96h378.144zM576 128H224a32 32 0 0 0-32 32v704a32 32 0 0 0 32 32h576a32 32 0 0 0 32-32V385.184h-160a96 96 0 0 1-96-96L575.968 128zM704 608a32 32 0 0 1 0 64H320a32 32 0 0 1 0-64z m-149.344-192a32 32 0 1 1 0 64H320a32 32 0 0 1 0-64zM640 178.432L640 289.216a32 32 0 0 0 32 32l127.104-0.032-159.136-142.752z" p-id="12391"></path></svg>

After

Width:  |  Height:  |  Size: 626 B

@ -0,0 +1 @@
<svg t="1770361409968" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5074" width="200" height="200"><path d="M144.6 138.6h437l182 176.5v118.3h70V314.1c0-18.2-7.5-35.8-20.5-48.5L629.7 87.7c-12.7-12.3-29.4-19-47-19H142.2c-37.2 0-67.5 30.3-67.5 67.5V881c0 37.2 30.3 67.5 67.5 67.5h320.5v-70h-318V138.6z" p-id="5075"></path><path d="M937.2 880.9L855.3 799c53.6-77 46-183.9-22.6-252.5-37.3-37.3-86.9-57.9-139.7-57.9-52.8 0-102.4 20.6-139.7 57.9-37.3 37.3-57.9 86.9-57.9 139.7 0 52.8 20.6 102.4 57.9 139.7 38.5 38.5 89.1 57.8 139.7 57.8 39.5 0 79-11.7 112.8-35.2l81.9 81.9c13.7 13.7 35.8 13.7 49.5 0 13.7-13.6 13.7-35.8 0-49.5zM602.8 776.5c-24.1-24.1-37.4-56.1-37.4-90.2s13.3-66.1 37.4-90.2c24.1-24.1 56.1-37.4 90.2-37.4s66.1 13.3 90.2 37.4c49.7 49.7 49.7 130.7 0 180.4-49.7 49.7-130.6 49.7-180.4 0zM267 265.3c-19.3 0-35 15.7-35 35s15.7 35 35 35h290.8c19.3 0 35-15.7 35-35s-15.7-35-35-35H267zM441.6 458.8H267c-19.3 0-35 15.7-35 35s15.7 35 35 35h174.6c19.3 0 35-15.7 35-35s-15.7-35-35-35zM267 722.4h57c19.3 0 35-15.7 35-35s-15.7-35-35-35h-57c-19.3 0-35 15.7-35 35s15.6 35 35 35z" p-id="5076"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1 @@
<svg t="1770361367217" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4051" width="200" height="200"><path d="M346.396444 310.840889c18.375111 0 33.223111-14.848 33.223111-33.223111L379.619556 144.611556c0-18.375111-14.904889-33.223111-33.223111-33.223111-18.375111 0-33.223111 14.848-33.223111 33.223111l0 132.949333C313.173333 295.992889 328.021333 310.840889 346.396444 310.840889zM512.568889 310.840889c18.375111 0 33.223111-14.848 33.223111-33.223111L545.792 144.611556c0-18.375111-14.848-33.223111-33.223111-33.223111-18.375111 0-33.223111 14.904889-33.223111 33.223111l0 132.949333C479.345778 295.992889 494.250667 310.840889 512.568889 310.840889zM412.899556 175.104l33.223111 0 0 66.446222-33.223111 0 0-66.446222ZM579.128889 175.104l33.223111 0 0 66.446222-33.223111 0 0-66.446222ZM911.36 811.121778l0-539.875556c0.113778-55.125333-44.657778-99.726222-99.669333-99.726222L745.244444 171.52l0 66.446222 66.446222 0c18.318222 0 33.336889 14.904889 33.336889 33.223111l0 539.932444c0 18.318222-15.018667 33.28-33.336889 33.28L213.447111 844.401778c-18.261333 0-33.223111-14.961778-33.223111-33.28L179.712 811.121778l0.512-539.875556c0-18.318222 14.904889-33.223111 33.223111-33.223111L279.893333 238.023111 279.893333 171.52 213.447111 171.52C158.435556 171.52 113.777778 216.120889 113.777778 271.246222l0 539.875556c0 55.239111 44.657778 99.726222 99.669333 99.726222l598.243556 0c53.418667 0 96.654222-41.927111 99.271111-94.776889 0.056889-0.284444 0.398222-0.625778 0.398222-0.910222l0-2.958222c0-0.398222 0.113778-0.739556 0.113778-1.137778L911.36 811.064889zM678.798222 310.840889c18.318222 0 33.223111-14.848 33.223111-33.223111L712.021333 144.611556c0-18.375111-14.904889-33.223111-33.223111-33.223111s-33.223111 14.848-33.223111 33.223111l0 132.949333C645.575111 295.992889 660.309333 310.840889 678.798222 310.840889zM312.604444 444.302222l398.848 0c18.204444 0 33.223111-14.904889 33.223111-33.223111 0-18.375111-15.018667-33.223111-33.223111-33.223111L312.604444 377.856c-18.375111 0-33.223111 14.848-33.223111 33.223111C279.381333 429.397333 294.229333 444.302222 312.604444 444.302222zM711.452444 541.866667 312.604444 541.866667c-18.375111 0-33.223111 14.904889-33.223111 33.223111s14.848 33.223111 33.223111 33.223111l398.848 0c18.204444 0 33.223111-14.904889 33.223111-33.223111S729.656889 541.866667 711.452444 541.866667zM711.452444 712.305778 312.604444 712.305778c-18.375111 0-33.223111 14.904889-33.223111 33.109333 0 18.375111 14.848 33.336889 33.223111 33.336889l398.848 0c18.204444 0 33.223111-14.961778 33.223111-33.336889C744.675556 727.153778 729.656889 712.305778 711.452444 712.305778z" fill="#272636" p-id="4052"></path></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -0,0 +1,6 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="48" height="48" fill="white" fill-opacity="0.01"/>
<path d="M23 29V6M23 6H43M23 6H5" stroke="black" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M8.42529 19.5798L40.3008 28.1209L38.5585 30.7598L34.5561 37.9696L32.8137 40.6085L4.80183 33.1028L8.42529 19.5798Z" fill="#2F88FF"/>
<path d="M38.5585 30.7598L42.4222 31.7951L40.3516 39.5225L34.5561 37.9696M38.5585 30.7598L40.3008 28.1209L8.42529 19.5798L4.80183 33.1028L32.8137 40.6085L34.5561 37.9696M38.5585 30.7598L34.5561 37.9696" stroke="black" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 707 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path fill="currentColor" d="M2 8a3 3 0 0 1 3-3h10a3 3 0 0 1 3 3v3a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3V8Zm7 1.5a.5.5 0 0 0 .5.5H14a.5.5 0 0 0 0-1H9.5a.5.5 0 0 0-.5.5Zm-1 0a1.5 1.5 0 1 0-3 0a1.5 1.5 0 0 0 3 0Z"/></svg>

After

Width:  |  Height:  |  Size: 294 B

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

Loading…
Cancel
Save