diff --git a/.gitignore b/.gitignore
index d64f405..abeb34f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -101,30 +101,6 @@ fabric.properties
go.work
.idea
-web/.idea
-
-web/node_modules
-web/.DS_Store
-web/dist
-web/dist-ssr
-web/*.local
-web/.eslintcache
-web/report.html
-web/vite.config.*.timestamp*
-
-web/yarn.lock
-web/npm-debug.log*
-web/.pnpm-error.log*
-web/.pnpm-debug.log
-web/tests/**/coverage/
-web/.vscode/
-
-# Editor directories and files
-web/*.suo
-web/*.ntvs*
-web/*.njsproj
-web/*.sln
-web/tsconfig.tsbuildinfo
template/tmp/*
logs/*
diff --git a/go.mod b/go.mod
index 760dbbc..56f019e 100644
--- a/go.mod
+++ b/go.mod
@@ -30,6 +30,7 @@ require (
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
+ github.com/gin-contrib/cors v1.7.2 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/glebarez/go-sqlite v1.21.2 // indirect
github.com/go-kit/kit v0.12.0 // indirect
diff --git a/go.sum b/go.sum
index 72dbe6a..ffeecaa 100644
--- a/go.sum
+++ b/go.sum
@@ -210,6 +210,8 @@ github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uq
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/gin-contrib/cors v1.7.2 h1:oLDHxdg8W/XDoN/8zamqk/Drgt4oVZDvaV0YmvVICQw=
+github.com/gin-contrib/cors v1.7.2/go.mod h1:SUJVARKgQ40dmrzgXEVxj2m7Ig1v1qIboQkPDTQ9t2E=
github.com/gin-contrib/pprof v1.5.0 h1:E/Oy7g+kNw94KfdCy3bZxQFtyDnAX2V7axRS7sNYVrU=
github.com/gin-contrib/pprof v1.5.0/go.mod h1:GqFL6LerKoCQ/RSWnkYczkTJ+tOAUVN/8sbnEtaqOKs=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
diff --git a/http/api/client.go b/http/api/client.go
index 9cd5794..abf94dd 100644
--- a/http/api/client.go
+++ b/http/api/client.go
@@ -84,22 +84,25 @@ func (ClientApi) List(c *gin.Context) {
}
for i, v := range data {
- // 获取客户端链接信息
- peer, err := component.Wireguard().GetClientByPublicKey(v.Keys.PublicKey)
- if err != nil {
- continue
- }
- var ipAllocation string
- for _, iaip := range peer.AllowedIPs {
- ipAllocation += iaip.String() + ","
- }
- data[i].DataTraffic = &vo.DataTraffic{
- Online: time.Since(peer.LastHandshakeTime).Minutes() < 3,
- ReceiveBytes: utils.FlowCalculation().Parse(peer.TransmitBytes),
- TransmitBytes: utils.FlowCalculation().Parse(peer.ReceiveBytes),
- ConnectEndpoint: ipAllocation,
- LastHandAt: peer.LastHandshakeTime.Format("2006-01-02 15:04:05"),
+ if v.Keys != nil {
+ // 获取客户端链接信息
+ peer, err := component.Wireguard().GetClientByPublicKey(v.Keys.PublicKey)
+ if err != nil {
+ continue
+ }
+ var ipAllocation string
+ for _, iaip := range peer.AllowedIPs {
+ ipAllocation += iaip.String() + ","
+ }
+ data[i].DataTraffic = &vo.DataTraffic{
+ Online: time.Since(peer.LastHandshakeTime).Minutes() < 3,
+ ReceiveBytes: utils.FlowCalculation().Parse(peer.TransmitBytes),
+ TransmitBytes: utils.FlowCalculation().Parse(peer.ReceiveBytes),
+ ConnectEndpoint: ipAllocation,
+ LastHandAt: peer.LastHandshakeTime.Format("2006-01-02 15:04:05"),
+ }
}
+
}
response.R(c).Paginate(data, total, p.Current, p.Size)
diff --git a/http/api/login.go b/http/api/login.go
index 08b43b3..e3d9571 100644
--- a/http/api/login.go
+++ b/http/api/login.go
@@ -10,6 +10,7 @@ import (
"wireguard-ui/component"
"wireguard-ui/http/param"
"wireguard-ui/http/response"
+ "wireguard-ui/http/vo"
"wireguard-ui/service"
"wireguard-ui/utils"
)
@@ -89,3 +90,22 @@ func (LoginApi) Login(c *gin.Context) {
"expireAt": expireAt,
})
}
+
+// Logout
+// @description: 退出登陆
+// @receiver LoginApi
+// @param c
+func (LoginApi) Logout(c *gin.Context) {
+ loginUser, ok := c.Get("user")
+ if !ok {
+ response.R(c).AuthorizationFailed("未登陆")
+ return
+ }
+
+ if err := component.JWT().Logout(loginUser.(*vo.User).Id); err != nil {
+ response.R(c).FailedWithError("退出登陆失败")
+ return
+ }
+
+ response.R(c).OK()
+}
diff --git a/http/api/user.go b/http/api/user.go
index 6cc3ff7..67f4f7e 100644
--- a/http/api/user.go
+++ b/http/api/user.go
@@ -4,7 +4,9 @@ import (
"encoding/base64"
"errors"
"fmt"
+ "gitee.ltd/lxh/logger/log"
"github.com/gin-gonic/gin"
+ "strings"
"wireguard-ui/global/constant"
"wireguard-ui/http/param"
"wireguard-ui/http/response"
@@ -50,7 +52,7 @@ func (UserApi) SaveUser(c *gin.Context) {
response.R(c).FailedWithError(errors.New("账号长度在2-20位"))
return
}
- if len(p.Password) < 8 || len(p.Password) > 32 {
+ if (len(p.Password) < 8 || len(p.Password) > 32) && p.Password != "" {
response.R(c).FailedWithError(errors.New("密码长度在8-32位"))
return
}
@@ -67,6 +69,25 @@ func (UserApi) SaveUser(c *gin.Context) {
}
}
+ if strings.HasPrefix(p.Avatar, "data:image/png;base64,") {
+ avatar := strings.Replace(p.Avatar, "data:image/png;base64,", "", -1)
+ avatarByte, err := base64.StdEncoding.DecodeString(avatar)
+ if err != nil {
+ log.Errorf("反解析头像失败: %v", err.Error())
+ response.R(c).FailedWithError("上传头像失败")
+ return
+ }
+
+ file, err := utils.FileSystem().UploadFile(avatarByte, ".png")
+ if err != nil {
+ log.Errorf("上传头像失败: %v", err.Error())
+ response.R(c).FailedWithError("上传头像失败")
+ return
+ }
+
+ p.Avatar = file
+ }
+
userEnt := &model.User{
Base: model.Base{
Id: p.Id,
diff --git a/http/middleware/authorization.go b/http/middleware/authorization.go
index 346a28f..8b42a1a 100644
--- a/http/middleware/authorization.go
+++ b/http/middleware/authorization.go
@@ -63,6 +63,10 @@ func Authorization() gin.HandlerFunc {
// 将用户信息放入上下文
c.Set("user", &user)
+ if c.Request.RequestURI == "/api/user/logout" {
+ c.Next()
+ }
+
// 生成一个新token
secret := component.JWT().GenerateSecret(user.Password, uuid.NewString(), time.Now().Local().String())
tokenStr, _, err := component.JWT().GenerateToken(user.Id, secret, userClaims.ExpiresAt.Time, time.Now().Local())
diff --git a/http/param/login.go b/http/param/login.go
index 7592a42..00bf9e8 100644
--- a/http/param/login.go
+++ b/http/param/login.go
@@ -6,5 +6,5 @@ type Login struct {
Account string `json:"account" form:"account" label:"账号" binding:"required,min=2,max=20"`
Password string `json:"password" form:"password" label:"密码" binding:"required,min=8,max=32"`
CaptchaId string `json:"captchaId" form:"captchaId" label:"验证码ID" binding:"required"`
- CaptchaCode string `json:"captchaCode" form:"captchaCode" label:"验证码" binding:"required,len=4"`
+ CaptchaCode string `json:"captchaCode" form:"captchaCode" label:"验证码" binding:"required,max=4"`
}
diff --git a/http/param/user.go b/http/param/user.go
index e396b23..9dcf21c 100644
--- a/http/param/user.go
+++ b/http/param/user.go
@@ -7,7 +7,7 @@ import "wireguard-ui/global/constant"
type SaveUser struct {
Id string `json:"id" form:"id" label:"id" binding:"omitempty"` // id
Account string `json:"account" form:"account" label:"账户号" binding:"required_without=Id"` // 账户号
- Password string `json:"password" form:"password" label:"密码" binding:"required_without=Id"` // 密码
+ Password string `json:"password" form:"password" label:"密码" binding:"omitempty"` // 密码
Nickname string `json:"nickname" form:"nickname" label:"昵称" binding:"required,min=2"` // 昵称
Avatar string `json:"avatar" form:"avatar" label:"头像" binding:"omitempty"` // 头像
Contact string `json:"contact" form:"contact" label:"联系方式" binding:"omitempty"` // 联系方式
diff --git a/http/router/root.go b/http/router/root.go
index 43a74c5..ca20716 100644
--- a/http/router/root.go
+++ b/http/router/root.go
@@ -19,6 +19,16 @@ func InitRouter() *gin.Engine {
r.ForwardedByClientIP = true
// 将请求打印至控制台
r.Use(gin.Logger())
+ //r.Use(cors.New(cors.Config{
+ // AllowOrigins: []string{"http://localhost:3100"},
+ // AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE"},
+ // AllowHeaders: []string{"Origin"},
+ // ExposeHeaders: []string{"Content-Length"},
+ // AllowCredentials: true,
+ // AllowOriginFunc: func(origin string) bool {
+ // return true
+ // },
+ //}))
if config.Config.File.Type == "local" {
r.Static("/assets", config.Config.File.Path)
diff --git a/http/router/user.go b/http/router/user.go
index bce2b3b..108dd08 100644
--- a/http/router/user.go
+++ b/http/router/user.go
@@ -20,5 +20,6 @@ func UserApi(r *gin.RouterGroup) {
userApi.PUT("/change-password", api.User().ChangePassword) // 修改用户密码
userApi.PUT("/reset-password/:id", api.User().ResetPassword) // 重置用户密码
userApi.POST("/generate-avatar", api.User().GenerateAvatar) // 生成头像
+ userApi.POST("/logout", api.Login().Logout) // 退出登陆
}
}
diff --git a/http/vo/user.go b/http/vo/user.go
index 2b5c395..3e07a0e 100644
--- a/http/vo/user.go
+++ b/http/vo/user.go
@@ -1,17 +1,22 @@
package vo
-import "wireguard-ui/global/constant"
+import (
+ "wireguard-ui/global/constant"
+ "wireguard-ui/model"
+)
// UserItem
// @description: 用户列表的数据
type UserItem struct {
- Id string `json:"id"`
- Account string `json:"account"`
- Nickname string `json:"nickname"`
- Avatar string `json:"avatar"`
- Contact string `json:"contact"`
- IsAdmin constant.UserType `json:"isAdmin"`
- Status constant.Status `json:"status"`
+ Id string `json:"id"`
+ Account string `json:"account"`
+ Nickname string `json:"nickname"`
+ Avatar string `json:"avatar"`
+ Contact string `json:"contact"`
+ IsAdmin constant.UserType `json:"isAdmin"`
+ Status constant.Status `json:"status"`
+ CreatedAt model.JsonTime `json:"createdAt"`
+ UpdatedAt model.JsonTime `json:"updatedAt"`
}
// User
diff --git a/utils/flow_calculation.go b/utils/flow_calculation.go
index 7292056..49a589d 100644
--- a/utils/flow_calculation.go
+++ b/utils/flow_calculation.go
@@ -1,7 +1,9 @@
package utils
import (
+ "fmt"
"github.com/dustin/go-humanize"
+ "math"
"math/big"
)
@@ -20,3 +22,23 @@ func (flowCalculation) Parse(b int64) string {
b2 := big.Int{}
return humanize.BigBytes(b2.SetInt64(b))
}
+
+// PrettyByteSizeGB
+// @description:
+// @param b
+// @return string
+func PrettyByteSizeGB(b int) string {
+ bf := float64(b)
+ ks := []string{"", "Ki", "Mi", "Gi"}
+ for i, unit := range ks {
+ if math.Abs(bf) < 1024.0 {
+ return fmt.Sprintf("%3.1f%sB", bf, unit)
+ }
+ if i+1 >= len(ks) {
+ return fmt.Sprintf("%3.1f%sB", bf, unit)
+ }
+ bf /= 1024.0
+ }
+
+ return fmt.Sprintf("%.1fYiB", bf)
+}
diff --git a/web/.editorconfig b/web/.editorconfig
deleted file mode 100644
index 68cc827..0000000
--- a/web/.editorconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 2
-end_of_line = unset
-insert_final_newline = true
-trim_trailing_whitespace = true
diff --git a/web/.env.development b/web/.env.development
deleted file mode 100644
index 318c4cb..0000000
--- a/web/.env.development
+++ /dev/null
@@ -1,12 +0,0 @@
-# 是否使用Hash路由
-VITE_USE_HASH = 'true'
-
-# 资源公共路径,需要以 /开头和结尾
-VITE_PUBLIC_PATH = '/'
-
-# Axios 基础路径
-# VITE_AXIOS_BASE_URL = '/api' # 用于代理
-VITE_AXIOS_BASE_URL = 'https://mock.apipark.cn/m1/3776410-0-default' # apifox云端mock
-
-# 代理配置-target
-VITE_PROXY_TARGET = 'http://localhost:8085'
diff --git a/web/.env.production b/web/.env.production
deleted file mode 100644
index 1b309e4..0000000
--- a/web/.env.production
+++ /dev/null
@@ -1,10 +0,0 @@
-# 是否使用Hash路由
-VITE_USE_HASH = 'false'
-
-# 资源公共路径,需要以 /开头和结尾
-VITE_PUBLIC_PATH = '/'
-
-VITE_AXIOS_BASE_URL = '/api' # 用于代理
-
-# 代理配置-target
-VITE_PROXY_TARGET = 'http://localhost:8085'
diff --git a/web/.eslint-global-variables.json b/web/.eslint-global-variables.json
deleted file mode 100644
index 4f9c397..0000000
--- a/web/.eslint-global-variables.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "globals": {
- "$loadingBar": true,
- "$message": true,
- "$dialog": true,
- "$notification": true,
- "$modal": true,
- "defineOptions": true,
- "EffectScope": true,
- "computed": true,
- "createApp": true,
- "customRef": true,
- "defineAsyncComponent": true,
- "defineComponent": true,
- "effectScope": true,
- "getCurrentInstance": true,
- "getCurrentScope": true,
- "h": true,
- "inject": true,
- "isProxy": true,
- "isReactive": true,
- "isReadonly": true,
- "isRef": true,
- "markRaw": true,
- "nextTick": true,
- "onActivated": true,
- "onBeforeMount": true,
- "onBeforeUnmount": true,
- "onBeforeUpdate": true,
- "onDeactivated": true,
- "onErrorCaptured": true,
- "onMounted": true,
- "onRenderTracked": true,
- "onRenderTriggered": true,
- "onScopeDispose": true,
- "onServerPrefetch": true,
- "onUnmounted": true,
- "onUpdated": true,
- "provide": true,
- "reactive": true,
- "readonly": true,
- "ref": true,
- "resolveComponent": true,
- "shallowReactive": true,
- "shallowReadonly": true,
- "shallowRef": true,
- "toRaw": true,
- "toRef": true,
- "toRefs": true,
- "triggerRef": true,
- "unref": true,
- "useAttrs": true,
- "useCssModule": true,
- "useCssVars": true,
- "useRoute": true,
- "useRouter": true,
- "useSlots": true,
- "watch": true,
- "watchEffect": true,
- "watchPostEffect": true,
- "watchSyncEffect": true
- }
-}
diff --git a/web/.npmrc b/web/.npmrc
deleted file mode 100644
index 5cee373..0000000
--- a/web/.npmrc
+++ /dev/null
@@ -1,3 +0,0 @@
-registry=https://registry.npmmirror.com
-shamefully-hoist=true
-strict-peer-dependencies=false
diff --git a/web/LICENSE b/web/LICENSE
deleted file mode 100644
index 888e80f..0000000
--- a/web/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2023 Ronnie Zhang(大脸怪)
-
-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.
\ No newline at end of file
diff --git a/web/README.md b/web/README.md
deleted file mode 100644
index 53c2ff5..0000000
--- a/web/README.md
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
-
-
-
-
-## 简介
-
-Vue Naive Admin 是一款极简风格的后台管理模板,包含前后端解决方案,前端使用 Vite + Vue3 + Pinia + Unocss,后端使用 Nestjs + TypeOrm + MySql,简单易用,赏心悦目,历经十几次重构和细节打磨,诚意满满!!
-
-## 设计理念
-
-Vue Naive Admin 2022年2月开始开源,从 1.0 到现在的 2.0,一直秉持着`简单即正义`的理念,旨在帮助中小企业、在校大学生及个人开发者快速上手开发后台管理项目,为了降低使用者的学习成本,没有使用看似主流的 TypeScript(前端),这也使得 Vue Naive Admin 成为了市面上少有的 `使用 JavaScript 的 Vue3 后台管理模板`,而且还算优秀,得到了大量朋友的认可和喜爱。
-
-## 特性
-
-- 🆒 使用 **Vue3** 主流最新技术栈: `Vite + Vue3 + Pinia`
-- 🍇 使用 **原子CSS**框架: `Unocss`,优雅、轻量、易用
-- 🍍 集成 `Pinia` 状态管理,支持状态持久化
-- 🤹 使用主流的 `iconify + unocss` 图标方案,支持自定义图标,支持动态渲染
-- 🎨 使用 Naive UI,`极致简洁的代码风格和清爽的页面设计`,审美在线,主题轻松定制
-- 👏 先进且易于理解的文件结构设计,多个模块之间**零耦合**,单个业务模块删除不影响其他模块
-- 🚀 `扁平化路由`设计,每一个组件都可以是一个页面,告别多级路由 `KeepAlive` 难实现问题
-- 🍒 `基于权限动态生成路由`,无需额外定义路由,`403和404页面可区分`,而不是无权限也跳404
-- 🔐 基于Redis集成 `无感刷新`,用户登录态可控,安全与体验缺一不可
-- ✨ 基于 Naive UI 封装 `message` 全局工具方法,支持批量提醒,支持跨页面单例模式
-- ⚡️ 基于 Naive UI 封装常用的业务组件,包含`Page` 组件、`CRUD` 表格组件及 `Modal`组件等,简单易用,减少大量重复性工作
-
-## 极致的性能
-
-
-
-
-## 2.0 和 1.0 区别
-
-- 2.0 是基于 1.0 风格从 0 到 1 重新设计的,所以 2.0 看似跟 1.0 很像,但其实代码机构差别还挺大的。
-- 1.0 只提供前端,后端使用 Mock 模拟的,而 2.0 是全栈版,提供真实的后端接口。
-- 2.0 虽然版本高于 1.0,但复杂度却远低于 1.0,虽然 1.0 也很简单。
-- 2.0 的灵活度远高于 1.0,只要你愿意,你可以为每个页面单独定制一个 layout
-
-[体验1.0 | template.isme.top](https://template.isme.top)
-
-[体验2.0 | admin.isme.top](https://admin.isme.top)
-
-## Nestjs 后端
-
-Vue Naive Admin 提供一套后端代码,技术栈使用 Nestjs + TypeOrm + MySql,内置 JWT、RABC及模板所需的一些基础接口。
-
-- 源码-github: [isme-nest-serve | github](https://github.com/zclzone/isme-nest-serve)
-- 源码-gitee: [isme-nest-serve | gitee](https://gitee.com/isme-admin/isme-nest-serve)
-
-## 文档
-
-- 项目文档: [docs | vue-naive-admin](https://docs.isme.top/web/#/624306705/188522224)
-- 接口文档: [apidoc | isme-nest-serve](https://apifox.com/apidoc/shared-ff4a4d32-c0d1-4caf-b0ee-6abc130f734a)
-
-> 注:有个比较常见的问题,就是如何添加菜单和修改菜单,由于项目是由后端控制菜单资源的,所以需要对接后端后在资源管理功能对菜单进行增删改,然后在角色管理功能给对应角色进行授权。具体如何对接后端,请参考 [项目文档](https://docs.isme.top/web/#/624306705/188522224)。当然,可能有些菜单你不想通过权限控制,那么你可以在 `/src/settings.js` 文件添加 basePermissions,只需对齐菜单资源的结构即可,结构可以参照 [接口文档](https://apifox.com/apidoc/shared-ff4a4d32-c0d1-4caf-b0ee-6abc130f734a/api-134536978)。
-
-## 使用这个模板开始你的项目
-
-[使用这个模板创建Github仓库](https://github.com/zclzone/vue-naive-admin/generate).
-
-或者使用 `degit` 克隆此仓库,这样将没有任何历史提交记录:
-
-```cmd
-npx degit zclzone/vue-naive-admin
-```
-
-## 版权说明
-
-本项目使用 `MIT协议`,默认授权给任何人,被授权人可免费地无限制的使用、复制、修改、合并、发布、发行、再许可、售卖本软件拷贝、并有权向被供应人授予同等的权利,但必须满足以下条件:
-
-- 复制、修改和发行本项目代码需包含原作者的版权及许可信息,包括但不限于文件头注释、协议等
-
-简单来说,作者只想保留版权,没有任何其他限制。
-
-## 其他已对接本项目的后端项目
-
-- [isme-java-serve](https://github.com/DHBin/isme-java-serve): 一个轻量级的Java后端服务,基于SpringBoot、MybatisPlus、SaToken、MapStruct等实现,已对接 Vue Naive Admin 2.0。
-- [naive-admin-go](https://github.com/ituserxxx/naive-admin-go): 一个 Go 后端服务,基于 gin、gorm、mysql、jwt和session,已对接 Vue Naive Admin 2.0。
-
-## 入群交流
-
-添加微信,拉你进群
-
-
diff --git a/web/build/index.js b/web/build/index.js
deleted file mode 100644
index 985ced8..0000000
--- a/web/build/index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:48:02
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import path from 'node:path'
-import { globSync } from 'glob'
-import dynamicIcons from '../src/assets/icons/dynamic-icons'
-
-/**
- * @usage 生成icons, 用于 unocss safelist,以支持页面动态渲染自定义图标
- */
-export function getIcons() {
- const feFiles = globSync('src/assets/icons/feather/*.svg', { nodir: true, strict: true })
- const meFiles = globSync('src/assets/icons/isme/*.svg', { nodir: true, strict: true })
- const feIcons = feFiles.map((filePath) => {
- const fileName = path.basename(filePath) // 获取文件名,包括后缀
- const fileNameWithoutExt = path.parse(fileName).name // 获取去除后缀的文件名
- return `i-fe:${fileNameWithoutExt}`
- })
- const meIcons = meFiles.map((filePath) => {
- const fileName = path.basename(filePath) // 获取文件名,包括后缀
- const fileNameWithoutExt = path.parse(fileName).name // 获取去除后缀的文件名
- return `i-me:${fileNameWithoutExt}`
- })
-
- return [...dynamicIcons, ...feIcons, ...meIcons]
-}
-
-/**
- * @usage 生成.vue文件路径列表,用于添加菜单时可下拉选择对应的.vue文件路径,防止手动输入报错
- */
-export function getPagePathes() {
- const files = globSync('src/views/**/*.vue')
- return files.map(item => `/${path.normalize(item).replace(/\\/g, '/')}`)
-}
diff --git a/web/build/plugin-isme/icons.js b/web/build/plugin-isme/icons.js
deleted file mode 100644
index 4da9779..0000000
--- a/web/build/plugin-isme/icons.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:48:11
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { getIcons } from '..'
-
-const PLUGIN_ICONS_ID = 'isme:icons'
-export function pluginIcons() {
- return {
- name: 'isme:icons',
- resolveId(id) {
- if (id === PLUGIN_ICONS_ID)
- return `\0${PLUGIN_ICONS_ID}`
- },
- load(id) {
- if (id === `\0${PLUGIN_ICONS_ID}`) {
- return `export default ${JSON.stringify(getIcons())}`
- }
- },
- }
-}
diff --git a/web/build/plugin-isme/index.js b/web/build/plugin-isme/index.js
deleted file mode 100644
index 326b960..0000000
--- a/web/build/plugin-isme/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:48:17
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-export { pluginPagePathes } from './page-pathes'
-export { pluginIcons } from './icons'
diff --git a/web/build/plugin-isme/page-pathes.js b/web/build/plugin-isme/page-pathes.js
deleted file mode 100644
index a29d8e2..0000000
--- a/web/build/plugin-isme/page-pathes.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:37:43
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { getPagePathes } from '..'
-
-const PLUGIN_PAGE_PATHES_ID = 'isme:page-pathes'
-export function pluginPagePathes() {
- return {
- name: 'isme:page-pathes',
- resolveId(id) {
- if (id === PLUGIN_PAGE_PATHES_ID)
- return `\0${PLUGIN_PAGE_PATHES_ID}`
- },
- load(id) {
- if (id === `\0${PLUGIN_PAGE_PATHES_ID}`) {
- return `export default ${JSON.stringify(getPagePathes())}`
- }
- },
- }
-}
diff --git a/web/eslint.config.js b/web/eslint.config.js
deleted file mode 100644
index b15d4e5..0000000
--- a/web/eslint.config.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import antfu from '@antfu/eslint-config'
-
-export default antfu({
- unocss: true,
- formatters: true,
- stylistic: true,
- rules: {
- 'n/prefer-global/process': 'off',
- 'no-undef': 'error',
- 'no-fallthrough': 'off',
- 'vue/block-order': 'off',
- '@typescript-eslint/no-this-alias': 'off',
- 'prefer-promise-reject-errors': 'off',
- },
- languageOptions: {
- globals: {
- h: 'readonly',
- unref: 'readonly',
- provide: 'readonly',
- inject: 'readonly',
- markRaw: 'readonly',
- defineAsyncComponent: 'readonly',
- nextTick: 'readonly',
- useRoute: 'readonly',
- useRouter: 'readonly',
- Message: 'readonly',
- $loadingBar: 'readonly',
- $message: 'readonly',
- $dialog: 'readonly',
- $notification: 'readonly',
- $modal: 'readonly',
- },
- },
-})
diff --git a/web/index.html b/web/index.html
deleted file mode 100644
index ce02b2d..0000000
--- a/web/index.html
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
- %VITE_TITLE%
-
-
-
-
-
-
-
diff --git a/web/jsconfig.json b/web/jsconfig.json
deleted file mode 100644
index 270b986..0000000
--- a/web/jsconfig.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "compilerOptions": {
- "target": "ESNext",
- "baseUrl": "./",
- "moduleResolution": "node",
- "paths": {
- "@/*": ["src/*"],
- "~/*": ["./*"]
- },
- "jsx": "preserve",
- "allowJs": true
- },
- "exclude": ["node_modules", "dist"]
-}
diff --git a/web/package.json b/web/package.json
deleted file mode 100644
index fd9d2dc..0000000
--- a/web/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "name": "vue-naive-admin",
- "type": "module",
- "version": "2.0.0",
- "private": true,
- "scripts": {
- "dev": "vite",
- "build": "vite build",
- "preview": "vite preview",
- "lint:fix": "eslint --fix",
- "postinstall": "npx simple-git-hooks",
- "up": "taze major -I"
- },
- "dependencies": {
- "@arco-design/color": "^0.4.0",
- "@vueuse/core": "^10.11.0",
- "axios": "^1.7.2",
- "dayjs": "^1.11.11",
- "echarts": "^5.5.1",
- "lodash-es": "^4.17.21",
- "naive-ui": "^2.38.2",
- "pinia": "^2.1.7",
- "pinia-plugin-persistedstate": "^3.2.1",
- "vue": "^3.4.31",
- "vue-echarts": "^6.7.3",
- "vue-router": "^4.4.0",
- "xlsx": "^0.18.5"
- },
- "devDependencies": {
- "@antfu/eslint-config": "^2.21.2",
- "@iconify/json": "^2.2.223",
- "@iconify/utils": "^2.1.25",
- "@unocss/eslint-config": "^0.61.0",
- "@unocss/eslint-plugin": "^0.61.0",
- "@unocss/preset-rem-to-px": "^0.61.0",
- "@vitejs/plugin-vue": "^5.0.5",
- "eslint": "^9.6.0",
- "eslint-plugin-format": "^0.1.2",
- "esno": "^4.7.0",
- "fs-extra": "^11.2.0",
- "glob": "^10.4.2",
- "lint-staged": "^15.2.7",
- "rollup-plugin-visualizer": "^5.12.0",
- "sass": "^1.77.6",
- "simple-git-hooks": "^2.11.1",
- "taze": "^0.13.9",
- "unocss": "^0.61.0",
- "unplugin-auto-import": "^0.17.6",
- "unplugin-vue-components": "^0.27.2",
- "vite": "^5.3.2",
- "vite-plugin-router-warn": "^1.0.0",
- "vite-plugin-vue-devtools": "^7.3.5"
- },
- "simple-git-hooks": {
- "pre-commit": "pnpm lint-staged"
- },
- "lint-staged": {
- "*": "eslint --fix"
- }
-}
diff --git a/web/public/favicon.png b/web/public/favicon.png
deleted file mode 100644
index 929c58a..0000000
Binary files a/web/public/favicon.png and /dev/null differ
diff --git a/web/src/App.vue b/web/src/App.vue
deleted file mode 100644
index ccad917..0000000
--- a/web/src/App.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/api/index.js b/web/src/api/index.js
deleted file mode 100644
index 23cbe93..0000000
--- a/web/src/api/index.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:50:38
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { request } from '@/utils'
-
-export default {
- // 获取用户信息
- getUser: () => request.get('/user/detail'),
- // 刷新token
- refreshToken: () => request.get('/auth/refresh/token'),
- // 登出
- logout: () => request.post('/auth/logout', {}, { needTip: false }),
- // 切换当前角色
- switchCurrentRole: role => request.post(`/auth/current-role/switch/${role}`),
- // 获取角色权限
- getRolePermissions: () => request.get('/role/permissions/tree'),
- // 验证菜单路径
- validateMenuPath: path => request.get(`/permission/menu/validate?path=${path}`),
-}
diff --git a/web/src/assets/icons/dynamic-icons.js b/web/src/assets/icons/dynamic-icons.js
deleted file mode 100644
index 5326f66..0000000
--- a/web/src/assets/icons/dynamic-icons.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:50:49
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-// 需要动态渲染的iconify图标,以i-开头
-export default ['i-simple-icons:juejin']
diff --git a/web/src/assets/icons/feather/activity.svg b/web/src/assets/icons/feather/activity.svg
deleted file mode 100644
index 669a57a..0000000
--- a/web/src/assets/icons/feather/activity.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/airplay.svg b/web/src/assets/icons/feather/airplay.svg
deleted file mode 100644
index 7ce7302..0000000
--- a/web/src/assets/icons/feather/airplay.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/alert-circle.svg b/web/src/assets/icons/feather/alert-circle.svg
deleted file mode 100644
index 8d02b7d..0000000
--- a/web/src/assets/icons/feather/alert-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/alert-octagon.svg b/web/src/assets/icons/feather/alert-octagon.svg
deleted file mode 100644
index de9b03f..0000000
--- a/web/src/assets/icons/feather/alert-octagon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/alert-triangle.svg b/web/src/assets/icons/feather/alert-triangle.svg
deleted file mode 100644
index 6dcb096..0000000
--- a/web/src/assets/icons/feather/alert-triangle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/align-center.svg b/web/src/assets/icons/feather/align-center.svg
deleted file mode 100644
index 5b8842e..0000000
--- a/web/src/assets/icons/feather/align-center.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/align-justify.svg b/web/src/assets/icons/feather/align-justify.svg
deleted file mode 100644
index 0539876..0000000
--- a/web/src/assets/icons/feather/align-justify.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/align-left.svg b/web/src/assets/icons/feather/align-left.svg
deleted file mode 100644
index 9ac852a..0000000
--- a/web/src/assets/icons/feather/align-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/align-right.svg b/web/src/assets/icons/feather/align-right.svg
deleted file mode 100644
index ef139ff..0000000
--- a/web/src/assets/icons/feather/align-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/anchor.svg b/web/src/assets/icons/feather/anchor.svg
deleted file mode 100644
index e01627a..0000000
--- a/web/src/assets/icons/feather/anchor.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/aperture.svg b/web/src/assets/icons/feather/aperture.svg
deleted file mode 100644
index 9936e86..0000000
--- a/web/src/assets/icons/feather/aperture.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/archive.svg b/web/src/assets/icons/feather/archive.svg
deleted file mode 100644
index 428882c..0000000
--- a/web/src/assets/icons/feather/archive.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/arrow-down-circle.svg b/web/src/assets/icons/feather/arrow-down-circle.svg
deleted file mode 100644
index 3238091..0000000
--- a/web/src/assets/icons/feather/arrow-down-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/arrow-down-left.svg b/web/src/assets/icons/feather/arrow-down-left.svg
deleted file mode 100644
index 7248358..0000000
--- a/web/src/assets/icons/feather/arrow-down-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/arrow-down-right.svg b/web/src/assets/icons/feather/arrow-down-right.svg
deleted file mode 100644
index 81d9822..0000000
--- a/web/src/assets/icons/feather/arrow-down-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/arrow-down.svg b/web/src/assets/icons/feather/arrow-down.svg
deleted file mode 100644
index 4f84f62..0000000
--- a/web/src/assets/icons/feather/arrow-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/arrow-left-circle.svg b/web/src/assets/icons/feather/arrow-left-circle.svg
deleted file mode 100644
index 3b19ff8..0000000
--- a/web/src/assets/icons/feather/arrow-left-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/arrow-left.svg b/web/src/assets/icons/feather/arrow-left.svg
deleted file mode 100644
index a5058fc..0000000
--- a/web/src/assets/icons/feather/arrow-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/arrow-right-circle.svg b/web/src/assets/icons/feather/arrow-right-circle.svg
deleted file mode 100644
index ff01dd5..0000000
--- a/web/src/assets/icons/feather/arrow-right-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/arrow-right.svg b/web/src/assets/icons/feather/arrow-right.svg
deleted file mode 100644
index 939b57c..0000000
--- a/web/src/assets/icons/feather/arrow-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/arrow-up-circle.svg b/web/src/assets/icons/feather/arrow-up-circle.svg
deleted file mode 100644
index 044a75d..0000000
--- a/web/src/assets/icons/feather/arrow-up-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/arrow-up-left.svg b/web/src/assets/icons/feather/arrow-up-left.svg
deleted file mode 100644
index cea55e8..0000000
--- a/web/src/assets/icons/feather/arrow-up-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/arrow-up-right.svg b/web/src/assets/icons/feather/arrow-up-right.svg
deleted file mode 100644
index 95678e0..0000000
--- a/web/src/assets/icons/feather/arrow-up-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/arrow-up.svg b/web/src/assets/icons/feather/arrow-up.svg
deleted file mode 100644
index 16b13ab..0000000
--- a/web/src/assets/icons/feather/arrow-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/at-sign.svg b/web/src/assets/icons/feather/at-sign.svg
deleted file mode 100644
index 5a5e5d0..0000000
--- a/web/src/assets/icons/feather/at-sign.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/award.svg b/web/src/assets/icons/feather/award.svg
deleted file mode 100644
index be70d5a..0000000
--- a/web/src/assets/icons/feather/award.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/bar-chart-2.svg b/web/src/assets/icons/feather/bar-chart-2.svg
deleted file mode 100644
index 864167a..0000000
--- a/web/src/assets/icons/feather/bar-chart-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/bar-chart.svg b/web/src/assets/icons/feather/bar-chart.svg
deleted file mode 100644
index 074d7c1..0000000
--- a/web/src/assets/icons/feather/bar-chart.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/battery-charging.svg b/web/src/assets/icons/feather/battery-charging.svg
deleted file mode 100644
index 644cb59..0000000
--- a/web/src/assets/icons/feather/battery-charging.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/battery.svg b/web/src/assets/icons/feather/battery.svg
deleted file mode 100644
index 7fe8771..0000000
--- a/web/src/assets/icons/feather/battery.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/bell-off.svg b/web/src/assets/icons/feather/bell-off.svg
deleted file mode 100644
index 4b07c84..0000000
--- a/web/src/assets/icons/feather/bell-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/bell.svg b/web/src/assets/icons/feather/bell.svg
deleted file mode 100644
index bba561c..0000000
--- a/web/src/assets/icons/feather/bell.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/bluetooth.svg b/web/src/assets/icons/feather/bluetooth.svg
deleted file mode 100644
index cebed7b..0000000
--- a/web/src/assets/icons/feather/bluetooth.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/bold.svg b/web/src/assets/icons/feather/bold.svg
deleted file mode 100644
index d1a4efd..0000000
--- a/web/src/assets/icons/feather/bold.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/book-open.svg b/web/src/assets/icons/feather/book-open.svg
deleted file mode 100644
index 5e0ca0a..0000000
--- a/web/src/assets/icons/feather/book-open.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/book.svg b/web/src/assets/icons/feather/book.svg
deleted file mode 100644
index 12ffcbc..0000000
--- a/web/src/assets/icons/feather/book.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/bookmark.svg b/web/src/assets/icons/feather/bookmark.svg
deleted file mode 100644
index 2239cc5..0000000
--- a/web/src/assets/icons/feather/bookmark.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/box.svg b/web/src/assets/icons/feather/box.svg
deleted file mode 100644
index d89be30..0000000
--- a/web/src/assets/icons/feather/box.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/briefcase.svg b/web/src/assets/icons/feather/briefcase.svg
deleted file mode 100644
index e3af050..0000000
--- a/web/src/assets/icons/feather/briefcase.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/calendar.svg b/web/src/assets/icons/feather/calendar.svg
deleted file mode 100644
index 6c7fd87..0000000
--- a/web/src/assets/icons/feather/calendar.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/camera-off.svg b/web/src/assets/icons/feather/camera-off.svg
deleted file mode 100644
index daa3e25..0000000
--- a/web/src/assets/icons/feather/camera-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/camera.svg b/web/src/assets/icons/feather/camera.svg
deleted file mode 100644
index 0e7f060..0000000
--- a/web/src/assets/icons/feather/camera.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/cast.svg b/web/src/assets/icons/feather/cast.svg
deleted file mode 100644
index 63c954d..0000000
--- a/web/src/assets/icons/feather/cast.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/check-circle.svg b/web/src/assets/icons/feather/check-circle.svg
deleted file mode 100644
index f2f4fd1..0000000
--- a/web/src/assets/icons/feather/check-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/check-square.svg b/web/src/assets/icons/feather/check-square.svg
deleted file mode 100644
index 72ab7a8..0000000
--- a/web/src/assets/icons/feather/check-square.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/check.svg b/web/src/assets/icons/feather/check.svg
deleted file mode 100644
index 1c20989..0000000
--- a/web/src/assets/icons/feather/check.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/chevron-down.svg b/web/src/assets/icons/feather/chevron-down.svg
deleted file mode 100644
index 278c6a3..0000000
--- a/web/src/assets/icons/feather/chevron-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/chevron-left.svg b/web/src/assets/icons/feather/chevron-left.svg
deleted file mode 100644
index 747d46d..0000000
--- a/web/src/assets/icons/feather/chevron-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/chevron-right.svg b/web/src/assets/icons/feather/chevron-right.svg
deleted file mode 100644
index 258de41..0000000
--- a/web/src/assets/icons/feather/chevron-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/chevron-up.svg b/web/src/assets/icons/feather/chevron-up.svg
deleted file mode 100644
index 4eb5ecc..0000000
--- a/web/src/assets/icons/feather/chevron-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/chevrons-down.svg b/web/src/assets/icons/feather/chevrons-down.svg
deleted file mode 100644
index e67ef2f..0000000
--- a/web/src/assets/icons/feather/chevrons-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/chevrons-left.svg b/web/src/assets/icons/feather/chevrons-left.svg
deleted file mode 100644
index c32e398..0000000
--- a/web/src/assets/icons/feather/chevrons-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/chevrons-right.svg b/web/src/assets/icons/feather/chevrons-right.svg
deleted file mode 100644
index f506814..0000000
--- a/web/src/assets/icons/feather/chevrons-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/chevrons-up.svg b/web/src/assets/icons/feather/chevrons-up.svg
deleted file mode 100644
index 0eaf518..0000000
--- a/web/src/assets/icons/feather/chevrons-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/chrome.svg b/web/src/assets/icons/feather/chrome.svg
deleted file mode 100644
index 9189815..0000000
--- a/web/src/assets/icons/feather/chrome.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/circle.svg b/web/src/assets/icons/feather/circle.svg
deleted file mode 100644
index b009088..0000000
--- a/web/src/assets/icons/feather/circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/clipboard.svg b/web/src/assets/icons/feather/clipboard.svg
deleted file mode 100644
index ccee454..0000000
--- a/web/src/assets/icons/feather/clipboard.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/clock.svg b/web/src/assets/icons/feather/clock.svg
deleted file mode 100644
index ea3f5e5..0000000
--- a/web/src/assets/icons/feather/clock.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/cloud-drizzle.svg b/web/src/assets/icons/feather/cloud-drizzle.svg
deleted file mode 100644
index 13af6bb..0000000
--- a/web/src/assets/icons/feather/cloud-drizzle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/cloud-lightning.svg b/web/src/assets/icons/feather/cloud-lightning.svg
deleted file mode 100644
index 32d154c..0000000
--- a/web/src/assets/icons/feather/cloud-lightning.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/cloud-off.svg b/web/src/assets/icons/feather/cloud-off.svg
deleted file mode 100644
index 1e1e7d6..0000000
--- a/web/src/assets/icons/feather/cloud-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/cloud-rain.svg b/web/src/assets/icons/feather/cloud-rain.svg
deleted file mode 100644
index 3e0b85b..0000000
--- a/web/src/assets/icons/feather/cloud-rain.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/cloud-snow.svg b/web/src/assets/icons/feather/cloud-snow.svg
deleted file mode 100644
index e4eb820..0000000
--- a/web/src/assets/icons/feather/cloud-snow.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/cloud.svg b/web/src/assets/icons/feather/cloud.svg
deleted file mode 100644
index 0ee0c63..0000000
--- a/web/src/assets/icons/feather/cloud.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/code.svg b/web/src/assets/icons/feather/code.svg
deleted file mode 100644
index c4954b5..0000000
--- a/web/src/assets/icons/feather/code.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/codepen.svg b/web/src/assets/icons/feather/codepen.svg
deleted file mode 100644
index ab2a815..0000000
--- a/web/src/assets/icons/feather/codepen.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/codesandbox.svg b/web/src/assets/icons/feather/codesandbox.svg
deleted file mode 100644
index 49848f5..0000000
--- a/web/src/assets/icons/feather/codesandbox.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/coffee.svg b/web/src/assets/icons/feather/coffee.svg
deleted file mode 100644
index 32905e5..0000000
--- a/web/src/assets/icons/feather/coffee.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/columns.svg b/web/src/assets/icons/feather/columns.svg
deleted file mode 100644
index d264b55..0000000
--- a/web/src/assets/icons/feather/columns.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/command.svg b/web/src/assets/icons/feather/command.svg
deleted file mode 100644
index 93f554c..0000000
--- a/web/src/assets/icons/feather/command.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/compass.svg b/web/src/assets/icons/feather/compass.svg
deleted file mode 100644
index 3296260..0000000
--- a/web/src/assets/icons/feather/compass.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/copy.svg b/web/src/assets/icons/feather/copy.svg
deleted file mode 100644
index 4e0b09f..0000000
--- a/web/src/assets/icons/feather/copy.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/corner-down-left.svg b/web/src/assets/icons/feather/corner-down-left.svg
deleted file mode 100644
index 9fffb3e..0000000
--- a/web/src/assets/icons/feather/corner-down-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/corner-down-right.svg b/web/src/assets/icons/feather/corner-down-right.svg
deleted file mode 100644
index b27d408..0000000
--- a/web/src/assets/icons/feather/corner-down-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/corner-left-down.svg b/web/src/assets/icons/feather/corner-left-down.svg
deleted file mode 100644
index 24b8375..0000000
--- a/web/src/assets/icons/feather/corner-left-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/corner-left-up.svg b/web/src/assets/icons/feather/corner-left-up.svg
deleted file mode 100644
index e54527c..0000000
--- a/web/src/assets/icons/feather/corner-left-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/corner-right-down.svg b/web/src/assets/icons/feather/corner-right-down.svg
deleted file mode 100644
index a49e6d6..0000000
--- a/web/src/assets/icons/feather/corner-right-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/corner-right-up.svg b/web/src/assets/icons/feather/corner-right-up.svg
deleted file mode 100644
index a5c5dce..0000000
--- a/web/src/assets/icons/feather/corner-right-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/corner-up-left.svg b/web/src/assets/icons/feather/corner-up-left.svg
deleted file mode 100644
index 0a1ffd6..0000000
--- a/web/src/assets/icons/feather/corner-up-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/corner-up-right.svg b/web/src/assets/icons/feather/corner-up-right.svg
deleted file mode 100644
index 0b8f961..0000000
--- a/web/src/assets/icons/feather/corner-up-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/cpu.svg b/web/src/assets/icons/feather/cpu.svg
deleted file mode 100644
index 2ed16ef..0000000
--- a/web/src/assets/icons/feather/cpu.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/credit-card.svg b/web/src/assets/icons/feather/credit-card.svg
deleted file mode 100644
index 1b7fd02..0000000
--- a/web/src/assets/icons/feather/credit-card.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/crop.svg b/web/src/assets/icons/feather/crop.svg
deleted file mode 100644
index ffbfd04..0000000
--- a/web/src/assets/icons/feather/crop.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/crosshair.svg b/web/src/assets/icons/feather/crosshair.svg
deleted file mode 100644
index ba39401..0000000
--- a/web/src/assets/icons/feather/crosshair.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/database.svg b/web/src/assets/icons/feather/database.svg
deleted file mode 100644
index c296fbc..0000000
--- a/web/src/assets/icons/feather/database.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/delete.svg b/web/src/assets/icons/feather/delete.svg
deleted file mode 100644
index 8c6074b..0000000
--- a/web/src/assets/icons/feather/delete.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/disc.svg b/web/src/assets/icons/feather/disc.svg
deleted file mode 100644
index 2595b44..0000000
--- a/web/src/assets/icons/feather/disc.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/divide.svg b/web/src/assets/icons/feather/divide.svg
deleted file mode 100644
index 3cbff3a..0000000
--- a/web/src/assets/icons/feather/divide.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/dollar-sign.svg b/web/src/assets/icons/feather/dollar-sign.svg
deleted file mode 100644
index 1a124d2..0000000
--- a/web/src/assets/icons/feather/dollar-sign.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/download-cloud.svg b/web/src/assets/icons/feather/download-cloud.svg
deleted file mode 100644
index f3126fc..0000000
--- a/web/src/assets/icons/feather/download-cloud.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/download.svg b/web/src/assets/icons/feather/download.svg
deleted file mode 100644
index 76767a9..0000000
--- a/web/src/assets/icons/feather/download.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/dribbble.svg b/web/src/assets/icons/feather/dribbble.svg
deleted file mode 100644
index bb8577d..0000000
--- a/web/src/assets/icons/feather/dribbble.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/droplet.svg b/web/src/assets/icons/feather/droplet.svg
deleted file mode 100644
index ca09301..0000000
--- a/web/src/assets/icons/feather/droplet.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/edit-2.svg b/web/src/assets/icons/feather/edit-2.svg
deleted file mode 100644
index 06830c9..0000000
--- a/web/src/assets/icons/feather/edit-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/edit-3.svg b/web/src/assets/icons/feather/edit-3.svg
deleted file mode 100644
index d728efc..0000000
--- a/web/src/assets/icons/feather/edit-3.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/edit.svg b/web/src/assets/icons/feather/edit.svg
deleted file mode 100644
index ec7b4ca..0000000
--- a/web/src/assets/icons/feather/edit.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/external-link.svg b/web/src/assets/icons/feather/external-link.svg
deleted file mode 100644
index 6236df3..0000000
--- a/web/src/assets/icons/feather/external-link.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/eye-off.svg b/web/src/assets/icons/feather/eye-off.svg
deleted file mode 100644
index 77c54cb..0000000
--- a/web/src/assets/icons/feather/eye-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/eye.svg b/web/src/assets/icons/feather/eye.svg
deleted file mode 100644
index 9cde243..0000000
--- a/web/src/assets/icons/feather/eye.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/facebook.svg b/web/src/assets/icons/feather/facebook.svg
deleted file mode 100644
index 2570f56..0000000
--- a/web/src/assets/icons/feather/facebook.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/fast-forward.svg b/web/src/assets/icons/feather/fast-forward.svg
deleted file mode 100644
index fa39877..0000000
--- a/web/src/assets/icons/feather/fast-forward.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/feather.svg b/web/src/assets/icons/feather/feather.svg
deleted file mode 100644
index ac3b868..0000000
--- a/web/src/assets/icons/feather/feather.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/figma.svg b/web/src/assets/icons/feather/figma.svg
deleted file mode 100644
index 66fd217..0000000
--- a/web/src/assets/icons/feather/figma.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/file-minus.svg b/web/src/assets/icons/feather/file-minus.svg
deleted file mode 100644
index 345756e..0000000
--- a/web/src/assets/icons/feather/file-minus.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/file-plus.svg b/web/src/assets/icons/feather/file-plus.svg
deleted file mode 100644
index eed1200..0000000
--- a/web/src/assets/icons/feather/file-plus.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/file-text.svg b/web/src/assets/icons/feather/file-text.svg
deleted file mode 100644
index 4197ddd..0000000
--- a/web/src/assets/icons/feather/file-text.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/file.svg b/web/src/assets/icons/feather/file.svg
deleted file mode 100644
index 378519a..0000000
--- a/web/src/assets/icons/feather/file.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/film.svg b/web/src/assets/icons/feather/film.svg
deleted file mode 100644
index ac46360..0000000
--- a/web/src/assets/icons/feather/film.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/filter.svg b/web/src/assets/icons/feather/filter.svg
deleted file mode 100644
index 38a47e0..0000000
--- a/web/src/assets/icons/feather/filter.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/flag.svg b/web/src/assets/icons/feather/flag.svg
deleted file mode 100644
index 037737c..0000000
--- a/web/src/assets/icons/feather/flag.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/folder-minus.svg b/web/src/assets/icons/feather/folder-minus.svg
deleted file mode 100644
index d5b7af6..0000000
--- a/web/src/assets/icons/feather/folder-minus.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/folder-plus.svg b/web/src/assets/icons/feather/folder-plus.svg
deleted file mode 100644
index 898f2fc..0000000
--- a/web/src/assets/icons/feather/folder-plus.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/folder.svg b/web/src/assets/icons/feather/folder.svg
deleted file mode 100644
index 134458b..0000000
--- a/web/src/assets/icons/feather/folder.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/framer.svg b/web/src/assets/icons/feather/framer.svg
deleted file mode 100644
index 3e66347..0000000
--- a/web/src/assets/icons/feather/framer.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/frown.svg b/web/src/assets/icons/feather/frown.svg
deleted file mode 100644
index f312254..0000000
--- a/web/src/assets/icons/feather/frown.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/gift.svg b/web/src/assets/icons/feather/gift.svg
deleted file mode 100644
index d2c14bd..0000000
--- a/web/src/assets/icons/feather/gift.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/git-branch.svg b/web/src/assets/icons/feather/git-branch.svg
deleted file mode 100644
index 4400372..0000000
--- a/web/src/assets/icons/feather/git-branch.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/git-commit.svg b/web/src/assets/icons/feather/git-commit.svg
deleted file mode 100644
index e959d72..0000000
--- a/web/src/assets/icons/feather/git-commit.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/git-merge.svg b/web/src/assets/icons/feather/git-merge.svg
deleted file mode 100644
index c65fffd..0000000
--- a/web/src/assets/icons/feather/git-merge.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/git-pull-request.svg b/web/src/assets/icons/feather/git-pull-request.svg
deleted file mode 100644
index fc80bdf..0000000
--- a/web/src/assets/icons/feather/git-pull-request.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/github.svg b/web/src/assets/icons/feather/github.svg
deleted file mode 100644
index ff0af48..0000000
--- a/web/src/assets/icons/feather/github.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/gitlab.svg b/web/src/assets/icons/feather/gitlab.svg
deleted file mode 100644
index 85d54a1..0000000
--- a/web/src/assets/icons/feather/gitlab.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/globe.svg b/web/src/assets/icons/feather/globe.svg
deleted file mode 100644
index 0a0586d..0000000
--- a/web/src/assets/icons/feather/globe.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/grid.svg b/web/src/assets/icons/feather/grid.svg
deleted file mode 100644
index 8ef2e9d..0000000
--- a/web/src/assets/icons/feather/grid.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/hard-drive.svg b/web/src/assets/icons/feather/hard-drive.svg
deleted file mode 100644
index 8e90fa1..0000000
--- a/web/src/assets/icons/feather/hard-drive.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/hash.svg b/web/src/assets/icons/feather/hash.svg
deleted file mode 100644
index c9c8d41..0000000
--- a/web/src/assets/icons/feather/hash.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/headphones.svg b/web/src/assets/icons/feather/headphones.svg
deleted file mode 100644
index fd8915b..0000000
--- a/web/src/assets/icons/feather/headphones.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/heart.svg b/web/src/assets/icons/feather/heart.svg
deleted file mode 100644
index a083b7e..0000000
--- a/web/src/assets/icons/feather/heart.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/help-circle.svg b/web/src/assets/icons/feather/help-circle.svg
deleted file mode 100644
index 51fddd8..0000000
--- a/web/src/assets/icons/feather/help-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/hexagon.svg b/web/src/assets/icons/feather/hexagon.svg
deleted file mode 100644
index eae7f25..0000000
--- a/web/src/assets/icons/feather/hexagon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/home.svg b/web/src/assets/icons/feather/home.svg
deleted file mode 100644
index 7bb31b2..0000000
--- a/web/src/assets/icons/feather/home.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/image.svg b/web/src/assets/icons/feather/image.svg
deleted file mode 100644
index a7d84b9..0000000
--- a/web/src/assets/icons/feather/image.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/inbox.svg b/web/src/assets/icons/feather/inbox.svg
deleted file mode 100644
index 03a13b4..0000000
--- a/web/src/assets/icons/feather/inbox.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/info.svg b/web/src/assets/icons/feather/info.svg
deleted file mode 100644
index a09fa5f..0000000
--- a/web/src/assets/icons/feather/info.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/instagram.svg b/web/src/assets/icons/feather/instagram.svg
deleted file mode 100644
index 9fdb8e3..0000000
--- a/web/src/assets/icons/feather/instagram.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/italic.svg b/web/src/assets/icons/feather/italic.svg
deleted file mode 100644
index a123d37..0000000
--- a/web/src/assets/icons/feather/italic.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/key.svg b/web/src/assets/icons/feather/key.svg
deleted file mode 100644
index e778e74..0000000
--- a/web/src/assets/icons/feather/key.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/layers.svg b/web/src/assets/icons/feather/layers.svg
deleted file mode 100644
index ea788c2..0000000
--- a/web/src/assets/icons/feather/layers.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/layout.svg b/web/src/assets/icons/feather/layout.svg
deleted file mode 100644
index 28743d9..0000000
--- a/web/src/assets/icons/feather/layout.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/life-buoy.svg b/web/src/assets/icons/feather/life-buoy.svg
deleted file mode 100644
index 54c2bd7..0000000
--- a/web/src/assets/icons/feather/life-buoy.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/link-2.svg b/web/src/assets/icons/feather/link-2.svg
deleted file mode 100644
index 8cc7f6d..0000000
--- a/web/src/assets/icons/feather/link-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/link.svg b/web/src/assets/icons/feather/link.svg
deleted file mode 100644
index c89dd41..0000000
--- a/web/src/assets/icons/feather/link.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/linkedin.svg b/web/src/assets/icons/feather/linkedin.svg
deleted file mode 100644
index 3953109..0000000
--- a/web/src/assets/icons/feather/linkedin.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/list.svg b/web/src/assets/icons/feather/list.svg
deleted file mode 100644
index 5ce38ea..0000000
--- a/web/src/assets/icons/feather/list.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/loader.svg b/web/src/assets/icons/feather/loader.svg
deleted file mode 100644
index e1a70c1..0000000
--- a/web/src/assets/icons/feather/loader.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/lock.svg b/web/src/assets/icons/feather/lock.svg
deleted file mode 100644
index de09d9d..0000000
--- a/web/src/assets/icons/feather/lock.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/log-in.svg b/web/src/assets/icons/feather/log-in.svg
deleted file mode 100644
index ba0da59..0000000
--- a/web/src/assets/icons/feather/log-in.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/log-out.svg b/web/src/assets/icons/feather/log-out.svg
deleted file mode 100644
index c9002c9..0000000
--- a/web/src/assets/icons/feather/log-out.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/mail.svg b/web/src/assets/icons/feather/mail.svg
deleted file mode 100644
index 2af169e..0000000
--- a/web/src/assets/icons/feather/mail.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/map-pin.svg b/web/src/assets/icons/feather/map-pin.svg
deleted file mode 100644
index d5548e9..0000000
--- a/web/src/assets/icons/feather/map-pin.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/map.svg b/web/src/assets/icons/feather/map.svg
deleted file mode 100644
index ecebd7b..0000000
--- a/web/src/assets/icons/feather/map.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/maximize-2.svg b/web/src/assets/icons/feather/maximize-2.svg
deleted file mode 100644
index e41fc0b..0000000
--- a/web/src/assets/icons/feather/maximize-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/maximize.svg b/web/src/assets/icons/feather/maximize.svg
deleted file mode 100644
index fc30518..0000000
--- a/web/src/assets/icons/feather/maximize.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/meh.svg b/web/src/assets/icons/feather/meh.svg
deleted file mode 100644
index 6f57fff..0000000
--- a/web/src/assets/icons/feather/meh.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/menu.svg b/web/src/assets/icons/feather/menu.svg
deleted file mode 100644
index e8a84a9..0000000
--- a/web/src/assets/icons/feather/menu.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/message-circle.svg b/web/src/assets/icons/feather/message-circle.svg
deleted file mode 100644
index 4b21b32..0000000
--- a/web/src/assets/icons/feather/message-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/message-square.svg b/web/src/assets/icons/feather/message-square.svg
deleted file mode 100644
index 6a2e4e5..0000000
--- a/web/src/assets/icons/feather/message-square.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/mic-off.svg b/web/src/assets/icons/feather/mic-off.svg
deleted file mode 100644
index 0786219..0000000
--- a/web/src/assets/icons/feather/mic-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/mic.svg b/web/src/assets/icons/feather/mic.svg
deleted file mode 100644
index dc5f780..0000000
--- a/web/src/assets/icons/feather/mic.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/minimize-2.svg b/web/src/assets/icons/feather/minimize-2.svg
deleted file mode 100644
index a720fa6..0000000
--- a/web/src/assets/icons/feather/minimize-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/minimize.svg b/web/src/assets/icons/feather/minimize.svg
deleted file mode 100644
index 46d6119..0000000
--- a/web/src/assets/icons/feather/minimize.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/minus-circle.svg b/web/src/assets/icons/feather/minus-circle.svg
deleted file mode 100644
index 80c0de1..0000000
--- a/web/src/assets/icons/feather/minus-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/minus-square.svg b/web/src/assets/icons/feather/minus-square.svg
deleted file mode 100644
index 4862832..0000000
--- a/web/src/assets/icons/feather/minus-square.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/minus.svg b/web/src/assets/icons/feather/minus.svg
deleted file mode 100644
index 93cc734..0000000
--- a/web/src/assets/icons/feather/minus.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/monitor.svg b/web/src/assets/icons/feather/monitor.svg
deleted file mode 100644
index 6c3556d..0000000
--- a/web/src/assets/icons/feather/monitor.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/moon.svg b/web/src/assets/icons/feather/moon.svg
deleted file mode 100644
index dbf7c6c..0000000
--- a/web/src/assets/icons/feather/moon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/more-horizontal.svg b/web/src/assets/icons/feather/more-horizontal.svg
deleted file mode 100644
index dc6a855..0000000
--- a/web/src/assets/icons/feather/more-horizontal.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/more-vertical.svg b/web/src/assets/icons/feather/more-vertical.svg
deleted file mode 100644
index cba6958..0000000
--- a/web/src/assets/icons/feather/more-vertical.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/mouse-pointer.svg b/web/src/assets/icons/feather/mouse-pointer.svg
deleted file mode 100644
index f5af559..0000000
--- a/web/src/assets/icons/feather/mouse-pointer.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/move.svg b/web/src/assets/icons/feather/move.svg
deleted file mode 100644
index 4e251b5..0000000
--- a/web/src/assets/icons/feather/move.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/music.svg b/web/src/assets/icons/feather/music.svg
deleted file mode 100644
index 7bee2f7..0000000
--- a/web/src/assets/icons/feather/music.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/navigation-2.svg b/web/src/assets/icons/feather/navigation-2.svg
deleted file mode 100644
index ae31db9..0000000
--- a/web/src/assets/icons/feather/navigation-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/navigation.svg b/web/src/assets/icons/feather/navigation.svg
deleted file mode 100644
index f600a41..0000000
--- a/web/src/assets/icons/feather/navigation.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/octagon.svg b/web/src/assets/icons/feather/octagon.svg
deleted file mode 100644
index 124c548..0000000
--- a/web/src/assets/icons/feather/octagon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/package.svg b/web/src/assets/icons/feather/package.svg
deleted file mode 100644
index f1e09ee..0000000
--- a/web/src/assets/icons/feather/package.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/paperclip.svg b/web/src/assets/icons/feather/paperclip.svg
deleted file mode 100644
index b1f69b7..0000000
--- a/web/src/assets/icons/feather/paperclip.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/pause-circle.svg b/web/src/assets/icons/feather/pause-circle.svg
deleted file mode 100644
index f6b1a8d..0000000
--- a/web/src/assets/icons/feather/pause-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/pause.svg b/web/src/assets/icons/feather/pause.svg
deleted file mode 100644
index 4e78038..0000000
--- a/web/src/assets/icons/feather/pause.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/pen-tool.svg b/web/src/assets/icons/feather/pen-tool.svg
deleted file mode 100644
index 0d26fa1..0000000
--- a/web/src/assets/icons/feather/pen-tool.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/percent.svg b/web/src/assets/icons/feather/percent.svg
deleted file mode 100644
index 2cb9719..0000000
--- a/web/src/assets/icons/feather/percent.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/phone-call.svg b/web/src/assets/icons/feather/phone-call.svg
deleted file mode 100644
index 8b86660..0000000
--- a/web/src/assets/icons/feather/phone-call.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/phone-forwarded.svg b/web/src/assets/icons/feather/phone-forwarded.svg
deleted file mode 100644
index aa21bef..0000000
--- a/web/src/assets/icons/feather/phone-forwarded.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/phone-incoming.svg b/web/src/assets/icons/feather/phone-incoming.svg
deleted file mode 100644
index b2d523a..0000000
--- a/web/src/assets/icons/feather/phone-incoming.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/phone-missed.svg b/web/src/assets/icons/feather/phone-missed.svg
deleted file mode 100644
index 4950f09..0000000
--- a/web/src/assets/icons/feather/phone-missed.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/phone-off.svg b/web/src/assets/icons/feather/phone-off.svg
deleted file mode 100644
index 4d00fb3..0000000
--- a/web/src/assets/icons/feather/phone-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/phone-outgoing.svg b/web/src/assets/icons/feather/phone-outgoing.svg
deleted file mode 100644
index fea27a3..0000000
--- a/web/src/assets/icons/feather/phone-outgoing.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/phone.svg b/web/src/assets/icons/feather/phone.svg
deleted file mode 100644
index 2a35154..0000000
--- a/web/src/assets/icons/feather/phone.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/pie-chart.svg b/web/src/assets/icons/feather/pie-chart.svg
deleted file mode 100644
index b5bbe67..0000000
--- a/web/src/assets/icons/feather/pie-chart.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/play-circle.svg b/web/src/assets/icons/feather/play-circle.svg
deleted file mode 100644
index 8766dc7..0000000
--- a/web/src/assets/icons/feather/play-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/play.svg b/web/src/assets/icons/feather/play.svg
deleted file mode 100644
index fd76e30..0000000
--- a/web/src/assets/icons/feather/play.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/plus-circle.svg b/web/src/assets/icons/feather/plus-circle.svg
deleted file mode 100644
index 4291ff0..0000000
--- a/web/src/assets/icons/feather/plus-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/plus-square.svg b/web/src/assets/icons/feather/plus-square.svg
deleted file mode 100644
index c380e24..0000000
--- a/web/src/assets/icons/feather/plus-square.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/plus.svg b/web/src/assets/icons/feather/plus.svg
deleted file mode 100644
index 703c5b7..0000000
--- a/web/src/assets/icons/feather/plus.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/pocket.svg b/web/src/assets/icons/feather/pocket.svg
deleted file mode 100644
index a3b2561..0000000
--- a/web/src/assets/icons/feather/pocket.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/power.svg b/web/src/assets/icons/feather/power.svg
deleted file mode 100644
index 598308f..0000000
--- a/web/src/assets/icons/feather/power.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/printer.svg b/web/src/assets/icons/feather/printer.svg
deleted file mode 100644
index 8a9a7ac..0000000
--- a/web/src/assets/icons/feather/printer.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/radio.svg b/web/src/assets/icons/feather/radio.svg
deleted file mode 100644
index 5abfcd1..0000000
--- a/web/src/assets/icons/feather/radio.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/refresh-ccw.svg b/web/src/assets/icons/feather/refresh-ccw.svg
deleted file mode 100644
index 10cff0e..0000000
--- a/web/src/assets/icons/feather/refresh-ccw.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/refresh-cw.svg b/web/src/assets/icons/feather/refresh-cw.svg
deleted file mode 100644
index 06c358d..0000000
--- a/web/src/assets/icons/feather/refresh-cw.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/repeat.svg b/web/src/assets/icons/feather/repeat.svg
deleted file mode 100644
index c7657b0..0000000
--- a/web/src/assets/icons/feather/repeat.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/rewind.svg b/web/src/assets/icons/feather/rewind.svg
deleted file mode 100644
index 7b0fa3d..0000000
--- a/web/src/assets/icons/feather/rewind.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/rotate-ccw.svg b/web/src/assets/icons/feather/rotate-ccw.svg
deleted file mode 100644
index ade5dc4..0000000
--- a/web/src/assets/icons/feather/rotate-ccw.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/rotate-cw.svg b/web/src/assets/icons/feather/rotate-cw.svg
deleted file mode 100644
index 83dca35..0000000
--- a/web/src/assets/icons/feather/rotate-cw.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/rss.svg b/web/src/assets/icons/feather/rss.svg
deleted file mode 100644
index c9a1368..0000000
--- a/web/src/assets/icons/feather/rss.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/save.svg b/web/src/assets/icons/feather/save.svg
deleted file mode 100644
index 46c7299..0000000
--- a/web/src/assets/icons/feather/save.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/scissors.svg b/web/src/assets/icons/feather/scissors.svg
deleted file mode 100644
index fd0647f..0000000
--- a/web/src/assets/icons/feather/scissors.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/search.svg b/web/src/assets/icons/feather/search.svg
deleted file mode 100644
index 8710306..0000000
--- a/web/src/assets/icons/feather/search.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/send.svg b/web/src/assets/icons/feather/send.svg
deleted file mode 100644
index 42ef2a2..0000000
--- a/web/src/assets/icons/feather/send.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/server.svg b/web/src/assets/icons/feather/server.svg
deleted file mode 100644
index 54ce094..0000000
--- a/web/src/assets/icons/feather/server.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/settings.svg b/web/src/assets/icons/feather/settings.svg
deleted file mode 100644
index 19c2726..0000000
--- a/web/src/assets/icons/feather/settings.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/share-2.svg b/web/src/assets/icons/feather/share-2.svg
deleted file mode 100644
index 09b1c7b..0000000
--- a/web/src/assets/icons/feather/share-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/share.svg b/web/src/assets/icons/feather/share.svg
deleted file mode 100644
index df38c14..0000000
--- a/web/src/assets/icons/feather/share.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/shield-off.svg b/web/src/assets/icons/feather/shield-off.svg
deleted file mode 100644
index 18692dd..0000000
--- a/web/src/assets/icons/feather/shield-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/shield.svg b/web/src/assets/icons/feather/shield.svg
deleted file mode 100644
index c7c4841..0000000
--- a/web/src/assets/icons/feather/shield.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/shopping-bag.svg b/web/src/assets/icons/feather/shopping-bag.svg
deleted file mode 100644
index eaa39e8..0000000
--- a/web/src/assets/icons/feather/shopping-bag.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/shopping-cart.svg b/web/src/assets/icons/feather/shopping-cart.svg
deleted file mode 100644
index 17a40bf..0000000
--- a/web/src/assets/icons/feather/shopping-cart.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/shuffle.svg b/web/src/assets/icons/feather/shuffle.svg
deleted file mode 100644
index 8cfb5db..0000000
--- a/web/src/assets/icons/feather/shuffle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/sidebar.svg b/web/src/assets/icons/feather/sidebar.svg
deleted file mode 100644
index 8ba817e..0000000
--- a/web/src/assets/icons/feather/sidebar.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/skip-back.svg b/web/src/assets/icons/feather/skip-back.svg
deleted file mode 100644
index 88d024e..0000000
--- a/web/src/assets/icons/feather/skip-back.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/skip-forward.svg b/web/src/assets/icons/feather/skip-forward.svg
deleted file mode 100644
index f3fdac3..0000000
--- a/web/src/assets/icons/feather/skip-forward.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/slack.svg b/web/src/assets/icons/feather/slack.svg
deleted file mode 100644
index 5d97346..0000000
--- a/web/src/assets/icons/feather/slack.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/slash.svg b/web/src/assets/icons/feather/slash.svg
deleted file mode 100644
index f4131b8..0000000
--- a/web/src/assets/icons/feather/slash.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/sliders.svg b/web/src/assets/icons/feather/sliders.svg
deleted file mode 100644
index 19c9385..0000000
--- a/web/src/assets/icons/feather/sliders.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/smartphone.svg b/web/src/assets/icons/feather/smartphone.svg
deleted file mode 100644
index 0171a95..0000000
--- a/web/src/assets/icons/feather/smartphone.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/smile.svg b/web/src/assets/icons/feather/smile.svg
deleted file mode 100644
index 24dc8a2..0000000
--- a/web/src/assets/icons/feather/smile.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/speaker.svg b/web/src/assets/icons/feather/speaker.svg
deleted file mode 100644
index 75d5ff9..0000000
--- a/web/src/assets/icons/feather/speaker.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/square.svg b/web/src/assets/icons/feather/square.svg
deleted file mode 100644
index 6eabc77..0000000
--- a/web/src/assets/icons/feather/square.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/star.svg b/web/src/assets/icons/feather/star.svg
deleted file mode 100644
index bcdc31a..0000000
--- a/web/src/assets/icons/feather/star.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/stop-circle.svg b/web/src/assets/icons/feather/stop-circle.svg
deleted file mode 100644
index c10d9d4..0000000
--- a/web/src/assets/icons/feather/stop-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/sun.svg b/web/src/assets/icons/feather/sun.svg
deleted file mode 100644
index 7f51b94..0000000
--- a/web/src/assets/icons/feather/sun.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/sunrise.svg b/web/src/assets/icons/feather/sunrise.svg
deleted file mode 100644
index eff4b1e..0000000
--- a/web/src/assets/icons/feather/sunrise.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/sunset.svg b/web/src/assets/icons/feather/sunset.svg
deleted file mode 100644
index a5a2221..0000000
--- a/web/src/assets/icons/feather/sunset.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/table.svg b/web/src/assets/icons/feather/table.svg
deleted file mode 100644
index 679bd57..0000000
--- a/web/src/assets/icons/feather/table.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/tablet.svg b/web/src/assets/icons/feather/tablet.svg
deleted file mode 100644
index 9c80b40..0000000
--- a/web/src/assets/icons/feather/tablet.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/tag.svg b/web/src/assets/icons/feather/tag.svg
deleted file mode 100644
index 7219b15..0000000
--- a/web/src/assets/icons/feather/tag.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/target.svg b/web/src/assets/icons/feather/target.svg
deleted file mode 100644
index be84b17..0000000
--- a/web/src/assets/icons/feather/target.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/terminal.svg b/web/src/assets/icons/feather/terminal.svg
deleted file mode 100644
index af459c0..0000000
--- a/web/src/assets/icons/feather/terminal.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/thermometer.svg b/web/src/assets/icons/feather/thermometer.svg
deleted file mode 100644
index 33142cc..0000000
--- a/web/src/assets/icons/feather/thermometer.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/thumbs-down.svg b/web/src/assets/icons/feather/thumbs-down.svg
deleted file mode 100644
index 3e7bcd6..0000000
--- a/web/src/assets/icons/feather/thumbs-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/thumbs-up.svg b/web/src/assets/icons/feather/thumbs-up.svg
deleted file mode 100644
index 226c44d..0000000
--- a/web/src/assets/icons/feather/thumbs-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/toggle-left.svg b/web/src/assets/icons/feather/toggle-left.svg
deleted file mode 100644
index 240be29..0000000
--- a/web/src/assets/icons/feather/toggle-left.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/toggle-right.svg b/web/src/assets/icons/feather/toggle-right.svg
deleted file mode 100644
index fc6e81c..0000000
--- a/web/src/assets/icons/feather/toggle-right.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/tool.svg b/web/src/assets/icons/feather/tool.svg
deleted file mode 100644
index f3cbf3d..0000000
--- a/web/src/assets/icons/feather/tool.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/trash-2.svg b/web/src/assets/icons/feather/trash-2.svg
deleted file mode 100644
index f24d55b..0000000
--- a/web/src/assets/icons/feather/trash-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/trash.svg b/web/src/assets/icons/feather/trash.svg
deleted file mode 100644
index 55650bd..0000000
--- a/web/src/assets/icons/feather/trash.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/trello.svg b/web/src/assets/icons/feather/trello.svg
deleted file mode 100644
index b2f599b..0000000
--- a/web/src/assets/icons/feather/trello.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/trending-down.svg b/web/src/assets/icons/feather/trending-down.svg
deleted file mode 100644
index a9d4cfa..0000000
--- a/web/src/assets/icons/feather/trending-down.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/trending-up.svg b/web/src/assets/icons/feather/trending-up.svg
deleted file mode 100644
index 52026a4..0000000
--- a/web/src/assets/icons/feather/trending-up.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/triangle.svg b/web/src/assets/icons/feather/triangle.svg
deleted file mode 100644
index 274b652..0000000
--- a/web/src/assets/icons/feather/triangle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/truck.svg b/web/src/assets/icons/feather/truck.svg
deleted file mode 100644
index 3389837..0000000
--- a/web/src/assets/icons/feather/truck.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/tv.svg b/web/src/assets/icons/feather/tv.svg
deleted file mode 100644
index 955bbff..0000000
--- a/web/src/assets/icons/feather/tv.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/twitch.svg b/web/src/assets/icons/feather/twitch.svg
deleted file mode 100644
index 1706249..0000000
--- a/web/src/assets/icons/feather/twitch.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/twitter.svg b/web/src/assets/icons/feather/twitter.svg
deleted file mode 100644
index f8886ec..0000000
--- a/web/src/assets/icons/feather/twitter.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/type.svg b/web/src/assets/icons/feather/type.svg
deleted file mode 100644
index c6b2de3..0000000
--- a/web/src/assets/icons/feather/type.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/umbrella.svg b/web/src/assets/icons/feather/umbrella.svg
deleted file mode 100644
index dc77c0c..0000000
--- a/web/src/assets/icons/feather/umbrella.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/underline.svg b/web/src/assets/icons/feather/underline.svg
deleted file mode 100644
index 044945d..0000000
--- a/web/src/assets/icons/feather/underline.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/unlock.svg b/web/src/assets/icons/feather/unlock.svg
deleted file mode 100644
index 01dc359..0000000
--- a/web/src/assets/icons/feather/unlock.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/upload-cloud.svg b/web/src/assets/icons/feather/upload-cloud.svg
deleted file mode 100644
index a1db297..0000000
--- a/web/src/assets/icons/feather/upload-cloud.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/upload.svg b/web/src/assets/icons/feather/upload.svg
deleted file mode 100644
index 91eaff7..0000000
--- a/web/src/assets/icons/feather/upload.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/user-check.svg b/web/src/assets/icons/feather/user-check.svg
deleted file mode 100644
index 42f91b2..0000000
--- a/web/src/assets/icons/feather/user-check.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/user-minus.svg b/web/src/assets/icons/feather/user-minus.svg
deleted file mode 100644
index 44b75f5..0000000
--- a/web/src/assets/icons/feather/user-minus.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/user-plus.svg b/web/src/assets/icons/feather/user-plus.svg
deleted file mode 100644
index 21460f6..0000000
--- a/web/src/assets/icons/feather/user-plus.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/user-x.svg b/web/src/assets/icons/feather/user-x.svg
deleted file mode 100644
index 0c41a48..0000000
--- a/web/src/assets/icons/feather/user-x.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/user.svg b/web/src/assets/icons/feather/user.svg
deleted file mode 100644
index 7bb5f29..0000000
--- a/web/src/assets/icons/feather/user.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/users.svg b/web/src/assets/icons/feather/users.svg
deleted file mode 100644
index aacf6b0..0000000
--- a/web/src/assets/icons/feather/users.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/video-off.svg b/web/src/assets/icons/feather/video-off.svg
deleted file mode 100644
index 08ec697..0000000
--- a/web/src/assets/icons/feather/video-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/video.svg b/web/src/assets/icons/feather/video.svg
deleted file mode 100644
index 8ff156a..0000000
--- a/web/src/assets/icons/feather/video.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/voicemail.svg b/web/src/assets/icons/feather/voicemail.svg
deleted file mode 100644
index 5d78a8e..0000000
--- a/web/src/assets/icons/feather/voicemail.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/volume-1.svg b/web/src/assets/icons/feather/volume-1.svg
deleted file mode 100644
index 150e875..0000000
--- a/web/src/assets/icons/feather/volume-1.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/volume-2.svg b/web/src/assets/icons/feather/volume-2.svg
deleted file mode 100644
index 03d521c..0000000
--- a/web/src/assets/icons/feather/volume-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/volume-x.svg b/web/src/assets/icons/feather/volume-x.svg
deleted file mode 100644
index be44240..0000000
--- a/web/src/assets/icons/feather/volume-x.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/volume.svg b/web/src/assets/icons/feather/volume.svg
deleted file mode 100644
index 53bfe15..0000000
--- a/web/src/assets/icons/feather/volume.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/watch.svg b/web/src/assets/icons/feather/watch.svg
deleted file mode 100644
index a1099da..0000000
--- a/web/src/assets/icons/feather/watch.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/wifi-off.svg b/web/src/assets/icons/feather/wifi-off.svg
deleted file mode 100644
index 35eae43..0000000
--- a/web/src/assets/icons/feather/wifi-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/wifi.svg b/web/src/assets/icons/feather/wifi.svg
deleted file mode 100644
index 748c285..0000000
--- a/web/src/assets/icons/feather/wifi.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/wind.svg b/web/src/assets/icons/feather/wind.svg
deleted file mode 100644
index 82b3646..0000000
--- a/web/src/assets/icons/feather/wind.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/x-circle.svg b/web/src/assets/icons/feather/x-circle.svg
deleted file mode 100644
index 94aad5e..0000000
--- a/web/src/assets/icons/feather/x-circle.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/x-octagon.svg b/web/src/assets/icons/feather/x-octagon.svg
deleted file mode 100644
index 8543198..0000000
--- a/web/src/assets/icons/feather/x-octagon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/x-square.svg b/web/src/assets/icons/feather/x-square.svg
deleted file mode 100644
index 7677c38..0000000
--- a/web/src/assets/icons/feather/x-square.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/x.svg b/web/src/assets/icons/feather/x.svg
deleted file mode 100644
index 7d5875c..0000000
--- a/web/src/assets/icons/feather/x.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/youtube.svg b/web/src/assets/icons/feather/youtube.svg
deleted file mode 100644
index c482438..0000000
--- a/web/src/assets/icons/feather/youtube.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/zap-off.svg b/web/src/assets/icons/feather/zap-off.svg
deleted file mode 100644
index c636f8b..0000000
--- a/web/src/assets/icons/feather/zap-off.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/zap.svg b/web/src/assets/icons/feather/zap.svg
deleted file mode 100644
index 8fdafa9..0000000
--- a/web/src/assets/icons/feather/zap.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/zoom-in.svg b/web/src/assets/icons/feather/zoom-in.svg
deleted file mode 100644
index da4572d..0000000
--- a/web/src/assets/icons/feather/zoom-in.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/feather/zoom-out.svg b/web/src/assets/icons/feather/zoom-out.svg
deleted file mode 100644
index fd678d7..0000000
--- a/web/src/assets/icons/feather/zoom-out.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/src/assets/icons/isme/apifox.svg b/web/src/assets/icons/isme/apifox.svg
deleted file mode 100644
index 009cdf5..0000000
--- a/web/src/assets/icons/isme/apifox.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
diff --git a/web/src/assets/icons/isme/awesome.svg b/web/src/assets/icons/isme/awesome.svg
deleted file mode 100644
index cfaab8b..0000000
--- a/web/src/assets/icons/isme/awesome.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/web/src/assets/icons/isme/dialog.svg b/web/src/assets/icons/isme/dialog.svg
deleted file mode 100644
index 809330d..0000000
--- a/web/src/assets/icons/isme/dialog.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/web/src/assets/icons/isme/docs.svg b/web/src/assets/icons/isme/docs.svg
deleted file mode 100644
index 907ac11..0000000
--- a/web/src/assets/icons/isme/docs.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
diff --git a/web/src/assets/icons/isme/gitee.svg b/web/src/assets/icons/isme/gitee.svg
deleted file mode 100644
index 5896c65..0000000
--- a/web/src/assets/icons/isme/gitee.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/web/src/assets/icons/isme/naiveui.svg b/web/src/assets/icons/isme/naiveui.svg
deleted file mode 100644
index c236f7f..0000000
--- a/web/src/assets/icons/isme/naiveui.svg
+++ /dev/null
@@ -1,37 +0,0 @@
-
diff --git a/web/src/assets/images/404.webp b/web/src/assets/images/404.webp
deleted file mode 100644
index 3482bf9..0000000
Binary files a/web/src/assets/images/404.webp and /dev/null differ
diff --git a/web/src/assets/images/isme.png b/web/src/assets/images/isme.png
deleted file mode 100644
index 6a2acca..0000000
Binary files a/web/src/assets/images/isme.png and /dev/null differ
diff --git a/web/src/assets/images/login_banner.webp b/web/src/assets/images/login_banner.webp
deleted file mode 100644
index 2bc7cad..0000000
Binary files a/web/src/assets/images/login_banner.webp and /dev/null differ
diff --git a/web/src/assets/images/login_bg.webp b/web/src/assets/images/login_bg.webp
deleted file mode 100644
index 2a9df19..0000000
Binary files a/web/src/assets/images/login_bg.webp and /dev/null differ
diff --git a/web/src/assets/images/logo.png b/web/src/assets/images/logo.png
deleted file mode 100644
index 187ff0b..0000000
Binary files a/web/src/assets/images/logo.png and /dev/null differ
diff --git a/web/src/components/common/AppCard.vue b/web/src/components/common/AppCard.vue
deleted file mode 100644
index 358cf4c..0000000
--- a/web/src/components/common/AppCard.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/web/src/components/common/AppPage.vue b/web/src/components/common/AppPage.vue
deleted file mode 100644
index 31881b8..0000000
--- a/web/src/components/common/AppPage.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/components/common/CommonPage.vue b/web/src/components/common/CommonPage.vue
deleted file mode 100644
index 1e3c423..0000000
--- a/web/src/components/common/CommonPage.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- 返回
-
-
-
-
- {{ title ?? route.meta?.title }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/components/common/LayoutSetting.vue b/web/src/components/common/LayoutSetting.vue
deleted file mode 100644
index 137493b..0000000
--- a/web/src/components/common/LayoutSetting.vue
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- 布局设置
-
-
-
-
-
-
-
-
-
-
-
- 注: 此设置仅对未设置layout或者设置成跟随系统的页面有效,菜单设置的layout优先级最高
-
-
-
-
-
-
diff --git a/web/src/components/common/TheFooter.vue b/web/src/components/common/TheFooter.vue
deleted file mode 100644
index e2cf27e..0000000
--- a/web/src/components/common/TheFooter.vue
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
diff --git a/web/src/components/common/TheLogo.vue b/web/src/components/common/TheLogo.vue
deleted file mode 100644
index e5a8420..0000000
--- a/web/src/components/common/TheLogo.vue
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-

-
-
diff --git a/web/src/components/common/ThemeSetting.vue b/web/src/components/common/ThemeSetting.vue
deleted file mode 100644
index 55c5cd1..0000000
--- a/web/src/components/common/ThemeSetting.vue
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
- 设置主题色
-
-
-
-
diff --git a/web/src/components/common/ToggleTheme.vue b/web/src/components/common/ToggleTheme.vue
deleted file mode 100644
index ca97e19..0000000
--- a/web/src/components/common/ToggleTheme.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
diff --git a/web/src/components/common/index.js b/web/src/components/common/index.js
deleted file mode 100644
index 14e66b2..0000000
--- a/web/src/components/common/index.js
+++ /dev/null
@@ -1,6 +0,0 @@
-export { default as AppCard } from './AppCard.vue'
-export { default as TheFooter } from './TheFooter.vue'
-export { default as AppPage } from './AppPage.vue'
-export { default as CommonPage } from './CommonPage.vue'
-export { default as LayoutSetting } from './LayoutSetting.vue'
-export { default as ToggleTheme } from './ToggleTheme.vue'
diff --git a/web/src/components/index.js b/web/src/components/index.js
deleted file mode 100644
index 8621d75..0000000
--- a/web/src/components/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './common'
-export * from './me'
diff --git a/web/src/components/me/crud/QueryItem.vue b/web/src/components/me/crud/QueryItem.vue
deleted file mode 100644
index 01ba98f..0000000
--- a/web/src/components/me/crud/QueryItem.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/components/me/crud/index.vue b/web/src/components/me/crud/index.vue
deleted file mode 100644
index ae2e60a..0000000
--- a/web/src/components/me/crud/index.vue
+++ /dev/null
@@ -1,204 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/components/me/index.js b/web/src/components/me/index.js
deleted file mode 100644
index 795b613..0000000
--- a/web/src/components/me/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export { default as MeModal } from './modal/index.vue'
-export { default as MeCrud } from './crud/index.vue'
-export { default as MeQueryItem } from './crud/QueryItem.vue'
diff --git a/web/src/components/me/modal/index.vue b/web/src/components/me/modal/index.vue
deleted file mode 100644
index 40b2585..0000000
--- a/web/src/components/me/modal/index.vue
+++ /dev/null
@@ -1,191 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/components/me/modal/utils.js b/web/src/components/me/modal/utils.js
deleted file mode 100644
index dcba865..0000000
--- a/web/src/components/me/modal/utils.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2024/01/13 17:41:26
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-// 获取元素的CSS样式
-function getCss(element, key) {
- return element.currentStyle
- ? element.currentStyle[key]
- : window.getComputedStyle(element, null)[key]
-}
-
-// 初始化拖拽
-export function initDrag(bar, box) {
- if (!bar || !box)
- return
- const params = {
- left: 0,
- top: 0,
- currentX: 0,
- currentY: 0,
- flag: false,
- }
-
- if (getCss(box, 'left') !== 'auto') {
- params.left = getCss(box, 'left')
- }
- if (getCss(box, 'top') !== 'auto') {
- params.top = getCss(box, 'top')
- }
-
- // 设置触发拖动元素的鼠标样式为移动图标
- bar.style.cursor = 'move'
- // 鼠标按下事件处理函数
- bar.onmousedown = function (e) {
- params.flag = true // 设置拖拽标志为true
- e.preventDefault() // 阻止默认事件
- params.currentX = e.clientX // 鼠标当前位置的X坐标
- params.currentY = e.clientY // 鼠标当前位置的Y坐标
- }
- document.onmouseup = function () {
- params.flag = false // 设置拖拽标志为false
- if (getCss(box, 'left') !== 'auto') {
- params.left = getCss(box, 'left')
- }
- if (getCss(box, 'top') !== 'auto') {
- params.top = getCss(box, 'top')
- }
- }
- document.onmousemove = function (e) {
- if (e.target !== bar && !params.flag)
- return
-
- e.preventDefault() // 阻止默认事件
- // 如果拖拽标志为true
- if (params.flag) {
- const nowX = e.clientX // 鼠标当前位置的X坐标
- const nowY = e.clientY // 鼠标当前位置的Y坐标
- const disX = nowX - params.currentX // 鼠标移动的X距离
- const disY = nowY - params.currentY // 鼠标移动的Y距离
-
- const left = Number.parseInt(params.left) + disX // 盒子元素的新left值
- const top = Number.parseInt(params.top) + disY // 盒子元素的新top值
-
- box.style.left = `${left}px`
- box.style.top = `${top}px`
- }
- }
-}
diff --git a/web/src/composables/index.js b/web/src/composables/index.js
deleted file mode 100644
index 2e9b5a1..0000000
--- a/web/src/composables/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-export * from './useCrud'
-export * from './useForm'
-export * from './useModal'
-export * from './useAliveData'
diff --git a/web/src/composables/useAliveData.js b/web/src/composables/useAliveData.js
deleted file mode 100644
index bcc2f06..0000000
--- a/web/src/composables/useAliveData.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:22:28
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-const lastDataMap = new Map()
-export function useAliveData(initData = {}, key) {
- key = key ?? useRoute().name
- const lastData = lastDataMap.get(key)
- const aliveData = ref(lastData || { ...initData })
-
- watch(
- aliveData,
- (v) => {
- lastDataMap.set(key, v)
- },
- { deep: true },
- )
-
- return {
- aliveData,
- reset() {
- aliveData.value = { ...initData }
- lastDataMap.delete(key)
- },
- }
-}
diff --git a/web/src/composables/useCrud.js b/web/src/composables/useCrud.js
deleted file mode 100644
index d3c4425..0000000
--- a/web/src/composables/useCrud.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/12 09:03:00
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { useForm, useModal } from '.'
-
-const ACTIONS = {
- view: '查看',
- edit: '编辑',
- add: '新增',
-}
-
-export function useCrud({ name, initForm = {}, doCreate, doDelete, doUpdate, refresh }) {
- const modalAction = ref('')
- const [modalRef, okLoading] = useModal()
- const [modalFormRef, modalForm, validation] = useForm(initForm)
-
- /** 新增 */
- function handleAdd(row = {}, title) {
- handleOpen({ action: 'add', title, row: { ...initForm, ...row } })
- }
-
- /** 修改 */
- function handleEdit(row, title) {
- handleOpen({ action: 'edit', title, row })
- }
-
- /** 查看 */
- function handleView(row, title) {
- handleOpen({ action: 'view', title, row })
- }
-
- /** 打开modal */
- function handleOpen(options = {}) {
- const { action, row, title, onOk } = options
- modalAction.value = action
- modalForm.value = { ...row }
- modalRef.value?.open({
- ...options,
- async onOk() {
- if (typeof onOk === 'function') {
- return await onOk()
- }
- else {
- return await handleSave()
- }
- },
- title: title ?? (ACTIONS[modalAction.value] || '') + name,
- })
- }
-
- /** 保存 */
- async function handleSave(action) {
- if (!action && !['edit', 'add'].includes(modalAction.value)) {
- return false
- }
- await validation()
- const actions = {
- add: {
- api: () => doCreate(modalForm.value),
- cb: () => $message.success('新增成功'),
- },
- edit: {
- api: () => doUpdate(modalForm.value),
- cb: () => $message.success('保存成功'),
- },
- }
-
- action = action || actions[modalAction.value]
-
- try {
- okLoading.value = true
- const data = await action.api()
- action.cb()
- okLoading.value = false
- data && refresh(data)
- }
- catch (error) {
- okLoading.value = false
- return false
- }
- }
-
- /** 删除 */
- function handleDelete(id, confirmOptions) {
- if (!id && id !== 0)
- return
- const d = $dialog.warning({
- content: '确定删除?',
- title: '提示',
- positiveText: '确定',
- negativeText: '取消',
- async onPositiveClick() {
- try {
- d.loading = true
- const data = await doDelete(id)
- $message.success('删除成功')
- d.loading = false
- refresh(data, true)
- }
- catch (error) {
- d.loading = false
- }
- },
- ...confirmOptions,
- })
- }
-
- return {
- modalRef,
- modalFormRef,
- modalAction,
- modalForm,
- okLoading,
- validation,
- handleAdd,
- handleDelete,
- handleEdit,
- handleView,
- handleOpen,
- handleSave,
- }
-}
diff --git a/web/src/composables/useForm.js b/web/src/composables/useForm.js
deleted file mode 100644
index 69f9d50..0000000
--- a/web/src/composables/useForm.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:22:43
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-export function useForm(initFormData = {}) {
- const formRef = ref(null)
- const formModel = ref({ ...initFormData })
- const rules = {
- required: {
- required: true,
- message: '此为必填项',
- trigger: ['blur', 'change'],
- },
- }
- const validation = () => {
- return formRef.value?.validate()
- }
- return [formRef, formModel, validation, rules]
-}
diff --git a/web/src/composables/useModal.js b/web/src/composables/useModal.js
deleted file mode 100644
index dc08216..0000000
--- a/web/src/composables/useModal.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:22:49
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-export function useModal() {
- const modalRef = ref(null)
- const okLoading = computed({
- get() {
- return modalRef.value?.okLoading
- },
- set(v) {
- modalRef.value.okLoading = v
- },
- })
- return [modalRef, okLoading]
-}
diff --git a/web/src/directives/index.js b/web/src/directives/index.js
deleted file mode 100644
index f27a036..0000000
--- a/web/src/directives/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:23:01
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { router } from '@/router'
-
-const permission = {
- mounted(el, binding) {
- const currentRoute = unref(router.currentRoute)
- const btns = currentRoute.meta?.btns?.map(item => item.code) || []
- if (!btns.includes(binding.value)) {
- el.remove()
- }
- },
-}
-
-export function setupDirectives(app) {
- app.directive('permission', permission)
-}
diff --git a/web/src/layouts/components/BreadCrumb.vue b/web/src/layouts/components/BreadCrumb.vue
deleted file mode 100644
index dadc9ad..0000000
--- a/web/src/layouts/components/BreadCrumb.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
- {{ route.meta.title }}
-
-
-
-
-
- {{ item.name }}
-
-
-
-
-
-
-
diff --git a/web/src/layouts/components/Fullscreen.vue b/web/src/layouts/components/Fullscreen.vue
deleted file mode 100644
index 7ccc3d4..0000000
--- a/web/src/layouts/components/Fullscreen.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
diff --git a/web/src/layouts/components/MenuCollapse.vue b/web/src/layouts/components/MenuCollapse.vue
deleted file mode 100644
index 1ec6d30..0000000
--- a/web/src/layouts/components/MenuCollapse.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/web/src/layouts/components/RoleSelect.vue b/web/src/layouts/components/RoleSelect.vue
deleted file mode 100644
index b839df4..0000000
--- a/web/src/layouts/components/RoleSelect.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
-
-
- {{ role.name }}
-
-
-
-
-
-
-
- 退出登录
-
-
- 确认
-
-
-
-
-
-
-
diff --git a/web/src/layouts/components/SideLogo.vue b/web/src/layouts/components/SideLogo.vue
deleted file mode 100644
index a9cfba0..0000000
--- a/web/src/layouts/components/SideLogo.vue
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
- {{ title }}
-
-
-
-
-
diff --git a/web/src/layouts/components/SideMenu.vue b/web/src/layouts/components/SideMenu.vue
deleted file mode 100644
index a369658..0000000
--- a/web/src/layouts/components/SideMenu.vue
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/web/src/layouts/components/UserAvatar.vue b/web/src/layouts/components/UserAvatar.vue
deleted file mode 100644
index 84bf105..0000000
--- a/web/src/layouts/components/UserAvatar.vue
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
-
-
-
- {{ userStore.nickName ?? userStore.username }}
- [{{ userStore.currentRole?.name }}]
-
-
-
-
-
-
-
-
diff --git a/web/src/layouts/components/index.js b/web/src/layouts/components/index.js
deleted file mode 100644
index a9d0280..0000000
--- a/web/src/layouts/components/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-export { default as RoleSelect } from './RoleSelect.vue'
-export { default as UserAvatar } from './UserAvatar.vue'
-export { default as MenuCollapse } from './MenuCollapse.vue'
-export { default as BreadCrumb } from './BreadCrumb.vue'
-export { default as AppTab } from './tab/index.vue'
-export { default as SideLogo } from './SideLogo.vue'
-export { default as SideMenu } from './SideMenu.vue'
-export { default as Fullscreen } from './Fullscreen.vue'
diff --git a/web/src/layouts/components/tab/ContextMenu.vue b/web/src/layouts/components/tab/ContextMenu.vue
deleted file mode 100644
index ceaaae9..0000000
--- a/web/src/layouts/components/tab/ContextMenu.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/layouts/components/tab/index.vue b/web/src/layouts/components/tab/index.vue
deleted file mode 100644
index 0936732..0000000
--- a/web/src/layouts/components/tab/index.vue
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
-
- tabStore.removeTab(path)"
- >
-
- {{ item.title }}
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/layouts/empty/index.vue b/web/src/layouts/empty/index.vue
deleted file mode 100644
index 31d7e98..0000000
--- a/web/src/layouts/empty/index.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
diff --git a/web/src/layouts/full/header/index.vue b/web/src/layouts/full/header/index.vue
deleted file mode 100644
index 45850d7..0000000
--- a/web/src/layouts/full/header/index.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/layouts/full/index.vue b/web/src/layouts/full/index.vue
deleted file mode 100644
index 24d8d86..0000000
--- a/web/src/layouts/full/index.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/web/src/layouts/full/sidebar/index.vue b/web/src/layouts/full/sidebar/index.vue
deleted file mode 100644
index 030938e..0000000
--- a/web/src/layouts/full/sidebar/index.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/web/src/layouts/normal/header/index.vue b/web/src/layouts/normal/header/index.vue
deleted file mode 100644
index 9590e8f..0000000
--- a/web/src/layouts/normal/header/index.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
- |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/layouts/normal/index.vue b/web/src/layouts/normal/index.vue
deleted file mode 100644
index 12fb6de..0000000
--- a/web/src/layouts/normal/index.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/web/src/layouts/normal/sidebar/index.vue b/web/src/layouts/normal/sidebar/index.vue
deleted file mode 100644
index f6b71fb..0000000
--- a/web/src/layouts/normal/sidebar/index.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/web/src/layouts/simple/index.vue b/web/src/layouts/simple/index.vue
deleted file mode 100644
index ef192dd..0000000
--- a/web/src/layouts/simple/index.vue
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/web/src/layouts/simple/sidebar/index.vue b/web/src/layouts/simple/sidebar/index.vue
deleted file mode 100644
index 27a7e6f..0000000
--- a/web/src/layouts/simple/sidebar/index.vue
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/main.js b/web/src/main.js
deleted file mode 100644
index ce2e92f..0000000
--- a/web/src/main.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**********************************
- * @Description: 入口文件
- * @FilePath: main.js
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:41:32
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import '@/styles/reset.css'
-import '@/styles/global.scss'
-import 'uno.css'
-
-import { createApp } from 'vue'
-import App from './App.vue'
-import { setupRouter } from './router'
-import { setupStore } from './store'
-import { setupNaiveDiscreteApi } from './utils'
-import { setupDirectives } from './directives'
-
-async function bootstrap() {
- const app = createApp(App)
- setupStore(app)
- setupDirectives(app)
- await setupRouter(app)
- app.mount('#app')
- setupNaiveDiscreteApi()
-}
-
-bootstrap()
diff --git a/web/src/router/basic-routes.js b/web/src/router/basic-routes.js
deleted file mode 100644
index e8321ab..0000000
--- a/web/src/router/basic-routes.js
+++ /dev/null
@@ -1,40 +0,0 @@
-export const basicRoutes = [
- {
- name: 'Login',
- path: '/login',
- component: () => import('@/views/login/index.vue'),
- meta: {
- title: '登录页',
- layout: 'empty',
- },
- },
-
- {
- name: 'Home',
- path: '/',
- component: () => import('@/views/home/index.vue'),
- meta: {
- title: '首页',
- },
- },
-
- {
- name: '404',
- path: '/404',
- component: () => import('@/views/error-page/404.vue'),
- meta: {
- title: '页面飞走了',
- layout: 'empty',
- },
- },
-
- {
- name: '403',
- path: '/403',
- component: () => import('@/views/error-page/403.vue'),
- meta: {
- title: '没有权限',
- layout: 'empty',
- },
- },
-]
diff --git a/web/src/router/guards/index.js b/web/src/router/guards/index.js
deleted file mode 100644
index 35f274b..0000000
--- a/web/src/router/guards/index.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:24:46
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { createPageLoadingGuard } from './page-loading-guard'
-import { createPageTitleGuard } from './page-title-guard'
-import { createPermissionGuard } from './permission-guard'
-import { createTabGuard } from './tab-guard'
-
-export function setupRouterGuards(router) {
- createPageLoadingGuard(router)
- createPermissionGuard(router)
- createPageTitleGuard(router)
- createTabGuard(router)
-}
diff --git a/web/src/router/guards/page-loading-guard.js b/web/src/router/guards/page-loading-guard.js
deleted file mode 100644
index ba145fa..0000000
--- a/web/src/router/guards/page-loading-guard.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:24:53
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-export function createPageLoadingGuard(router) {
- router.beforeEach(() => {
- $loadingBar.start()
- })
-
- router.afterEach(() => {
- setTimeout(() => {
- $loadingBar.finish()
- }, 200)
- })
-
- router.onError(() => {
- $loadingBar.error()
- })
-}
diff --git a/web/src/router/guards/page-title-guard.js b/web/src/router/guards/page-title-guard.js
deleted file mode 100644
index 96042f6..0000000
--- a/web/src/router/guards/page-title-guard.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:25:00
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-const baseTitle = import.meta.env.VITE_TITLE
-
-export function createPageTitleGuard(router) {
- router.afterEach((to) => {
- const pageTitle = to.meta?.title
- if (pageTitle) {
- document.title = `${pageTitle} | ${baseTitle}`
- }
- else {
- document.title = baseTitle
- }
- })
-}
diff --git a/web/src/router/guards/permission-guard.js b/web/src/router/guards/permission-guard.js
deleted file mode 100644
index b317a08..0000000
--- a/web/src/router/guards/permission-guard.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:25:07
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { useAuthStore, usePermissionStore, useUserStore } from '@/store'
-import api from '@/api'
-import { getPermissions, getUserInfo } from '@/store/helper'
-
-const WHITE_LIST = ['/login', '/404']
-export function createPermissionGuard(router) {
- router.beforeEach(async (to) => {
- const authStore = useAuthStore()
- const token = authStore.accessToken
-
- /** 没有token */
- if (!token) {
- if (WHITE_LIST.includes(to.path))
- return true
- return { path: 'login', query: { ...to.query, redirect: to.path } }
- }
-
- // 有token的情况
- if (to.path === '/login')
- return { path: '/' }
- if (WHITE_LIST.includes(to.path))
- return true
-
- const userStore = useUserStore()
- const permissionStore = usePermissionStore()
- if (!userStore.userInfo) {
- const [user, permissions] = await Promise.all([getUserInfo(), getPermissions()])
- userStore.setUser(user)
- permissionStore.setPermissions(permissions)
- const routeComponents = import.meta.glob('@/views/**/*.vue')
- permissionStore.accessRoutes.forEach((route) => {
- route.component = routeComponents[route.component] || undefined
- !router.hasRoute(route.name) && router.addRoute(route)
- })
- return { ...to, replace: true }
- }
-
- const routes = router.getRoutes()
- if (routes.find(route => route.name === to.name))
- return true
-
- // 判断是无权限还是404
- const { data: hasMenu } = await api.validateMenuPath(to.path)
- return hasMenu
- ? { name: '403', query: { path: to.fullPath }, state: { from: 'permission-guard' } }
- : { name: '404', query: { path: to.fullPath } }
- })
-}
diff --git a/web/src/router/guards/tab-guard.js b/web/src/router/guards/tab-guard.js
deleted file mode 100644
index e74b652..0000000
--- a/web/src/router/guards/tab-guard.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:25:17
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { useTabStore } from '@/store'
-
-export const EXCLUDE_TAB = ['/404', '/403', '/login']
-
-export function createTabGuard(router) {
- router.afterEach((to) => {
- if (EXCLUDE_TAB.includes(to.path))
- return
- const tabStore = useTabStore()
- const { name, fullPath: path } = to
- const title = to.meta?.title
- const icon = to.meta?.icon
- const keepAlive = to.meta?.keepAlive
- tabStore.addTab({ name, path, title, icon, keepAlive })
- })
-}
diff --git a/web/src/router/index.js b/web/src/router/index.js
deleted file mode 100644
index 994157b..0000000
--- a/web/src/router/index.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:25:23
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'
-import { setupRouterGuards } from './guards'
-import { basicRoutes } from './basic-routes'
-
-export const router = createRouter({
- history:
- import.meta.env.VITE_USE_HASH === 'true'
- ? createWebHashHistory(import.meta.env.VITE_PUBLIC_PATH || '/')
- : createWebHistory(import.meta.env.VITE_PUBLIC_PATH || '/'),
- routes: basicRoutes,
- scrollBehavior: () => ({ left: 0, top: 0 }),
-})
-
-export async function setupRouter(app) {
- app.use(router)
- setupRouterGuards(router)
-}
diff --git a/web/src/settings.js b/web/src/settings.js
deleted file mode 100644
index b337449..0000000
--- a/web/src/settings.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/13 20:54:36
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-export const defaultLayout = 'normal'
-
-export const defaultPrimaryColor = '#316C72'
-
-// 控制 LayoutSetting 组件是否可见
-export const layoutSettingVisible = true
-
-export const naiveThemeOverrides = {
- common: {
- primaryColor: '#316C72FF',
- primaryColorHover: '#316C72E3',
- primaryColorPressed: '#2B4C59FF',
- primaryColorSuppl: '#316C72E3',
- },
-}
-
-export const basePermissions = [
- {
- code: 'ExternalLink',
- name: '外链(可内嵌打开)',
- type: 'MENU',
- icon: 'i-fe:external-link',
- order: 98,
- enable: true,
- show: true,
- children: [
- {
- code: 'ShowDocs',
- name: '项目文档',
- type: 'MENU',
- path: 'https://docs.isme.top/web/#/624306705/188522224',
- icon: 'i-me:docs',
- order: 1,
- enable: true,
- show: true,
- },
- {
- code: 'ApiFoxDocs',
- name: '接口文档',
- type: 'MENU',
- path: 'https://apifox.com/apidoc/shared-ff4a4d32-c0d1-4caf-b0ee-6abc130f734a',
- icon: 'i-me:apifox',
- order: 2,
- enable: true,
- show: true,
- },
- {
- code: 'NaiveUI',
- name: 'Naive UI',
- type: 'MENU',
- path: 'https://www.naiveui.com/zh-CN/os-theme',
- icon: 'i-me:naiveui',
- order: 3,
- enable: true,
- show: true,
- },
- {
- code: 'MyBlog',
- name: '博客-掘金',
- type: 'MENU',
- path: 'https://juejin.cn/user/1961184475483255/posts',
- icon: 'i-simple-icons:juejin',
- order: 4,
- enable: true,
- show: true,
- },
- ],
- },
-]
diff --git a/web/src/store/helper.js b/web/src/store/helper.js
deleted file mode 100644
index dd8fd26..0000000
--- a/web/src/store/helper.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import { basePermissions } from '@/settings'
-import api from '@/api'
-
-export async function getUserInfo() {
- const res = await api.getUser()
- const { id, username, profile, roles, currentRole } = res.data || {}
- return {
- id,
- username,
- avatar: profile?.avatar,
- nickName: profile?.nickName,
- gender: profile?.gender,
- address: profile?.address,
- email: profile?.email,
- roles,
- currentRole,
- }
-}
-
-export async function getPermissions() {
- let asyncPermissions = []
- try {
- const res = await api.getRolePermissions()
- asyncPermissions = res?.data || []
- }
- catch (error) {
- console.error(error)
- }
- return basePermissions.concat(asyncPermissions)
-}
diff --git a/web/src/store/index.js b/web/src/store/index.js
deleted file mode 100644
index a193337..0000000
--- a/web/src/store/index.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:26:15
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { createPinia } from 'pinia'
-import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
-
-export function setupStore(app) {
- const pinia = createPinia()
- pinia.use(piniaPluginPersistedstate)
- app.use(pinia)
-}
-
-export * from './modules'
diff --git a/web/src/store/modules/app.js b/web/src/store/modules/app.js
deleted file mode 100644
index d16aca3..0000000
--- a/web/src/store/modules/app.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:25:31
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { defineStore } from 'pinia'
-import { useDark } from '@vueuse/core'
-import { generate, getRgbStr } from '@arco-design/color'
-import { defaultLayout, defaultPrimaryColor, naiveThemeOverrides } from '@/settings'
-
-export const useAppStore = defineStore('app', {
- state: () => ({
- collapsed: false,
- isDark: useDark(),
- layout: defaultLayout,
- primaryColor: defaultPrimaryColor,
- naiveThemeOverrides,
- }),
- actions: {
- switchCollapsed() {
- this.collapsed = !this.collapsed
- },
- setCollapsed(b) {
- this.collapsed = b
- },
- toggleDark() {
- this.isDark = !this.isDark
- },
- setLayout(v) {
- this.layout = v
- },
- setPrimaryColor(color) {
- this.primaryColor = color
- },
- setThemeColor(color = this.primaryColor, isDark = this.isDark) {
- const colors = generate(color, {
- list: true,
- dark: isDark,
- })
- document.body.style.setProperty('--primary-color', getRgbStr(colors[5]))
- this.naiveThemeOverrides.common = Object.assign(this.naiveThemeOverrides.common || {}, {
- primaryColor: colors[5],
- primaryColorHover: colors[4],
- primaryColorSuppl: colors[4],
- primaryColorPressed: colors[6],
- })
- },
- },
- persist: {
- paths: ['collapsed', 'layout', 'primaryColor', 'naiveThemeOverrides'],
- storage: sessionStorage,
- },
-})
diff --git a/web/src/store/modules/auth.js b/web/src/store/modules/auth.js
deleted file mode 100644
index aea8f0e..0000000
--- a/web/src/store/modules/auth.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:25:39
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { defineStore } from 'pinia'
-import { usePermissionStore, useRouterStore, useTabStore, useUserStore } from '@/store'
-
-export const useAuthStore = defineStore('auth', {
- state: () => ({
- accessToken: undefined,
- }),
- actions: {
- setToken({ accessToken }) {
- this.accessToken = accessToken
- },
- resetToken() {
- this.$reset()
- },
- toLogin() {
- const { router, route } = useRouterStore()
- router.replace({
- path: '/login',
- query: route.query,
- })
- },
- async switchCurrentRole(data) {
- this.resetLoginState()
- await nextTick()
- this.setToken(data)
- },
- resetLoginState() {
- const { resetUser } = useUserStore()
- const { resetRouter } = useRouterStore()
- const { resetPermission, accessRoutes } = usePermissionStore()
- const { resetTabs } = useTabStore()
- // 重置路由
- resetRouter(accessRoutes)
- // 重置用户
- resetUser()
- // 重置权限
- resetPermission()
- // 重置Tabs
- resetTabs()
- // 重置token
- this.resetToken()
- },
- async logout() {
- this.resetLoginState()
- this.toLogin()
- },
- },
- persist: {
- key: 'vue-naivue-admin_auth',
- },
-})
diff --git a/web/src/store/modules/index.js b/web/src/store/modules/index.js
deleted file mode 100644
index 9672b79..0000000
--- a/web/src/store/modules/index.js
+++ /dev/null
@@ -1,6 +0,0 @@
-export * from './app'
-export * from './auth'
-export * from './permission'
-export * from './tab'
-export * from './user'
-export * from './router'
diff --git a/web/src/store/modules/permission.js b/web/src/store/modules/permission.js
deleted file mode 100644
index b61a039..0000000
--- a/web/src/store/modules/permission.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:25:47
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { hyphenate } from '@vueuse/core'
-import { defineStore } from 'pinia'
-import { isExternal } from '@/utils'
-
-export const usePermissionStore = defineStore('permission', {
- state: () => ({
- accessRoutes: [],
- permissions: [],
- menus: [],
- }),
- actions: {
- setPermissions(permissions) {
- this.permissions = permissions
- this.menus = this.permissions
- .filter(item => item.type === 'MENU')
- .map(item => this.getMenuItem(item))
- .filter(item => !!item)
- .sort((a, b) => a.order - b.order)
- },
- getMenuItem(item, parent) {
- const route = this.generateRoute(item, item.show ? null : parent?.key)
- if (item.enable && route.path && !route.path.startsWith('http'))
- this.accessRoutes.push(route)
- if (!item.show)
- return null
- const menuItem = {
- label: route.meta.title,
- key: route.name,
- path: route.path,
- originPath: route.meta.originPath,
- icon: () => h('i', { class: `${route.meta.icon} text-16` }),
- order: item.order ?? 0,
- }
- const children = item.children?.filter(item => item.type === 'MENU') || []
- if (children.length) {
- menuItem.children = children
- .map(child => this.getMenuItem(child, menuItem))
- .filter(item => !!item)
- .sort((a, b) => a.order - b.order)
- if (!menuItem.children.length)
- delete menuItem.children
- }
- return menuItem
- },
- generateRoute(item, parentKey) {
- let originPath
- if (isExternal(item.path)) {
- originPath = item.path
- item.component = '/src/views/iframe/index.vue'
- item.path = `/iframe/${hyphenate(item.code)}`
- }
- return {
- name: item.code,
- path: item.path,
- redirect: item.redirect,
- component: item.component,
- meta: {
- originPath,
- icon: `${item.icon}?mask`,
- title: item.name,
- layout: item.layout,
- keepAlive: !!item.keepAlive,
- parentKey,
- btns: item.children
- ?.filter(item => item.type === 'BUTTON')
- .map(item => ({ code: item.code, name: item.name })),
- },
- }
- },
- resetPermission() {
- this.$reset()
- },
- },
-})
diff --git a/web/src/store/modules/router.js b/web/src/store/modules/router.js
deleted file mode 100644
index 51a5b59..0000000
--- a/web/src/store/modules/router.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2024/01/06 17:18:40
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { defineStore } from 'pinia'
-
-export const useRouterStore = defineStore('router', () => {
- const router = useRouter()
- const route = useRoute()
-
- function resetRouter(accessRoutes) {
- accessRoutes.forEach((item) => {
- router.hasRoute(item.name) && router.removeRoute(item.name)
- })
- }
-
- return {
- router,
- route,
- resetRouter,
- }
-})
diff --git a/web/src/store/modules/tab.js b/web/src/store/modules/tab.js
deleted file mode 100644
index 12c5e46..0000000
--- a/web/src/store/modules/tab.js
+++ /dev/null
@@ -1,94 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:25:52
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { defineStore } from 'pinia'
-import { useRouterStore } from './router'
-
-export const useTabStore = defineStore('tab', {
- state: () => ({
- tabs: [],
- activeTab: '',
- reloading: false,
- }),
- getters: {
- activeIndex() {
- return this.tabs.findIndex(item => item.path === this.activeTab)
- },
- },
- actions: {
- async setActiveTab(path) {
- await nextTick() // tab栏dom更新完再设置激活,让tab栏定位到新增的tab上生效
- this.activeTab = path
- },
- setTabs(tabs) {
- this.tabs = tabs
- },
- addTab(tab = {}) {
- const findIndex = this.tabs.findIndex(item => item.path === tab.path)
- if (findIndex !== -1) {
- this.tabs.splice(findIndex, 1, tab)
- }
- else {
- this.setTabs([...this.tabs, tab])
- }
- this.setActiveTab(tab.path)
- },
- async reloadTab(path, keepAlive) {
- const findItem = this.tabs.find(item => item.path === path)
- if (!findItem)
- return
- // 更新key可让keepAlive失效
- if (keepAlive)
- findItem.keepAlive = false
- $loadingBar.start()
- this.reloading = true
- await nextTick()
- this.reloading = false
- findItem.keepAlive = !!keepAlive
- setTimeout(() => {
- document.documentElement.scrollTo({ left: 0, top: 0 })
- $loadingBar.finish()
- }, 100)
- },
- async removeTab(path) {
- this.setTabs(this.tabs.filter(tab => tab.path !== path))
- if (path === this.activeTab) {
- useRouterStore().router?.push(this.tabs[this.tabs.length - 1].path)
- }
- },
- removeOther(curPath = this.activeTab) {
- this.setTabs(this.tabs.filter(tab => tab.path === curPath))
- if (curPath !== this.activeTab) {
- useRouterStore().router?.push(this.tabs[this.tabs.length - 1].path)
- }
- },
- removeLeft(curPath) {
- const curIndex = this.tabs.findIndex(item => item.path === curPath)
- const filterTabs = this.tabs.filter((item, index) => index >= curIndex)
- this.setTabs(filterTabs)
- if (!filterTabs.find(item => item.path === this.activeTab)) {
- useRouterStore().router?.push(filterTabs[filterTabs.length - 1].path)
- }
- },
- removeRight(curPath) {
- const curIndex = this.tabs.findIndex(item => item.path === curPath)
- const filterTabs = this.tabs.filter((item, index) => index <= curIndex)
- this.setTabs(filterTabs)
- if (!filterTabs.find(item => item.path === this.activeTab.value)) {
- useRouterStore().router?.push(filterTabs[filterTabs.length - 1].path)
- }
- },
- resetTabs() {
- this.$reset()
- },
- },
- persist: {
- paths: ['tabs'],
- storage: sessionStorage,
- },
-})
diff --git a/web/src/store/modules/user.js b/web/src/store/modules/user.js
deleted file mode 100644
index c434737..0000000
--- a/web/src/store/modules/user.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:25:59
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { defineStore } from 'pinia'
-
-export const useUserStore = defineStore('user', {
- state: () => ({
- userInfo: null,
- }),
- getters: {
- userId() {
- return this.userInfo?.id
- },
- username() {
- return this.userInfo?.username
- },
- nickName() {
- return this.userInfo?.nickName
- },
- avatar() {
- return this.userInfo?.avatar
- },
- currentRole() {
- return this.userInfo?.currentRole || {}
- },
- roles() {
- return this.userInfo?.roles || []
- },
- },
- actions: {
- setUser(user) {
- this.userInfo = user
- },
- resetUser() {
- this.$reset()
- },
- },
-})
diff --git a/web/src/styles/global.scss b/web/src/styles/global.scss
deleted file mode 100644
index 857043c..0000000
--- a/web/src/styles/global.scss
+++ /dev/null
@@ -1,91 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:26:28
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-html,
-body {
- width: 100%;
- height: 100%;
- overflow: hidden;
-}
-
-#app {
- width: 100%;
- height: 100%;
-}
-
-/* transition fade-slide */
-.fade-slide-leave-active,
-.fade-slide-enter-active {
- transition: all 0.3s;
-}
-
-.fade-slide-enter-from {
- opacity: 0;
- transform: translateX(-30px);
-}
-
-.fade-slide-leave-to {
- opacity: 0;
- transform: translateX(30px);
-}
-
-/* 自定义滚动条样式 */
-.cus-scroll {
- overflow: auto;
- &::-webkit-scrollbar {
- width: 8px;
- height: 8px;
- }
-}
-.cus-scroll-x {
- overflow-x: auto;
- &::-webkit-scrollbar {
- width: 0;
- height: 8px;
- }
-}
-.cus-scroll-y {
- overflow-y: auto;
- &::-webkit-scrollbar {
- width: 8px;
- height: 0;
- }
-}
-.cus-scroll,
-.cus-scroll-x,
-.cus-scroll-y {
- &::-webkit-scrollbar-thumb {
- background-color: transparent;
- border-radius: 4px;
- }
- &:hover {
- &::-webkit-scrollbar-thumb {
- background: #bfbfbf;
- }
- &::-webkit-scrollbar-thumb:hover {
- background: rgb(var(--primary-color));
- }
- }
-}
-
-/* 切换主题的动画效果 */
-::view-transition-old(root),
-::view-transition-new(root) {
- animation: none;
- mix-blend-mode: normal;
-}
-
-::view-transition-old(root),
-.dark::view-transition-new(root) {
- z-index: 1;
-}
-
-::view-transition-new(root),
-.dark::view-transition-old(root) {
- z-index: 9999;
-}
diff --git a/web/src/styles/reset.css b/web/src/styles/reset.css
deleted file mode 100644
index 71447a2..0000000
--- a/web/src/styles/reset.css
+++ /dev/null
@@ -1,49 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:26:38
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-html {
- box-sizing: border-box;
-}
-
-*,
-::before,
-::after {
- margin: 0;
- padding: 0;
- box-sizing: inherit;
-}
-
-a {
- text-decoration: none;
- color: inherit;
-}
-
-a:hover,
-a:link,
-a:visited,
-a:active {
- text-decoration: none;
-}
-
-ol,
-ul {
- list-style: none;
-}
-
-input,
-textarea {
- outline: none;
- border: none;
- resize: none;
-}
-
-img,
-video {
- max-width: 100%;
- height: auto;
-}
diff --git a/web/src/utils/common.js b/web/src/utils/common.js
deleted file mode 100644
index eccf9e9..0000000
--- a/web/src/utils/common.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/**********************************
- * @FilePath: common.js
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:45:46
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import dayjs from 'dayjs'
-
-/**
- * @param {(object | string | number)} time
- * @param {string} format
- * @returns {string | null} 格式化后的时间字符串
- *
- */
-export function formatDateTime(time = undefined, format = 'YYYY-MM-DD HH:mm:ss') {
- return dayjs(time).format(format)
-}
-
-export function formatDate(date = undefined, format = 'YYYY-MM-DD') {
- return formatDateTime(date, format)
-}
-
-/**
- * @param {Function} fn
- * @param {number} wait
- * @returns {Function} 节流函数
- *
- */
-export function throttle(fn, wait) {
- let context, args
- let previous = 0
-
- return function (...argArr) {
- const now = +new Date()
- context = this
- args = argArr
- if (now - previous > wait) {
- fn.apply(context, args)
- previous = now
- }
- }
-}
-
-/**
- * @param {Function} method
- * @param {number} wait
- * @param {boolean} immediate
- * @return {*} 防抖函数
- */
-export function debounce(method, wait, immediate) {
- let timeout
- return function (...args) {
- const context = this
- if (timeout) {
- clearTimeout(timeout)
- }
- // 立即执行需要两个条件,一是immediate为true,二是timeout未被赋值或被置为null
- if (immediate) {
- /**
- * 如果定时器不存在,则立即执行,并设置一个定时器,wait毫秒后将定时器置为null
- * 这样确保立即执行后wait毫秒内不会被再次触发
- */
- const callNow = !timeout
- timeout = setTimeout(() => {
- timeout = null
- }, wait)
- if (callNow) {
- method.apply(context, args)
- }
- }
- else {
- // 如果immediate为false,则函数wait毫秒后执行
- timeout = setTimeout(() => {
- /**
- * args是一个类数组对象,所以使用fn.apply
- * 也可写作method.call(context, ...args)
- */
- method.apply(context, args)
- }, wait)
- }
- }
-}
-
-/**
- * @param {number} time 毫秒数
- * @returns 睡一会儿,让子弹暂停一下
- */
-export function sleep(time) {
- return new Promise(resolve => setTimeout(resolve, time))
-}
-
-/**
- * @param {HTMLElement} el
- * @param {Function} cb
- * @return {ResizeObserver}
- */
-export function useResize(el, cb) {
- const observer = new ResizeObserver((entries) => {
- cb(entries[0].contentRect)
- })
- observer.observe(el)
- return observer
-}
diff --git a/web/src/utils/http/helpers.js b/web/src/utils/http/helpers.js
deleted file mode 100644
index b7de8bb..0000000
--- a/web/src/utils/http/helpers.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**********************************
- * @FilePath: helpers.js
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:46:22
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { useAuthStore } from '@/store'
-
-let isConfirming = false
-export function resolveResError(code, message, needTip = true) {
- switch (code) {
- case 401:
- if (isConfirming || !needTip)
- return
- isConfirming = true
- $dialog.confirm({
- title: '提示',
- type: 'info',
- content: '登录已过期,是否重新登录?',
- confirm() {
- useAuthStore().logout()
- window.$message?.success('已退出登录')
- isConfirming = false
- },
- cancel() {
- isConfirming = false
- },
- })
- return false
- case 11007:
- case 11008:
- if (isConfirming || !needTip)
- return
- isConfirming = true
- $dialog.confirm({
- title: '提示',
- type: 'info',
- content: `${message},是否重新登录?`,
- confirm() {
- useAuthStore().logout()
- window.$message?.success('已退出登录')
- isConfirming = false
- },
- cancel() {
- isConfirming = false
- },
- })
- return false
- case 403:
- message = '请求被拒绝'
- break
- case 404:
- message = '请求资源或接口不存在'
- break
- case 500:
- message = '服务器发生异常'
- break
- default:
- message = message ?? `【${code}】: 未知异常!`
- break
- }
- needTip && window.$message?.error(message)
- return message
-}
diff --git a/web/src/utils/http/index.js b/web/src/utils/http/index.js
deleted file mode 100644
index b0d5ca0..0000000
--- a/web/src/utils/http/index.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**********************************
- * @FilePath: index.js
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:46:28
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import axios from 'axios'
-import { setupInterceptors } from './interceptors'
-
-export function createAxios(options = {}) {
- const defaultOptions = {
- baseURL: import.meta.env.VITE_AXIOS_BASE_URL,
- timeout: 12000,
- }
- const service = axios.create({
- ...defaultOptions,
- ...options,
- })
- setupInterceptors(service)
- return service
-}
-
-export const request = createAxios()
-
-export const mockRequest = createAxios({
- baseURL: '/mock-api',
-})
diff --git a/web/src/utils/http/interceptors.js b/web/src/utils/http/interceptors.js
deleted file mode 100644
index d048d3d..0000000
--- a/web/src/utils/http/interceptors.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/**********************************
- * @FilePath: interceptors.js
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:46:40
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { resolveResError } from './helpers'
-import { useAuthStore } from '@/store'
-
-export function setupInterceptors(axiosInstance) {
- function reqResolve(config) {
- // 处理不需要token的请求
- if (config.needToken === false) {
- return config
- }
-
- const { accessToken } = useAuthStore()
- if (accessToken) {
- // token: Bearer + xxx
- config.headers.Authorization = `Bearer ${accessToken}`
- }
-
- return config
- }
-
- function reqReject(error) {
- return Promise.reject(error)
- }
-
- const SUCCESS_CODES = [0, 200]
- function resResolve(response) {
- const { data, status, config, statusText, headers } = response
- if (headers['content-type']?.includes('json')) {
- if (SUCCESS_CODES.includes(data?.code)) {
- return Promise.resolve(data)
- }
- const code = data?.code ?? status
-
- const needTip = config?.needTip !== false
-
- // 根据code处理对应的操作,并返回处理后的message
- const message = resolveResError(code, data?.message ?? statusText, needTip)
-
- return Promise.reject({ code, message, error: data ?? response })
- }
- return Promise.resolve(data ?? response)
- }
-
- async function resReject(error) {
- if (!error || !error.response) {
- const code = error?.code
- /** 根据code处理对应的操作,并返回处理后的message */
- const message = resolveResError(code, error.message)
- return Promise.reject({ code, message, error })
- }
-
- const { data, status, config } = error.response
- const code = data?.code ?? status
-
- const needTip = config?.needTip !== false
- const message = resolveResError(code, data?.message ?? error.message, needTip)
- return Promise.reject({ code, message, error: error.response?.data || error.response })
- }
-
- axiosInstance.interceptors.request.use(reqResolve, reqReject)
- axiosInstance.interceptors.response.use(resResolve, resReject)
-}
diff --git a/web/src/utils/index.js b/web/src/utils/index.js
deleted file mode 100644
index a18642a..0000000
--- a/web/src/utils/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**********************************
- * @FilePath: index.js
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:45:53
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-export * from './common'
-export * from './http'
-export * from './is'
-export * from './naiveTools'
-export * from './storage'
diff --git a/web/src/utils/is.js b/web/src/utils/is.js
deleted file mode 100644
index 6b9a814..0000000
--- a/web/src/utils/is.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/**********************************
- * @FilePath: is.js
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:45:32
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-const toString = Object.prototype.toString
-
-export function is(val, type) {
- return toString.call(val) === `[object ${type}]`
-}
-
-export function isDef(val) {
- return typeof val !== 'undefined'
-}
-
-export function isUndef(val) {
- return typeof val === 'undefined'
-}
-
-export function isNull(val) {
- return val === null
-}
-
-export function isWhitespace(val) {
- return val === ''
-}
-
-export function isObject(val) {
- return !isNull(val) && is(val, 'Object')
-}
-
-export function isArray(val) {
- return val && Array.isArray(val)
-}
-
-export function isString(val) {
- return is(val, 'String')
-}
-
-export function isNumber(val) {
- return is(val, 'Number')
-}
-
-export function isBoolean(val) {
- return is(val, 'Boolean')
-}
-
-export function isDate(val) {
- return is(val, 'Date')
-}
-
-export function isRegExp(val) {
- return is(val, 'RegExp')
-}
-
-export function isFunction(val) {
- return typeof val === 'function'
-}
-
-export function isPromise(val) {
- return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch)
-}
-
-export function isElement(val) {
- return isObject(val) && !!val.tagName
-}
-
-export function isWindow(val) {
- return typeof window !== 'undefined' && isDef(window) && is(val, 'Window')
-}
-
-export function isNullOrUndef(val) {
- return isNull(val) || isUndef(val)
-}
-
-export function isNullOrWhitespace(val) {
- return isNullOrUndef(val) || isWhitespace(val)
-}
-
-/** 空数组 | 空字符串 | 空对象 | 空Map | 空Set */
-export function isEmpty(val) {
- if (isArray(val) || isString(val)) {
- return val.length === 0
- }
-
- if (val instanceof Map || val instanceof Set) {
- return val.size === 0
- }
-
- if (isObject(val)) {
- return Object.keys(val).length === 0
- }
-
- return false
-}
-
-/**
- * 类似mysql的IFNULL函数
- *
- * @param {number | boolean | string} val
- * @param {number | boolean | string} def
- * @returns 第一个参数为null | undefined | '' 则返回第二个参数作为备用值,否则返回第一个参数
- */
-export function ifNull(val, def = '') {
- return isNullOrWhitespace(val) ? def : val
-}
-
-export function isUrl(path) {
- const reg = /^https?:\/\/[-\w+&@#/%?=~|!:,.;]+[-\w+&@#/%=~|]$/
- return reg.test(path)
-}
-
-/**
- * @param {string} path
- * @returns {boolean} 是否是外部链接
- */
-export function isExternal(path) {
- return /^https?:|mailto:|tel:/.test(path)
-}
-
-export const isServer = typeof window === 'undefined'
-
-export const isClient = !isServer
diff --git a/web/src/utils/naiveTools.js b/web/src/utils/naiveTools.js
deleted file mode 100644
index 20efe5e..0000000
--- a/web/src/utils/naiveTools.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/**********************************
- * @FilePath: naiveTools.js
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:45:20
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import * as NaiveUI from 'naive-ui'
-import { isNullOrUndef } from '@/utils'
-import { useAppStore } from '@/store'
-
-export function setupMessage(NMessage) {
- class Message {
- static instance
- constructor() {
- // 单例模式
- if (Message.instance)
- return Message.instance
- Message.instance = this
- this.message = {}
- this.removeTimer = {}
- }
-
- removeMessage(key, duration = 5000) {
- this.removeTimer[key] && clearTimeout(this.removeTimer[key])
- this.removeTimer[key] = setTimeout(() => {
- this.message[key]?.destroy()
- }, duration)
- }
-
- destroy(key, duration = 200) {
- setTimeout(() => {
- this.message[key]?.destroy()
- }, duration)
- }
-
- showMessage(type, content, option = {}) {
- if (Array.isArray(content)) {
- return content.forEach(msg => NMessage[type](msg, option))
- }
-
- if (!option.key) {
- return NMessage[type](content, option)
- }
-
- const currentMessage = this.message[option.key]
- if (currentMessage) {
- currentMessage.type = type
- currentMessage.content = content
- }
- else {
- this.message[option.key] = NMessage[type](content, {
- ...option,
- duration: 0,
- onAfterLeave: () => {
- delete this.message[option.key]
- },
- })
- }
- this.removeMessage(option.key, option.duration)
- }
-
- loading(content, option) {
- this.showMessage('loading', content, option)
- }
-
- success(content, option) {
- this.showMessage('success', content, option)
- }
-
- error(content, option) {
- this.showMessage('error', content, option)
- }
-
- info(content, option) {
- this.showMessage('info', content, option)
- }
-
- warning(content, option) {
- this.showMessage('warning', content, option)
- }
- }
-
- return new Message()
-}
-
-export function setupDialog(NDialog) {
- NDialog.confirm = function (option = {}) {
- const showIcon = !isNullOrUndef(option.title)
- return NDialog[option.type || 'warning']({
- showIcon,
- positiveText: '确定',
- negativeText: '取消',
- onPositiveClick: option.confirm,
- onNegativeClick: option.cancel,
- onMaskClick: option.cancel,
- ...option,
- })
- }
-
- return NDialog
-}
-
-export function setupNaiveDiscreteApi() {
- const appStore = useAppStore()
- const configProviderProps = computed(() => ({
- theme: appStore.isDark ? NaiveUI.darkTheme : undefined,
- themeOverrides: useAppStore().naiveThemeOverrides,
- }))
- const { message, dialog, notification, loadingBar } = NaiveUI.createDiscreteApi(
- ['message', 'dialog', 'notification', 'loadingBar'],
- { configProviderProps },
- )
-
- window.$loadingBar = loadingBar
- window.$notification = notification
- window.$message = setupMessage(message)
- window.$dialog = setupDialog(dialog)
-}
diff --git a/web/src/utils/storage/index.js b/web/src/utils/storage/index.js
deleted file mode 100644
index f173867..0000000
--- a/web/src/utils/storage/index.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**********************************
- * @FilePath: index.js
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:46:07
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { createStorage } from './storage'
-
-const prefixKey = 'vue-naive-admin_'
-
-export const createLocalStorage = function (option = {}) {
- return createStorage({
- prefixKey: option.prefixKey || '',
- storage: localStorage,
- })
-}
-
-export const createSessionStorage = function (option = {}) {
- return createStorage({
- prefixKey: option.prefixKey || '',
- storage: sessionStorage,
- })
-}
-
-export const lStorage = createLocalStorage({ prefixKey })
-
-export const sStorage = createSessionStorage({ prefixKey })
diff --git a/web/src/utils/storage/storage.js b/web/src/utils/storage/storage.js
deleted file mode 100644
index 6741e07..0000000
--- a/web/src/utils/storage/storage.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**********************************
- * @FilePath: storage.js
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/04 22:46:13
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { isNullOrUndef } from '@/utils'
-
-class Storage {
- constructor(option) {
- this.storage = option.storage
- this.prefixKey = option.prefixKey
- }
-
- getKey(key) {
- return `${this.prefixKey}${key}`.toLowerCase()
- }
-
- set(key, value, expire) {
- const stringData = JSON.stringify({
- value,
- time: Date.now(),
- expire: !isNullOrUndef(expire) ? new Date().getTime() + expire * 1000 : null,
- })
- this.storage.setItem(this.getKey(key), stringData)
- }
-
- get(key) {
- const { value } = this.getItem(key, {})
- return value
- }
-
- getItem(key, def = null) {
- const val = this.storage.getItem(this.getKey(key))
- if (!val)
- return def
- try {
- const data = JSON.parse(val)
- const { value, time, expire } = data
- if (isNullOrUndef(expire) || expire > new Date().getTime()) {
- return { value, time }
- }
- this.remove(key)
- return def
- }
- catch (error) {
- this.remove(key)
- return def
- }
- }
-
- remove(key) {
- this.storage.removeItem(this.getKey(key))
- }
-
- clear() {
- this.storage.clear()
- }
-}
-
-export function createStorage({ prefixKey = '', storage = sessionStorage }) {
- return new Storage({ prefixKey, storage })
-}
diff --git a/web/src/views/base/index.vue b/web/src/views/base/index.vue
deleted file mode 100644
index d768f38..0000000
--- a/web/src/views/base/index.vue
+++ /dev/null
@@ -1,138 +0,0 @@
-
-
-
-
-
-
-
- Default
-
- Tertiary
-
-
- Primary
-
-
- Info
-
-
- Success
-
-
- Warning
-
-
- Error
-
-
-
-
-
-
-
-
- 新增
-
-
-
- 删除
-
-
-
- 编辑
-
-
-
- 查看
-
-
-
-
-
-
-
-
-
- 信息
-
-
- 成功
-
-
- 警告
-
-
- 错误
-
-
-
-
-
-
-
- 删除
-
-
-
-
-
-
-
- 登录
-
-
- 多个错误提醒
-
-
-
-
-
-
-
-
diff --git a/web/src/views/base/keep-alive.vue b/web/src/views/base/keep-alive.vue
deleted file mode 100644
index b268b7b..0000000
--- a/web/src/views/base/keep-alive.vue
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
- 注:右击标签重新加载可重置keep-alive
-
-
-
-
-
-
diff --git a/web/src/views/base/test-modal.vue b/web/src/views/base/test-modal.vue
deleted file mode 100644
index 2013550..0000000
--- a/web/src/views/base/test-modal.vue
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
-
- 打开第一个弹个窗
-
-
-
-
-
- {{ text }}
-
-
-
-
-
diff --git a/web/src/views/base/unocss-icon.vue b/web/src/views/base/unocss-icon.vue
deleted file mode 100644
index 8960d8d..0000000
--- a/web/src/views/base/unocss-icon.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
- feather图标集 + isme自定义图标
-
-
-
-
-
-
-
diff --git a/web/src/views/base/unocss.vue b/web/src/views/base/unocss.vue
deleted file mode 100644
index 980d2f3..0000000
--- a/web/src/views/base/unocss.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
-
- 文档:
-
- https://uno.antfu.me/
-
-
-
- playground:
-
- https://unocss.antfu.me/play/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/views/demo/upload/index.vue b/web/src/views/demo/upload/index.vue
deleted file mode 100644
index 9145dd7..0000000
--- a/web/src/views/demo/upload/index.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
-
-
-
-
-
-
- 点击或者拖动文件到该区域来上传
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- url
-
-
- MD
-
-
- img
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/views/error-page/403.vue b/web/src/views/error-page/403.vue
deleted file mode 100644
index 880c3de..0000000
--- a/web/src/views/error-page/403.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
- 返回上一页
-
-
- 返回首页
-
-
-
-
-
-
-
-
diff --git a/web/src/views/error-page/404.vue b/web/src/views/error-page/404.vue
deleted file mode 100644
index 322aeeb..0000000
--- a/web/src/views/error-page/404.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
- 返回首页
-
-
-
-
-
-
-
-
diff --git a/web/src/views/home/index.vue b/web/src/views/home/index.vue
deleted file mode 100644
index 3b5211d..0000000
--- a/web/src/views/home/index.vue
+++ /dev/null
@@ -1,289 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- Hello, {{ userStore.nickName ?? userStore.username }}
-
- 当前角色:{{ userStore.currentRole?.name }}
-
-
-
-
- 一个人几乎可以在任何他怀有无限热忱的事情上成功。
-
-
- —— 查尔斯·史考伯
-
-
-
-
-
- isme.top
-
-
-
-
- 这是一款极简风格的后台管理模板,包含前后端解决方案,前端使用 Vite + Vue3 + Pinia +
- Unocss,后端使用 Nestjs + TypeOrm +
- MySql,简单易用,赏心悦目,历经十几次重构和细节打磨,诚意满满!!
-
-
-
-
-
-
-
- 👏 历经十几次重构和细节打磨
-
-
-
- -
- 🆒 使用
- Vue3
- 主流技术栈:
- Vite + Vue3 + Pinia
-
- -
- 🍇 使用
- 原子CSS
- 框架:
- Unocss
- ,优雅、轻量、易用
-
- -
- 🤹 使用主流的
- iconify + unocss
- 图标方案,支持自定义图标,支持动态渲染
-
- -
- 🎨 使用 Naive UI,
- 极致简洁的代码风格和清爽的页面设计
- ,审美在线,主题轻松定制
-
- -
- 👏 先进且易于理解的文件结构设计,多个模块之间
- 零耦合
- ,单个业务模块删除不影响其他模块
-
- -
- 🚀
- 扁平化路由
- 设计,每一个组件都可以是一个页面,告别多级路由 KeepAlive 难实现问题
-
-
- -
- 🍒
- 基于权限动态生成路由
- ,无需额外定义路由,
- 403和404可区分
- ,而不是无权限也跳404
-
- -
- 🔐 基于Redis集成
- 无感刷新
- ,用户登录态可控,安全与体验缺一不可
-
- -
- ✨ 基于 Naive UI 封装
- message
- 全局工具方法,支持批量提醒,支持跨页面共享实例
-
- -
- ⚡️ 基于 Naive UI 封装常用的业务组件,包含
- Page
- 组件、
- CRUD
- 表格组件及
- Modal
- 组件,减少大量重复性工作
-
-
-
-
-
- 👉点击
-
- 更多
-
- 查看更多实用功能,持续开发中...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/views/iframe/index.vue b/web/src/views/iframe/index.vue
deleted file mode 100644
index 8768865..0000000
--- a/web/src/views/iframe/index.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
diff --git a/web/src/views/login/api.js b/web/src/views/login/api.js
deleted file mode 100644
index 9c4f939..0000000
--- a/web/src/views/login/api.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:28:30
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { request } from '@/utils'
-
-export default {
- toggleRole: data => request.post('/auth/role/toggle', data),
- login: data => request.post('/auth/login', data, { needToken: false }),
- getUser: () => request.get('/user/detail'),
-}
diff --git a/web/src/views/login/index.vue b/web/src/views/login/index.vue
deleted file mode 100644
index b1ef364..0000000
--- a/web/src/views/login/index.vue
+++ /dev/null
@@ -1,188 +0,0 @@
-
-
-
-
-
-
-

-
-
-
-
-
- {{ title }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
![验证码]()
-
-
-
-
-
-
- 一键体验
-
-
-
- 登录
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/views/pms/resource/api.js b/web/src/views/pms/resource/api.js
deleted file mode 100644
index 4b60272..0000000
--- a/web/src/views/pms/resource/api.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2024/04/01 15:52:04
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import axios from 'axios'
-import { request } from '@/utils'
-
-export default {
- getMenuTree: () => request.get('/permission/menu/tree'),
- getButtons: ({ parentId }) => request.get(`/permission/button/${parentId}`),
- getComponents: () => axios.get(`${import.meta.env.VITE_PUBLIC_PATH}components.json`),
- addPermission: data => request.post('/permission', data),
- savePermission: (id, data) => request.patch(`/permission/${id}`, data),
- deletePermission: id => request.delete(`permission/${id}`),
-}
diff --git a/web/src/views/pms/resource/components/MenuTree.vue b/web/src/views/pms/resource/components/MenuTree.vue
deleted file mode 100644
index 1a2f74f..0000000
--- a/web/src/views/pms/resource/components/MenuTree.vue
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
-
-
- 菜单
-
-
-
-
- 新增
-
-
-
-
-
-
-
emit('refresh', data)" />
-
-
-
-
diff --git a/web/src/views/pms/resource/components/QuestionLabel.vue b/web/src/views/pms/resource/components/QuestionLabel.vue
deleted file mode 100644
index cc2285d..0000000
--- a/web/src/views/pms/resource/components/QuestionLabel.vue
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
- {{ content }}
-
- {{ label }}
-
-
-
-
diff --git a/web/src/views/pms/resource/components/ResAddOrEdit.vue b/web/src/views/pms/resource/components/ResAddOrEdit.vue
deleted file mode 100644
index 937de7e..0000000
--- a/web/src/views/pms/resource/components/ResAddOrEdit.vue
+++ /dev/null
@@ -1,241 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 显示
-
-
- 隐藏
-
-
-
-
-
-
-
-
-
- 启用
-
-
- 禁用
-
-
-
-
-
-
-
-
-
- 是
-
-
- 否
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/views/pms/resource/index.vue b/web/src/views/pms/resource/index.vue
deleted file mode 100644
index 084b6ff..0000000
--- a/web/src/views/pms/resource/index.vue
+++ /dev/null
@@ -1,254 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ currentMenu.name }}
-
-
-
- 编辑
-
-
-
-
- {{ currentMenu.code }}
-
-
- {{ currentMenu.name }}
-
-
- {{ currentMenu.path ?? '--' }}
-
-
- {{ currentMenu.component ?? '--' }}
-
-
-
-
- {{ currentMenu.icon }}
-
- 无
-
-
- {{ currentMenu.layout || '跟随系统' }}
-
-
- {{ currentMenu.show ? '是' : '否' }}
-
-
- {{ currentMenu.enable ? '是' : '否' }}
-
-
- {{ currentMenu.keepAlive ? '是' : '否' }}
-
-
- {{ currentMenu.order ?? '--' }}
-
-
-
-
-
- 按钮
-
-
-
- 新增
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/views/pms/role/api.js b/web/src/views/pms/role/api.js
deleted file mode 100644
index d18d97c..0000000
--- a/web/src/views/pms/role/api.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:29:27
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { request } from '@/utils'
-
-export default {
- create: data => request.post('/role', data),
- read: (params = {}) => request.get('/role/page', { params }),
- update: data => request.patch(`/role/${data.id}`, data),
- delete: id => request.delete(`/role/${id}`),
-
- getAllPermissionTree: () => request.get('/permission/tree'),
- getAllUsers: (params = {}) => request.get('/user', { params }),
- addRoleUsers: (roleId, data) => request.patch(`/role/users/add/${roleId}`, data),
- removeRoleUsers: (roleId, data) => request.patch(`/role/users/remove/${roleId}`, data),
-}
diff --git a/web/src/views/pms/role/index.vue b/web/src/views/pms/role/index.vue
deleted file mode 100644
index 36b85b1..0000000
--- a/web/src/views/pms/role/index.vue
+++ /dev/null
@@ -1,220 +0,0 @@
-
-
-
-
-
-
-
- 新增角色
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 启用
-
-
- 停用
-
-
-
-
-
-
-
-
-
diff --git a/web/src/views/pms/role/role-user.vue b/web/src/views/pms/role/role-user.vue
deleted file mode 100644
index 1773b5d..0000000
--- a/web/src/views/pms/role/role-user.vue
+++ /dev/null
@@ -1,228 +0,0 @@
-
-
-
-
-
-
- {{ route.query.roleName }}
-
-
-
-
-
-
- 批量取消授权
-
-
-
- 批量授权
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/src/views/pms/user/api.js b/web/src/views/pms/user/api.js
deleted file mode 100644
index 70a0630..0000000
--- a/web/src/views/pms/user/api.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:29:51
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { request } from '@/utils'
-
-export default {
- create: data => request.post('/user', data),
- read: (params = {}) => request.get('/user', { params }),
- update: data => request.patch(`/user/${data.id}`, data),
- delete: id => request.delete(`/user/${id}`),
- resetPwd: (id, data) => request.patch(`/user/password/reset/${id}`, data),
-
- getAllRoles: () => request.get('/role?enable=1'),
-}
diff --git a/web/src/views/pms/user/index.vue b/web/src/views/pms/user/index.vue
deleted file mode 100644
index d09e82b..0000000
--- a/web/src/views/pms/user/index.vue
+++ /dev/null
@@ -1,311 +0,0 @@
-
-
-
-
-
-
-
- 创建新用户
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 启用
-
-
- 停用
-
-
-
-
-
- 详细信息需由用户本人补充修改
-
-
-
-
-
-
diff --git a/web/src/views/profile/api.js b/web/src/views/profile/api.js
deleted file mode 100644
index f091b8e..0000000
--- a/web/src/views/profile/api.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:30:03
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { request } from '@/utils'
-
-export default {
- changePassword: data => request.post('/auth/password', data),
- updateProfile: data => request.patch(`/user/profile/${data.id}`, data),
-}
diff --git a/web/src/views/profile/index.vue b/web/src/views/profile/index.vue
deleted file mode 100644
index 23d6b2a..0000000
--- a/web/src/views/profile/index.vue
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
-
-
-
-
-
-
-
- 用户名:
- {{ userStore.username }}
-
-
- 修改密码
-
-
-
-
- 更改头像
-
-
- 修改头像只支持在线链接,不提供上传图片功能,如有需要可自行对接!
-
-
-
-
-
-
-
-
-
-
- 修改资料
-
-
-
-
-
- {{ userStore.nickName }}
-
-
- {{ genders.find((item) => item.value === userStore.userInfo?.gender)?.label ?? '未知' }}
-
-
- {{ userStore.userInfo?.address }}
-
-
- {{ userStore.userInfo?.email }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/uno.config.js b/web/uno.config.js
deleted file mode 100644
index 177883b..0000000
--- a/web/uno.config.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:30:57
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import { defineConfig, presetAttributify, presetIcons, presetUno } from 'unocss'
-import presetRemToPx from '@unocss/preset-rem-to-px'
-import { FileSystemIconLoader } from '@iconify/utils/lib/loader/node-loaders'
-import { getIcons } from './build'
-
-const icons = getIcons()
-export default defineConfig({
- presets: [
- presetUno(),
- presetAttributify(),
- presetIcons({
- warn: true,
- prefix: ['i-'],
- extraProperties: {
- display: 'inline-block',
- },
- collections: {
- me: FileSystemIconLoader('./src/assets/icons/isme'),
- fe: FileSystemIconLoader('./src/assets/icons/feather'),
- },
- }),
- presetRemToPx({ baseFontSize: 4 }),
- ],
- safelist: icons.map(icon => `${icon} ${icon}?mask`.split(' ')).flat(),
- shortcuts: [
- ['wh-full', 'w-full h-full'],
- ['f-c-c', 'flex justify-center items-center'],
- ['flex-col', 'flex flex-col'],
- ['card-border', 'border border-solid border-light_border dark:border-dark_border'],
- ['auto-bg', 'bg-white dark:bg-dark'],
- ['auto-bg-hover', 'hover:bg-#eaf0f1 hover:dark:bg-#1b2429'],
- ['auto-bg-highlight', 'bg-#eaf0f1 dark:bg-#1b2429'],
- ['text-highlight', 'rounded-4 px-8 py-2 auto-bg-highlight'],
- ],
- rules: [
- [
- 'card-shadow',
- { 'box-shadow': '0 1px 2px -2px #00000029, 0 3px 6px #0000001f, 0 5px 12px 4px #00000017' },
- ],
- ],
- theme: {
- colors: {
- primary: 'rgba(var(--primary-color))',
- dark: '#18181c',
- light_border: '#efeff5',
- dark_border: '#2d2d30',
- },
- },
-})
diff --git a/web/vite.config.js b/web/vite.config.js
deleted file mode 100644
index d847e83..0000000
--- a/web/vite.config.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/05 21:31:02
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
-import path from 'node:path'
-import { defineConfig, loadEnv } from 'vite'
-import Vue from '@vitejs/plugin-vue'
-import VueDevTools from 'vite-plugin-vue-devtools'
-import Unocss from 'unocss/vite'
-import AutoImport from 'unplugin-auto-import/vite'
-import Components from 'unplugin-vue-components/vite'
-import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'
-import removeNoMatch from 'vite-plugin-router-warn'
-import { pluginIcons, pluginPagePathes } from './build/plugin-isme'
-
-export default defineConfig(({ mode }) => {
- const viteEnv = loadEnv(mode, process.cwd())
- const { VITE_PUBLIC_PATH, VITE_PROXY_TARGET } = viteEnv
-
- return {
- base: VITE_PUBLIC_PATH || '/',
- plugins: [
- Vue(),
- VueDevTools(),
- Unocss(),
- AutoImport({
- imports: ['vue', 'vue-router'],
- dts: false,
- }),
- Components({
- resolvers: [NaiveUiResolver()],
- dts: false,
- }),
- // 自定义插件,用于生成页面文件的path,并添加到虚拟模块
- pluginPagePathes(),
- // 自定义插件,用于生成自定义icon,并添加到虚拟模块
- pluginIcons(),
- // 移除非必要的vue-router动态路由警告: No match found for location with path
- removeNoMatch(),
- ],
- resolve: {
- alias: {
- '@': path.resolve(process.cwd(), 'src'),
- '~': path.resolve(process.cwd()),
- },
- },
- server: {
- host: '0.0.0.0',
- port: 3200,
- open: false,
- proxy: {
- '/api': {
- target: VITE_PROXY_TARGET,
- changeOrigin: true,
- rewrite: path => path.replace(/^\/api/, ''),
- secure: false,
- configure: (proxy, options) => {
- // 配置此项可在响应头中看到请求的真实地址
- proxy.on('proxyRes', (proxyRes, req) => {
- proxyRes.headers['x-real-url'] = new URL(req.url || '', options.target)?.href || ''
- })
- },
- },
- },
- },
- build: {
- chunkSizeWarningLimit: 1024, // chunk 大小警告的限制(单位kb)
- },
- }
-})