From 812301d0ced0b75e046b93bcd36c8ee081a9b1de Mon Sep 17 00:00:00 2001
From: buqiyuan <1743369777@qq.com>
Date: Thu, 22 Feb 2024 13:01:25 +0800
Subject: [PATCH] chore: sync code
---
.env | 9 +-
.env.development | 4 +-
.env.production | 4 +-
.github/workflows/release-package.yml | 6 +-
.github/workflows/sync-to-gitee.yml | 5 +
.gitignore | 1 -
.gitmodules | 4 +
.npmrc | 18 +
README.md | 24 +-
docs/.editorconfig | 10 +
docs/.github/workflows/gh-pages.yml | 54 +
docs/.gitignore | 118 ++
docs/.npmrc | 2 +
docs/.prettierrc | 6 +
docs/.vitepress/config.mts | 119 ++
docs/.vitepress/theme/index.ts | 10 +
docs/.vitepress/theme/style.css | 108 ++
docs/.vitepress/theme/test.vue | 3 +
docs/.vscode/launch.json | 15 +
docs/.vscode/settings.json | 47 +
docs/.vscode/vue3.3.code-snippets | 20 +
docs/README.md | 7 +
docs/package.json | 31 +
docs/playground/README.md | 19 +
docs/playground/index.html | 31 +
docs/playground/package.json | 22 +
docs/playground/public/logo.png | Bin 0 -> 60745 bytes
docs/playground/src/App.vue | 97 +
docs/playground/src/components/Header.vue | 284 +++
.../src/components/VersionSelect.vue | 120 ++
docs/playground/src/download/download.ts | 39 +
.../src/download/template/README.md | 14 +
.../src/download/template/index.html | 16 +
docs/playground/src/download/template/main.js | 4 +
.../src/download/template/package.json | 17 +
.../src/download/template/vite.config.js | 7 +
docs/playground/src/icons/Download.vue | 34 +
docs/playground/src/icons/GitHub.vue | 12 +
docs/playground/src/icons/Moon.vue | 8 +
docs/playground/src/icons/Reload.vue | 14 +
docs/playground/src/icons/Share.vue | 17 +
docs/playground/src/icons/Sun.vue | 40 +
docs/playground/src/main.ts | 9 +
docs/playground/src/store/index.ts | 146 ++
docs/playground/src/template/global.d.ts | 3 +
docs/playground/src/template/main.vue | 9 +
docs/playground/src/template/setup.ts | 28 +
docs/playground/src/template/tsconfig.json | 14 +
docs/playground/src/template/welcome.vue | 48 +
docs/playground/vercel.json | 16 +
docs/playground/vite.config.ts | 35 +
docs/pnpm-lock.yaml | 1717 ++++++++++++++++
docs/pnpm-workspace.yaml | 2 +
docs/src/components/form.md | 7 +
docs/src/components/table.md | 136 ++
docs/src/guide/api-manage.md | 98 +
docs/src/guide/getting-started.md | 39 +
docs/src/guide/introduction.md | 29 +
docs/src/guide/mock-service.md | 21 +
docs/src/index.md | 55 +
docs/src/other/donate.md | 7 +
docs/src/public/favicon.ico | Bin 0 -> 4286 bytes
docs/src/public/logo.png | Bin 0 -> 60745 bytes
docs/src/public/msw.svg | 10 +
docs/src/public/nestjs.svg | 1 +
docs/src/public/pinia.svg | 1 +
docs/src/public/typescript.svg | 1 +
docs/src/public/unocss.svg | 5 +
docs/src/public/vite.svg | 15 +
docs/src/public/weixin.jpg | Bin 0 -> 116189 bytes
docs/src/public/zhifubao.jpg | Bin 0 -> 136583 bytes
docs/tsconfig.json | 18 +
mocks/index.ts | 5 +-
package.json | 60 +-
packages/components/index.ts | 10 +
packages/components/package.json | 54 +
packages/components/tsconfig.dts.json | 19 +
packages/components/tsconfig.json | 10 +
packages/components/vite.config.ts | 115 ++
packages/vite-plugin-msw/package.json | 11 +-
.../src/browser/enableMocking.ts | 6 +-
pnpm-lock.yaml | 1725 +++++++++++------
src/api/backend/api/index.ts | 8 +-
src/api/backend/api/netDiskManage.ts | 128 ++
src/api/backend/api/netDiskOverview.ts | 11 +
src/api/backend/api/systemEmail.ts | 4 +-
src/api/backend/api/toolsStorage.ts | 8 +-
src/api/backend/api/toolsUpload.ts | 4 +-
src/api/backend/api/typings.d.ts | 150 ++
src/components/basic/tinymce/index.vue | 10 +-
src/components/basic/tinymce/props.ts | 15 +
.../table-settings/column-setting.vue | 16 +-
.../table-settings/refresh-setting.vue | 4 +-
.../table-settings/size-setting.vue | 10 +-
.../dynamic-table/src/hooks/useColumns.ts | 3 +-
.../dynamic-table/src/hooks/useTableForm.ts | 2 +-
.../src/hooks/useTableMethods.ts | 6 +-
.../core/schema-form/src/componentMap.ts | 15 +-
src/components/core/schema-form/src/helper.ts | 10 +-
.../core/schema-form/src/schema-form-item.vue | 12 +-
.../core/schema-form/src/types/component.ts | 43 +-
.../core/schema-form/src/types/form.ts | 49 +-
src/layout/routerView/index.vue | 16 +-
src/locales/index.ts | 10 +-
src/main.ts | 11 +-
src/permission/permCode.ts | 12 +
src/polyfill.ts | 1 +
src/router/routes/modules/demos.ts | 10 -
src/styles/variables.less | 1 +
src/utils/request.ts | 29 +-
src/views/demos/form/custom-form/index.vue | 20 +
.../form/custom-form/input-number-range.vue | 41 +
src/views/demos/icons/Iconfont.vue | 70 -
src/views/login/index.vue | 2 +-
src/views/netdisk/columns.tsx | 81 +
.../components/file-operate-button-list.vue | 244 +++
.../components/file-preview-drawer.vue | 154 ++
.../netdisk/components/file-upload-drawer.vue | 176 ++
.../components/overview-header-item.vue | 59 +
src/views/netdisk/formSchemas.ts | 80 +
src/views/netdisk/manage.vue | 296 +++
src/views/netdisk/overview.vue | 226 +++
src/views/system/dept/columns.tsx | 2 -
src/views/system/dept/formSchemas.ts | 1 -
src/views/system/dept/index.vue | 2 +-
src/views/system/dict-item/columns.tsx | 5 +-
src/views/system/menu/formSchemas.tsx | 1 -
src/views/system/schedule/task/columns.tsx | 4 -
src/views/system/user/columns.tsx | 7 +-
src/views/system/user/formSchemas.tsx | 1 -
src/views/tool/email/formSchemas.tsx | 4 +-
src/views/tool/storage/columns.tsx | 5 +-
types/shims/shims-vue.d.ts | 2 +-
unocss.config.ts | 7 +-
vite.config.ts | 72 +-
135 files changed, 7090 insertions(+), 975 deletions(-)
create mode 100644 .gitmodules
create mode 100644 .npmrc
create mode 100644 docs/.editorconfig
create mode 100644 docs/.github/workflows/gh-pages.yml
create mode 100644 docs/.gitignore
create mode 100644 docs/.npmrc
create mode 100644 docs/.prettierrc
create mode 100644 docs/.vitepress/config.mts
create mode 100644 docs/.vitepress/theme/index.ts
create mode 100644 docs/.vitepress/theme/style.css
create mode 100644 docs/.vitepress/theme/test.vue
create mode 100644 docs/.vscode/launch.json
create mode 100644 docs/.vscode/settings.json
create mode 100644 docs/.vscode/vue3.3.code-snippets
create mode 100644 docs/README.md
create mode 100644 docs/package.json
create mode 100644 docs/playground/README.md
create mode 100644 docs/playground/index.html
create mode 100644 docs/playground/package.json
create mode 100644 docs/playground/public/logo.png
create mode 100644 docs/playground/src/App.vue
create mode 100644 docs/playground/src/components/Header.vue
create mode 100644 docs/playground/src/components/VersionSelect.vue
create mode 100644 docs/playground/src/download/download.ts
create mode 100644 docs/playground/src/download/template/README.md
create mode 100644 docs/playground/src/download/template/index.html
create mode 100644 docs/playground/src/download/template/main.js
create mode 100644 docs/playground/src/download/template/package.json
create mode 100644 docs/playground/src/download/template/vite.config.js
create mode 100644 docs/playground/src/icons/Download.vue
create mode 100644 docs/playground/src/icons/GitHub.vue
create mode 100644 docs/playground/src/icons/Moon.vue
create mode 100644 docs/playground/src/icons/Reload.vue
create mode 100644 docs/playground/src/icons/Share.vue
create mode 100644 docs/playground/src/icons/Sun.vue
create mode 100644 docs/playground/src/main.ts
create mode 100644 docs/playground/src/store/index.ts
create mode 100644 docs/playground/src/template/global.d.ts
create mode 100644 docs/playground/src/template/main.vue
create mode 100644 docs/playground/src/template/setup.ts
create mode 100644 docs/playground/src/template/tsconfig.json
create mode 100644 docs/playground/src/template/welcome.vue
create mode 100644 docs/playground/vercel.json
create mode 100644 docs/playground/vite.config.ts
create mode 100644 docs/pnpm-lock.yaml
create mode 100644 docs/pnpm-workspace.yaml
create mode 100644 docs/src/components/form.md
create mode 100644 docs/src/components/table.md
create mode 100644 docs/src/guide/api-manage.md
create mode 100644 docs/src/guide/getting-started.md
create mode 100644 docs/src/guide/introduction.md
create mode 100644 docs/src/guide/mock-service.md
create mode 100644 docs/src/index.md
create mode 100644 docs/src/other/donate.md
create mode 100644 docs/src/public/favicon.ico
create mode 100644 docs/src/public/logo.png
create mode 100644 docs/src/public/msw.svg
create mode 100644 docs/src/public/nestjs.svg
create mode 100644 docs/src/public/pinia.svg
create mode 100644 docs/src/public/typescript.svg
create mode 100644 docs/src/public/unocss.svg
create mode 100644 docs/src/public/vite.svg
create mode 100644 docs/src/public/weixin.jpg
create mode 100644 docs/src/public/zhifubao.jpg
create mode 100644 docs/tsconfig.json
create mode 100644 packages/components/index.ts
create mode 100644 packages/components/package.json
create mode 100644 packages/components/tsconfig.dts.json
create mode 100644 packages/components/tsconfig.json
create mode 100644 packages/components/vite.config.ts
create mode 100644 src/api/backend/api/netDiskManage.ts
create mode 100644 src/api/backend/api/netDiskOverview.ts
create mode 100644 src/polyfill.ts
create mode 100644 src/views/demos/form/custom-form/input-number-range.vue
delete mode 100644 src/views/demos/icons/Iconfont.vue
create mode 100644 src/views/netdisk/columns.tsx
create mode 100644 src/views/netdisk/components/file-operate-button-list.vue
create mode 100644 src/views/netdisk/components/file-preview-drawer.vue
create mode 100644 src/views/netdisk/components/file-upload-drawer.vue
create mode 100644 src/views/netdisk/components/overview-header-item.vue
create mode 100644 src/views/netdisk/formSchemas.ts
create mode 100644 src/views/netdisk/manage.vue
create mode 100644 src/views/netdisk/overview.vue
diff --git a/.env b/.env
index a84741b8..434cf575 100644
--- a/.env
+++ b/.env
@@ -4,11 +4,6 @@ VITE_APP_TITLE = Admin
# 网站前缀
VITE_BASE_URL = /
-# base api
-VITE_BASE_API_URL = '/api/admin/'
-VITE_BASE_SOCKET_PATH = '/ws-api'
-VITE_BASE_SOCKET_NSP = '/admin'
-
-# mock api
-VITE_MOCK_API = '/api/'
+# enable mock in production
+VITE_MOCK_IN_PROD = true
diff --git a/.env.development b/.env.development
index 11fc3dc1..00f3fa10 100644
--- a/.env.development
+++ b/.env.development
@@ -5,8 +5,6 @@ ENV = 'development'
VITE_BASE_URL = /
# base api url
-VITE_BASE_API_URL = '/api'
-VITE_BASE_SOCKET_PATH = '/ws-api'
-VITE_BASE_SOCKET_NSP = '/auth'
+VITE_BASE_API_URL = '/api'
VITE_DROP_CONSOLE = false
diff --git a/.env.production b/.env.production
index 7aad938e..8db41913 100644
--- a/.env.production
+++ b/.env.production
@@ -3,9 +3,7 @@ ENV = 'production'
# base api url
VITE_BASE_API_URL = 'https://nest-api.buqiyuan.site'
-# VITE_BASE_API_URL = 'http://127.0.0.1:7001'
-VITE_BASE_SOCKET_PATH = '/ws-api'
-VITE_BASE_SOCKET_NSP = 'wss://nest-api.buqiyuan.site/admin'
+# VITE_BASE_API_URL = 'http://127.0.0.1:7001'
# 网站前缀
VITE_BASE_URL = /vue3-antdv-admin/
diff --git a/.github/workflows/release-package.yml b/.github/workflows/release-package.yml
index 355d7342..caa8d92f 100644
--- a/.github/workflows/release-package.yml
+++ b/.github/workflows/release-package.yml
@@ -26,10 +26,12 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile
- # run: pnpm run --filter \"./packages/**\" build
+ - name: Build
+ shell: bash
+ run: pnpm --filter "./packages/*" build
- name: Publish 🚀
shell: bash
- run: pnpm publish --filter ./packages/* --access public --no-git-checks
+ run: pnpm publish --filter ./packages/* --access public --no-git-checks --registry https://registry.npmjs.org --verbose
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.github/workflows/sync-to-gitee.yml b/.github/workflows/sync-to-gitee.yml
index 8e4c47ae..f89f1371 100644
--- a/.github/workflows/sync-to-gitee.yml
+++ b/.github/workflows/sync-to-gitee.yml
@@ -7,6 +7,11 @@ on:
push:
branches: [main]
+# Ensures that only one mirror task will run at a time.
+concurrency:
+ group: repo-sync
+ cancel-in-progress: true
+
jobs:
repo-sync:
runs-on: ubuntu-latest
diff --git a/.gitignore b/.gitignore
index ad4d7eb9..83377964 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,6 @@
node_modules
.DS_Store
dist
-.npmrc
.cache
tests/server/static
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..6ac1657c
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "docs"]
+ path = docs
+ url = https://github.com/buqiyuan/vue3-antdv-admin-docs.git
+ branch = main
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 00000000..c9290356
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1,18 @@
+# 使用淘宝镜像源
+registry = https://registry.npmmirror.com
+# registry = https://registry.npmjs.org
+
+# 根据需要提升含有以下的依赖包到根 node_modules 目录下
+public-hoist-pattern[]=husky
+public-hoist-pattern[]=*eslint*
+public-hoist-pattern[]=*prettier*
+public-hoist-pattern[]=lint-staged
+public-hoist-pattern[]=*stylelint*
+public-hoist-pattern[]=@commitlint/cli
+public-hoist-pattern[]=core-js
+
+# 提升所有依赖到根 node_modules 目录下,相当于 public-hoist-pattern[]=*,与上面一种方式一般二选一使用
+# 极不推荐用这样的方式解决依赖问题,这样没有充分利用 pnpm 依赖访问安全性的优势,又走回了 npm / yarn 的老路。
+# shamefully-hoist=true
+
+enable-pre-post-scripts=true
\ No newline at end of file
diff --git a/README.md b/README.md
index c2aa5b6d..b1229d29 100644
--- a/README.md
+++ b/README.md
@@ -1,25 +1,21 @@
# vue3-antdv-admin
-> 基于 vite4.x 重构整个前后端项目,完善后端权限控制细粒度,封装更多场景化组件...正在完善中
+基于 vite5.x + vue3.x + antd-design-vue4.x + typescript5.x 的后台管理系统
-基于 vite4.x + vue3.x + antd-design-vue4.x + typescript5.x 的后台管理系统模板
-
-- 账号:rootadmin,密码:123456
-- 在线预览( [gitee](http://buqiyuan.gitee.io/vue3-antdv-admin/) / [vercel](https://vue3-antdv-admin.vercel.app/) )
-- [swagger 文档](https://nest-api.buqiyuan.site/swagger-api/)
-- [后台地址](https://github.com/buqiyuan/nest-admin)
-- [vue-cli版](https://github.com/buqiyuan/vue3-antdv-admin/tree/vue-cli)
+- 账号:admin,密码:a123456
+- [在线预览](http://buqiyuan.gitee.io/vue3-antdv-admin/)
+- [项目文档](https://buqiyuan.github.io/vue3-antdv-admin-docs/)
+- [swagger 文档](https://nest-api.buqiyuan.site/api-docs/)
+- [后端仓库地址](https://github.com/buqiyuan/nest-admin)
- [gitee 地址](https://gitee.com/buqiyuan/vue3-antdv-admin)
- 根据 JSON 生成 typescript 的工具:[http://json2ts.com/](http://json2ts.com/)
-部分设计参考了 [vue-vben-admin](https://github.com/vbenjs/vue-vben-admin)
-
## 安装使用
- 获取项目代码
```bash
-git clone --depth 1 https://github.com/buqiyuan/vue3-antdv-admin
+git clone https://github.com/buqiyuan/vue3-antdv-admin
```
- 安装依赖
@@ -47,11 +43,7 @@ pnpm build
安装项目根目录 `.vscode` 推荐的插件,再安装 `Volar`,并禁用 `Vetur`,重启 vscode 即可。
-> 使用了 Vue3.x 全家桶、ant-design-vue3.x 和 typescript4.x,实践 vue3.x 的新特性以及玩法,不得不说 vue3.x 的 Composition API 相比于 vue2.x 的 Options API 灵活很多,让我们可以灵活地组合组件逻辑,我们可以很轻松的使用 hooks 的形式去代替以前 mixins 等的写法。更多 hooks 可以参考[vueuse](https://vueuse.org/functions.html)
-
-## 项目简要说明
-
-`rootadmin` 默认开放多点登录,其他新建的账号默认都是单点登录。建议自己拉后端代码到本地跑,避免多人同时操作时产生冲突和误解。
+> 使用了 Vue3.x 全家桶、ant-design-vue4.x 和 typescript5.x,实践 vue3.x 的新特性以及玩法,不得不说 vue3.x 的 Composition API 相比于 vue2.x 的 Options API 灵活很多,让我们可以灵活地组合组件逻辑,我们可以很轻松的使用 hooks 的形式去代替以前 mixins 等的写法。更多 hooks 可以参考[vueuse](https://vueuse.org/functions.html)
### todolist
diff --git a/docs/.editorconfig b/docs/.editorconfig
new file mode 100644
index 00000000..0de50015
--- /dev/null
+++ b/docs/.editorconfig
@@ -0,0 +1,10 @@
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/docs/.github/workflows/gh-pages.yml b/docs/.github/workflows/gh-pages.yml
new file mode 100644
index 00000000..fe322abe
--- /dev/null
+++ b/docs/.github/workflows/gh-pages.yml
@@ -0,0 +1,54 @@
+name: GitHub Pages
+
+on:
+ push:
+ branches: [main]
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Setup node
+ uses: actions/setup-node@v3
+ with:
+ node-version: '18'
+ registry-url: https://registry.npmjs.com/
+
+ - name: Setup pnpm
+ uses: pnpm/action-setup@v2
+ with:
+ version: latest
+
+ - name: Get pnpm store directory
+ shell: bash
+ run: |
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
+
+ - uses: actions/cache@v3
+ name: Setup pnpm cache
+ with:
+ path: ${{ env.STORE_PATH }}
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: |
+ ${{ runner.os }}-pnpm-store-
+
+ - name: Install dependencies
+ run: pnpm i --frozen-lockfile
+
+ - name: Build
+ run: pnpm run deploy
+ env:
+ FORCE_COLOR: 2
+
+ - name: Deploy
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ publish_dir: ./.vitepress/dist
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ commit_message: Update ghPages
+ force_orphan: true
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 00000000..e44ac5a5
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,118 @@
+### OSX ###
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### Node ###
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+*.lcov
+
+# nyc test coverage
+.nyc_output
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# pnpm link folder
+pnpm-global
+
+# dotenv environment variables file
+.env
+.env.test
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# rollup.js default build output
+dist/
+
+# vitepress build output
+.vitepress/dist
+.vitepress/cache
+
+# Serverless directories
+.serverless/
+
+# Temporary folders
+tmp/
+temp/
+TODOs.md
+src/api/index.json
+src/examples/data.json
+src/tutorial/data.json
+draft.md
+
+# IDEs
+.idea
+
+test.html
+.firebase
\ No newline at end of file
diff --git a/docs/.npmrc b/docs/.npmrc
new file mode 100644
index 00000000..1e48054c
--- /dev/null
+++ b/docs/.npmrc
@@ -0,0 +1,2 @@
+registry = https://registry.npmmirror.com
+# registry = https://registry.npmjs.org
diff --git a/docs/.prettierrc b/docs/.prettierrc
new file mode 100644
index 00000000..2ecc4f49
--- /dev/null
+++ b/docs/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "semi": false,
+ "singleQuote": true,
+ "trailingComma": "none",
+ "printWidth": 75
+}
diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts
new file mode 100644
index 00000000..d311e95d
--- /dev/null
+++ b/docs/.vitepress/config.mts
@@ -0,0 +1,119 @@
+import { defineConfig } from 'vitepress'
+import path from 'node:path'
+
+const isProd = process.env.NODE_ENV === 'production'
+
+export default defineConfig({
+ base: isProd ? '/vue3-antdv-admin-docs' : '',
+ title: 'Vue3 Antdv Admin',
+ description: '一个优雅、清新、漂亮的中后台模版',
+ ignoreDeadLinks: [
+ // 自定义函数,忽略所有包含 "/playground/" 的链接
+ (url) => {
+ return url.toLowerCase().includes('/playground/')
+ }
+ ],
+ head: [
+ ['meta', { name: 'author', content: 'Vue3 Antdv Admin' }],
+ [
+ 'meta',
+ {
+ name: 'keywords',
+ content:
+ 'buqiyuan, vue3-antdv-admin, vite, vue, vue3, vue3-antdv-admin docs'
+ }
+ ],
+ ['link', { rel: 'icon', type: 'image/svg+xml', href: '/logo.png' }],
+ [
+ 'meta',
+ {
+ name: 'viewport',
+ content:
+ 'width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no'
+ }
+ ],
+ ['link', { rel: 'icon', href: '/favicon.ico' }]
+ ],
+ srcDir: `${path.resolve(process.cwd())}/src`,
+ themeConfig: {
+ logo: '/logo.png',
+ search: {
+ provider: 'local'
+ },
+ editLink: {
+ text: '为此页提供修改建议',
+ pattern:
+ 'https://github.com/buqiyuan/vue3-antdv-admin-docs/tree/main/src/:path'
+ },
+ socialLinks: [
+ {
+ icon: 'github',
+ link: 'https://github.com/buqiyuan/vue3-antdv-admin'
+ }
+ ],
+ footer: {
+ message: 'Released under the MIT License.',
+ copyright: 'Copyright © 2024-PRESENT buqiyuan'
+ },
+ nav: [
+ {
+ text: '项目指南',
+ link: '/guide/getting-started',
+ activeMatch: '/guide/'
+ },
+ {
+ text: '相关链接',
+ items: [
+ {
+ text: '预览地址',
+ link: 'https://buqiyuan.gitee.io/vue3-antdv-admin'
+ },
+ {
+ text: '前端源码',
+ link: 'https://github.com/buqiyuan/vue3-antdv-admin'
+ },
+ {
+ text: '后端源码',
+ link: 'https://github.com/buqiyuan/nest-admin'
+ },
+ {
+ text: '文档源码',
+ link: 'https://github.com/buqiyuan/vue3-antdv-admin-docs'
+ },
+ {
+ text: '更新日志',
+ link: 'https://github.com/buqiyuan/vue3-antdv-admin/blob/main/CHANGELOG.md'
+ }
+ ]
+ },
+ {
+ text: '赞助',
+ link: '/other/donate'
+ }
+ ],
+ sidebar: [
+ {
+ text: '指南',
+ items: [
+ {
+ text: '介绍',
+ link: '/guide/introduction'
+ },
+ {
+ text: '开始',
+ link: '/guide/getting-started'
+ },
+ { text: 'mock服务', link: '/guide/mock-service' },
+ { text: '接口管理', link: '/guide/api-manage' }
+ ]
+ },
+ {
+ text: '组件',
+ items: [
+ { text: 'Table', link: '/components/table' },
+ { text: 'Form', link: '/components/form' }
+ ]
+ }
+ ]
+ }
+})
diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts
new file mode 100644
index 00000000..fc475217
--- /dev/null
+++ b/docs/.vitepress/theme/index.ts
@@ -0,0 +1,10 @@
+import Theme from 'vitepress/theme'
+import './style.css'
+import Test from './test.vue'
+
+export default {
+ ...Theme,
+ enhanceApp(ctx: any) {
+ ctx.app.component('Test', Test)
+ }
+}
diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css
new file mode 100644
index 00000000..d0247a69
--- /dev/null
+++ b/docs/.vitepress/theme/style.css
@@ -0,0 +1,108 @@
+/**
+ * Colors
+ * -------------------------------------------------------------------------- */
+
+:root {
+ --vp-c-brand-1: #44bd87;
+ --vp-c-brand-2: #249252;
+ --vp-c-brand-3: #19633b;
+ --vp-c-brand-soft: #69e8af50;
+
+ --vp-c-text-code: #528d52;
+
+ --vp-code-block-bg: rgba(125, 125, 125, 0.04);
+ --vp-code-copy-code-bg: rgba(125, 125, 125, 0.1);
+ --vp-code-copy-code-hover-bg: rgba(125, 125, 125, 0.2);
+
+ --vp-c-disabled-bg: rgba(125, 125, 125, 0.2);
+ /* fix contrast on gray cards: used by --vp-c-text-2 */
+ --vp-c-text-light-2: rgba(56 56 56 / 70%);
+ --vp-c-text-dark-2: rgba(56 56 56 / 70%);
+
+ --vp-custom-block-info-bg: transparent;
+ --vp-custom-block-tip-bg: transparent;
+
+ --vp-custom-block-warning-bg: #d9a40605;
+ --vp-custom-block-warning-text: #d9a406;
+ --vp-custom-block-warning-border: #d9a40630;
+
+ --vp-custom-block-tip-bg: #44bd8705;
+ --vp-custom-block-tip-text: #44bd87;
+ --vp-custom-block-tip-border: #44bd8730;
+
+ --vp-code-color: #729772;
+}
+
+.dark {
+ --vp-code-block-bg: var(--vp-c-bg-alt);
+ --vp-c-text-code: #c0cec0;
+ /* fix contrast on gray cards: check the same above (this is the default) */
+ --vp-c-text-dark-2: rgba(235, 235, 235, 0.6);
+}
+
+/**
+ * Component: Code
+ * -------------------------------------------------------------------------- */
+
+:root {
+ --vp-code-line-highlight-color: rgba(125, 125, 125, 0.2);
+}
+
+.dark {
+ --vp-code-line-highlight-color: rgba(0, 0, 0, 0.5);
+}
+
+/**
+ * Component: Button
+ * -------------------------------------------------------------------------- */
+
+:root {
+ --vp-button-brand-border: var(--vp-c-brand-soft);
+ --vp-button-brand-text: var(--vp-c-text-dark-1);
+ --vp-button-brand-bg: var(--vp-c-brand-1);
+ --vp-button-brand-hover-border: var(--vp-c-brand-soft);
+ --vp-button-brand-hover-text: var(--vp-c-text-dark-1);
+ --vp-button-brand-hover-bg: var(--vp-c-brand-soft);
+ --vp-button-brand-active-border: var(--vp-c-brand-soft);
+ --vp-button-brand-active-text: var(--vp-c-text-dark-1);
+ --vp-button-brand-active-bg: var(--vp-button-brand-bg);
+}
+
+/**
+ * Component: Home
+ * -------------------------------------------------------------------------- */
+
+:root {
+ --vp-home-hero-name-color: transparent;
+ --vp-home-hero-name-background: -webkit-linear-gradient(
+ 120deg,
+ #35495e -80%,
+ #41b883
+ );
+ --vp-home-hero-image-background-image: linear-gradient(
+ -45deg,
+ #41b88380 30%,
+ #35495e80
+ );
+ --vp-home-hero-image-filter: blur(30px);
+}
+
+@media (min-width: 640px) {
+ :root {
+ --vp-home-hero-image-filter: blur(56px);
+ }
+}
+
+@media (min-width: 960px) {
+ :root {
+ --vp-home-hero-image-filter: blur(72px);
+ }
+}
+
+/**
+ * Component: Algolia
+ * -------------------------------------------------------------------------- */
+
+.DocSearch {
+ --docsearch-primary-color: var(--vp-c-brand) !important;
+}
diff --git a/docs/.vitepress/theme/test.vue b/docs/.vitepress/theme/test.vue
new file mode 100644
index 00000000..d978529a
--- /dev/null
+++ b/docs/.vitepress/theme/test.vue
@@ -0,0 +1,3 @@
+
+
sBo7=5CPojne zlbz+FKD5~ns*LTX{{8{W$zwLxK3G*ty=+Sowur$p!;;3e%XH0x1ORe>|n#_shCHjLgiN z4$jW3AnvZ$@rjcCeag*arTr!bSZUy?y3zZ3BfAaR=q`_I;F@o>$MZ!#3Q{1LWol}w z3239S0mjo$6Kgg@jY!h4p4JPg@WtL_l7^N#y1HD`DNCFgQNPT86S(MyzjEM=418Ez z3T_wDw{r^zD2ZNn$slxTLM9sw;qEs@uGah15;2ngBwroc6o`N=N1&Jg{Oz-tk`;NE zl%(gj?``fmV P zlP);godX8!{<{}ETR6Hcw%@;CKycjH-=7AH=U1Q%5i5(+M*ZM~D&@P_utbO;j@;eN zD|@|^sdrm)bJ}0EN>#I@>sheK^`Q)WT)6IQbyxJq$a(rrtM=o_8KU+wJxECmHZ_Wyaz1b)XURd5XRM z-6Q{j!ulH#dy)!K(}5Hft2~Psnz4_+a`aOv-;@(CJc-g`)zXxoVxuS5aU%mu|&C zk1DwQ$G5uQx#IGbt-MT%-cWsi!UYGZtgg%aA_G)M-_U}7U@v!7YQG5(;f7*})`Kh0 z6FWu_lNrgJk68908Wyq+Ih!D1B|qi{Z^o}{4?c;QuZ?^T4r^?MGW+_%zvrgXG(w>W z$s_BQ@$a81?ItB_?vL#m`_&KyT5CE)-8NfNq{lEll*c!=ij5@@@7P<@T$N+?^X~=e z@J?AN2q5)8RS)cr);G3-V4s0x+pw*Al4W3n49Y <7Sgpv>NV(Bm zK2|O5^HJf;WB9_z{MVY^wLXh~-?=TbMQ(Bm^$p1uIVz#>-f-j%_ITufP1f)~)zR(d z!n#?1Y-UNz%l}rX)TqX$Y-Ry~RQFZFTCI-gb46B|Y*zD>PB(*VVqbNeiLs87b*Uao zn-mmp5=jXUfoC?m5E&mleS5iOJThEOKbOy41zf0Tt+O>Ja$U5!C&%maY&ZAQ0U3?> ze5H1)8HmT5O(aQUEY^!ks=I}_rnSF$?MJP49r7r%^X2lU)#gZzCi2MGWC0)8uj4$Y zXYa2r{POz(_3HcoHG|GKeEQ!k60r2=dwOV<3tDHk6%gTfw7*kIrUbHUW^vT)aZ+h{ zFQt50bRdO8#Ust}IMhx~lJZh%xfEoMA^MP3t7+Guq{dFnKIMG}Ucg16i`PT!{J#d> z^NsI6e !m3&&jJbQ#u|Y><)c&2KctqN-826sUy>`-2g6+3{$g z+^%Mos}Ssm^cDA=IZ#kSu0PCN*o=p@1GIL8M!x*@`S_F5?!NT(Kqrad4R)pbAjfp4 zQ^rC+ygx#X78p$|%HHL6^==ihw^gsrxnOJPZ4i(XnNJsM_HN55NiTH(zg`1?kg-pE z<&qa`b+le2@_8S}ZEvz(lj;21AGr$g4(UG@Mz#BMfIsHv%Z5dAj$IzIp#mzy8Z=;UT Z0!C!U 7pSx zb@LxP0fF#?fW|6x^Zj$LL4&DuQ-%QO;+K{KRvfSQ-#V{NC)f78L_7}jC|Z>wDYGUUs$P)<+5{G;Gc$gc? z!!hMYMA?+b4ts#sTUnxz-97?4UMe2MbznId?IC8+s!@;#ls&xJ0EQ=7?Q-Y&KxVBx zf8$$o3@UnihyQ*_WBW$aJc(=tvV<<|cAQwWTFelW9Tksk&Dt7`1*p};d{5~FB(&V4 zncNwaTvpIp1f^<>Icu%?IAYSl_}z>{!^KvQUp0$v&0g`rj3G#^MsH1Yy`NHSnRJ@p zU|hq>qPTXX4Q8@?!>02AxU~x`8Z`r7aReeZ{XTC>r^8k^7vRY o?uI6Zk5IRy!YoxLsre8@GKR z>^{&hq2T*+(Q+i4(m6q;Uxc4WIEQmFMM02u0-+u)<~FYIw0(3Ps!^>I?rt%Oyf2eX zPp>p=Rgk%S8g?HgJ_`x YE1VFdQKvnEOsLQuXCr B@F 0{I4olR?k6e^0x0VsQ*?a)VcbSsE9jJaz-bZ&04NwBfR8>7DB=l)B1d_zN1Qaz zt@{kw&8XzOOV4T^a9?cbjs~9>tp{6JVo0NqRo2^P*yCGZF_SZ%VN5s(#d~&CPz}-8 z_kOlmO>winpXLs2;;jjTlSf9O-HLbP^hGu%f`atFJlh7d*cCGxyVO8ed*JzRkpkOm z0q!fDYs6{sNGx $M4-Dk~Er&r*woU05sH+zkuT!n*ur5CE^we z4E&YK7w`R_4EDg)b`DrC(v}yvSl@4FzMf_PX%8PVc|F*wK5iT)Ms!BRs`#-)nn+-# zrV-#0jzMMIPdCcNDtw_J%$Rp;okN2gH<*_DgGMn2#{b7e?ni@3n&@=Pg>$|(@Pa)x z)VmW0iwj`eEk+Ed6hc|KHPp!np^3hBd15c1s;fge!>f{j$6n7c!;c9O=sXDc&zEqX zk&%+-2mTX>c|g0;PQNwjdLKN_SY9j+tqo}LU $eSt%9 zWTIllGRek>X;VzsdPlM>U6eqn(HFE6x}<3Fr;f{R)pIYPImGyQHeZG~%slt1i}x|E z;8#wS?vl0okjGK>5gIFT^5frFgs9<1t(|sXVk+riK&NTc)1g_%z{FIPWiNF@n|OcE z>_TV$ENtapk8g*L4T`~5dVrfeJWSwh%P5cIvpTgqo-dw|K` z=9e!IW12^*4>2jAPWwnXXTgmO&?A(QcBuio< xVLsqn>}=HWxYm1)%U^$0--L z;BQ4M@ObRA+Eb)ho#l3c4FieKXz-ujo%QpOOI)`Bto;12?l81kZ!)C#^)0D7hB)Ff zn9rnmmIg>E=QU9NS|*GZ{?`0_kZQ;-#R !mXle0E J7$gk%S)FVhEs+EFC>febnb?Cej=BX{k{V$SD!RRM zXkp+u@~YDDY{gKu4n7T_V@Yr4_x=2*)4>V@H^a!|0STA)*V`Fvyl6r`m0x!28hr5u zQ*rUht15y(^~%A1L|q%xKkzeb*qt;$+E7!I<$Q)@h(S@He%aTNLQyJmL^rJV_oJ+1 zNy1tEF%PwnVb^-6 LhnkJb96h1hVAsPa;*u{>VGk1C=xHV)?wRC7oBHpF*^ zSi71nK8(RNy`T9oM|w4vW+_;4wueeUMMR}^vz`u=b+aw7`i_s^zK>k`wHiW0%+etg zMz~rMLR ;OP`kq`PyE>9bb?P8`YPZ$O HzWd#Z%E)SuSEa44o0Bz2n0E^70 z<8RBY^$g&bsD1zLgoZtiOlJ#VYqQ=aK`(PzFMkH^efLCq&Ib*MIE?Q7T$&UfgdC^~ z;XmfJu#6>Y!r+x~wCl_g*>Zmc+_6Dd4fskaZK5Fc2JB2s?N23Y){zbWSqv MxeERYaQn+4P+dfX}2 zY_#qFwJYb2`8%3WzFDuY6Yzoz7Bqq$btKLh^;n2D!HC*}OyYpHz|32)mE*@iTNi4* zIh@KojD>Hr|J`1ob8k&t8*hzOBDLX6Iq62|74%~&lZU0`hOJi(KqAl?_}r^wGZ4`s z1Pb@c(Fjq^kd?r7cXH=oqJm!0c6<%8a<50B#tx~`WNRJKlb2Y_!3ni{wmk7@z?%6+ z{RNcM9AL^DJ6RNw2D9f5bx`$-+yO*XGw`QP2$ptF`r#e`#Po(hc8SUJWE--U&|MTJ<32iQjV~&&i<(fZ2 zr;N+{ 3Knh4M}hU+>g%u{@ebk6uz$=j9>q5LpMoNYJAxXw1HtA zSfbHkCs+8*ymQrJ&Xf^ep &t?Qw}Lu&T1*53rqZB8f1VTIg443K$)cD1WXSbYvHOhCCt$VV&8%zdqTI z(dqe!q><~MU(Ca IB9 +r9qd?)M}0+Pl+ma|c4(}nvHI^ (%Jw8# zq*j?WS@am;$!rC9jUB-Y+_ n73kXzfKh*lJiA*$P}fhqA}@&)b6NLq$IYI !b{bPivcF7HjkbX}V@#aIBqlhpn zncIiDTVY9jI`|7dC$mEjk*exki~Fzr$0fB)3hha%E2MP2G;U1Jxxce16|yE)h#`iA zv$N1#jZX)16nvu2Syny-`7~N1c@_O;#E*tBuuz)WFOfMCeqtWI6W)QfIQ;W%d|L`P zBBUu{VPJ)(;deXVcPXG{nHSHX(C5t~#6~ay;;CM5$*d9BOw^u_r%W;_^e25OMvnW0 z&A64wB}N6%pldDV^bNwD)g4JJQQ8+?6%-r#q&f1t0A_12vz{8>$?wvZGUcw2fB&Jk zy%ZiNcLH$P9Nw!+I~6m^`w>Ea7yb#(tKr7oijjH;LXq>peListHf8W{pN`6NW1VTj zxy5Lv-kG3!#boYceu!(mraS)=A;=BHcY`58s*DGy57;00S0u_+?rgD?g_J#|VxK+e zMfyIc``5PyuSz~(1Fl(I{^*VXn%rU^Bv)3(Ct&<{lflylT&>94>>IwmNuN+<`;Sh# z>`39F(n^Z=^TG;TY4(Gm^jvquE38}6(V!vBRG|;TL~i0-4pa^;1-Tut3q zo&>rRtuN?+@|4arfV5BNK`JfP3R-T*Hm6BO>pbA(s{4YLqgSBeWjROsEvo9<($4 zge>dN^fv=3P@~+KiVfWBk4&{5p7Qr*f<;uN4D(R6NGiVd{Ma#oCQ^+uaU`_DX$p%4 zMWTCFeL~tbNZtIa-^`|vc;aw(Xdl_y1>mI?8j>oN&ukv~-wR+P?Ck?b5AJ>(Fv@$~ z>Yv{ok;~OWYwXnY>PZL)Naj%UpI&Lu>;>5eM1m2YI-UA*C0aEFb P+o|TeY312#mM=11kJp!DH6CO_5Y1V&azYNkj;u(s)4i>hDJ9gK>30?9)Gr9YAaL zUOPw)FBlSBV`nS>ceqsAbfYH4Yy)mHP6*?G@d_DfqIA_?NY_yCmrAircma3ixM7N1 z5SsSUxmj;r8BkVCL%?HwzQPxO4$v&y=%}d7VsTIUt$^<%i!Rfw5=+;h$M>zFP%`#; zD8 >lFhK02lLL~NF`q&-> 2qH{TP!bxV9p_EfL$R%eS#X6&K+4YO^)P=WEiV@)i3(x zf_4^(cz6hhWl$Omxi8^M+3-Uecf1cCA3aAI7nM{Xk5Ik&95p&|Bpg^(-l^bERs4RL z>6FG~ivc2)nDHO6*fB9ex^=J-UjVCwuqc(Cn?hpa&B zX0VfGM599*J=*|WhYZtuuF3V|*c$+0#%K%!z7F_(NT~t0X6ENW8~e@9wg&gR%Xe=a z{PU(2g9# eEpPWUlg-d#$cP_~dIO2T23ni^zQYNhw3o|dl7ULds|01~6&pSR z)Tm+7REX_Uzg&kh0mfL_yW_cm+UmwRYdwY&`L<=p I{ILV>d`|0lyH|3L#iu z^6K-zYEs}%>tp7d@=~K;+6+t}zlfd8o4uNk#i5RdO4a`PV~ghm;yY?E>)jpBv{%V- z<8Vud`CHq06Jac%Gkj(7v*9Gq@8ccu%DAnb_5NaA(`tK1t{{j@B+7lQ!OX 2(R4gc~@+W51zwK^k=sjX8=a22~dp)ac0}+2MBa3e{oB`3ebOzWl@h zwduDqRyViXc^A+{CXxU>6Q0YE+In0NIf$*PxAVgliP7Vq 3ngdc$*s^`tNB>KE7&}?!Wy&eeW;N zEkOHi5W>BjyL Pr364t9fcvbidYKX#^-Cb| z!zE6E(d@ar0E(=afwOxxAOm=2#n!9cc4jP3CZ+p6rc>g6$jI6qa?A+c8hS9p{F%S$ z)y-HDzri5Ha|H1%gZNTy{BfL7RtffoqdUCcp6}@}EZ^^KjK@B@)1RZ&t3A2Uln&$0 zr=Rav41M6tTpCJ>i?xBps9e3<`zZ}7cW_Y5=4!id`Cpbusu>VCwSH`RlqT~yY^Fh* z;vjWFygX-l{Hq 2F0h)t(6=;?f(xLj{C@_I_c=NoJL->;Jq7NGU)z1!!d zIq8TYcH@GaEc}1JY#!S-py;hyMO9T2zCWe7+*0UzAJdvVy%*UZ1)qHoC>Jg@?5)~L z#gB|Q1oQ$Lo2Q!t;woVkJK(up2B6k>s{UDD{d~^=1heMM_=@n{rFI=S0Fd1{&{z*g zvjtkXj(bvd0JhC_M=a3L{kU>>vXFZYxP}Ehrs;2JPmISr2vdNwKxf?nC9ZBwOk3z$ z=+n`qDH!VQvEdtHm^_$S=T{k*+qu>mz>M(aF#iuY)>r@Y!i)nW rVWk1ySnCt>tl}@_>GbrPo=5QX9!E54DiQShWS2=Kv zN^t}ikcXy{hM5Okx_0+xD~gc5zaYwhn??#}c=8z0R7gy8l`5dumO-)4;CfgCzGGiq z5HNLX4nZZd{-+m0lLGDEbI(_WXix+US{_ M)@l`@VxVfA{?wTQYeoo@$uhQU zx`( 6rLp2`+jnfm+c^y*ZlRWAbR zQiRX(I9sMn0XsVXv(7l5=&SF>GXPwv0< 03 7j91tIHUWlcN1F#!isuQ;y0DFA$Fi6E2IX&6P^&?0TE0X`iM)@i9bgc&E` z@E a0L 6g>b$ z1;sO9O;X2*FQ18E4Tk#Xwp#{5(uXaDm}>`nv0s}jG;4GEFuwgEuW}x$Wq>+GGDWHq zs1h7$12zZ+;|UKv=rz&dPm~0rL--%p9nSl!-@#hH0RW_>-Fh<<7(5I!>`j9~wpf*Z zo1gqo{9n!y@)G$|w($5FF^=cu|9JY!uqd0p@1>>dqPrXEl %yyaIzD}Xer1{yFv!sD+1_|v{S1o>25 zJfM<-WgDPnIzL;<;sie#6pbrh>!bXke;-95_QK^gPRwpU;dCmPo5^j7hUlF;MX0 zf&XN}>o~P4a?fLrcz62qn7u=4cl4GkaG_k^JepkOU8pu5qdFzyuO{_8NgYsEQNfVy z+5G^%>1s@oN#_g!ACa<67TJzd?!TlDyD2Hhz3iZ=OfS_tSaR oY`VDr;iZQA|8RhscjpqqCiN1q{=@!CO7HiB>WGgM#*1=>Rnc?MLg?!&E z@b80$Vn-V-aBe@vO)@T?%{&)(#IlV5j7#$xH{kI%e~sI*PO@&0fBZ%nbARfyR6uod zTCKsALNFrw?EJ^KrC?8e|AFE5n)v$hE=Ir33K{tbuuFK^aH`n_%1c~ZdEpc|Kx7ll z7}o(czGXSvEHRi3Fl_bwlLTabjxqH|jU!(baK*>f8nupHVKEB8CG7Ot5`9!aA;J6l zNZS-_+XRaEOKR!;5EltChS=1*duh(CDQvTu^^7<4m56&Fu2qe0_0O$f2BieHE_06j zO?jt$tznJdqq{aX5v5rm (5AOvYxP1Q zq)XI(hJiSr6*eV3m*K-X+a8cocR}iqy`M0!>g1i+Xe0C005C-Z&OBPco$Q?w;3H?l zEJ%-=T~N=cS>@b08$J+wlH)M;ea5Eg9ZqHusf?5jSofRwwbhvS13_zDo!vQr?OpxB zC9oa&ryE55XolRUemXi6ypX|2;k?2>vHPdwo?tH(@7~dp?vD?sKz^;Je$R1|=bXCe zvFa2~H#Qk}@ZI~7U4t@#tc;X6f$g2rS9a}q3V?Y2c)8!Fz|*nn?+&vIC*SWZO-@g@ zGjtxJ8#YZ%gNyMOH@DUt23oapl?=X6*W%pgH}axa=v?r(6ROI5*XN1$dyYkwBnJ&x zmVZD7sl{a6wa8aS{cdlNvtAx>^MpI;XG@mGNM*qn->y*j`8=xelU^p=u;3TAV--3X z13075A%wEmESUF!&&*#XhThU~L%6*;R%(`Z@f4wG@J*66&D#aBqHm!)vDq0(Nrmq0 zwKgH!Kc9ZVk{vWV3E|vW$?B&*tAp~S2DbNHx8jcr +(P|p|? z(FKoeVfOpQ`iI*@+pT9b8l~@P5GuQR1~u%TD>;%(h$i0;c-%kY{k+{PTbu1;936lV zEUTE=Qx$2kaJp^tc%SjZ0psp5ZUWRm-orZ+*QN`!*iWDZxQH*o?2@7mryY$bM~Pos z_LaDwy^ShW-;C-UJ+mnXU!u|tyzx!2R<6fFZb$H0#7Se6FGb~1d*hPsx7UX=1IOc% z*$h7);4no^KKyFr-8if3qY)MY07*={!_i1r@9T_CG;_XhXt=qYff2EmNI8eSkuuQv z={|7vmQ48k(((7XYTC-2ENAXJYYSd;bEZ-%Cz(Lg7(atxm_=sbT|wN>arZ|DqxkNxIc-rh?9^*sU|mv@Nrgup zUNCTpcDp;@OigCF>d*2yZI%-eb~G8)XqWV|KWVC&U-R<`hP8Mil%0N1{NE?QjS^k& zD$@30(u;+C^tm~$>5ryh=qgXpH3 Qm~RP8qyH<}CzHp$Pd;uep$~X&$y37K~BtoTlROqqx7CtL-;bTmRo { zCsTK~KwFTWyyr~Xj;$5W0clFr{~%Ko9_nECodaxeB#7w@*>Xi1nRFKzi~fDORJ4!z zHYw _&GDhHrAEU1RfT?f*UWw1m*Mi>e5Su6wPk21zb=6#pnxp-A=F Th@0jCB0p&=^y7yn8a0(Y$9ahof^C! z%9kp4Z}YyM4T}#&CHQHXW)sZ0Qc1w}&f;HcvJQCPxK$9!lmxT^TuOX>$LKNN0bY#I zEbtE*3FJA}pu(pl#xc%cS;jgzS1M>el@@0odG3PJca| ah_mX+?*yPWK7S)NY#>&}m^nJlRz+6WW5z0k|cHt6D!jIoWK}_#`eNs_-iZBC? zkUCp{au|y}p42fpYb-JwgUn-OhRgS(4bsJ^W;m&1<<8A?n(WkFHJKJ62*J-m&yTmI zJegKH&E?Qoo@8(VsU23Fud`O0sxlUvs<+il#-FLLr$(P-CA28mK3Hz}E^JA^An~C3 zHY9 (5fqhD_xPMBp56z5WHB>oK`M$(rSeTBIVryzy ze9^gcG5&QXzNt!DqsxM7!xGfcB+Yhs>98)uJnzsSG{ZArrl*OEq- )c_x(qa@?n#C<2wGijvEBxBa=GDi0MIjR{RbIWt;;{h)R hvBtFzgSC4_s=aDSXSt_^iL&$h4$`0m}cfp#k|j&IwY^>tLnnm__SnL z?_dWZFxaS2MfbCB<=AN}CKJ*Eak^ <8eK;&;exo` C%txN&S z|9gbT%nJwx^cI6KX|)%AkJs9`%kbKr!9gW}M;I|Ns%wdr7Et!ZU^dr043ZWN8M-%% zaq$-iaL7BIzc0@ffGW|_9t_i{)eoxX5U!Rc&h@(&P35Q=+u<^5bVz$w7=}qvS=%^Q zq9OIG;5Ap=d^p(iOK~LP9Yg$cjZc==54Hhyzj_21d!#{olhe7DuMH-fu$W4;lVpCN zOEK;9Ak6+Neuf8XA!xaTzGIcnrlT`;3I&&i`~Y|nuTTq9%bF+I@4X^CcjCkQGM8LL zP`q&B#izzWMYwG1pMH`f$J0n9c`O2hPl0g@d20jKB@7HO`mTr5GIRShDCS@VnE_0L zd35A`0Uz1*vA}0O$_uDXG$;j$EYtp8#?i2|WARU&p}m-#?kp3DfBiXikojGA)Ti@M zEl=UE{?QXIpT=fM3Qsq{n%7q82C+^`croAjsCe%@qdPMEQnYC#LtYY5bH5lIF4h#F zaPElO;;e?k%W7Y$^B+Ac982O!?_L6Tq9knfPuYCF_QxAxw=A&I+5ZtRg8;r--wt-_ zyGz(s?%;6*NV;$oXPNo6Ylv*nr+jWw_3_OFnUA{b_J{f6K +-nPIc6xq-Z@T9f zYlEpot|x^uA}w^mlpN+48wktj!bojpGx-n0Ks1}vzpVN8FZ8?BK;}v{ r?D98S1rK`kk5mPNHA8 {puEAgG; z9RIhJnCDgvOp ZV#|H2T$PbsHu^@1*c>CyS+7H- 8{>z|Qv-(qC=p-+fgoR1xqn3~htqTo?#T#%FuSXb X<%8L1D(8_AfQXdbUZXHgWa4+QKFX{Da`UL6-S45S{S{*B z?ltY8e}))PLX(BLIt^cI4)6+hp4bcvBF6p3#<$ohlRmZhQuKCAXpu2;n<3`CvEOs@ zT$92!8aBR7JdSt;U~)@u-=Y)$o}T4eN&%?bYnBQw;kLO`_?~;2(b`r_dr+#vtQF&F z<;;hK>&?*WAS^r6k1V_T8tHcL_l9F@tdwIH#$3aJXmYvH;l)3H?{vn{NFd^GwM|H4 zRDs6I#Du-K{WSmuSetFEKOb%QAI(;n`#lW}9Ni-wKNXOs(Z1RramitrPW**CP_85? zh#`)Y Vm} z+DVsWY7sIQ? goy@4woz7tz1lq015sLQO z5OGB$lb!IjgmD8-Y6jlCjqWZx>-hVEhM?uOS4i)7pZqmg#Ww&x2%-Vy5GM_>uCzo- zB~uZUvl%Rssxkp% 7T)MZv?)xWiXbrZlyF$9Uy^z+6W(@M zl+g<+8viowr@6Cl+Vp5x^Q}c Vacj1Ym@2emwQoMu{6I z5_YbYU&J#Ea;3pImrP%Emh2-}T>N*k$cxOl6AWR+u6E4=C5+g= y5_A@^Y Kpmx?o}ZtyJZef{5DTl!}%z` caY+VB!mL(2NpJC7iHouqa zSp79Il_SU7M9XeH7)cD!c1-gABRd98miw$Aku6<7CJF~M)3WTd1Bgz@*4 q6(sc|gkk}S!|GbZ zN|{%@uuG#D<(hue7hJr_AxKSbr>nq>;64^b!Z*=n4<$!MSg7pT1(QMHq5~rVC-FX9 zDgbsjU)b@fY0 ;;Qvc}4Gc63PA0QxiWXPptb7kmW1xGQ+@eZ_mN(4K^C6 z5`<91g`*KoGyMl`{c{#=Hfvtc``)oVnW~= pWvoFuafMo(r*1>wi zfpzL4;+dOON7vY|VOjbu*sEeYey{v6ZUr?Rc5o=$^pi#AX+#}ZsQq>FYPY37%rj!d z2JZJcc2gnd&zg=I hd=aFk$;xhC?xOObIA( zpoS=cwlI8vuh817L~IlnPoL<#GWodI9cTgN8-~StjV;DuQAu<@BYYI6*2Is`*(s!z zg0OG9Se<8f|Ayh$r;R+eI- Tk$fIZNmzA~eWTObF>=w$% zSUKumIrm(W_5%um70#KRL~5MCPW;7fw+bb$*x$vyr2 L0*PnN@os$!(B5r*%RVyj?kHmmWM#tKay7;`w!hq^uk3(Ns Y0?UPV=vHGeL3f}YJ9=4CH1`9va!v8v;aWb3^O8-=ft!}K&as}`0VJ=tqc zA-VFv;rs)bgfa^$h|7ArpZ4lU9oAJ097rn>c5WA2wz&Q+8Ecw7KM9o&ly ye3B{n9UjvE Oam2Wp+BuL+U5! z0y?f%;ciHq3SLWCyoJs}rljGNxrIk>cN_hTf;o(cR=0ML1!7xab}(P@#Uk7@6isA) z1gQ8MsV!G$A^BXbdq2M=jsD{k6cQ0{*RWqMwAKs?!Vze{tuaPH_Phb zZ^^`%_H6_z>K&)bfBZ$sFRQc$aNK-1n0W9RRC^kvi7olPmS?l$-wvjGk<-wftAq%| z))@` (!y%-E%&Q- ) z$-tmjfQU})$_(V18)<8_G}&BkUkC-w3csXqkfc*_HsQD?xlC9X>DQ2F`f!-EWGm|k zkcM!SfeKcoZx1|fCZuk4))PAPyhYb^Uk&o#%5-PC>2Nuoq?Mp@4+r1k^yOyx{>f)@ zsnB~R9X)ybE~bmgPB!I^T4VC|r1O2PMMRn1^DmEeCWRpq?ndjwZ9xwFI91; 7`;YQ<~jA?#-inMb%^cEQx|PFUnYg z92GWZ7% zd@LVza!-ECbMWpMwRtDE0n4kfywzf}UX58pVnV`jjUjJbhM?0{ zQz~uO*&mI9LZ+6rZASqw_LdVaPT#vvcrSaANx3js*4P)Jf>VMND?ai6vA12l<&B8A z1-TJw$x@T6Cf!!Z;_%{WAQmiv2LPvKJk~S!g&mlO-K(=fg6MG>d6s{so2;lgn$*yT zp|rOL9|CK{2t=hExJv~TZaO^wn9&8KX4s+S;yP>SJ_xJoX8L&N$u4jB{QfhXrXX*C z)WQQ}mDzZLKf6%%g>uk(DCKtBdGz{ZN^@r<<29oR{dKW{r~e(0>w5g$8&LS#?z@a? zl77j>tuAW*c=%huJmae%Y%Z<~7GZ{!273l_QnDazD;mn??q&`rdAr#VPO73Ym~{7* z#E%J18V_mYVn6@0Y71WTJ+}>+2jRB-dy&hYnydK&mgpafMH*8g6z`Jf3t%4p!I!oP z1_Mb 0bx#(yYgSJmVogtSULE l1y!WpB*1GXII3 zHc0f*Ly @Z5h7H1eb6g_umk@Zlb@3%x(tZq`v7BVq>piA*89%6`lmH#N%BiS z6~iKoZTg4g0V?!iG9gz+CYWXwK(u-%riv1Zi+Ud9dY-l2_RehQxC;-CvNh1+n;r8| zX$FRrzzjlymKIOZIx{lZINVG{ >N}kHuI7K5dbccZho?s8WWwh=LcBDIOz*c{g-|HbP$eJ`kuS2p z4EK2_!|$nFEZWNxrgSB^4BhK#O~~o~rE7X(V6{O4)cg;i%f5u7yIwc*z%7WWp{ng~ zrFkOm_X@z7Z-(Moe_B+y{F!7?qrEH5%ue+Fd>I*gQPTVLZM+N~TjzGtD0H}FmL$<;kJxD!W8X~~JTg-wf|E;7U7|h|dgnpu z&1wQOQoArC)krxzf|2x-8u0?&ByvfGOb~no3jJa?p
AePrMqu~>O0t#+&N>yL3 zq0h<@G}*+FD4pf@hfbKQ+r90AKt0e2JbmTwI<;tFw!Lz z6cj9BojUQ@-d(-%nvLI|TiKkw-?>*pf*a(hS}+Pwp~LUyv{E&Lo}9Lv>0}7X&*Q#I zwZ%tEP1m2bN!{@lZv4@T$)juu4IZPliCg!*j9!tj9L8;>XiHQ<{TI!R$T7VzVO{Ht z)o*7WpWiXs9@qy22;a*b^+WXTOmf%i%|ww1VcRW&3*i52*@jrxea!i&$Lf&5mlaw4 zq0@Lk4heQNiYe sbJZ7yDY9tpIL5}f6%vJ}EgrF=0jzvi?&G$b( zVuN_D^1FkASgj+Ky3PM+YOuV}TVaaD(D_jBGU$06&@WSW#P!qK=*^3Xxi?y!cNKTX z{(>D-n^?&Q1H&;F-UbFy+9y}62i7zjn$>n^%hM@T_cDiyJjGJvUe0SYZE>VHvqp@H zCH}c5+HT{&ECdHPe^kfYG8)lpA?1B)e3abLt+MZ?k1YZ&SS}Ts0sq*F)7hN*UoGyD zPHNG(12Gi1Ki1t_7&Tg@b1xA-RpO8OCWbHE(|5gtY4l}xMt{>PRr}i#4iRmU`fnQn zG#l_+V(cQ1A^-nz@S( G3BYgpFYQckRSiMWuUwLH57t zT$U)~{oCw&nI?%mX2hwu+wgI?=;G{?Kp@}@)OlqJ2GwuaU-4Z~CH$V?4Jga ``THJts~LvWx;|JTd{3vTCgW&^fGt{s~q{3ybO<^h2jKA=W-xVq-wg zOD3X-II&>JF~kJIDNckK9TEF7bk 04P|qPE5g40wt@w zf&x|QQ!1)deL0mG8F&b<; C&z)HADa4r6Ob1RpowoTjn?D;`lt&;C_(e&~ -bZp 8D5W-+$kx>+TKzqX0a>ce=C!y1;(Fzto? wujxm@uK^)A`V4WKg R_`#MBPmzHDZR#{?#_cHRnf!6zH2X${Ib={{ z5w9PCM0U+Y6G4?lFQ>9 pjBe3{M+Bx?F+_=z?NQ_E$ zfxaQaJ